В рабочем пространстве 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

Если вы измените структуру своего проекта, чтобы использовать один проект с несколькими целями, то каждый целевой набор настроек автоматически наследуется от проекта. Оттуда вы можете изменить те, которые хотите отличаться, или выбрать индивидуальные настройки и нажать клавишу удаления, чтобы установить его по умолчанию, указанному в проекте.