2013-06-03 67 views
2

我有用户设置,我希望在设置中可用,但前提是它是调试版本,或者它可能是两个单独目标中的一个。iOS设置包只出现在调试版本中的项目

在设置包中,我拥有Root.plist中的项目,但是我希望它只在调试构建时才可见。

有什么办法可以在设置包中设置一些条件吗?

我知道我可以为两个不同的构建目标使用单独的设置捆绑包,但这需要我维护两个单独的设置捆绑包,而且看起来很麻烦。

任何想法?

回答

2

你可以有一切在它一个Settings.plist,然后添加一个生成步骤的目标,你不想显示其中一个设置。在该构建步骤中,使用PlistBuddy删除您不想要的设置。

这样做的好处是让您可以使用Xcode提供的优秀工具来编辑您的plist,同时保持DRY。

0

在你的应用程序委托中,读取plist并放入字典中。然后使用编译时标志进行DEBUG编译,这会打开一些添加或修改plist转向字典的代码。从此,不要直接访问plist,通过应用程序委托中的方法与字典进行接口。

编辑:编写一些命令行级别的软件,让你的标准plist,并基于构建配置,改变它,然后输出它作为plist,然后复制到您的应用程序包,作为构建阶段。您可以使用标准系统cli函数来完成此操作,或者如果您在自定义mac cli程序中执行此操作,则可以轻松构建它。

+0

我应该更具体一些 - 如果您正在构建一种方式,并且希望它在设备设置中显示,则希望设置不会出现在设备设置中。 – HalR

+0

正确 - 你不能动态更改plist,但是如果你首先将它读入一个可变对象,你可以根据有条件编译到你的应用中的代码以编程方式修改它:myAppPlist = [NSMutableDictionary dictionaryWithContentsOfFile:...];“显然这只会影响您的代码读取的值,而不会影响iOS。 –

0

据我所知,无法在设置包中添加条件语句(或者,对于这种情况,任何形式的代码)。您可以创建一个仅在调试模式下显示的应用内设置页面或类似的内容。

0

编辑您的模式以作为构建预先操作之一运行脚本。该脚本可以生成Root.plist并包含额外的设置或不适当的。虽然你可以使用你想要的任何语言生成脚本(Ruby,Tcl,Forth,...),但我只需要使用C预处理器。

具体来说,

  1. 创建一个文件,Root.plist.orig其中包括所有的常规设置。包含您的额外设置#ifdef DEBUG#endif

  2. 在模式中创建构建运行脚本预执行。该脚本应该由运行预处理器的shell命令组成。因此,像(我没有细节100%正确的):cpp -DDEBUG Root.plist.orig > Root.plist

相关问题