GitHubの自作ライブラリを公開する(ライブラリ編)

Swiftの自作ライブラリ(Kanagata)をGitHubに公開するにあたってのメモ。 その2ではマルチプラットフォーム対応とライブラリ管理ツールの導入についての内容

なお、作成するフレームワーク名、プロジェクト名はKanagataとした場合の手順なので、 他の作業時は適宜読み替えること

その1はこちら

マルチプラットフォーム対応

元々はiOSで作成していたが、特にOS依存するコードもないので、macOSwatchOStvOSにも対応させる。 また、ソースとテストは全て共通のものを用いることとする

既存ターゲット名変更

まずiOS用のターゲットと判る様にターゲット名をKanagataからKanagata-iOSへ変更する

  1. プロジェクト設定からTARGETSの中のKanagataをクリックして名前をKanagata-iOSへ変更
  2. Build SettingsProduct Name$(TARGET_NAME)から$(PROJECT_NAME)へ変更
  3. スキーム名もManage Schemes...からKanagataをクリックして名前をKanagata-iOSへ変更

テスト用のターゲットKanagataTestsも同じ様にターゲット名をKanagataTests-iOSへ、 Product Nameを`$(PROJECT_NAME)へ変更する

他OS用のターゲットを追加

  1. プロジェクト設定のTARGETSの下部にある+からターゲットを追加
    • 追加画面の上部でOSを選択してからFrameworkを選択
      (各OSで微妙に名前が違うので道具箱とココアのアイコンで見分けること)
    • Product NameKanagata-(OS名)
    • Include Unit Testsにチェック(watchOS以外)
  2. プロジェクトにKanagata-(OS名)KanagataTests-(OS名)が追加されるのでフォルダごと削除
  3. 追加したターゲットのバンドルIDから-(OS名)を削除
    (必要に応じてSigningDeployment Targetも修正)
  4. Build Settingsを変更
    • Info.plist Fileのパスから-(OS名)を削除(共通のplistを指す様に)
    • Product Name$(TARGET_NAME)から$(PROJECT_NAME)

テスト用のターゲットも同じ様にバンドルID、SigningBuild Settingsの各項目を修正する

ここで一旦ビルドとテストを実行して問題なければ次へ

travisCIへの追加

  1. 追加されたOSの各スキームのSharedをチェック
  2. .travis.ymlを修正

    • iOS用のスキーム名をKanagataからKanagata-iOSへ変更
    • 追加されたmacOStvOSの分のテストを追加(以下の設定)
    - xcodebuild test -scheme Kanagata-macOS -destination 'platform=OS X'
    - xcodebuild test -scheme Kanagata-tvOS -destination 'platform=tvOS Simulator,name=Apple TV 1080p'
    

pushしてエラーがなければ次へ

ライブラリ管理ツールへの対応

個人的にはシンプルなCarthageがお気に入り。 CocoaPodsはプロジェクトの設定がいじられてしまうのが気になるのであまり使っていないが、 周りでは使っている人も多いので対応する

なお、あらかじめCarthageCocoaPodsもインストール済とする

Carthage

CarthageCocoaPodsと違って登録などの作業は不要で、 GitHubにリリースすれば良い

まずは、プロジェクトのカレントディレクトリで以下を実行

carthage build --no-skip-current

エラーなく完了し、Carthage/Build内に各フレームワークが生成されていればOK

ビルドに問題なければGitHub上のリリースタブからタグをつける
(この時はバージョンとして0.1.0の様に数字のみをつけるのが良い。 vを入れたりするとCocoaPodsでうまくいかないことがあるので)

(参考)インストール

Cartfile

github "mike-neko/Kanagata"

という感じ(アカウント名/リポジトリ名)で追記するだけで利用できる

CocoaPods

今回はデモプロジェクトは同梱しないので直接podspecを作って対応させる

podspecの作成

プロジェクトのカレントディレクトリで以下を実行

pod spec create Kanagata

ひな形のKanagata.podspecができるので内容をプロジェクトに合わせて修正していく。 今回は以下の感じ

Pod::Spec.new do |s|
  s.name         = "Kanagata"   // ライブラリ名
  s.version      = "0.1.0"      // バージョン
  s.summary      = "短い説明"
  s.homepage     = "https://github.com/mike-neko/Kanagata"  // GitHub上にしておいた
  s.license      = "MIT"        // ライセンス
  s.author       = { "mike-neko" => "mike.app.info@gmail.com" } // GitHub上の名前とメール
  s.social_media_url   = "https://twitter.com/m__ike_"          // ツイッターのアドレス
  s.ios.deployment_target = "8.0"           // OS毎のDeployment Targetと合わせる
  s.osx.deployment_target = "10.10"
  s.watchos.deployment_target = "2.0"
  s.tvos.deployment_target = "9.0"
  // GitHubのアドレスとタグの紐付けの設定。tagの方はデフォルトのままが良い
  s.source       = { :git => "https://github.com/mike-neko/Kanagata.git", :tag => "#{s.version}" }
  s.source_files  = "Kanagata/*.swift"      // プロジェクト内でのソースの位置
end

基本はそのまま埋めていけば良い。ポイントがあるとするとversionの部分は、 数字のみのバージョン(v1.0.0とかはNG)にして、GitHub上のタグと一致させておくこと。 あとは、忘れずにsource_filesを自分のプロジェクトでのソースの位置に合わせること

一通り作成ができたら、

pod spec lint Kanagata.podspec

としてみてエラーにならなければOK。pushしておく

CocoaPodsへ登録

(初回のみ)ユーザを登録する

pod trunk register (メールアドレス) '(ユーザ名)'

実行後に入力したメールアドレスへメールが来るので確認をする。
確認後はpod trunk meで登録内容が確認出来る

ユーザ登録ができれば、podspecCocoaPodsへ登録

pod trunk push

ちなみに、podspecにTwitterを登録していると、無事完了した時にツイートが飛んでくる

CIに設定

.travis.ymlpodspecの検証を追加

script:
  - pod lib lint --allow-warnings

(今回追加した分のみ記載)

(参考)インストール

Podfile

pod 'Kanagata'

を追加すれば利用可能

また、生成されたドキュメントは、http://cocoadocs.org/docsets/Kanagata/で見ることが出来る

その他

後はバッジを貼ったり、ライセンスを貼ったりすれば、かなりそれっぽい感じになる。 ライブラリとして公開するとなると敷居が高い気がするが、GitHubを使っていればあまり手間をかけることなく公開できる

参考リンク