Ios 添加新的生成规则以解析所有rtf文件

Ios 添加新的生成规则以解析所有rtf文件,ios,xcode,build,build-rules,Ios,Xcode,Build,Build Rules,Xcode包括一个灵活的构建规则系统。然而,该文件几乎不存在 我正在为iOS 5和iOS 6开发的一个项目包含一个rtf帮助文件。对于iOS 6,我可以将rtf文件转换为存档的NSAttributedString对象,然后在运行时加载该对象并将其直接显示到UITextView。对于iOS5,我不能(在核心文本中没有很多工作…),所以我只想要没有样式信息的文本 我编写了一个命令行工具RTFToData,它接受一个RTF文件作为输入,并生成一个.txt文件和一个.data文件(其中.data文件包含

Xcode包括一个灵活的构建规则系统。然而,该文件几乎不存在

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

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

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

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

我想设置我的项目,以便将.rtf文件添加为源文件(未选中“添加到目标文件”复选框)。我想让Xcode对每个文件运行我的RTFToData命令,指定输出文件应复制到目录中,然后添加到目标文件

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

我是一名makefile和unix脚本新手。我想我可以使用一个运行脚本构建规则来实现这一点,但我不清楚如何实现。我想我需要编写一个脚本来查找所有“.rtf”类型的文件,并将该文件列表导入到我的RTFToData调用中

有人能概述一下我需要在Xcode IDE中采取哪些步骤才能使我的项目顺利地处理这个问题吗

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

创建自定义生成阶段
  • 将.rtf文件添加到项目中,并确保它们已添加到目标中
  • 转到目标设置并选择“生成规则”选项卡:

  • 单击底部的“添加生成规则”按钮

  • 您希望基于以下内容配置规则:

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

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

    • 输入文件路径
      =
      /PATH/to/your/project/source/Test.rtf
    • INPUT\u FILE\u NAME
      =
      Test.rtf
    • INPUT\u FILE\u BASE
      =
      Test
    • 输入文件\u后缀
      =
      .rtf
    • INPUT\u FILE\u DIR
      =
      /path/to/your/project/source/
    您希望处理您的文件并将其发送到
    ${DERIVED_FILES_DIR}
    目录,使用您需要的任何新文件名或扩展名。在这种情况下,我们从输入中获取基本文件名并为其提供新的扩展名

    使用脚本中使用的相同输出文件填写“输出文件”部分。这将确保依赖关系系统正常工作,并且该文件将复制到您的.app。仅当输入已更改或.app中缺少输出文件时,才会运行脚本

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

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

  • 设置完毕后,添加到目标的.rtf文件将转换为脚本生成的任何输出文件。原始.rtf文件将不存在于final.app中

    在哪里放置脚本/程序 作为旁注,是否有一些目录可以放置命令行 工具,使其可用于当前版本的Xcode

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

    假设此文件系统布局:

    /path/to/project/project.xcodeproj
    /path/to/project/Tools/CommandLineTool
    
    在构建阶段/规则中使用此选项:

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

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

    感谢您的详细回答。一些问题:我正在使用的程序rtftodata是一个二进制命令行工具,而不是shell脚本。当我在构建中运行它时,我收到一个错误“无法执行二进制文件”。我的脚本可以运行我的命令行工具吗?其次,我希望.rtf文件是项目的源文件,但不包括在项目中。除非选中“添加到目标”,否则生成脚本根本不会触发.rtf文件上的复选框。如何将.rtf文件视为源文件,以便对其进行处理,并将输出文件添加到我的脚本中,而不是添加到.rtf本身?需要将其添加到目标中。处理后,原始的.rtf将不会添加到生成的应用程序中,只有“输出文件”您在生成规则中指定的。您应该能够像通常那样从命令行调用二进制程序。只需从生成规则内部调用它。确保对其使用chmod u+x。我将假设我无法对
    ${DERIVED_FILES_DIR}的实际值做出任何假设
    ?我想它会变成一个临时目录。