상세 컨텐츠

본문 제목

Swift Package Name에 관한 이야기

실험실

by box-jeon 2021. 7. 10. 22:58

본문

몇 달 전에 KakaoSDK를 감싸서 Swift Package를 만든 적이 있습니다. 버전 업을 해둘까해서 오랜만에 가볍게 손을 대봤는데... 크게 중요한 건 아니지만 신경쓰이는 부분이 생겨서 한참을 확인했습니다.

 

Alamofire의 dependencies 추가 예시
    .package(url: "https://github.com/Alamofire/Alamofire.git", .upToNextMajor(from: "5.4.0")),
AnyCodable의 dependencies 추가 예시
    .package(url: "https://github.com/Flight-School/AnyCodable", from: "0.6.0"),
RxSwift의 dependencies 추가 예시
    .package(url: "https://github.com/ReactiveX/RxSwift.git", .exact("6.2.0")),
KakaoSDKWrapper의 dependencies 추가 예시
    .package(name: "KakaoSDKWrapper", url: "https://github.com/utrpanic/kakao-sdk-ios-wrapper.git", .upToNextMajor(from: "2.0.0")),

KakaoSDKWrapper 의 경우, package() 호출 시 name argument가 반드시 필요합니다. 이걸 생략할 경우, Xcode는 리포 이름(kakao-sdk-ios-wrapper)을 패키지 이름으로 인식하게 되는데요. 분명 KakaoSDKWrapper/Package.swift에 패키지 이름이 명시되어 있는데 왜 그걸 기본값으로 사용하지 않고 리포 이름을 사용하는지도 잘 이해가 가지 않았고, 그렇다고 패키지 이름을 사용하는 쪽에서 재정의할 수 있는 것도 아니었습니다.

 

한참을 실랑이하다가 생각하게 되었는데;;; 결국 MyProject/Package.swift 의 컴파일이 성공해야만 깃헙에서 해당 패키지를 가져오기 시작하기 때문에,  컴파일 시점에는 KakaoSDKWrapper/Package.swift 의 내용을 확인할 수 없으니 url에 있는 리포 이름을 패키지 이름의 기본값으로 사용한 후 런타임에 에러를 일으키는 상황으로 보입니다. 개인적으로... 리포 이름에는 소문자와 하이픈만 사용하는 편입니다(결국 url에 사용되니까?). 찾아보니 그런 걸 Kebab case라고 부르는군요.


기타

Local package를 만들어서 테스트하고 있었는데, Package.swift 가 정상적으로 빌드되면 별도로 추가하지 않아도 해당 local package의 scheme이 생성됩니다. 반대로 Package.swift 가 깨지면 해당 scheme 이 깨지게 되는데... 깨지고 있던 Package.swift를 복구 해도 scheme 은 복구되지 않고 같은 에러를 표시하는 경험을 제법 많이 했습니다. 이번엔 분명 문제가 없는데 이상하다... 하는 생각이 든다면 Xcode를 껐다 켜는 게 좋을 것 같습니다.

관련글 더보기

댓글 영역