92
87

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.

いまさら聞けない、ビルドターゲットの分け方

Last updated at Posted at 2015-02-04

ビルドターゲットを使い分けると「有料版/無料版」「デバッグとリリースで違うBundleIdentifierを使いたい」等、コードはほとんど同じでちょっとだけ違うビルドをしたいものを、一つのプロジェクトにまとめておくことができます。

LCD Clockの有料版と無料版もこの方法で作り分けています。(ステマ)

icon-40@2x.png

【LCD Clock】
https://itunes.apple.com/jp/app/lcd-clock/id295737235?mt=8
【LCD Clock Lite】
https://itunes.apple.com/jp/app/lcd-clock-lite-clock-calendar/id567652828?mt=8

ここではビルドターゲットを分ける具体的な手順を説明します。

ビルドターゲットを分ける方法


  1. 元になるターゲットを選択して右クリック→Duplicate。
    スクリーンショット 2015-02-05 1.19.13.png

  2. iPad用に変換するか聞かれます。今回は「Duplicate Only」で。
    スクリーンショット 2015-02-05 1.19.38.png

  3. MyProjectがコピーされて新しいターゲットができました。
    スクリーンショット 2015-02-05 1.22.06.png

これで当初のビルドターゲットを分けるというところまではできました。

この時点でビルド設定とInfo.plistも分かれているので、ターゲットに応じたBundleIdentifierなどを使い分けることができます。

ですがここまででは「違うビルドの設定ができた」というだけで、コードで分岐させることはまだできません。コードで分岐が書けるようになるにはもう一手間必要です。

正確には、別々な設定をしたInfo.plistの値などをつかって分岐させることはできますが、普通の状況だとターゲットで異なる処理を動的に(実行時に)分岐させる必要は無く、はじめからどちらかだけで良い場合がほとんどです。

そこで、下記のビルド設定で定義する値を使いプリプロセスの段階で分岐させます。
プリプロセスはコンパイルの前に行われ対象外の部分は無いのと同じです。ですので実行時に分岐判定などが行われることもなくターゲットが増えたからと言って実行時の処理が増えることもありません。

ターゲットに応じて分岐する方法


ターゲットを選択してBuildSettings、PreprocessorMacrosを開きます。
今回は、それぞれに「MYTARGET_A」「MYTARGET_B」という定義を追加しました。

スクリーンショット 2015-02-05 1.39.40.png
スクリーンショット 2015-02-05 1.39.49.png

これで準備は完了です。

ターゲットを選択してビルドすれば、それぞれに応じた定義が有効になります。
  スクリーンショット 2015-02-05 1.44.12.png

あとは下記の用に、必要な箇所で分岐させます。

#ifdef MYTARGET_A
	NSLog(@"MYTARGET_A");
#endif
	
#ifdef MYTARGET_B
	NSLog(@"MYTARGET_B");
#endif

ちなみにターゲットが2つしかなければelseを使って

#ifdef MYTARGET_A
	NSLog(@"MYTARGET_A");
#else
	NSLog(@"MYTARGET_B");
#endif

のようにも書けます。


ちなみにLCD Clockでは、有料版には

  スクリーンショット 2015-02-05 2.27.05.png

このようにウィジェット(TodayExtension)が2つ含まれていますが、無料版にはウィジェットは含まれていません。
ビルドターゲットでこのような使い分けも可能です。

92
87
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
92
87

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?