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

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

この記事からわかること

  • Swift Package Managerとは?
  • XcodeSPMパッケージ自作する方法

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

みんなの誕生日

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

posted withアプリーチ

環境

Swift Package Manager(SPM)とは?

Swift Package Manager(SPM)」はアプリ開発時に使用できるパッケージ(ライブラリ)管理ツールです。他にも「Carthage」や「Cocoa Pods」などがありますがSPMはApple純正の管理ツールでXcodeにも統合されているので主流になりつつあるツールになります。

今回はSPMで使用できるライブラリを自作・公開・導入する方法をまとめていきます。

SPMライブラリの作成方法

XcodeからSPM用のライブラリを作成するには上部メニュー「File」>「New」>「Package...」をクリックし「Library」を選択します。

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

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

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

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

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

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

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

中を確認すると以下のような構造になっています。

├── 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...」をクリックします。

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

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

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

これでSPMパッケージを自作・公開・導入することができました。一応サンプルでhttps://github.com/amefure/Sample-SPM-Libraryに公開してあるので導入してみてください。

おすすめ記事:GitHub:Sample-SPM-Library

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

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

Search Box

Sponsor

ProFile

ame

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

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

New Article