2013-01-08 52 views
13

我有一個iOS應用程序在Facebook上使用SSO作爲讓您的應用程序與Facebook的SSO一起工作的一部分,您必須在info.plist中指定FacebookAppId和回調URL。我有兩個不同的Facebook羣組供測試和一個用於製作。我希望能夠根據預處理器指令設置上面指定的兩個鍵的值。在iOS應用程序中使用預處理器定義info.plist

在我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。

感謝 彼得

+1

你有它啓用在項目設置? –

+0

@AndrewTetlaw你應該做出答案。 (也許還包括一些關於如何指定預處理器包含文件的細節) –

+0

好的我會爲那些想知道如何在plist文件中使用用戶定義的構建設置的用戶做這件事 –

回答

8

Info.plist中預處理器將讓你用你的Info.plist構建設置,不#define秒。因此,您可以將FB_APP_ID定義爲目標中的自定義用戶構建設置(併爲不同的方案提供覆蓋),然後該值將可用於Info.plist。但是,用戶構建設置不會暴露給您的代碼。也就是說,除非你與你的預處理定義渣土建立設置並添加看起來像

[email protected]\"$(FB_APP_ID)\" 

(需要反斜線拿到雙引號過去的shell調用)

如果您的應用程序ID的條目可以包含空格,那麼你就需要添加引號,讓過去的shell調用:

FB_APP_ID="@\"$(FB_APP_ID)\"" 

最後,你必須構建設置,看起來是這樣的:

Build settings

+0

,設置這樣的值,假設你做了一個名爲IS_FILE_SHARING_ENABLED的用戶定義構建設置: $ {IS_FILE_SHARING_ENABLED}

14

如果你進入生成設置可以設置Preprocess Info.plist FileYES,然後設置Info.plist Preprocessor Prefix File.h文件你放在項目與#define指令。

因此,例如,如果我將一個密鑰添加到我的Info.plist文件中:testKey的值爲TEST_VALUE。然後我把test.h在我的項目有:

#define TEST_VALUE hello_world 

然後我設置Preprocess Info.plist FileYESInfo.plist Preprocessor Prefix Filetest.h

該鍵的值,在檢索時是現在「程序hello_world」。如果您更改了宏的值,您可能會發現需要執行Product/Clean以查看更改,因爲XCode似乎緩存了編譯值。

+1

我無法再在Xcode 4.6中找到「Preprocess Info.plist文件」設置。任何人都知道如何修改它? – Jeremy

+1

沒關係,我選擇了「基本」級別,而不是「全部」。 – Jeremy

+0

我做產品清理,甚至刪除派生的數據,它仍然使用我的舊Facebook應用程序ID值。我必須重新構建並重新清理,併爲新更改刪除約20次緩存。 – Bot

6

要在plist中訪問:

創建一個新變量
enter image description here


定義它
enter image description here


通過設置預處理Info.plist文件到是使用它在你的信息的plist
enter image description here

+0

你如何在代碼中訪問它? –

+0

抱歉,無法直接訪問用戶定義的代碼。您需要添加到「預處理器宏」。你可以編寫一個預處理器宏來聲明用戶定義的值「FOO = $ {FOO}」。然後你可以在代碼中訪問FOO。 – hfossli

相關問題