SPM으로 SDK 배포하기 (1) - 라이브러리 생성 및 배포 (비공개 소스)

sun02·2025년 10월 1일
0

iOS-SDK

목록 보기
6/7

SPM으로 배포할 라이브러리를 생성하고 비공개로 관리하는 방법에 대해 작성합니다.

방법은 간단합니다
xcframework로 배포하면 됩니다!

그리고 SPM의 package.swift를 작성할 때 xcframework가 들어있는 저장소를 가리키도록 작성해주면 됩니다.



1. Package 생성하기

Xcode > File > New > Package 에서 Package를 생성합니다.

해당 Package 파일 이름은 GitHub에서 보여질 저장소 이름과 동일하게 작성해줍니다.

  • SPM 탑재시 사용자에게 노출되는 Package 이름은 아래에서 따로 설정 가능합니다.

package가 생성되었습니다. 🎉



2. Package.swift 작성하기

2-1) SPM 이름 및 iOS 버전 작성하기

  • name: 해당 spm 탑재 시 사용자에게 나타나는 이름
  • platforms: 지원하는 OS 및 버전
    • iOS 13 이상을 지원합니다.
  • products: 패키지가 외부에 공개하는 “라이브러리/실행 파일 단위”
    • name: "AdMixerMediationAdFit" → 외부에서 import할 때 사용하는 이름(= 라이브러리 이름)
    • targets: ["iOS_SSP_AdFit_SPM"] → 실제 빌드되는 단위.
      • 이 target 안에 있는 코드가 컴파일되고, 필요하면 다른 binary/SDK를 import 해서 묶을 수 있음.
      • 사용자는 import AdMixerMediationAdFit 한 줄만으로 iOS_SSP_AdFit_SPM 내부의 모든 코드와 의존성에 접근 가능
  • target: 패키지 내부의 실제 빌드 단위
    • name: "iOS_SSP_AdFit_SPM"
      • 내부 빌드의 이름이기 때문에 Swift 식별자 규칙을 따라야하는데, Swift에서는 하이픈(-)을 사용할 수 없기 때문에 언더스코어(_) 사용

2-2) binaryTarget 작성하기

binaryTarget이란?
→ 이미 빌드된 xcframework/라이브러리를 SPM target처럼 쓰게 해주는 것

저는 라이브러리의 소스를 비공개로 관리하고 싶기 때문에 xcframework를 spm으로 제공합니다.

binaryTarget

  • name: binaryTarget 이름
  • url: xcframework 를 다운로드할 수 있는 주소
  • checksum: 파일 고유의 SHA256 지문 .binaryTarget에서 파일 무결성 확인용으로 사용
    • checksum 확인 방법
swift package compute-checksum xcframework이름

2-3) 배포하려는 라이브러리가 타 라이브러리를 의존하고 있는 경우

dependencies: 이 패키지가 의존하는 외부 패키지 목록

dependencies에 등록된 패키지는 패키지 전체에서 접근 가능하지만, 실제로 target이 사용하려면 target 내부에서 product로 지정해야 합니다.

target(iOS-SSP-AdFit-SPM) 이 의존하는 라이브러리/ target 목록

  • "AdMixerMediationAdFitBinary" → 같은 패키지 안의 binaryTarget
  • .product(name: "AdFitSDK", package: "adfit-spm") → 외부 패키지 adfit-spm


3. 공개 저장소(GitHub)에 배포하기

GitHub에 public 저장소 (ex. iOS-SSP-AdFit-SPM) 를 생성하고 위에서 만든 package를 추가하여 push 합니다.

  • tag도 추가하여 push합니다.


+) Package 구조


Package: AdMixerMediationAdFit
|
├─ Products (외부 공개용)
|   └─ AdMixerMediationAdFit (라이브러리 이름)
|       └─ Targets: iOS_SSP_AdFit_SPM
|
├─ Dependencies (외부 패키지)
|   └─ AdFitSDK (adfit-spm)
|
└─ Targets (실제 빌드 단위)
    ├─ iOS_SSP_AdFit_SPM (.target / Wrapper)
    |   ├─ path: Sources/iOS-SSP-AdFit-SPM
    |   ├─ 의존성: AdMixerMediationAdFitBinary (.binaryTarget)
    |   └─ 의존성: AdFitSDK (.product from dependency)
    |
    └─ AdMixerMediationAdFitBinary (.binaryTarget)
        └─ 이미 빌드된 xcframework

0개의 댓글