はじめまして、LDIのモバイルアプリエンジニアの庄司です。
今回はLDIの開発でSwiftPackageManager(SPM)を導入したため、導入方法を紹介していきます。
この記事はSPMを導入したいと思ってる人向けです。
導入経緯
テストフレームワークのNimbleとQuickをCarthageで導入していましたが、
Xcode12.3にアップデートしたところ、ビルドエラーになってしまいました。。。
理由を調べてみると、Xcodeが複数プラットフォーム向けのバイナリを格納したFrameworkに非対応になっていました。それを解決するためにSPMを導入しました。
元々はCarthageで管理しており、Carthageで対応できないものはCocoaPodsで管理していたため、SPMでのライブラリの導入はこれまでしていませんでした。
環境
- Xcode12.3
- Swift 5.3
- macOS Catalina 10.15.x
導入手順
SwiftPackageManagerでライブラリを追加する方法
ここではNimbleの追加を例として手順を追っていきます。
- .xcodeprojを開いて、対象のProjectのSwift Packagesを選択
”+”をクリックすると設定用ウィンドウが開きます
入力窓に導入するライブラリのリポジトリURLを入力する
- 使用するバージョン等の設定を行いNextをクリック
- 追加対象のTargetを確認してFinishをクリック
注意点
- バージョン管理対象に追加するもの
Sample.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved に追加したライブラリのバージョンなどの情報が保存されます。 SPMはPackage.resolvedに記録されたバージョンのライブラリを追加するように動作するため、VCS(GitやSVN)の管理対象に追加が必要です。
下記が今回のPackage.resolvedの内容です。追加したNimbleのリビジョンやバージョンが記録されています。
{ "object": { "pins": [ { "package": "CwlCatchException", "repositoryURL": "https://github.com/mattgallagher/CwlCatchException.git", "state": { "branch": null, "revision": "f809deb30dc5c9d9b78c872e553261a61177721a", "version": "2.0.0" } }, { "package": "CwlPreconditionTesting", "repositoryURL": "https://github.com/mattgallagher/CwlPreconditionTesting.git", "state": { "branch": null, "revision": "02b7a39a99c4da27abe03cab2053a9034379639f", "version": "2.0.0" } }, { "package": "Nimble", "repositoryURL": "https://github.com/Quick/Nimble.git", "state": { "branch": null, "revision": "e491a6731307bb23783bf664d003be9b2fa59ab5", "version": "9.0.0" } } ] }, "version": 1 }
感想
Xcodeに依存したツールなので外部ツールのバージョンをあまり気にしなくても良く、Podfile、Cartfileを書かなくても良い点が楽だと思いました。