使用Xcode的预处理来设置info.plist键和值

时间:2018-08-07 01:09:19

标签: ios xcode

我正在尝试根据构建配置有条件地启用启动故事板的方法。

我已经设置了所有xcconfig和相关的构建配置,我已经配置了INFOPLIST_PREPROCESS=YES并正确格式化了INFOPLIST_PREPROCESSOR_DEFINITIONS

该应用程序按预期运行。例如,我的应用程序的info.plist设置可以达到预期的效果:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        … various plist settings

        #if USE_LAUNCH_STORYBOARD
        <key>UILaunchStoryboardName</key>
        <string>Launch</string>
        #endif
    </dict>
</plist>

将USE_LAUNCH_STORYBOARD设置为YESNO将打开或关闭启动情节提要,退回到预先配置的启动映像。

但是,这不是有效的XML格式,有两件事发生了。首先,Xcode不会将info.plist作为属性列表打开,而只会作为源代码打开。其次,测试不会启动。在编译开始之前会引发错误“无法确定[测试目标]测试主机的捆绑包标识符”。

有人成功使用info.plist预处理来配置整个键/值对吗?我有一个骇人听闻的解决方案,可以将#if USE_LAUNCH_STORYBOARD / #endif放在一些一次性<string>标记中以创建有效的XML格式,但是出于某种原因,#if无法处理USE_LAUNCH_STORYBOARD很有价值,并且总是以故事板启动。我已经尝试过在各种化身中使用CDATA包装器,但是没有运气。

1 个答案:

答案 0 :(得分:0)

我最终要做的事情很简单。对于每个客户项目,我创建了一个名为LaunchScreen的组,以与客户相对应。我为目标中的每个客户包括了它及其所有资源。接下来,由于每个客户端都有自己的info.plist,所以我通过在构建设置中进行设置来指向这些特定的info.plist。由于每个plist文件都引用了一个专门命名的启动屏幕,因此它可以正常工作。我发现,您必须将启动屏幕中使用的所有资产都放入组中,并将其添加到目标中。此外,矢量pdf文件似乎无法正常工作。