В рабочем пространстве Xcode 4, как я могу каскадировать настройки и конфигурации сборки для подпроектов
Обзор
Я использую статические библиотеки и рабочие области Xcode 4 для повышения модульности в разработке iOS, что является все более распространенным методом. Например, у меня может быть рабочее пространство, содержащее проект приложения, и проект библиотеки, например, 1:
![Workspace with App & Library]()
Тогда у вас будет схема построения таких, которые выглядели бы примерно так:
![Scheme]()
То, что я хотел бы сделать, это установить "сборку приложения" в "сборку библиотеки", который он инициирует, по крайней мере, несколькими способами:
-
Конфигурации карт App (например, Debug, AdHoc) для произвольных конфигураций библиотек
-
Прохождение через некоторое подмножество -D определяет и/или задает их для сборки библиотеки.
Я расскажу о каждом из них в своем разделе, но стоит сделать несколько пояснений.
Разъяснения
-
Я использую App/Library здесь как простой прокси для любых отношений Superproject/Subproject, которые у вас могут быть.
-
Из того, что я видел, встроенные подпроекты в стиле Xcode 3, похоже, не работают по-разному в Xcode 4, чем "peers" рабочей области. Я хотел бы ошибаться в этом.
-
Я знаю, что я мог бы сделать почти все с фазой сборки "Запускать сборки Script" и xcodebuild. Но я пытаюсь работать в системе здесь, где зависимости указаны в схеме, а в противном случае несколько слабо связаны.
-
Библиотека существует для использования не только в этом проекте, и поэтому вы не можете произвольно загружать ее с помощью мусора, специфичного для этой сборки приложения, или ссылаться на что-либо, особенно для приложения или рабочей области. В общем случае это исключает, включая статический .xcconfig из проекта App, как способ передачи информации о сборке из приложения в библиотеку.
-
Построение библиотеки за пределами рабочего пространства жертвует слишком много, а не вариант.
Отображение конфигурации
Как я понимаю, создание конкретной конфигурации приложения будет:
- Если в Библиотеке с тем же именем существует какая-либо конфигурация, она будет создавать библиотеку, используя это.
- В противном случае он будет создавать активную конфигурацию библиотеки, как указано в файле проекта библиотеки.
Насколько я знаю, не прибегая к вышеупомянутому взлому run-build- script, это степень контроля над конфигурациями сборки подпроектов. Пожалуйста, скажите мне разные.
В идеале я мог бы указать (в схеме, предположительно):
AppConfigA -> LibConfig1
AppConfigB -> LibConfig2
В то время как Debug, AdHoc и Release могут быть единственными конфигурациями, которые когда-либо используются, сложные проекты часто перерастают.
Определяет
Я еще не нашел способ передать -D из сборки приложения в библиотеку, не прибегая к xcodebuild, который может принимать, например, файл .xcconfig.
Настройки сборки приложения можно получить в фазе сборки библиотеки build-build- script. Тем не менее, это приводит к зависимости в библиотеке проекта приложения, которая по уважительной причине является verboten (см. Разъяснения). Но даже тогда я не нашел способ использовать эти настройки для непосредственного управления сборкой библиотеки (много 2).
Так сумасшедший, это просто возможно...
Одна из схем, которые я придумал, при написании:
-
Библиотека основывает конфигурацию сборки на пустом (фиктивном) LibraryExternals.xcconfig
файле внутри своего собственного проекта.
-
Очистка библиотеки удаляет этот файл. Отдельная сборка библиотеки создаст пустую, если она еще не существует.
-
Этот файл перезаписывается фазой App Build run-build- script и содержит все, что приложение хочет связывать со сборкой библиотеки.
Кажется сложным, но сейчас я что-то ищу. Я подталкиваю это к ответу, если ничего лучше не придет.
1 Показанные приложения - это Max OS X. Я нахожу приложения командной строки для более простых тестов. То же самое относится.
2 ср. Предварительная обработка Info.plist, о которой я узнал в ходе этого расследования.
Ответы
Ответ 1
Если вы измените структуру своего проекта, чтобы использовать один проект с несколькими целями, то каждый целевой набор настроек автоматически наследуется от проекта. Оттуда вы можете изменить те, которые хотите отличаться, или выбрать индивидуальные настройки и нажать клавишу удаления, чтобы установить его по умолчанию, указанному в проекте.