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を使っていればあまり手間をかけることなく公開できる
