【Xcode】Swift Package Managerの使い方!パッケージ導入管理ツール

【Xcode】Swift Package Managerの使い方!パッケージ導入管理ツール

この記事からわかること

  • Swift Package Managerとは?
  • XcodeからSwift Package Managerを操作する方法
  • パッケージ管理ツール導入
  • パッケージとライブラリ違い役割
  • 対応しているライブラリの見分け方
  • パッケージの追加編集削除するには?
  • Package.swiftPackage.resolvedとは?

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

Swift Package Managerとは?

公式リファレンス:GitHub-swift-package-manager

Swift Package Manager」とはiOSやmacOSアプリを開発時に使用されるApple製でオープンソースなパッケージ管理ツールです。外部に公開されているさまざまなパッケージ(ライブラリ)依存関係を保ちつつインストールや更新、削除することが可能になっています。

リリース当初はコマンドラインからの操作のみしかできずmacOSやLinuxなどで開発するアプリでの使用に限られていましたがXcode11以降からXcodeに組み込まれるようになりiOSアプリ開発にも使用できるようになりました。

iOSアプリ開発における似たような依存関係管理ツールとして「Carthage」や「Cocoa Pods」などがあります。

Swift Package Managerの特徴と違い

複数存在する依存関係管理ツールの中でもSwift Package Managerは以下のような特徴と違いを持っています。

Swift Package Managerは他のツールに比べて対応しているライブラリの種類はあまり多くはありませんApple純正の管理ツールであり、依存関係を把握しやすく、導入も簡単なのが大きなメリットです。

パッケージとライブラリの違いとは?

混在しがちなパッケージとライブラリの違いを自分なりに整理しておきます。まずは広義の意味でのパッケージとライブラリについてです。(間違ってたら教えてください)

パッケージ

パッケージとはコード、リソース、テスト、ビルド設定など複数のモジュールを含む集合体。パッケージの中に複数のライブラリがまとめられていたりすることもある。

ライブラリ

ライブラリは再利用可能なコードの集合体。Swiftには標準ライブラリやサードパーティ製のライブラリがある。

SPMにおけるパッケージ

Swift Package ManagerにおけるパッケージはライブラリなどをSPMで導入できるようにした配布形態のことです。実態としては決まった形式のファイル群であり、Gitリポジトリとして提供されいていることが多いです。

パッケージのルートディレクトリには¥「Package.swift」、「Sourcesディレクトリ」、「Testsディレクトリ」などを用意する必要があります。

パーケージ例

├── example-package-playingcard
│ ├── Sources
│        └── PlayingCard
│              ├── PlayingCard.swift
│              ├── Rank.swift
│              └── Suit.swift
│ ├── Tests
│        ├── 以下省略
│ ├── .gitignore
│ ├── CONTRIBUTING.md
│ ├── LICENSE.txt 
│ ├── Package.swift
│ └── README.md

引用: GitHub-Example package for use with the Swift Package Manager

パッケージは開発者が自作することも可能なので、オリジナルのライブラリを公開しておけば簡単に導入、管理することができるようになります。

// オリジナルライブラリパッケージ作成コマンド
$ swift package init --name パッケージ名 --type library

対応しているライブラリの見分け方

ライブラリがSPMに対応しているかどうかを識別するには「Package.swift」があるかないかを確認します。

例えばクラスプラットフォームモバイルデータベースである「Realm」を見てみるとルートディレクトリに「Package.swift」 があるのでSPMに対応していることが確認できます。

【Xcode】Swift Package Managerの使い方!パッケージ導入管理ツール

公式リファレンス:GitHub-RealmSwift

Package.swiftとは?

肝となっている「Package.swift」ファイルはマニフェストファイルとも呼ばれ、プロジェクトの依存関係、ターゲット、およびその他のプロジェクト設定が記述されているファイルです。Swift Package Managerではこのファイルを解析することで依存関係を特定します。

空の「Package.swift」は以下のコマンドを使用して作成することができます。

