Я тоже долго с этим боролся. Ответ заключается в использовании решения ento «Внешняя цель». ПОЧЕМУ эта проблема возникает и как мы ее используем на практике ...
Шаги сборки Xcode4 не выполняются, пока ПОСЛЕ составления списка. Конечно, это глупо, потому что это означает, что любые предварительные шаги, которые изменяют список, не вступят в силу. Но если вы думаете об этом, они действительно вступают в силу ... на следующей сборке. Вот почему некоторые люди говорили о «кэшировании» значений plist или «мне нужно сделать 2 сборки, чтобы это работало». Что произойдет, если plist будет создан, то ваш скрипт будет запущен. В следующий раз, когда вы соберетесь, plist будет собираться с использованием ваших измененных файлов, а значит, и второй сборки.
Решение ento - единственный способ сделать настоящий шаг перед сборкой. К сожалению, я также обнаружил, что это не приводит к обновлению plist без чистой сборки, и я исправил это. Вот как у нас есть управляемые данными пользовательские значения в списке:
- Добавить проект внешней системы сборки, который указывает на скрипт Python и передает некоторые аргументы
- Добавление пользовательских настроек сборки в сборку. Это аргументы, которые вы передаете Python (подробнее о том, почему мы делаем это позже)
- Скрипт python считывает некоторые входные файлы JSON и создает заголовочный файл препроцессора plist И касается основного списка приложений
- В основном проекте включены «файлы препроцессной обработки», и он указывает на этот файл препроцессора
Использование прикосновения к основному файлу списка приложений приводит к тому, что основная цель генерирует список каждый раз. Причина, по которой мы передаем настройки сборки в качестве параметров, заключается в том, что наша сборка из командной строки может переопределить настройки:
- Добавить пользовательскую переменную "foo" в проект предварительной сборки.
- В вашей предварительной сборке вы можете использовать $ (foo) для передачи значения в скрипт python.
- В командной строке вы можете добавить foo = test, чтобы передать новое значение.
Скрипт python использует файлы базовых настроек и позволяет пользовательским файлам настроек переопределять значения по умолчанию. Вы вносите изменения, и они сразу же попадают в список. Мы используем это только для настроек, которые ДОЛЖНЫ быть в списке. Во всем остальном это пустая трата усилий ... вместо этого создайте файл json или что-то подобное и загрузите его во время выполнения:)
Надеюсь, это поможет ... это была пара трудных дней, чтобы понять это.