如果我在構建配置中添加了用戶定義的設置,如何在Objective-C代碼中讀取該設置?如何訪問用戶定義的Xcode構建設置?
我在我的項目中有兩個文件,debug.plist
和release.plist
。我希望我的MainApp.m
文件根據正在運行的構建配置來讀取這些文件之一。我在Debug和Release配置中設置了一個名爲「filename」的用戶定義設置,以指向相應的文件。但我不知道我的MainApp.m
文件如何從當前運行配置讀取文件名變量。
如果我在構建配置中添加了用戶定義的設置,如何在Objective-C代碼中讀取該設置?如何訪問用戶定義的Xcode構建設置?
我在我的項目中有兩個文件,debug.plist
和release.plist
。我希望我的MainApp.m
文件根據正在運行的構建配置來讀取這些文件之一。我在Debug和Release配置中設置了一個名爲「filename」的用戶定義設置,以指向相應的文件。但我不知道我的MainApp.m
文件如何從當前運行配置讀取文件名變量。
您的代碼無法讀取任意構建設置。您需要使用預處理器宏。
編輯:例如,在調試配置的目標設置,你可以在預處理宏構建設置添加DEBUGGING=1
,並在發佈配置沒有定義調試。然後在源代碼中,你可以做這樣的事情:
#if DEBUGGING
use this file
#else
use the other one
#endif
下面是我做什麼,我不是100%肯定,如果這是你追求的:
創建用戶定義的設置,例如:
MY_LANG -> en_us
然後,在預處理宏的設置,您可以參考該值:
LANGCODE="$(MY_LANG)"
現在,您可以參考的langCode在你所有的源文件,這將是你在你的自定義生成設置填寫什麼。我意識到在這裏有一個間接的層次,但是在我的情況下這是有意的:我的XCode項目包含一系列具有自己的預處理器宏的不同目標/配置。我不想進入所有這些,只是爲了更改語言代碼。事實上,我在項目級定義了語言代碼。我也在一些腳本中使用MY_LANG,所以只是預處理器宏不會這樣做。可能有更聰明的方法,但這對我很有用。
好吧,我可以按照前兩個步驟操作,但是我無法弄清楚在第三步中預處理宏的設置。我試着將其添加到GCC_PREPROCESSOR_DEFINITIONS中,如http://stackoverflow.com/questions/367368/how-to-define-a-preprocessor-symbol-in-xcode中所述,但這並不起作用 – 2012-09-06 15:31:38
另一種方法是在你創建了一個用戶設置,進入Build Phases選項卡,並且對於設置被讀入的源文件,添加:'-D'LANGCODE = @「$(MY_LANG)」'''。 – 2012-10-25 11:27:21
如果您在構建設置中爲**字符串**定義了宏,請不要忘記像這樣'LANGCODE = @ \「$(MY_LANG)\」' – DanSkeel 2018-01-18 10:32:07
我試過zmippie建議,但它沒有爲我工作。
我得到了它這方面的工作:
${MY_LANG}
您可以訪問用戶定義的構建在運行時設置(如在由@JWWalker評論建議)
添加進入到你的Info.plist
文件,並將其設置爲您的用戶定義的構建設置
MySetting -> ${MYSETTING}
從代碼
[[NSBundle mainBundle] objectForInfoDictionaryKey:@"MySetting"];
閱讀它的價值在萬一別人還停留在尋找如何做預處理宏,去找蘋果LLVM - 預處理在構建設置部分。在它下面,你會看到一個名爲Preprocessor Macros的部分。
這是默認情況下,Xcode爲調試版本配置插入DEBUG = 1宏。
你可以在這裏添加你自己的,並給他們不同的調試,發佈和任何自定義構建配置值。
要添加一個,雙擊你想要的配置的當前值列表,它會顯示一個很好的小編輯器,每行有一個宏。只需添加您自己的宏名稱,並以與DEBUG完成相同的方式給它一個值。
這些可以在預處理器構建階段使用#if,#ifdef等進行檢查以提供條件代碼或值。
希望有所幫助。
謝謝,JWWalker,你能告訴我如何定義專門用於xcode項目的預處理宏嗎? – 2010-10-19 17:01:29
好的,我在答案中加了一個例子。 – JWWalker 2010-10-19 21:19:10
P.S.有一種使用用戶定義設置的方法:選中「在Info.plist文件中展開構建設置」,然後在Info.plist文件中使用'$ MYSETTING'。 – JWWalker 2010-10-19 21:36:17