Добавление нового правила сборки для разбора всех файлов RTF

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 (необязательно.) Записывает выходные файлы в каталог исходного файла, если директива назначения не указана.

Я хочу настроить свой проект так, чтобы я мог добавлять файлы.rtf в качестве источников (с флажком "добавить к цели" НЕ отмечен). Я хочу, чтобы Xcode запускал мою команду RTFToData для каждого файла, указывая, что выходные файлы должны быть скопированы в каталог, а затем добавлен к цели.

В идеале я хотел бы, чтобы процесс сборки знал о зависимостях между моими исходными файлами.rtf и обработанными файлами.data и.txt. Если я коснусь файла.rtf, я бы хотел, чтобы процесс сборки перезапустил команду rtftodata.

Я - новичок в makefile и unix-скриптах. Я думаю, что могу использовать правило сборки сценария запуска, которое будет делать это, но я не знаю, как это сделать. Я предполагаю, что мне нужно написать скрипт, который находит все файлы типа ".rtf", передает этот список файлов в вызов моей RTFToData.

Может кто-нибудь описать шаги, которые мне нужно предпринять в среде разработки Xcode, чтобы мой проект справился с этим плавно?

Как примечание, есть ли каталог, куда вы можете поместить инструменты командной строки, чтобы они были доступны для текущей версии XCode? До сих пор я устанавливал команду RTFToData в /Library/usr/bin, но мне бы очень хотелось, чтобы инструмент сборки был включен в проект, или, по крайней мере, не нужно было использовать sudo для настройки каждой разработки. машина, которая используется для создания этого проекта.

1 ответ

Создать пользовательский этап сборки

  1. Добавьте файлы.rtf в ваш проект и убедитесь, что они добавлены в вашу цель.
  2. Перейдите к настройкам цели и выберите вкладку "Правила сборки":

    введите описание изображения здесь

  3. Нажмите кнопку "Добавить правило сборки" внизу.

    введите описание изображения здесь

  4. Вы хотите настроить свое правило на основе чего-то вроде этого:

    введите описание изображения здесь

    Введите стандартный подстановочный знак для файлов, которые вы хотите сопоставить (*.rtf).

    Внутри раздела скрипта вы можете использовать несколько переменных среды. Предполагая, что ваш шарик соответствует входному файлу 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?

Поместите ваши инструменты где-нибудь ниже каталога, который содержит ваши .xcproject, Затем с вашей фазы сборки / правил используйте ${SRCROOT} переменная окружения, которая является каталогом, содержащим ваш проект:

Предполагая это расположение файловой системы:

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

Используйте это на этапе / правилах сборки:

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

Не забывайте использовать двойные кавычки везде, где вы можете!

Другие вопросы по тегам