tuist를 이용용해서 프로젝트를 모듈화 하는 경우 혹은
NaverMap과 같이 Cocoapods만 지원하여 SPM으로 관리하는 프로젝트에서
사용하고자 하는 경우 등 SPM의 지원이 필요하지만 주도권이 없을 때 사용하면 좋은 방법이다.
나의 경우, NaverMap의 Privacy Manifest와 관련한 업데이트가 필요했고
SPM으로 프로젝트를 관리하고 있었기 때문에
NaverMap의 SPM이 필요했다.
이를 위해 다음과 같은 방법을 사용하여 Cocoapods으로 관리되던 NaverMap을 SPM으로 관리할 수 있었다.
순서대로 알아보자.
1. NaverMap SDK를 Cocoapods으로 설치할 프로젝트를 생성
NaverMap SDK를 Cocoapods으로 설치하면 아래의 두 폴더가 보일 것이다.
xcframework인 두 개의 파일을 확인할 수 있다.
이 두 파일을 참조해 SPM을 만들 수 있다.
2. SPM으로 사용할 Package 프로젝트 생성 ( Library )
SPM을 위해 Package(Library)를 만들자.
3. 앞서 확인했던 xcframework 두 파일을 Package 프로젝트의 Frameworks 폴더에 넣어주자
아래와 같이 넣어주면 된다.
4. Package.swift 파일을 수정하기
두 개의 framework를 넣었으니 이를 참조해서 SPM을 구성할 수 있게 Package.swift 파일을 수정해야 한다.
import PackageDescription
let package = Package(
name: "usket.NMaps-SPM",
products: [
.library(
name: "usket.NMaps-SPM",
targets: ["usket.NMaps-SPM"]),
],
targets: [
.binaryTarget(
name: "NMapsMap",
path: "./Frameworks/NMapsMap.xcframework"
),
.binaryTarget(
name: "NMapsGeometry",
path: "./Frameworks/NMapsGeometry.xcframework"
),
.target(
name: "usket.NMaps-SPM",
dependencies: ["NMapsMap", "NMapsGeometry"]
)
]
)
xcframework인 두 파일은 이미 컴파일이 완료된 라이브러리이므로 binaryTarget으로 설정하고
현재 usket.NMaps-SPM은 이 둘에 의존성을 가지면 된다.
이제 문제없이 Cocoapods 형태인 Navermap을 SPM으로 사용할 수 있게 된다.
만약 추가적인 업데이트에 대응이
필요하다면 일전에 만들어두었던 Cocoapods 프로젝트에서 Pod을 업데이트하고, 다시 Frameworks에 덮어씌우면 된다.
아래는 이렇게 만든 NaverMap-SPM 레포지토리이다.
해볼 만한 것
수동으로 Cocoapods 프로젝트를 생성하고, 이 파일들을 SPM 프로젝트로 이동해 사용했다.
반면에 Github Action을 이용해서 해결한 레포지토리도 있다.
어떤 식으로 동작하는지 알아보고 정리해 봐야겠다.
'iOS > Swift' 카테고리의 다른 글
[ReactorKit] 테스트 코드 작성해보기 (feat.expectation) (0) | 2024.07.15 |
---|---|
[Swift] 메모리 누수를 해결해보자(feat.map) (0) | 2024.02.20 |
[Swift] 잘못된 Coordinator 사용 그리고 리팩토링 (0) | 2024.01.16 |
[iOS] UITableView에서 제스처 사용하기 / 이슈정리 (1) | 2023.07.20 |
[Swift] Extension에 대해서 알아보자. (1) | 2023.04.13 |