添加新的构建规则以解析所有rtf文件

时间:2013-05-08 13:42:39

标签: ios xcode build build-rules

Xcode包含灵活的构建规则系统。但是文档几乎不存在。

我正在为iOS 5和iOS 6工作的项目包含一个rtf帮助文件。对于iOS 6,我可以将rtf文件转换为存档的NSAttributedString对象,然后在运行时加载并直接显示到UITextView。对于iOS 5,我不能(在Core Text中没有很多工作......)所以我只想要没有样式信息的文本。

我编写了一个命令行工具RTFToData,它将RTF文件作为输入并生成.txt文件和.data文件(其中.data文件包含我的项目知道如何使用的样式文本的版本。 )

以下是我的命令行工具的语法:

RTFToData [-o] source_path [destination_path]     -o(可选)覆盖现有文件     source_path(必需)源RTF文件的路径(必须具有扩展名“rtf”或“RTF”     destination_directory(可选。)如果未指定目标,则将输出文件写入源文件目录        如果指定,destination_directory必须存在。

我想设置我的项目,以便我可以添加.rtf文件作为源(没有选中“添加到目标”复选框。)我希望Xcode在每个文件上运行我的RTFToData命令,指定输出文件应该被复制到目录中,然后被添加到目标。

理想情况下,我希望构建过程了解源.rtf文件与已处理的.data和.txt文件之间的依赖关系。如果我触摸.rtf文件,我希望构建过程重新运行rtftodata命令。

我是一个makefile和unix脚本新手。我认为我可以使用运行脚本构建规则来执行此操作,但我不清楚如何。我想我需要编写一个脚本来查找“.rtf”类型的所有文件,将文件列表管道化为我的RTFToData调用。

有人可以概述我需要在Xcode IDE中采取的步骤,以使我的项目顺利处理吗?

作为旁注,是否有一些目录可以放置命令行工具,以便它们可用于当前版本的Xcode?到目前为止,我一直在/ Library / usr / bin中安装RTFToData命令,但我真的很喜欢将构建工具包含在项目中,或者至少,不必使用sudo来设置每个开发用于构建此项目的机器。

1 个答案:

答案 0 :(得分:2)

创建自定义构建阶段

  1. 将.rtf文件添加到项目中,并确保它们已添加到目标中。
  2. 转到目标设置,然后选择“构建规则”标签:

    enter image description here

  3. 点击底部的“添加构建规则”按钮。

    enter image description here

  4. 您希望根据以下内容配置规则:

    enter image description here

    为要匹配的文件(*.rtf)输入标准通配符glob。

    在脚本部分中,您可以使用许多环境变量。假设您的glob与输入文件Test.rtf匹配,则您可以访问这些变量:

    • INPUT_FILE_PATH = /path/to/your/project/source/Test.rtf
    • INPUT_FILE_NAME = Test.rtf
    • INPUT_FILE_BASE = Test
    • INPUT_FILE_SUFFIX = .rtf
    • INPUT_FILE_DIR = /path/to/your/project/source/

    您希望处理文件并将其发送到${DERIVED_FILES_DIR}目录,并使用您需要的任何新文件名或扩展名。在这种情况下,我们从输入中获取基本文件名并为其提供新的扩展名。

    使用您在脚本中使用的相同输出文件填写“输出文件”部分。这将确保依赖系统正常工作,并将文件复制到您的.app。只有在输入已更改或.app。

    中缺少输出文件时,才会运行该脚本

    请注意,“输出文件”不应包含双引号。 Xcode将为您引用路径。

    如果您的脚本生成多个输出文件,请为这些文件添加额外的条目。

  5. 一旦完成设置,添加到目标的.rtf文件将转换为脚本生成的任何输出文件。原始的.rtf文件将存在于最终的.app。

    放置脚本/程序的位置

      

    作为旁注,是否有一些目录可以放置命令行   工具,以便它们可用于当前版本的Xcode?

    将您的工具放在包含.xcproject的目录下的某个位置。然后从构建阶段/规则中使用${SRCROOT}环境变量,该变量是包含项目的目录:

    假设这个文件系统布局:

    /path/to/project/project.xcodeproj
    /path/to/project/Tools/CommandLineTool
    

    在构建阶段/规则中使用它:

    "${SRCROOT}/Tools/CommandLineTool" "${INPUT_FILE_PATH}" ...
    

    请记住在任何地方都使用双引号!