Как управлять кодом нескольких очень похожих проектов Xcode
Привет, сообщество Stackru,
Я взял на себя задачу "объединения" 4 мобильных приложений для iPhone, которые разделяют 95% кода и отличаются только на 5% (это несколько упрощает, но не говоря уже о). Каждое из приложений имеет свой огромный набор ресурсов (медиа-файлы).
После "объединения" 4-х приложений я буду добавлять новые функциональные возможности в приложения, в основном функциональные возможности, которыми будут делиться приложения.
Буду признателен за ваше мнение о том, как лучше всего управлять кодом этих приложений. Вот подход, который я использую в данный момент.
Я поддерживаю только один проект XCode, который включает в себя функциональность всех 4 приложений. Функциональность, которая не используется всеми приложениями, заключена в условие, например: if (appName == 'X')...
Каждое приложение имеет свой собственный файл info.plist, поэтому у меня есть 4 таких файла: infoX.plist, infoY.plist, ...
Прежде чем создавать приложение, необходимо сделать две вещи: в настройках сборки я указываю имя info.plist для использования. б. Я гарантирую, что только ресурсы приложения (медиа-файлы) находятся в проекте. Я удаляю ресурсы других приложений.
Поскольку приложения на 95% похожи по своему коду, наличие только "одного приложения для управления всеми" гарантирует, что при обновлении кода все приложения будут наслаждаться обновлением. Вы можете предположить, что приложения останутся очень похожими по своему коду.
Так как мультимедийные файлы приложений велики и многочисленны, я храню их в хранилище Git.
Как это все звучит?
Большое спасибо!
2 ответа
Есть лучшие способы:
А. Переместить в рамки
Это зависит от того, насколько общие являются общими частями приложений. Но вы должны подумать о том, чтобы поместить его части в отдельный проект, который является структурой. Вы можете связать свои 4 приложения с этой структурой. Но, конечно, не все пойдет туда.
Б. Иметь разные цели
Наверняка у вас должно быть 4 разных цели. XCode позволяет вам устанавливать параметры сборки для каждого параметра обычно для проекта или специально для цели. Кроме того, вы можете настроить фазы сборки (включая копирование медиафайлов) для каждой целевой базы. Таким образом, вам не нужно переименовывать или удалять и вставлять что-либо. Вы просто выбираете цель, которую хотите построить.
C. Дерево проекта
Xcode позволяет вам иметь подпроекты с общим кодом. Может быть, такие вещи, как общие "базовые" классы вашего приложения. Вы можете иметь разные проекты для каждого приложения в одной рабочей области, все с использованием подпроекта.
Вероятно, лучший способ - это комбинация, в зависимости от предмета. Однако я бы начал с Б. и, если нужно, добавил бы другие техники.
Я столкнулся с более или менее одинаковым случаем, и мы решили использовать один проект Xcode с несколькими целями. Таким образом, вы можете просто изменить цель перед нажатием кнопки сборки (или настроить конкретные сценарии сборки, меняющие цель). В нашем проекте у нас было несколько файлов с одинаковыми именами (в разных папках), и каждый из них был связан с другой целью. Например, у нас было три "Stylesheet.h/.m" с разными определениями UIColor и UIFont, которые хранились в разных папках, и каждое из них было связано с отдельной целью. То же самое для "Localizable.strings".