로컬 폴더를 추가하는 방법은 두 가지입니다. `File ▸ Add Package Dependencies` 로 들어가는 것까지는 동일하고, 그 다음에 어떻게 하느냐에 따라 달라지게 됩니다.
1. 우측 상단 검색 칸에 경로 입력
이 칸은 패키지 이름으로 검색도 되지만, 주소 형태가 들어오면 저장소 주소로 받아들입니다. https:// 로 시작하든 /Users/ 로 시작하든 상관 없이 똑같이 clone의 대상으로 인식합니다.
2. 좌측 하단 Add Local… 버튼
Finder에서 폴더를 직접 고르는 방법입니다. git을 거치지 않고, 어딘가에서 받아올 외부 의존성이 아니라 내 프로젝트에 딸린 소스 코드로 다룹니다. 폴더에 있는 파일을 그 자리에서 그대로 빌드합니다.
이 두 가지 중에 어느 방법을 사용하던 정상적으로 추가가 되지만, 방법에 따라 결과가 달라집니다.
| 경로 입력 방법 | Add Local 버튼 방법 | |
| pbxproj | XCRemoteSwiftPackageReference / repositoryURL | XCLocalSwiftPackageReference / relativePath |
| 기록되는 경로 | 절대 경로 (/Users/me/…) | 상대 경로 (../../…) |
| 실제 빌드 대상 | DerivedData 안의 clone 사본 | 그 폴더 자체 |
저는 이 차이를 몰랐고 이번에 1번 방식으로 로컬 패키지를 연결했습니다.
앱과 패키지를 나란히 개발하고 있는데, 앱 코드에서 패키지의 프로퍼티 하나가 필요해져서 패키지 쪽에서 접근 제어자를 public으로 열어주었습니다. 저장을 하고 앱을 빌드를 하는 데,
" 'target' is inaccessible due to 'internal' protection level "
라는 에러가 발생하는 것이었습니다. 몇 번이고 package cache도 지워보고 derived data도 지워보고 dependency 설정도 다시 해주고 해도 동일한 컴파일 에러가 없어지질 않았습니다.
그러던 찰나에 project.pbxproj 를 확인해 보니
XCRemoteSwiftPackageReference "MyKit" = {
isa = XCRemoteSwiftPackageReference;
repositoryURL = /Users/me/Projects/MyKit;
requirement = { branch = main; kind = branch; };
};
repositoryURL 이 로컬 경로인데 종류는 'XCRemoteSwiftPackageReference'라고 되어 있는 것을 확인할 수 있었습니다. 즉, 해당 경로의 폴더를 직접 읽지 않고, 사본을 하나 떠서 DerivedData 안에 두고 그 사본을 컴파일하는 방식으로 동작하고 있었기 때문에 아무리 local에서 변경 작업을 해도 반영되지 않았던 겁니다.
덕분에 두 방식 차이를 알게 되었던 좋은 경험이었습니다. :)
정리
- URL 칸에 로컬 경로를 입력하면 Xcode는 그걸 git 저장소로 보고 clone을 빌드합니다.
- 지금 폴더에 있는 파일 그대로를 빌드하려면 Add Local… 또는 폴더 drag & drop으로 추가해야 합니다.
'Swfit > 짧은 정리' 카테고리의 다른 글
| addTarget(_:action:for:)의 target과 selector (0) | 2025.09.18 |
|---|---|
| UIScreen, UIScene, UIWindow 개념 정리! (0) | 2025.09.12 |
| dynamic lookup (2) | 2025.07.22 |
| OMV 설치가 중간에 막힌다면 보세요 (+Raspbian 10번 넘게 재설치한 사람..) (0) | 2025.06.29 |
| Storyboard UILabel에 linebreak(줄바꿈) 적용하기 (0) | 2025.05.26 |