自作SwiftライブラリをSwift Package Manager・CocoaPods・Carthageに対応する

  • 31
    いいね
  • 2
    コメント

はじめに

久しぶりにSwiftをやろうと思い、ナイーブベイズ分類器のSwift実装 SwiftNaiveBayesを作りました。その際にパッケージマネージャに対応したので、作業ログを公開します。

logo-2.png

Swiftのパッケージマネージャには、CocoapodsCarthageSwift Package Manager(SPM)の3つがあります。最初の2つはOSX/iOSアプリ開発でおなじみですね。

最後のSPMはAppleが中心に作っている最近のマネージャで、Xcode8がインストールされている方なら標準で利用できるようになっています。CLIやサーバサイド中心で使われていくのではないかと思います。

手順

SPM・CocoaPods・Carthageに対応するために私がやってみた3ステップです。

  1. swift package initでプロジェクトの雛形作成
  2. Githubで公開してリリース(SPM&Carthage対応完了)
  3. Podfileを作って公開(Cocoapods対応完了)

swift package initでプロジェクトの雛形作成

ここではHelloSwiftライブラリを作るとしましょう。まずライブラリの雛形を作ります。サンプルは以下のページにあります。(※ 適宜、固有名のakimachを置き換えてください)

$ mkdir HelloSwift
$ cd HelloSwift
$ swift package init
$ swift package generate-xcodeproj

ここまででディレクトリ構造は以下のようになっています。

.
├── .gitignore
├── HelloSwift.xcodeproj
│   ├── HelloSwiftTests_Info.plist
│   ├── HelloSwift_Info.plist
│   ├── project.pbxproj
│   └── xcshareddata
│       └── xcschemes
│           ├── HelloSwift.xcscheme
│           └── xcschememanagement.plist
├── Package.swift
├── Sources
│   └── HelloSwift.swift
└── Tests
    ├── HelloSwiftTests
    │   └── HelloSwiftTests.swift
    └── LinuxMain.swift

Githubで公開してリリース

あらかじめGithubでHelloSwiftレポジトリを作っておいてから、以下のコマンドを実行します。

echo "# HelloSwift" >> README.md
git init
git add .
git commit -m "first commit"
git remote add origin git@github.com:akimach/HelloSwift.git
git push origin master

GithubのHelloSwiftレポジトリのページにアクセスします。

releasesをクリックします。

01-r.png

Create a new releaseをクリックします。

02-r.png

v1.0.0と入力してPublish releaseをクリックします。

03-r.png

これでSPMとCarthageに対応が完了しました。

SPMならばPackage.swiftを以下のように書いて、swift buildを実行すればライブラリを使えます。

Package.swift
import PackageDescription

let package = Package(
    name: "MyApp",
    targets: [],
    dependencies: [
        .Package(url: "https://github.com/akimach/HelloSwift", majorVersion: 1),
    ]
)

CarthageならばCartfileを以下のように書いて、carthage updateを実行すればOK

Cartfile
github "akimach/SwiftNaiveBayes"

Carthageの使い方に関しては、yutat93
さんの「Carthageを使ってビルド時間を短縮しよう」が参考になりました。

Podfileを作って公開

HelloSwift.podspecを作成して以下のように書きます。

HelloSwift.podspec
Pod::Spec.new do |s|
  s.name        = "HelloSwift"
  s.version     = "1.0.0"
  s.summary     = "Hello, swift"
  s.homepage    = "https://github.com/akimach/HelloSwift"
  s.license     = { :type => "MIT" }
  s.authors     = { "YourUserName" => "yourname@email.com" }

  s.requires_arc = true
  s.osx.deployment_target = "10.9"
  s.ios.deployment_target = "8.0"
  s.watchos.deployment_target = "2.0"
  s.tvos.deployment_target = "9.0"
  s.source   = { :git => "https://github.com/akimach/HelloSwift", :tag => "v#{s.version}" }
  s.source_files = "Sources/*.swift"
  s.pod_target_xcconfig =  {
        'SWIFT_VERSION' => '3.0',
  }
end

次に.swift-versionというファイルを作ります。

echo "3.0" > .swift-version

コミットしてプッシュしておきます。

git add .
git commit -m "Update"
git push origin master

pod spec lintを実行します。WARNのみならスルーして大丈夫です。

これでCocoaPodsの対応が完了しました。ここから、CocoaPodsのレポジトリに登録する方法は別の記事に譲ります。

ライブラリを使うときはPodfileに以下のように記述して、pod installを実行します。

Podfile
platform :ios, '8.0'
use_frameworks!

target 'MyApp' do
    pod 'HelloSwift', :git => 'https://github.com/akimach/HelloSwift.git'
end

おわりに

以上、Swift Package Manager・CocoaPods・Carthageを見てきました。もっと他によい方法がある、あるいはうまくいかない点がありましたら、ぜひご指摘お願いします。