Что я сделал:
У меня есть script, который
- Прочитайте некоторые файлы конфигурации, чтобы генерировать фрагменты кода
- Найдите соответствующие исходные файлы Objective-C и
- Замените некоторые части исходного кода на сгенерированный код на шаге 1.
и Makefile, который имеет специальный файл timestamp в качестве целевого объекта и файлы конфигурации в качестве целевых источников:
SRC = $(shell find ../config -iname "*.txt")
STAMP = $(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME).stamp
$(STAMP): $(SRC)
python inject.py
touch $(STAMP)
Я добавил этот Makefile как "Запустите script этап сборки" поверх стека фаз сборки для целевой цели проекта.
Что произошло:
Фаза сборки script была запущена перед компиляцией источника.
Однако, поскольку script изменяет исходный код во время его выполнения, мне нужно было построить дважды, чтобы получить самую последнюю версию продукта сборки. Вот что я себе представляю:
- 1-й прогон: Xcode собирает информацию о зависимостях --- > без изменений
- 1-й запуск: Xcode запускает "Запуск script Фаза сборки" --- > источник изменяется за Xcode назад
- 1-й запуск: Xcode завершает сборку, не думая, что ничего не нужно обновлять.
- 2-й запуск: Xcode собирает информацию о зависимостях --- > источник изменился, требуется перестроить!
- 2-й запуск: запуск Xcode Запуск script Фаза сборки "--- > все обновлено
- 2-й запуск: Xcode переходит к компиляции
После чтения документации Xcode на этапах сборки я попытался добавить исходный файл, который, как известно, обновляется каждый раз при запуске script как вывод "Run script Build Phases", но ничего не изменилось. Поскольку количество файлов конфигурации может меняться в моем проекте, я не хочу указывать каждый файл ввода и вывода.
Вопрос:
Как сделать Xcode осведомленным об изменениях исходного файла, сделанных во время "Запускать script Фаза сборки"?
Edit:
- Добавил, что я разместил фазу сборки script до других фаз сборки