我有我希望在设置中可用的用户设置,但前提是它是调试版本,或者它可能是两个单独的目标之一。
在设置包中,我在 Root.plist 中有该项目,但我希望它仅在它是调试版本时才可见。
有什么方法可以在设置包中设置条件吗?
我知道我可以为两个不同的构建目标使用单独的设置包,但这需要我维护两个单独的设置包,这看起来很混乱。
有任何想法吗?
我有我希望在设置中可用的用户设置,但前提是它是调试版本,或者它可能是两个单独的目标之一。
在设置包中,我在 Root.plist 中有该项目,但我希望它仅在它是调试版本时才可见。
有什么方法可以在设置包中设置条件吗?
我知道我可以为两个不同的构建目标使用单独的设置包,但这需要我维护两个单独的设置包,这看起来很混乱。
有任何想法吗?
您可以拥有一个包含所有内容的 Settings.plist,然后为您不想公开其中一个设置的目标添加一个构建步骤。在该构建步骤中,使用PlistBuddy删除您不想要的设置。
这样做的好处是让您可以使用 Xcode 提供的强大工具来编辑您的 plist,同时保持 DRY。
在您的应用程序委托中,阅读 plist 并放入字典。然后为 DEBUG 构建使用编译时间标志,这会打开一些添加或修改 plist 转换字典的代码。从那时起不要直接访问 plist,通过应用程序委托中的方法与字典接口。
编辑:编写一些命令行级别的软件来获取您的标准 plist,并根据构建配置对其进行更改,然后将其作为 plist 输出,然后将其复制到您的应用程序包中,作为构建阶段。您可以使用标准的系统 cli 函数来执行此操作,或者如果您在自定义 mac cli 程序中执行此操作,则构建起来很简单。
据我所知,没有办法将条件(或者,就此而言,任何形式的代码)放在设置包中。您可以创建一个仅在调试模式或类似模式下显示的应用内设置页面。
编辑您的架构以将脚本作为构建预操作之一运行。该脚本可以生成 Root.plist 并酌情包含或不包含额外设置。尽管您可以为生成器脚本使用任何您想要的语言(Ruby、Tcl、Forth、...),但我只会使用 C 预处理器。
具体来说,
创建一个包含所有常规设置的文件 Root.plist.orig。将您的额外设置包含在#ifdef DEBUG
和#endif
在您的架构中创建构建运行脚本预操作。该脚本应包含一个运行预处理器的 shell 命令。所以像(我没有100%正确的细节): cpp -DDEBUG Root.plist.orig > Root.plist