Xcode: как обрабатывать много разных целей / приложений на основе одного и того же исходного кода
Для одного из продуктов нашей компании нам нужно сгенерировать приложения для iOS с небольшими изменениями (разные логотипы, немного другие настройки в Info.plist и т. Д.); но в основном все они основаны на одном и том же исходном коде.
Теперь, когда мы начинаем набирать обороты, становится немного раздражающим иметь около 20-30 различных схем и целей в основном проекте XCode - плюс, это неприятно, когда коллеги изменяют его, потому что это имеет тенденцию ломать вещи время от времени.
К сожалению, я не очень знаком с внутренними внутренностями Xcode; но я уверен, что кто-то другой уже решил это раньше.
Некоторые идеи, которые пришли мне в голову:
- Есть отдельный проект Xcode и...
- ... импортировать "базовый код", используя Framework / Library.
- ... добавить "базовый код" в качестве проекта (Зависимости?)
Не уверен, что лучшая практика здесь; в идеале должно быть четкое разделение кода проекта и конфигурации целей приложения клиента. В идеале это должно было бы быть поддержано коллегами без риска случайного взлома базового кода.
Есть идеи / мысли / предложения?
1 ответ
Это зависит от варианта использования. Нужно ли выпускать (архивировать) цели для синхронизированного развертывания? Или эти клиентские настройки выпускаются независимо? Насколько велика команда разработчиков?
В любом случае есть только несколько вариантов.
Опция 1
Управляйте продуктами как отдельными целями. Это в основном то, что вы делаете сейчас. Вы можете настроить его так, чтобы создание одной цели создавало их все, чтобы уберечь себя от некоторой агонии. Основным недостатком здесь является то, что вы управляете данными изображений /plist отдельно.
Это способ, которым я обычно обращаюсь с этим. Настройки обычно бывают единичными, и вы можете указать другой предварительно скомпилированный заголовок, чтобы изменить некоторые функциональные различия.
Вариант 2
Управляйте продуктами как отдельными ветками в CVS. Это может быть немного головной болью, но лучше работает, если в базе кода работает большая команда. Держите функциональный код на одной ветке. Поддерживать независимую ветвь для каждого продукта. При необходимости объедините изменения из функциональной ветви в ветви продукта.
Вариант 3
Управляйте продуктами как отдельными подпроектами. Это очень похоже на вариант 1, поскольку вам по-прежнему необходимо поддерживать параметры отдельно, но преимущество заключается в том, что вы с меньшей вероятностью испортите другие продукты при внесении изменений в основной XML-файл для файлов проекта.
Факторы, которые следует учитывать, - это размер вашей команды разработчиков, а также существующий рабочий процесс команды.