2011-11-29 27 views
15

我目前有一些我需要構建的iPhone應用程序的特殊「風味」。理想情況下,我想爲每個「風味」設計一個方案,每個方案都會定義(或設置)一個或多個預處理器定義,我可以使用它們在代碼中進行分支,甚至可以預處理我的info.plist文件。這顯然可以通過多個目標完成,但由於我可以有很多不同的應用程序「風格」,如果使用計劃來保持目標計數不變,那將是非常好的。我目前的想法是在預執行腳本期間添加這些預處理器定義,但是我不能在我的生活中找到更新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

嗨克里斯托弗,你可以擴展這個嗎?你如何修改xcconfig文件? – jasongregori

14

更糟糕的情況下,您可以爲該方案執行預生成腳本。你必須包括但每一個方案的腳本:

我更願意將其連接到配置:

然後你就可以輕鬆地添加預處理宏的各種配置,像我有這裏調試:

的<項目名> _Prefix.pch文件是把宏,實際上,整個程序的好地方,就像我在這裏:

在我的例子中,我們在非調試模式下有效地關閉了控制檯輸出,提供了一點速度提升。

+1

謝謝達斯汀。如果可能的話,我想減少配置的數量。不過,關於控制檯輸出的提示很棒。 –

+0

您的所有鏈接都已損壞:( –

+1

現在鏈接對我有效 – Tony

0

如何在特定於目標的構建選項中定義多個目標並定義預處理器宏?那麼你只需要一個方案,並且你可以一次構建所有目標,所有目標都有自己特定的構建配置。

+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

這不是問題。問題是能夠爲每個方案設置一個不同的宏,同時只保留一個目標。 –