Ios 添加新的生成规则以解析所有rtf文件
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用于生成此项目。创建自定义生成阶段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文件包含
*.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为您引用
如果您的脚本生成多个输出文件,请为这些文件添加额外的条目.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}的实际值做出任何假设
?我想它会变成一个临时目录。