Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
8
Help us understand the problem. What are the problem?

More than 1 year has 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 で書き込めばリソースも持てる...ジョークです。

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
8
Help us understand the problem. What are the problem?