$ swift package init

iOSアプリ開発におけるパッケージの導入方法

Swift Package ManagerはXcodeから使用できるようになっているのでSPM自体を導入する手順は必要ありません。実際にパッケージをインストールしてみます。

上部のメニューから「File」>「Add Packages...」をクリックします。

【Xcode】Swift Package Managerの使い方!パッケージ導入管理ツール

表示された画面の中から使用したいパッケージを選択します。左メニューは「Recently Used(最近使用)」、「Apple Swift Packages」、「GitHub」の3つに分かれており、「GitHub」をクリック後に右上部の入力欄にリポジトリのURLを直接入力することで指定可能です。今回は先ほどのhttps://github.com/apple/example-package-playingcardを入力してみます。

【Xcode】Swift Package Managerの使い方!パッケージ導入管理ツール

正しいURLを入力すると画像のように対象のパッケージが表示されるのでDependency Rule(依存性ルール)とプロジェクト先を指定します。例えばDependency Rule(依存性ルール)に「Up to Next Major Version」を選択した画像の場合は3.0.0<4.0.0の間なら許容されることになります。パッケージのバージョニングは「セマンティックバージョニング:X.Y.Z」に倣っているので「メジャー.マイナー.パッチ」の順になります。「Add Package」をクリックして次の画面に遷移します。

パーケージを使用したいプロジェクト内のターゲットを選択し「Add Package」をクリックすることでパッケージの追加が開始されます。

【Xcode】Swift Package Managerの使い方!パッケージ導入管理ツール

正常に追加が完了するとXcodeのナビゲータエリアに「Package Dependencies」が追加され、そこから追加されたパッケージを参照することができるようになります。

【Xcode】Swift Package Managerの使い方!パッケージ導入管理ツール

あとは使用したい箇所でimportするだけです。

import PlayingCard

パッケージの操作

iOSプロジェクトに組み込まれたパッケージを操作するためには上部メニューから「File」>「Packages」に用意されているメニューから実行可能です。

【Xcode】Swift Package Managerの使い方!パッケージ導入管理ツール

よく使用する「Update to Latest Package Versions」はCocoaPodsでいうpod updateと同じだと思います。

パッケージの編集・削除

パッケージの編集や削除「プロジェクト」>「Package Dependencies」から実行することが可能になっています。

【Xcode】Swift Package Managerの使い方!パッケージ導入管理ツール

パッケージ追加後に生成されるファイル

Swift Package Managerを使用してパッケージを追加した後には様々なファイルが自動生成されます。追加したパッケージの実態(コード群)や設定ファイルなどがどこに保存されているのか見ておきます。

実際のパッケージファイル群

追加されたパッケージは「DerivedData」内にプロジェクトごとに以下のようなパスで追加されます。

~/Library/Developer/Xcode/DerivedData/[プロジェクト名]-ID/SourcePackages/checkouts/[パッケージ名]

Package.resolved

「Package.resolved」はSwiftパッケージの依存関係の解決に使用される設定ファイルです。例えばアップデートが実行された際はすべてのパッケージの依存関係の解決を完了した後、Package.resolvedに解決された依存関係のリストを保存します。これにより開発者が将来プロジェクトを再ビルドする場合、同じバージョンのパッケージが再度インストールされることが保証されます。

生成される場所は以下の通りです。

$ find ../ -name "Package.resolved"
..//Desktop/Test/Test.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

エラー:Missing Package Product パッケージ名 File

SPMを使用していると以下のようなエラーが発生することがあります。

Missing Package Product パッケージ名 File

このエラーは対象のパッケージが見つからない場合に発生します。単純にSPMでパッケージが導入できていないため、Xcode上部メニューの「File」>「Packages」>「Reset Package Caches」をクリックするとキャッシュをリセットすることができるので再度ビルドすることでパッケージが再度取得開始されエラーを解消することができます。

そのためこのエラーはDerivedDataなどを削除すると発生することがあるので注意してください。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index