16

我有一个 iOS 应用程序将 SSO 与 Facebook 一起使用,作为让您的应用程序与 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。

谢谢彼得

4

3 回答 3

16

如果您进入构建设置,您可以设置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 似乎缓存了编译后的值。

于 2013-01-08T02:23:03.710 回答
9

要在 plist 中访问:

创建一个新变量
在此处输入图像描述


定义它
在此处输入图像描述


在您的信息列表中使用它
在此处输入图像描述

于 2014-07-11T12:16:26.097 回答
8

Info.plist 预处理器将允许您在 Info.plist 中使用构建设置,而不是#defines。因此,您可以FB_APP_ID在目标中定义为自定义用户构建设置(并为不同的方案提供覆盖),然后该值将可用于 Info.plist。但是,用户构建设置不会暴露给您的代码。也就是说,除非您使用 Preprocessor Definitions 构建设置并添加一个看起来像

FB_APP_ID=@\"$(FB_APP_ID)\"

(需要反斜杠才能使双引号通过 shell 调用)

如果您的应用 ID 可能包含空格,那么您需要添加引号以通过 shell 调用:

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

最后,您将拥有如下所示的构建设置:

构建设置

于 2013-01-08T01:20:50.237 回答