2011-11-29 11 views
15

私は現在、ビルドする必要があるiPhoneアプリケーションの "フレーバー"をたくさん持っています。理想的には、それぞれの「風味」のスキームを持ちたいと思います。各スキームは、コード内で分岐したり、info.plistファイルを前処理するために使用できる1つ以上のプリプロセッサ定義を定義(または設定)します。これは明らかに複数のターゲットを使って行うことができますが、アプリのさまざまな「味」を持つことができるので、目標数を下げるためにスキームを使用するのは素晴らしいことです。私の現在の考えは、プリアクションスクリプトの中でこれらのプリプロセッサ定義を追加することですが、GCC_PREPROCESSOR_DEFINITIONSを更新する方法は見つけられません。それは環境変数なので、GCC_PREPROCESSOR_DEFINITIONSに追加するアクセス権はありませんか?Xcodeスキームを介してプリプロセッサ定義を追加する

+0

あなたはこの答えをチェックアウトしたいと思うかもしれません:http:// stackoverflow。com/a/26433618/1055722 –

答えて

8

スキームにプリプロセッサ定義を設定させるという私の要求を満たすために、私が思いついた最善の解決策は、xcconfigファイルを変更するスキーマ事前アクションスクリプトと事後アクションスクリプトです。このファイルはビルド設定を更新してプリプロセッサ定義を更新し、プリプロセッサ定義を定義してinfo.plistを条件付きで変更できるようにします。他の誰かがこのルートを通過する場合は、ソース管理によってこのファイルがどのように処理されるかを考慮してください。

この記事の質問と関連した答えは私に役立ちました:How to append values in xcconfig variables?

+3

こんにちはChristopher、これを拡張できますか?xcconfigファイルをどのように変更しますか? – jasongregori

14

場合によっては、スキームのビルド前スクリプトを実行できます。あなたはしかし、すべてのスキームのためのスクリプトを含める必要があります:

私は設定に添付することを好む:

私が持っているように次に、あなたは簡単に、さまざまな構成のためのプリプロセッサマクロを追加することができますここでのデバッグのために:

<プロジェクト名> _Prefix.pchファイルは、その旨プログラム全体のマクロを置くのに最適な場所である、ように私はここにある:

私の例では、デバッグモードではないときにコンソール出力を効果的にオフにして、少しスピードを上げています。

+1

ありがとうDustin。私は可能な限り構成の数を減らしたいと思っています。コンソールの出力についての良いヒント。 –

+0

あなたのすべてのリンクが壊れています:( –

+1

今のところリンクが私のために働いています – Tony

0

複数のターゲットを定義し、ターゲット固有のビルド・オプションでプリプロセッサ・マクロを定義することはどうですか?次に、1つのスキームしか必要とせず、すべてのターゲットを1回のショットでビルドすることができます。それらのビルド構成は、それぞれ固有のビルド構成で行います。

+1

提案してくれてありがとうございましたこれは良い解決策かもしれません。 –

0

私が正しくあなたの質問を理解している場合、あなたのソースコードにユーザ定義のプリプロセッサマクロの一部を追加するために探している、それらを追加する方法がありますターゲット内でXcodeを使用します。 (例えばGCC_PREPROCESSOR_DEFINITIONS = USE_TAPJOY)

ステップ1)マルコ名などのUSE_TAPJOY ステップ2を決定します)標的 - に行く>を選択し、タブ「設定を構築する」(すべてのタブが有効になっていることを確認してください) ステップ3)のための検索ボックスの検索で「プリプロセッサマクロ」) ステップ4)デバッグ/リリースセクション ステップ5を確認してください)あなたのマルコを入力しますが enter image description here

ステップ6)は、以下の

For conditional include 

    #ifdef USE_TAPJOY 
    #import <Tapjoy/Tapjoy.h> 
    #endif 

    For conditional source code 
    #ifdef USE_TAPJOY  // Tapjoy Connect Notifications 
      [[NSNotificationCenter defaultCenter] addObserver:self 
                selector:@selector(tjcConnectSuccess:) 
                 name:TJC_CONNECT_SUCCESS 
                 object:nil]; 
      [[NSNotificationCenter defaultCenter] addObserver:self 
                selector:@selector(tjcConnectFail:) 
                 name:TJC_CONNECT_FAILED 
                 object:nil]; 
    #endif 

としてソースコードでこのマクロを使用します幸運

+0

これは質問ではありませんでした。質問は、それぞれのスキームごとに異なるマクロを設定する機能でしたが、ターゲットは1つだけです。 –

関連する問題