Cocoapodsでインストールできるようにしたい、だが公式リポジトリに含めないという段階の時どういう手順を踏めばいいのかというのを他の人の参考になるよう書いてみます。
最終的にユーザーは`pod repo add`というコマンドで非公式なリポジトリを登録しておくことでpodコマンド経由でセットアップできるようになります。PHP PEARが一番イメージしやすいかも(非公式なリポジトリ使う場面が多いので)。
ライブラリを書く
通常のアプリを開発する時のような感覚でXcodeプロジェクトを作成します。ライブラリのビルド設定も要りません。
ここがCocoapods環境のライフチェンジングなポイントだと思っているんですが、Cocoapodsでのインストールを前提にしていると開発者はめんどうなインストール用のスクリプトやファットバイナリやFramework形式を容易する必要がなくなり、ライブラリユーザーはハマりがちな依存ライブラリのセットアップやXcode設定を一切しなくてよくなります(Win-Win)。
なのでMyLibraryExampleというサンプルアプリプロジェクトを作成し、依存ライブラリはPodfileに記述してインストールし、MyLibraryというディレクトリを作成し、ライブラリに含めるソースコードは全部その中に置くという手順を踏むだけでもう公開する準備が整います。
開発中はユーザー向けのソースコードをMyLibraryExampleに書き、開発者向けのソースコードをテストターゲットに追加して。
MyLibraryExample.appで結合テスト+Xcodeでユニットテストを実行するというスタイルにするとテンポよく実装できます。
あと最近知ったのですがGithubメンバーの人のObjective-Cプロジェクト(https://github.com/github/ 参照)はだいたいテストフレームワークに[Specta](https://github.com/petejkim/specta "petejkim/specta · GitHub")を採用しているようです。ライブラリ実装用の使いやすさもあるんでしょうが。
まずローカルでセットアップを完結できるかを確認
以前以下に投稿した記事のような感じで。~/.cocoapods/local にローカルの作業スペースを掘ります。
この時点ではpodspecを一時的に
s.source = { :git => '/Users/omae/workspace/MyLibray', :tag => 'v0.1.0'}
のようにしてローカルにあるgitブランチを指定すればいいだけなので、ネットワークレスに作業できます。
ライブラリを公開用Gitリポジトリに配備
Githubでもどこでもチェックアウトできる場所につくるだけです。詳細は省きます。
Cocoapods経由でインストールするのにtag付けされている必要があるので`git push --tags`でリモートブランチにも反映されるようにしておきます。
spec用のGitリポジトリを用意
GithubじゃなくてもいいですがGithub前提で進めます。
Githubを使うのは公式リポジトリがあってそれをフォークした方が、今後公式へpull-requestする際などに都合がいいからです。
https://github.com/CocoaPods/Specs を自分のアカウントでフォークしてください。
specリポジトリのbeta配布用のブランチを作成
このままでも使えはするんですが、公式のpodspec群がフルセットでコピーされてしまうので新たなブランチを作成して一旦真っ新な状態にします(masterは基本的にpull-request用のトピックブランチを作成する前に公式リポジトリの更新を取り込むだけ)。
git checkout --orphan beta git rm -rf .
やってることはGithubPagesのプロジェクトページ用のブランチを手動でつくる時と同じ
ここにさっき~/.cocoapods/local でテストしたpodspecを持ってきてpush
mv ~/.cocoapods/local/MyLibrary ./ git push origin beta
インストールできるか確認
実際のライブラリユーザーは以下のようなコマンドを実行することになりますのでドキュメントなどに記述しましょう。
# pod repo add ${cocoapods上のリポジトリ名} https://github.com/*/Specs.git ${gitブランチ名} pod repo add omae https://github.com/omae/Specs.git beta ls ~/.cocoapods/ pod install