iOS/Swift

[Swift] Cocoapods만 지원하는 라이브러리 SPM으로 전환하기 ( feat. naverMap )

경푸 2024. 7. 30. 15:30
반응형

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 레포지토리이다.

 

GitHub - 9oHigh/usket.NMaps-SPM: Repository for using NMapsMap as SPM

Repository for using NMapsMap as SPM. Contribute to 9oHigh/usket.NMaps-SPM development by creating an account on GitHub.

github.com

 

해볼 만한 것

수동으로 Cocoapods 프로젝트를 생성하고, 이 파일들을 SPM 프로젝트로 이동해 사용했다.

반면에 Github Action을 이용해서 해결한 레포지토리도 있다.

 

GitHub - stleamist/NMapsMap-SwiftPM: SwiftPM을 지원하는 iOS용 네이버 지도 SDK의 비공식 미러 저장소

SwiftPM을 지원하는 iOS용 네이버 지도 SDK의 비공식 미러 저장소. Contribute to stleamist/NMapsMap-SwiftPM development by creating an account on GitHub.

github.com

어떤 식으로 동작하는지 알아보고 정리해 봐야겠다.

반응형