はじめに
ついにでた公式のiOSライブラリ管理ツールSwift Package Manager !!!
最近やっと自作ライブラリを対応したので方法について記載します。
環境
- macOS Mojave 10.14.6
- Xcode11.0
- swift5
やり方
これ(AMNowClockView)を例に導入してみます。
-
ライブラリのファイルを作成
とりあえずライブラリの本体(クラス)を作成します。今回でいうとAMNowClockView.swiftファイル。 -
外部アクセスするクラスやプロパティにpublic修飾子をつける
public class AMNowClockView: UIView { public var clockBorderLineWidth: CGFloat = 5.0 }
何も修飾子をつけない場合、
internal
になるので外部からアクセスしたいものには全てpublic
修飾子をつける必要がある。 -
Swift Packageの作成
![pm_1](https://qiita-user-contents.imgix.net/https%3A%2F%2Fuser-images.githubusercontent.com%2F34936885%2F66762480-0591bc00-eee1-11e9-9714-0e6fcab42126.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=4df5342b0ea6b4c49dd6a497ab11b9f0)
- Package.swiftをライブラリに追加
![pm_2](https://qiita-user-contents.imgix.net/https%3A%2F%2Fuser-images.githubusercontent.com%2F34936885%2F66762492-0de9f700-eee1-11e9-91a7-72cfb2cdfb89.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=ba9ea51870b7c39c48ab4916ab352a5f)
-
Package.swiftを修正する
let package = Package(name: "AMNowClockView", platforms: [.iOS(.v9)], products: [.library(name: "AMNowClockView", targets: ["AMNowClockView"])], targets: [.target(name: "AMNowClockView", path: "Source")], swiftLanguageVersions: [.v5])
-
gitにpushする
最終的に下記のような構成。. ├── .gitignore ├── .swiftpm ├── Source │ └── AMNowClockView.swift ├── Package.swift ├── LICENSE └── README.md
-
gitにタグをpushする
1.0.0とか適当にタグをつけてpushする。どうやらx.x.xの形式じゃないと認識されない模様。適当に2.0とタグをつけていたら認識されませんでした。
これでライブラリのSwiftPM対応は完了
導入方法
- Xcodeの追加したいプロジェクトでPROJECT -> Swift Packages -> +
もしくは File -> Swift Packages -> Add Package Dependency...
![pm_01](https://qiita-user-contents.imgix.net/https%3A%2F%2Fuser-images.githubusercontent.com%2F34936885%2F66762512-1e9a6d00-eee1-11e9-8b2e-44164386d86c.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=7c810a7c31c529fa575496f1cca442bc)
![pm_02](https://qiita-user-contents.imgix.net/https%3A%2F%2Fuser-images.githubusercontent.com%2F34936885%2F66762731-7f29aa00-eee1-11e9-9432-74db38f79c45.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=5f04bcb6f534c387f281e846814083bd)
![pm_03](https://qiita-user-contents.imgix.net/https%3A%2F%2Fuser-images.githubusercontent.com%2F34936885%2F66762750-86e94e80-eee1-11e9-8b7e-5fc7a5eb8e30.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=9fae9a3fdf67695187ef7150d01819d8)
![pm_04](https://qiita-user-contents.imgix.net/https%3A%2F%2Fuser-images.githubusercontent.com%2F34936885%2F66762799-98325b00-eee1-11e9-85ba-2f4f73d34d1a.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=e9ac683fc136973676d9fb8fb6e2fd44)
導入後のPackageのバージョン変更や削除はPROJECT -> Swift Packagesからできるようです。
Cocoapods、Carthageと比較すると導入めっちゃ簡単!!
導入後の問題
IBDesignableが効かないみたいです...
下記はそれぞれAMNowClockViewを導入したStoryboardのスクショです。
Cocoapods | Carthage | SwiftPM |
---|---|---|
![]() |
![]() |
![]() |
しかし、Carthageとは異なりIBInspectableは有効なようです。
さいごに
さすが公式ツール!!導入はめちゃくちゃ簡単なので是非使っていきたい!!!
画像やxibなどリソースを含むものはSwiftPMでは対応できないようです
一度バイナリをbase64にして String
で書き込めばリソースも持てる...ジョークです。
参考
- [iOSアプリ開発にSwift Package Managerを使おう]
(https://qiita.com/hironytic/items/09a4c16857b409c17d2c) - Swift Package Managerがめっちゃ便利!