在iOS App info.plist中使用预处理器定义

use*_*608 13 xcode objective-c ios

我有一个使用SSO和Facebook的iOS应用程序,作为让你的应用程序与Facebook的SSO一起工作的一部分,你必须在info.plist中指定FacebookAppId和回调网址.我有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
Run Code Online (Sandbox Code Playgroud)

但是在我的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>
Run Code Online (Sandbox Code Playgroud)

甚至可以做我想做的事情.我已将项目设置为预处理info.plist.

谢谢彼得

And*_*law 14

如果您进入构建设置,您可以设置Preprocess Info.plist FileYES然后设置Info.plist Preprocessor Prefix File.h使用#define指令放置在项目中的文件.

因此,例如,如果我向我的Info.plist文件添加一个键:testKey使用值TEST_VALUE.然后我test.h在我的项目中放置:

#define TEST_VALUE hello_world
Run Code Online (Sandbox Code Playgroud)

然后我设置Preprocess Info.plist FileYESInfo.plist Preprocessor Prefix Filetest.h

检索时该键的值现为"hello_world".如果您经常更改宏的值,您可能会发现需要执行Product/Clean来查看更改,因为XCode似乎缓存了已编译的值.


Lil*_*ard 8

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

FB_APP_ID=@\"$(FB_APP_ID)\"
Run Code Online (Sandbox Code Playgroud)

(反斜杠需要通过shell调用获取双引号)

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

FB_APP_ID="@\"$(FB_APP_ID)\""
Run Code Online (Sandbox Code Playgroud)

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

构建设置


hfo*_*sli 7

要在plist中访问:

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


定义它
在此输入图像描述


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