代码之家  ›  专栏  ›  技术社区  ›  emenegro

添加到项目包时映射资源

  •  2
  • emenegro  · 技术社区  · 15 年前

    当我用定义映射所有图像文件名和XIB名时,我有一个.h。例如,如果我有一个名为“buttonbackground.png”的图像,我会在.h中将其映射为

    #define BUTTON_BACKGROUND_PNG_FILE   @"buttonBackground.png"
    

    是否可以检测何时将资源添加到包中并创建与脚本相对应的定义?

    编辑:我是说,有点像 R.java Android上的文件。

    2 回复  |  直到 14 年前
        1
  •  6
  •   dwineman    14 年前

    您可以通过在复制捆绑资源之后向目标添加一个运行脚本构建阶段来实现这一点。该脚本将查看包内部(它刚刚由构建过程的其余部分新创建),并根据在包中找到的资源生成头文件。

    当没有任何新资源时,您希望避免重新生成头文件,因为这样会减慢构建的速度(因为依赖于该头文件的每个.m文件都将在触摸头文件时重新编译)。一个快速的近似值:让您的脚本从比较project.pbxproj文件和头文件的修改时间开始,如果头文件更新,则退出。一种更好(但更复杂)的方法:生成一个草稿文件,将其与当前的头文件进行比较,并且仅当它们不同时才将头文件替换为草稿文件。

    但是,老实说,这似乎是一个没有多大好处的工作,更不用说整体头是一个坏主意。您的文件名是否经常更改,以至于需要间接引用它们?换句话说,你试图用这些定义来解决什么问题?

        2
  •  0
  •   slf    14 年前

    xxd 是用于管理嵌入资源的命令行工具,但具体来说,对于图像,您可以从Web剧本中获取一个页面,并在头文件中执行base64。有 an article on Cocoanetics about Embedded Binary Resources 关于这些战术。

    您也可以使用bash或rake或类似的工具(当然,如@dwineman)来自动生成脚本,但所有这些不同/草稿文件的东西最终可能只是一个脆弱的构建系统,其中充满了您没有时间修复的错误,因为您需要构建实际的产品。简单点,不要过度设计任何东西。我喜欢下一个定义,但一切都要适度。