본문 바로가기

iOS/iOS (응용)

[iOS] SwiftPM - PackageCollection

Package Collection

Xcode 13이상부터 사용 가능한 Package Collection은 Swift Package URL 목록을 정의할 수 있는 API입니다.

 

Collection File은 일반적으로 HTTPS를 통해 가져오는 JSON 파일이고, 패키지 URL 목록과 (summary, product, versions, keyword, excludeProducts, readmeURL)등을 포함한 메타데이터가 포함되어 있습니다.

 

swift-package-collection-generator

 

🔗 swift-package-collection-generator 해당 Tool을 이용해서 Collection File을 생성할 수 있습니다.

해당 Tool은 메타데이터가 포함될 수 있는 패키지 URL목록이 작성된 입력 JSON파일을 가져와서 다른 사람들과 공유할 출력파일을 생성합니다.

해당 Tool은 각 패키지에 대한 정보를 자동으로 가져오지만 컬렉션을 작성할 때 패키지별로 추가 메타데이터를 제공할 수도 있습니다.

# 1. 저장소를 clone합니다.
$ git clone https://github.com/swiftlang/swift-package-collection-generator.git
$ cd swift-package-collection-generator

# 2. swift-package-collection-generator를 설치합니다.
$ swift build --configuration release

# 3. local에 명령어를 설치합니다.
$ install .build/release/package-collection-generate /usr/local/bin/package-collection-generate
$ install .build/release/package-collection-diff /usr/local/bin/package-collection-diff
$ install .build/release/package-collection-sign /usr/local/bin/package-collection-sign
$ install .build/release/package-collection-validate /usr/local/bin/package-collection-validate

 

 

입력JSON, 출력JSON 파일 생성방법

 

1. 입력 JSON 파일을 작성합니다.

- 🔗 v1 Format 해당 문서를 참고하여 원하는 값들을 입력합니다. 

# [입력 JSON파일명]

{
    "name": "Rx Collection",
    "overview": "Rx 관련 패키지 모음",
    "keywords": ["Rx"],
    "formatVersion": "1.0",
    "revision": 1,
    "generatedAt": "2024-08-12T12:00:00Z",
    "packages": [
        {
            "url": "https://github.com/ReactiveX/RxSwift.git",
            "summary": "RxSwift",
            "versions": [ "6.7.1" ]
        }
    ]
}

 

 

2. collection-generator 툴을 사용하여 입력 JSON파일을 통해 출력 JSON파일을 생성합니다.

# 3-1. local에 설치가 완료되면 명령어를 실행할 수 있습니다.
$ package-collection-generate [입력 JSON파일명] [출력 JSON파일명]

# 3-2. local에 설치하지 않고도 clone한 저장소의 경로에서 실행할 수 있습니다.
$ swift run package-collection-generate [입력 JSON파일명] [출력 JSON파일명]

 

3. 출력된 JSON을 Package Collection에 추가합니다.

$ swift package-collection add [출력 JSON파일명] --trust-unsigned

 

 

PackageCollection 서명

서명을 추가하지 않고도 PackageCollection을 사용할 수 있습니다.

서명을 추가하면 해당 PackageCollection을 생성할 때 서명하는 작업입니다.

 

1. 🔗 Apple Developer - Certificates, Identifiers & Profiles로 이동 합니다.

 

2. Swift Package Collection Certificate을 생성합니다.

 

3.  다운로드 받은 Certificate를 추가한 후 키체인으로 이동하여 개인키를 내보냅니다.

 

4. openssl을 이용하여 .p12 -> .pem 파일로 변경합니다.

🚨 openssl이 3버전 이상이라면 legacy옵션을 활성화해야 합니다.

### openssl 1버전
$ openssl pkcs12 -nocerts -in swift_package.p12 -out swift_package.pem

### openssl 3버전이상 legacy 옵션활성화
$ openssl pkcs12 -nocerts -legacy -in swift_package.p12 -out swift_package.pem

### rsa 변경
$ openssl rsa -in swift_package.pem -out swift_package_rsa.pem

 

5. 🔗 Apple PKI로 이동하여 중간인증서(Wordwide Developer Relations - G3), 루트인증서(Apple Root CA - G3 Root)다운로드합니다.

 

6. swift-package-collection-generator에서 Sign을 적용합니다.

위의 package-collection-generator 명령어를 실행하여 입력 JSON을 출력 JSON파일명으로 변경 후 서명을 추가해줍니다.

$ swift run package-collection-sign [출력한 JSON파일명] [새로 생성할 JSON파일명] swift_package_rsa.pem swift_package.cer AppleWWDRCAG3.cer AppleRootCA-G3.cer