やりたかったこと
時雨堂さんのWebRTCビルドのiOS用フレームワークのバイナリを使いたかったのですが、バイナリが数百MBもあり(アーキテクチャ絞ればもっと減りますが)、そのままリポジトリに登録したくなく、そのプロジェクトでパッケージ管理に使用している CocoaPods 管理でなんとかしたかった感じです。
やったこと
ローカルのpodspecを読ませたい
時雨堂さんはXcode用のフレームワークをtar.gzで固めてアップしてくれているので、podspecをうまいこと記述してやれば、CocoaPodsのパッケージとして扱え、pod install
のときに直接バイナリをダウンロードしにいくとかできるのではと目論みました。ただ、そのためにはpodspecファイルをなんとかしてpodコマンドから読んでもらわないといけません。独自のリポジトリを用意する方法もあるようですが、それはさすがに面倒だったので、ローカルで単体のpodspecファイルを読ませたく、調べたところPodfileの podspec の記法を使えばよいようでした。
具体的には、以下のように書けました。
podspec :path => "./Podspecs/WebRTC-shiguredo.podspec"
なんですが、何故か実際の手元のファイルにはこう書いてました。
pod 'WebRTC', :podspec => "./Podspecs/WebRTC-shiguredo.podspec"
まぁ、どちらも動くようなのでこれで……。
ローカルのpodspecを用意する
無事にローカルのpodspecファイルを読ませることに成功したので、今度はpodspecファイル自体を用意します。podspecの仕様 を読みながら以下のように準備しました。
Pod::Spec.new do |spec|
spec.name = "WebRTC"
spec.version = "XXX.YYYY.Z"
spec.summary = "Shiguredo's distribution of WebRTC framework binaries for iOS. "
spec.description = "This pod contains Shigredo's distribution of WebRTC framework binaries for iOS."
spec.homepage = "https://github.com/shiguredo-webrtc-build/webrtc-build/"
spec.license = { :type => 'Multiple', :file => 'NOTICE' }
spec.author = "Shiguredo"
spec.ios.deployment_target = '13.0'
spec.source = { :http => "https://github.com/shiguredo-webrtc-build/webrtc-build/releases/download/mXXX.YYY.Z.0/webrtc.ios.tar.gz" }
spec.ios.vendored_frameworks = ["Frameworks/WebRTC.xcframework"]
end
ミソとなったのは、 spec.source
/ spec.ios.vendored_frameworks
のあたりです。今回利用させていただいた時雨堂さんのバイナリはtar.gzで固めてあったのですが、ソースには他にもzipファイルとかも指定でき、自動で展開してくれるようでした。その上で、圧縮ファイルを展開した際のframeworkのパスを vendored_frameworks
に記載しておくと、フレームワークをCocoaPodsで扱えるようになりました。
注意が必要なこと
- ライセンスについて、ちゃんと確認して色々と気をつけて使いましょう。
- 今回の時雨堂さんのバイナリについては、NOTICEファイル以外に 配布バイナリ自体のライセンス (と適用されているパッチのライセンス)があります。
- CocoaPodsさん、すぐ色々とキャッシュしてくれるので、実験中に古いデータが残ってうまく取得処理が更新されなくて半日くらい溶かしました。