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来设置每个开发用于构建此项目的机器。
答案 0 :(得分:2)
转到目标设置,然后选择“构建规则”标签:
点击底部的“添加构建规则”按钮。
您希望根据以下内容配置规则:
为要匹配的文件(*.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将为您引用路径。
如果您的脚本生成多个输出文件,请为这些文件添加额外的条目。
一旦完成设置,添加到目标的.rtf文件将转换为脚本生成的任何输出文件。原始的.rtf文件将不存在于最终的.app。
中作为旁注,是否有一些目录可以放置命令行 工具,以便它们可用于当前版本的Xcode? p>
将您的工具放在包含.xcproject
的目录下的某个位置。然后从构建阶段/规则中使用${SRCROOT}
环境变量,该变量是包含项目的目录:
假设这个文件系统布局:
/path/to/project/project.xcodeproj
/path/to/project/Tools/CommandLineTool
在构建阶段/规则中使用它:
"${SRCROOT}/Tools/CommandLineTool" "${INPUT_FILE_PATH}" ...
请记住在任何地方都使用双引号!