【Xcode/iOS】Swift Package Managerでライブラリを自作&公開する方法

この記事からわかること
- Swift Package Managerとは?
- XcodeでSPMのパッケージを自作する方法
index
[open]
\ アプリをリリースしました /
環境
- Xcode:16.3
- iOS:18.0
- Swift:5.9
- macOS:Sequoia 15.4
Swift Package Manager(SPM)とは?
「Swift Package Manager(SPM)」はアプリ開発時に使用できるパッケージ(ライブラリ)管理ツールです。他にも「Carthage」や「Cocoa Pods」などがありますがSPMはApple純正の管理ツールでXcodeにも統合されているので主流になりつつあるツールになります。
今回はSPMで使用できるライブラリを自作・公開・導入する方法をまとめていきます。
SPMライブラリの作成方法
XcodeからSPM用のライブラリを作成するには上部メニュー「File」>「New」>「Package...」をクリックし「Library」を選択します。

続いてテストシステムを含めたい場合は選択して「Next」をクリックします。

PC内の保存先を問われるので任意の場所を選択します。この際に「Don't add to any project or workspace」ではなく「Target」を選択するとそのプロジェクトに生成したパッケージを導入した状態にしてくれます。

これでライブラリ用のプロジェクトが完成しました。

中を確認すると以下のような構造になっています。
├── MyLibrary
│ ├── Package.swift
│ ├── Source
│ └── MyLibrary
│ └── MyLibrary.swift
最初に生成される「Package.swift」ファイルはマニフェストファイルとも呼ばれ、プロジェクトの依存関係、ターゲット、およびその他のプロジェクト設定が記述されているファイルです。一番最初は以下のように記述されています。
import PackageDescription
let package = Package(
name: "MyLibrary",
products: [
// Products define the executables and libraries a package produces, making them visible to other packages.
.library(
name: "MyLibrary",
targets: ["MyLibrary"]),
],
targets: [
// Targets are the basic building blocks of a package, defining a module or a test suite.
// Targets can depend on other targets in this package and products from dependencies.
.target(
name: "MyLibrary"),
]
)
あとはライブラリとして切り出したい機能をファイルを追加しながら定義していくだけです。Swiftではデフォルトのアクセス修飾子が別モジュールからはアクセスできないinternal
のため、 別のモジュールからアクセスできるようにしたい場合はpublic
を付与してあげてください。
// デフォルトではinternalのため別モジュールからはアクセスできない
class TestLibrary {
var text = "Hello, World!"
}
// 別のモジュールからアクセスできるようにしたい場合はpublicを付与する
public class TestPublicLibrary {
// デフォルトではinternalのため別モジュールからはアクセスできない
var text = "Hello, World!"
// イニシャライザにもpublicを付与しないと別のモジュールからインスタンス化できない
public init(text: String = "Hello, World!") {
self.text = text
}
// publicを指定しているので別モジュールからアクセス可能
public func sayHello() {
print(text)
}
}
コマンドで作成する
ちなみにSPM用のライブラリはコマンドで作成することも可能です。このコマンドはカレントディレクトリ内にパッケージに必要なファイルを生成するため、空のディレクトリを作成してから実行してください。
// オリジナルライブラリパッケージ作成コマンド
$ swift package init --name パッケージ名 --type library
パッケージを公開する
パッケージ(ライブラリ)を作成できたらGitHubにアップロードします。アップロードすることで誰でも使えるパッケージとして公開することが可能です。特に変わったところはなく必要なのはタグ付けを行うことです。このタグがパッケージのバージョン管理になります。
$ git tag 1.0.0
GitHubへのアップロードはターミナルからのGitだけでなくXcodeからも操作できるので参考にしてください。
パッケージを導入する
SPMはXcodeから使用できるようので公開したパッケージを導入してみます。上部のメニューから「File」>「Add Packages...」をクリックします。

右上部の入力欄にリポジトリのURLを直接入力することで指定可能なので先ほど公開したリポジトリURLを入力してみてください。

これでSPMパッケージを自作・公開・導入することができました。一応サンプルでhttps://github.com/amefure/Sample-SPM-Library
に公開してあるので導入してみてください。
おすすめ記事:GitHub:Sample-SPM-Library
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。