Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS设置捆绑包中的项目仅出现在调试版本中_Ios - Fatal编程技术网

iOS设置捆绑包中的项目仅出现在调试版本中

iOS设置捆绑包中的项目仅出现在调试版本中,ios,Ios,我有我想在设置中使用的用户设置,但只有当它是调试版本,或者可能是两个独立目标之一时才可用 在设置包中,我在Root.plist中有该项,但我希望它仅在调试生成时可见 有没有办法使设置包中的内容有条件 我知道我可以为两个不同的构建目标使用单独的设置包,但这需要我维护两个单独的设置包,这看起来相当混乱 有什么想法吗?在您的应用程序代理中,阅读plist并放入字典。然后对调试构建使用编译时标志,这将打开一些添加或修改plist转换字典的代码。从那时起,不要直接访问plist,通过app委托中的方法访问

我有我想在设置中使用的用户设置,但只有当它是调试版本,或者可能是两个独立目标之一时才可用

在设置包中,我在Root.plist中有该项,但我希望它仅在调试生成时可见

有没有办法使设置包中的内容有条件

我知道我可以为两个不同的构建目标使用单独的设置包,但这需要我维护两个单独的设置包,这看起来相当混乱


有什么想法吗?

在您的应用程序代理中,阅读plist并放入字典。然后对调试构建使用编译时标志,这将打开一些添加或修改plist转换字典的代码。从那时起,不要直接访问plist,通过app委托中的方法访问字典接口


编辑:编写一些命令行级软件以获取标准plist,并根据构建配置对其进行更改,然后将其输出回plist,然后作为构建阶段复制到应用程序包中。您可以使用标准的system cli函数来实现这一点,或者如果您在自定义mac cli程序中实现这一点,那么构造起来很简单。

据我所知,无法将条件(或任何形式的代码)放入设置包中。您可以创建一个只在调试模式或类似模式下显示的应用程序内设置页面。

编辑您的架构以将脚本作为构建前操作之一运行。脚本可以生成Root.plist和,并根据需要包括或不包括额外的设置。虽然您可以为生成器脚本使用任何您想要的语言(Ruby、Tcl、Forth等等),但我只会使用C预处理器

具体来说,

  • 创建一个文件Root.plist.orig,其中包括所有常规设置。在
    #ifdef DEBUG
    #endif

  • 在架构中创建生成运行脚本预操作。该脚本应该包含一个shell命令来运行预处理器。比如(我没有100%正确的细节):
    cpp-DDEBUG Root.plist.orig>Root.plist


  • 您可以拥有一个Settings.plist,其中包含所有内容,然后为目标添加一个构建步骤,在该步骤中您不想公开其中一个设置。在该构建步骤中,使用删除不需要的设置


    这样做的好处是,您可以使用Xcode提供的用于编辑plist的强大工具,同时保持干燥。

    我应该更具体一点——如果您正在以一种方式构建,我希望设置不会出现在设备设置中,如果您以另一种方式构建plist,它希望它出现在设备设置中。对-您不能动态更改plist,但如果您先将其读入可变对象,则可以基于有条件编译到应用程序中的代码以编程方式修改它:myAppPlist=[NSMutableDictionary Dictionary WithContentsOfFile:…];“显然,这只会影响代码读取的值,而不会影响iOS。