CocoaPods1.xで複雑なTarget構成の依存を簡潔に書く

  • 2
    いいね
  • 0
    コメント

はじめに

今年始めに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をネストして記述しています。これでTest1Test2両方でアプリターゲットの依存に加え、Quickが使えるようになります。

まとめ

CocoaPods1.xからPodfileがとてもシンプルに書けるようになりました。0.x系からあまりsyntaxを変えず使い続けている人もいるかもしれないですが、簡単に見通しが良くなるので一度見直してみるといいかもしれません。