我有一个使用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
然而,在我的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。
由于 彼得
答案 0 :(得分:14)
如果您进入构建设置,则可以将Preprocess Info.plist File
设置为YES
,然后将Info.plist Preprocessor Prefix File
设置为.h
文件,并将其#define
放入项目中{{1}指令。
例如,如果我向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似乎缓存了已编译的值。
答案 1 :(得分:8)
Info.plist预处理器将允许您在Info.plist中使用构建设置,而不是#define
。因此,您可以将FB_APP_ID
定义为目标中的自定义用户构建设置(并为不同的方案提供覆盖),然后此值将可供Info.plist使用。但是,用户构建设置不会暴露给您的代码。也就是说,除非你弄乱你的预处理器定义构建设置并添加一个看起来像
FB_APP_ID=@\"$(FB_APP_ID)\"
(需要使用反斜杠来获取经过shell调用的双引号)
如果您的应用ID可能包含空格,那么您需要添加引号以通过shell调用:
FB_APP_ID="@\"$(FB_APP_ID)\""
最后,您将拥有如下所示的构建设置:
答案 2 :(得分:6)
要在plist中访问:
创建新变量
定义
在您的信息播放器中使用