티스토리 뷰

iOS

[Xcode] internal import Combine

yanni13 2025. 10. 16. 11:05

 

 

오늘은 개발 도중 Combine을 import 할 때 오류가 떴는데 이를 해결한 과정을 포스팅해보려고 한다.

 

 

📍문제 상황

 

SwiftUI를 사용한 프로젝트 개발을 하던 중 아래와 같은 오류가 떴다. 

 

 

이유는 observableObject 프로토콜를 사용하고 있는데 Combine 모듈을 가져오지 못해서 objectWillChange 같은 요소를 찾지 못하는 상황이다. 분명 import SwiftUI도 하고 observableObject 프로토콜도 채택하고 있는데 말이다..

 

위 오류를 해결하는 방법은 fix 누르면 자동으로 코드에 internal import Combine 가 추가되면서 오류가 해결된다.

 

 

여기서 생기는 의문점들. .

 

Combine을 호출하지 않아도 SwiftUI가 Combine을 호출하고 있기 때문에 별도의 import Combine이 필요하지 않는데 왜 Combine import를 호출하라고 하는걸까?

 

internal 키워드는 모듈 내부에서만 접근 가능한 접근 제어자인데 왜 시스템 프레임워크인 Combine을 import하려할 때 internal 키워드가 필요할까?

 

 

🛠️ 시도 과정 및 원인분석

1. DerivedData 삭제

~/Library/Developer/Xcode/DerivedData

 

먼저 파생데이터를 삭제해보았다. Finder에서 해당 경로를 찾은 다음 DerivedData 폴더 자체를 삭제했다.

 

 

간혹 이상한 오류가 뜰 때 Clean Build Folder를 하고 해도 안되면 derivedData를 삭제하면 오래 전에 캐싱된 데이터가 삭제되면서 이상한 오류가 발생했을 때 해결됐었기 때문에 진행해보았지만 문제가 해결되지 않았다.

 

 

2. import Combine

import Combine 을 추가적으로 작성해보았다. 

 

Ambiguous implicit access level for import of 'Combine'; it is imported as 'internal' elsewhere

 

여전히 해결되지 않았고 심지어 import Combine 하면 Swift가 동일한 모듈을 서로 다른 접근 level로 import 했다는 내용의 오류가 뜬다. 

 

internal import Combine을 모두 지우고 import Combine으로 대체해보았다.

Could not compute dependency graph: unable to load transferred PIF: The workspace contains multiple references with the same GUID 'PACKAGE:15SZPHK0ZXA7BPUPH3X53FWJQ7HFOB740::MAINGROUP'

 

그 후 internal import Combine으로 fix 시켜놓은 코드들을 import Combine으로 변경해보았더니 워크스페이스에서 GUID가 같은 레퍼런스를 가지고 있다는 식의 오류가 떴다.

 

 

📍 GUID란? 
전 세계적으로 고유하게 식별되는 ID 값이며 
Xcode와 SPM에서 패키지, 타겟, 모듈, 파일 그룹 등을 식별할 때 내부적으로 GUID를 사용한다.

 

 

즉 XCode가 프로젝트를 빌드하면서 같은 패키지나 모듈을 두번 참조하고 있어서 SPM 캐시나 DerivedData가 꼬여버리게 된 것이였다. 그래서 GUID 충돌이 나게 된 것이였다.

 

 

프로젝트 내부에서 swift 패키지를 중복 참조하면서 Combine 모듈이 두개의 동일 GUID 참조하였고, 그래서 import Combine이 모호하다고 인식하였고, Ambiguous implicit access level로 이어진 것이였다.

 

아마 spm 패키지 내부에서 combine을 두번 참조하여서 combine 모듈이 두개의 동일 GUID로 존재하는 경우에 해당된듯 , ,

 

결과적으로 Combine 같은 시스템 프레임워크가 internal 같은 접근 제한자를 붙여버리게 된 것이다.

 

 

🎯 해결방법

1. 파생데이터 날리기

~/Library/Developer/Xcode/DerivedData

 

finder에 위에 명령어를 치고 해당 폴더를 삭제시켜버리자! 이후 프로젝트 파일에 들어가보면 SPM이 다 날라간걸 확인할 수 있다. 이때 당황하지 말고 2단계로 넘어가자

 

2. 날라간 패키지를 다시 reset해준다.

File > Packages > Reset Package Caches
File > Packages > Resolve Package Versions

 

xcode에 들어가서 위 두단계를 거쳐주면 삭제된 패키지들이 다시 다운로드되고 빌드되는 것을 확인할 수 있다

 

 

 

그럼 이제 import Combine 만 사용해도 오류가 나지 않고 빌드에 성공하게 된다!

 

 

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/03   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함