【问题标题】:Using preprocessor definitions in iOS App info.plist在 iOS App info.plist 中使用预处理器定义
【发布时间】:2015-10-20 22:31:36
【问题描述】:

我有一个 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 文件设置为 Yes 来在项目设置中启用它?
  • @AndrewTetlaw 你应该回答这个问题。 (也许包括一些关于如何指定预处理器包含文件的细节?)

标签: objective-c ios xcode


【解决方案1】:

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

【讨论】:

  • 我在 Xcode 4.6 中找不到“预处理 Info.plist 文件”设置了。有人知道怎么修改吗?
  • 我对产品进行了清理,甚至删除了派生数据,它仍然使用我的旧 Facebook 应用程序 ID 值。我必须重建并重新清理和删除缓存大约 20 次以进行新更改。
【解决方案2】:

在 plist 中访问:

创建一个新变量


定义它


在您的信息列表中使用它

【讨论】:

  • 抱歉,无法直接访问代码中的用户定义。您需要添加到“预处理器宏”。您可以编写一个预处理器宏,该宏声明用户定义“FOO=${FOO}”的值。然后就可以在代码中访问FOO了。
【解决方案3】:

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

FB_APP_ID=@\"$(FB_APP_ID)\"

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

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

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

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

【讨论】:

  • 对于那些想知道如何在 plist 文件中使用用户定义的构建设置的人,请像这样设置值,假设您创建了一个名为 IS_FILE_SHARING_ENABLED 的用户定义的构建设置:${IS_FILE_SHARING_ENABLED}
猜你喜欢
  • 1970-01-01
  • 2021-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多