5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

iOS その2Advent Calendar 2016

Day 1

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

Last updated at Posted at 2016-12-01

はじめに

今年始めに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を変えず使い続けている人もいるかもしれないですが、簡単に見通しが良くなるので一度見直してみるといいかもしれません。

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?