GitHubの自作ライブラリを公開する(ライブラリ編)
Dec 14, 2016 · ios · macgithubswift3
Swift
の自作ライブラリ(Kanagata)をGitHubに公開するにあたってのメモ。
その2ではマルチプラットフォーム対応とライブラリ管理ツールの導入についての内容
なお、作成するフレームワーク名、プロジェクト名はKanagata
とした場合の手順なので、
他の作業時は適宜読み替えること
その1はこちら
マルチプラットフォーム対応
元々はiOS
で作成していたが、特にOS依存するコードもないので、macOS
とwatchOS
とtvOS
にも対応させる。
また、ソースとテストは全て共通のものを用いることとする
既存ターゲット名変更
まずiOS
用のターゲットと判る様にターゲット名をKanagata
からKanagata-iOS
へ変更する
- プロジェクト設定から
TARGETS
の中のKanagata
をクリックして名前をKanagata-iOS
へ変更 Build Settings
のProduct Name
を$(TARGET_NAME)
から$(PROJECT_NAME)
へ変更- スキーム名も
Manage Schemes...
からKanagata
をクリックして名前をKanagata-iOS
へ変更
テスト用のターゲットKanagataTests
も同じ様にターゲット名をKanagataTests-iOS
へ、
Product Name
を`$(PROJECT_NAME)
へ変更する
他OS用のターゲットを追加
- プロジェクト設定の
TARGETS
の下部にある+からターゲットを追加- 追加画面の上部でOSを選択してから
Framework
を選択
(各OSで微妙に名前が違うので道具箱とココアのアイコンで見分けること) Product Name
はKanagata-(OS名)
Include Unit Tests
にチェック(watchOS
以外)
- 追加画面の上部でOSを選択してから
- プロジェクトに
Kanagata-(OS名)
とKanagataTests-(OS名)
が追加されるのでフォルダごと削除 - 追加したターゲットのバンドルIDから
-(OS名)
を削除
(必要に応じてSigning
とDeployment Target
も修正) Build Settings
を変更Info.plist File
のパスから-(OS名)
を削除(共通のplistを指す様に)Product Name
を$(TARGET_NAME)
から$(PROJECT_NAME)
へ
テスト用のターゲットも同じ様にバンドルID、Signing
、Build Settings
の各項目を修正する
ここで一旦ビルドとテストを実行して問題なければ次へ
travisCIへの追加
- 追加されたOSの各スキームの
Shared
をチェック .travis.yml
を修正iOS
用のスキーム名をKanagata
からKanagata-iOS
へ変更- 追加された
macOS
とtvOS
の分のテストを追加(以下の設定)
- 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
はプロジェクトの設定がいじられてしまうのが気になるのであまり使っていないが、
周りでは使っている人も多いので対応する
なお、あらかじめCarthage
もCocoaPods
もインストール済とする
Carthage
Carthage
はCocoaPods
と違って登録などの作業は不要で、
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
で登録内容が確認出来る
ユーザ登録ができれば、podspec
をCocoaPods
へ登録
pod trunk push
ちなみに、podspec
にTwitterを登録していると、無事完了した時にツイートが飛んでくる
CIに設定
.travis.yml
にpodspec
の検証を追加
script:
- pod lib lint --allow-warnings
(今回追加した分のみ記載)
(参考)インストール
Podfile
に
pod 'Kanagata'
を追加すれば利用可能
また、生成されたドキュメントは、http://cocoadocs.org/docsets/Kanagata/
で見ることが出来る
その他
後はバッジを貼ったり、ライセンスを貼ったりすれば、かなりそれっぽい感じになる。 ライブラリとして公開するとなると敷居が高い気がするが、GitHubを使っていればあまり手間をかけることなく公開できる