添加到项目捆绑包时映射资源

时间:2010-06-10 09:00:02

标签: iphone xcode scripting

当我用#defines映射所有图像文件名和xib名时,我有一个.h。例如,如果我有一个名为“buttonBackground.png”的图像,我将其映射到我的.h中

#define BUTTON_BACKGROUND_PNG_FILE   @"buttonBackground.png"

可以检测何时将资源添加到捆绑包并使用脚本创建对应的定义?

编辑:我的意思是,像Android上的R.java文件。

2 个答案:

答案 0 :(得分:6)

您可以通过在Copy Bundle Resources之后向目标添加Run Script构建阶段来实现此目的。该脚本将在bundle中查看(刚刚由构建过程的其余部分创建),并根据它在那里找到的资源生成头文件。

当没有任何新资源时,您希望避免重新生成标头,因为这会降低您的构建速度(因为每当触摸标头时,将重新编译依赖于该标头的每个.m文件)。快速近似:让您的脚本首先将project.pbxproj文件的修改时间与标题的修改时间进行比较,如果标题较新则退出。一种更好(但有些更复杂)的方法:生成一个临时文件,使用当前标头对其进行区分,并将标头替换为暂存文件,当且仅当它们不同时。

但老实说,这看起来好像没什么好处的工作,更不用说单片头一般都是个坏主意。您的文件名是否经常更改,您需要间接引用它们?换句话说,你试图用所有这些#defines来解决什么问题?

答案 1 :(得分:0)

xxd是管理嵌入式资源的命令行工具,但专门针对图像,您可以从网络剧本中获取页面,并在头文件中执行base64。关于这些策略有an article on Cocoanetics about Embedded Binary Resources

你也可以使用Bash或Rake来自动化你自己的构建脚本,或者类似@dwineman所说的那样,但所有那些差异/刮擦文件的东西可能最终都会成为一个脆弱的构建系统你没有时间修复错误,因为你需要构建实际的产品。保持简单,不要过度设计任何东西。我喜欢#defines和下一个人一样,但是一切都适度。