はじめに
今年始めにCocoaPod1.xが出て随分経ちました。1.xではPodfileがとてもキレイに書けるようになっていて嬉しく思っているんですが、旧来の記法をそのまま使えることもあって、あまり新しいsyntaxを使っていない人も多く見かけます。
自分も移行当初はほとんどそのままの記法を使っていたんですが、プロジェクトのtarget構成が複雑になったタイミングで記法を書き換えました。構成は以下のようなものです。
- アプリではターゲットが複数存在する。それぞれでは共通のPodを利用している
- Testターゲットのみで使いたいPodがある。更にTestも複数のターゲットがある
ここではこの構成を例に、Podfileの新しいsyntaxを古いものと比較しながら紹介します。
0.x以来の記述方法
common_pods
のような共通podsを括りだした上で、ターゲットを宣言して各ブロック内で地道に呼び出す必要がありました。
def common_pods
pod 'Alamofire'
...
end
def test_pods
pod 'Quick'
...
end
target 'App1' do
common_pods
end
target 'App2' do
common_pods
end
target 'Tests1' do
common_pods
test_pods
end
target 'Tests2' do
common_pods
test_pods
end
targetが増えれば増えるほどしんどい感じになってきます。これを1.x syntaxに書き変えます。
1.xでのsyntax
新しい記法ではたったのこれだけ。まずabstract_target
を宣言し、その中に共通で使いたいpodを書いておきます。これは中で宣言したtarget全てに依存が継承されます。
この共通のpod以外に使うものがないtargetは、シンプルにtarget '名前'
一行で記述可能です。
abstract_target 'App' do
pod 'Alamofire' # 全ターゲット共通で使うpod
...
target 'App1'
target 'App2'
abstract_target 'Tests' do
pod 'Quick' # テストターゲット共通で使うpod
...
target 'Tests1'
target 'Tests2' do
# Tests2でのみ使うpodの記述
end
end
end
この例では複数あるテストターゲットだけで使いたい共通ライブラリもあったので、更にabstract_target
をネストして記述しています。これでTest1
、Test2
両方でアプリターゲットの依存に加え、Quickが使えるようになります。
まとめ
CocoaPods1.xからPodfileがとてもシンプルに書けるようになりました。0.x系からあまりsyntaxを変えず使い続けている人もいるかもしれないですが、簡単に見通しが良くなるので一度見直してみるといいかもしれません。