BLOGakisuteが主に技術的なネタを書き溜めるブログです。投稿を表示しています。投稿を表示しています。2011の7日目の記事になります。いうことでもうすぐクリスマスですね。クリスマスプレゼントの準備はお済みですか?まだの方はちょっとオシャレに、今年のプレゼントをCocoaPodsでご用意してみてはいかがでしょうか?■ご存じ、ないのですか!?さて念のためCocoaPodsについておさらい。X用のmavenです。細かい点については以下の記事が詳しいのでそちらをご参照ください。Calendarとネタがもろかぶりhttp://iphone-dev.g.hatena.ne.jp/laiso/20111117/1321437909http://d.hatena.ne.jp/Watson/20111204/mac_dev_jp_advent_calendar_cocoapods01このCocoaPodsを使うと今まで大変面倒くさかったライブラリの管理が嘘のように簡単になります。mavenで言うところのpom.xml)を書いてやれば、あとはCocoaPodsが指定されたライブラリを取ってきてビルド設定までやってくれるわけです。'MagicalRecord'ARCあり・なしのライブラリを混ぜても全く問題ありません。素晴らしい!!■公開なんて、あるわけないとまぁ実に素晴らしいツールなのですが、問題もあります。最近できたばかりのツールなので、対応しているライブラリが少ない対応しているライブラリでも、もともと依存関係処理をするという文化があまりなかったせいか、一部のライブラリ(Reachabilityとか)が内包された状態で出回っていたり、バージョンタグが一つや二つしか付いていないので上手くバージョン管理が出来ない(しかも極端に古かったりバグがあったり、さんざん)CocoaPods自体が開発途中ということもあり、機能がどんどん追加されているようなのだがドキュメントが追いついていない例を挙げると以下の画像のような感じで、バージョンが一つしかなかったり、あるんだけれど飛んでいたりなどなど。要するに自分の使いたいコードがCocoaPodsの中央リポジトリで管理されていないということがままあります。■俺達は、自分たちでpodspecを用意することを......強いられているんだ!ありがたいことに、CocoaPodsには中央リポジトリ以外の任意のリポジトリをライブラリ管理用のリポジトリとして追加する機能があります。この機能を使って、自分で対応していないライブラリのpodspecファイルを書いて、CocoaPodsで使えるようにすることができます。0.3.0以降であれば、設定ファイルに直接自分の好きなライブラリのpodspecを書くこともできるみたいです。最初のステップはpodspecを書くことです。今回は例としてMKNetworkKitというライブラリのバージョンv0.8a用のpodspecを書いてみることにします。ここでは相手のリポジトリを直接使ってますが、github上でforkして、そっちを使うようにしてもいいです。forkしたほうが自分で自由にコードに改変を加えたりtagを打ったりできますのでよいかも。MKNetworkKitこれでMKNetworkKit.podspecファイルが出力されますので、今度はこのファイルを書き換えます。先ほどcloneしてきたライブラリのソースコードとプロジェクト設定を見ながら、必要なソースコード、必要なリソース、不要なファイル、ライブラリやフレームワークなどのビルド設定を考えて、適切な設定を用意しなければなりません。dependencyぐらいです。あとは自分しか使わないならでたらめでかまいません。sourceは:tagの指定の代わりに:commitでコミットのハッシュ値を指定することもできるみたいです。このpodspecファイルの記法、やたらとたくさんある上にドキュメントがあまりないので、私は結局公式リポジトリのpodspecを探して見よう見まねで書きました。以下、参考にした物を列挙します。https://github.com/CocoaPods/Specshttps://github.com/CocoaPods/Specs/blob/master/ASIHTTPRequest/1.8.1/ASIHTTPRequest.podspechttps://github.com/CocoaPods/Specs/blob/master/ASIWebPageRequest/1.8.1/ASIWebPageRequest.podspechttps://github.com/CocoaPods/Specs/blob/master/BlocksKit/0.5.0/BlocksKit.podspechttps://github.com/CocoaPods/Specs/blob/master/BlocksKit/0.9.0/BlocksKit.podspechttps://github.com/CocoaPods/Specs/blob/master/SSToolkit/0.1.2/SSToolkit.podspechttps://github.com/CocoaPods/Specs/blob/master/Kiwi/1.0.0/Kiwi.podspechttps://github.com/CocoaPods/Specs/blob/master/MGSplitViewController/1.0.0/MGSplitViewController.podspec使用するリソースファイルも指定出来るみたいです。https://github.com/CocoaPods/Specs/blob/master/SVProgressHUD/0.5/SVProgressHUD.podspec巨大なのになるとこんなのも書けるみたいです。https://github.com/CocoaPods/Specs/blob/master/RestKit/0.9.3/RestKit.podspechttps://github.com/CocoaPods/Specs/blob/master/Nimbus/0.9.0/Nimbus.podspec書き終わったら、書いたpodspecファイルに問題がないかをチェックします。MKNetowrkKit.podspec何か問題があれば何かエラーが出ます。何も無ければ何も出ません。問題が無くなったらひとまずpodspecファイルについては完成です。次はこのpodspecファイルを置くリポジトリをgithubを使って用意します。github上に適当な名前でリポジトリを作りましょう。いうリポジトリを作りました。リポジトリを作ったら、先ほど作ったpodspecファイルを、以下の命名規則に従ってリポジトリの中に配置します:/podspecのs.name/podspecのs.version/先ほど作ったpodspecファイルたとえば今回の例では:/MKNetworkKit/0.8a/MKNetworkKit.podspecという名前で配置する必要があります。私が試した際は、間違ってると正しくpodspecファイルを認識してくれませんでした。ファイルを配置したらこのリポジトリをgithubにpushします。これでpodspec用のリポジトリが出来ましたので、今度はCocoaPods側の設定を行います。リポジトリのURLこれでmyrepoという名前でリポジトリが登録されます。いう名前のリポジトリが追加されているはずです。installすればうまくいくはずです。・・・といいたいところなのですが、一発でうまくいくことはまれで、たいていpodspecファイルの書き方に問題があったりとか、pod化したい対象のライブラリのコードに問題があってビルドが通らないのが普通です。そこで以下のようなワークフローになります。コードに問題があるなら、コードをforkして自分の思うように書き換えてpushpodspecファイルを修正して自分のpodspec用リポジトリにpush組み込みたいプロジェクトのPodsディレクトリ、Podfile.lockファイル、生成されたxcworkspaceを削除。