我很长时间都在努力解决这个问题 . 答案是使用ento的“外部目标”解决方案 . 他是为什么会出现这个问题以及我们如何在实践中使用它...
在编译plist之后,Xcode4构建步骤才会执行 . 当然,这很愚蠢,因为这意味着任何修改plist的预构建步骤都不会生效 . 但是如果你考虑一下,它们实际上会在NEXT上生效 Build . 这就是为什么有些人谈到了plist值的“缓存”,或者“我必须做2个版本才能使它工作” . 发生了什么是plist,然后你的脚本运行 . 下次构建时,plist使用修改后的文件构建,因此第二次构建 .
ento的解决方案是我发现实际做一个真正的预构建步骤的一种方法 . 不幸的是我还发现,如果没有干净的构建,它不会导致plist更新,我修复了它 . 以下是我们如何在plist中使用数据驱动的用户值:
添加一个指向python脚本并传递一些参数的外部构建系统项目
将用户定义的构建设置添加到构建中 . 这些是你传递给python的参数(更多关于为什么我们以后这样做)
python脚本读取一些输入JSON文件并构建一个plist预处理器头文件并触及主应用程序plist
主项目已打开"preprocess plist files"并指向此预处理器文件
在主应用程序plist文件上使用touch会导致主目标每次都生成plist . 我们将构建设置作为参数传递的原因是我们的命令行构建可以覆盖设置:
将用户定义的变量"foo"添加到预建项目中 .
在预构建中,您可以使用$(foo)将值传递给python脚本 .
在命令行中,您可以添加foo = test以传入新值 .
python脚本使用基本设置文件,并允许用户定义的设置文件覆盖默认值 . 你做了一个改变,并立即在plist中结束 . 我们只将它用于必须在plist中的设置 . 对于其他任何事情,这是浪费精力....生成一个json文件或类似的东西,并在运行时加载它:)
我希望这会有所帮助......这是一个艰难的日子 .