LoginSignup
8

More than 3 years have passed since last update.

自作ライブラリのSwift Package Manager(SwiftPM)対応

はじめに

ついにでた公式のiOSライブラリ管理ツールSwift Package Manager !!!

最近やっと自作ライブラリを対応したので方法について記載します。

環境

  • macOS Mojave 10.14.6
  • Xcode11.0
  • swift5

やり方

これ(AMNowClockView)を例に導入してみます。

  1. ライブラリのファイルを作成
    とりあえずライブラリの本体(クラス)を作成します。今回でいうとAMNowClockView.swiftファイル。
  2. 外部アクセスするクラスやプロパティにpublic修飾子をつける

    public class AMNowClockView: UIView {
      public var clockBorderLineWidth: CGFloat = 5.0
    }
    

    何も修飾子をつけない場合、internalになるので外部からアクセスしたいものには全てpublic修飾子をつける必要がある。

  3. Swift Packageの作成

    pm_1

  4. Package.swiftをライブラリに追加

    pm_2

    作成したPackageからPackage.swiftだけを取り出してライブラリに追加する。

  5. Package.swiftを修正する

    let package = Package(name: "AMNowClockView",
                        platforms: [.iOS(.v9)],
                        products: [.library(name: "AMNowClockView", 
                                            targets: ["AMNowClockView"])],
                        targets: [.target(name: "AMNowClockView",
                                          path: "Source")],
                        swiftLanguageVersions: [.v5])
    
  6. gitにpushする

    最終的に下記のような構成。

    .
    ├── .gitignore
    ├── .swiftpm
    ├── Source
    │   └── AMNowClockView.swift
    ├── Package.swift
    ├── LICENSE
    └── README.md
    
  7. gitにタグをpushする

    1.0.0とか適当にタグをつけてpushする。どうやらx.x.xの形式じゃないと認識されない模様。適当に2.0とタグをつけていたら認識されませんでした。

これでライブラリのSwiftPM対応は完了

導入方法

  1. Xcodeの追加したいプロジェクトでPROJECT -> Swift Packages -> +
    もしくは File -> Swift Packages -> Add Package Dependency...
    pm_01
  2. ライブラリのURLを入力
    https://github.com/adventam10/AMNowClockView と入力しNextをクリックする。
    pm_02
  3. バージョンやブランチを選択する
    ライブラリがSwiftPM対応をしてタグが正しく設定されていればVersionのところに初期設定が入る。(2.0とかタグをつけてるとバージョン指定で導入できませんでした。) 設定が終わればNextをクリックする。
    pm_03
  4. Finish
    Finishをクリックで完了!!めっちゃ簡単
    pm_04

導入後のPackageのバージョン変更や削除はPROJECT -> Swift Packagesからできるようです。

Cocoapods、Carthageと比較すると導入めっちゃ簡単!!

SwiftPMでライブラリを導入したプロジェクト

導入後の問題

IBDesignableが効かないみたいです...

下記はそれぞれAMNowClockViewを導入したStoryboardのスクショです。

Cocoapods Carthage SwiftPM
cocoapods carthage swiftPM

しかし、Carthageとは異なりIBInspectableは有効なようです。

さいごに

さすが公式ツール!!導入はめちゃくちゃ簡単なので是非使っていきたい!!!

画像やxibなどリソースを含むものはSwiftPMでは対応できないようです:disappointed_relieved:

一度バイナリをbase64にして String で書き込めばリソースも持てる...ジョークです。

参考

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
8