簡體   English   中英

在iOS App info.plist中使用預處理程序定義

[英]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 Filetest.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM