[英]Using preprocessor definitions in iOS App info.plist
我有一個iOS應用程序,該應用程序與Facebook一起使用SSO,作為使您的應用程序與Facebook的SSO一起使用的一部分,您必須在info.plist中指定FacebookAppId和回調URL。 我有2個不同的Facebook組,一個用於測試,另一個用於生產。 我希望能夠基於預處理程序指令設置上面指定的兩個鍵的值。
在我的MessageBomb-Prefix.pch中,我可以執行以下操作:
#ifdef TEST
//Development environments
#define PARSE_APP_ID "dev parse app id"
#define PARSE_CLIENT_ID "dev parse client id"
#define FB_APP_ID "dev facebook id"
#else
//Production environments
#define PARSE_APP_ID "prod parse app id"
#define PARSE_CLIENT_ID "prod parse client id"
#define FB_APP_ID "prod facebook id"
#endif
但是,在我的info.plist中,我已完成以下操作,但似乎不起作用:
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLSchemes</key>
<array>
<string>fb${FB_APP_ID}</string>
</array>
</dict>
</array>
<key>FacebookAppID</key>
<string>${FB_APP_ID}</string>
甚至有可能做我想做的事情。 我已將項目設置為預處理info.plist。
謝謝彼得
如果進入“構建設置”,則可以將Preprocess Info.plist File
設置為YES
,然后將Info.plist Preprocessor Prefix File
設置為使用#define
指令放置在項目中的.h
文件。
因此,例如,如果我將一個密鑰添加到Info.plist
文件: testKey
,其值為TEST_VALUE
。 然后我將test.h
放在我的項目中,其中包括:
#define TEST_VALUE hello_world
然后將Preprocess Info.plist File
設置為YES
並將Info.plist Preprocessor Prefix File
為test.h
現在,該鍵的值在檢索后為“ hello_world”。 如果您更改宏的值很多,您可能會發現您需要執行Product / Clean才能看到更改,因為XCode似乎緩存了編譯后的值。
Info.plist預處理程序將使您可以使用Info.plist中的構建設置,而不是#define
。 因此,您可以將FB_APP_ID
定義為目標中的自定義用戶構建設置(並為不同的方案提供覆蓋),然后該值將可供Info.plist使用。 但是,用戶構建設置不會暴露給您的代碼。 也就是說,除非您弄混了Preprocessor Definitions構建設置並添加了如下所示的條目
FB_APP_ID=@\"$(FB_APP_ID)\"
(需要反斜杠以使雙引號超過shell調用)
如果您的應用程序ID可能包含空格,那么您需要添加引號來跳過shell調用:
FB_APP_ID="@\"$(FB_APP_ID)\""
最后,您將具有類似於以下內容的構建設置:
要在plist中訪問:
創建一個新變量
定義它
在您的信息列表中使用它
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.