2010-10-19 30 views
23

如果我在構建配置中添加了用戶定義的設置,如何在Objective-C代碼中讀取該設置?如何訪問用戶定義的Xcode構建設置?

我在我的項目中有兩個文件,debug.plistrelease.plist。我希望我的MainApp.m文件根據正在運行的構建配置來讀取這些文件之一。我在Debug和Release配置中設置了一個名爲「filename」的用戶定義設置,以指向相應的文件。但我不知道我的MainApp.m文件如何從當前運行配置讀取文件名變量。

回答

8

您的代碼無法讀取任意構建設置。您需要使用預處理器宏。

編輯:例如,在調試配置的目標設置,你可以在預處理宏構建設置添加DEBUGGING=1,並在發佈配置沒有定義調試。然後在源代碼中,你可以做這樣的事情:

#if DEBUGGING 
    use this file 
#else 
    use the other one 
#endif 
+0

謝謝,JWWalker,你能告訴我如何定義專門用於xcode項目的預處理宏嗎? – 2010-10-19 17:01:29

+0

好的,我在答案中加了一個例子。 – JWWalker 2010-10-19 21:19:10

+3

P.S.有一種使用用戶定義設置的方法:選中「在Info.plist文件中展開構建設置」,然後在Info.plist文件中使用'$ MYSETTING'。 – JWWalker 2010-10-19 21:36:17

34

下面是我做什麼,我不是100%肯定,如果這是你追求的:

  1. 走進構建設置面板,並選擇在底部的齒輪圖標左:添加用戶自定義設置
  2. 創建用戶定義的設置,例如:

    MY_LANG -> en_us 
    
  3. 然後,在預處理宏的設置,您可以參考該值:

    LANGCODE="$(MY_LANG)" 
    

現在,您可以參考的langCode在你所有的源文件,這將是你在你的自定義生成設置填寫什麼。我意識到在這裏有一個間接的層次,但是在我的情況下這是有意的:我的XCode項目包含一系列具有自己的預處理器宏的不同目標/配置。我不想進入所有這些,只是爲了更改語言代碼。事實上,我在項目級定義了語言代碼。我也在一些腳本中使用MY_LANG,所以只是預處理器宏不會這樣做。可能有更聰明的方法,但這對我很有用。

+1

好吧,我可以按照前兩個步驟操作,但是我無法弄清楚在第三步中預處理宏的設置。我試着將其添加到GCC_PREPROCESSOR_DEFINITIONS中,如http://stackoverflow.com/questions/367368/how-to-define-a-preprocessor-symbol-in-xcode中所述,但這並不起作用 – 2012-09-06 15:31:38

+6

另一種方法是在你創建了一個用戶設置,進入Build Phases選項卡,並且對於設置被讀入的源文件,添加:'-D'LANGCODE = @「$(MY_LANG)」'''。 – 2012-10-25 11:27:21

+0

如果您在構建設置中爲**字符串**定義了宏,請不要忘記像這樣'LANGCODE = @ \「$(MY_LANG)\」' – DanSkeel 2018-01-18 10:32:07

6

我試過zmippie建議,但它沒有爲我工作。

我得到了它這方面的工作:

${MY_LANG} 
5

您可以訪問用戶定義的構建在運行時設置(如在由@JWWalker評論建議)

  1. 添加進入到你的Info.plist文件,並將其設置爲您的用戶定義的構建設置

    MySetting -> ${MYSETTING} 
    
  2. 從代碼

    [[NSBundle mainBundle] objectForInfoDictionaryKey:@"MySetting"]; 
    
0

閱讀它的價值在萬一別人還停留在尋找如何做預處理宏,去找蘋果LLVM - 預處理在構建設置部分。在它下面,你會看到一個名爲Preprocessor Macros的部分。

這是默認情況下,Xcode爲調試版本配置插入DEBUG = 1宏。

你可以在這裏添加你自己的,並給他們不同的調試,發佈和任何自定義構建配置值。

要添加一個,雙擊你想要的配置的當前值列表,它會顯示一個很好的小編輯器,每行有一個宏。只需添加您自己的宏名稱,並以與DEBUG完成相同的方式給它一個值。

這些可以在預處理器構建階段使用#if,#ifdef等進行檢查以提供條件代碼或值。

希望有所幫助。

相關問題