Правильная настройка проекта XCode iOS? - PullRequest
0 голосов
/ 09 марта 2012

Я просто хотел бы узнать у некоторых более опытных разработчиков, какой должна быть правильная настройка для следующей ситуации.

Мы создаем приложения для iOS из App Store.Базовый код должен быть одинаковым для разных приложений, так как функциональность одинакова.Тем не менее, каждый из них должен получать различную информацию о прекомпиляторе (что, как я знаю, легко с помощью файла plist, поэтому проблем нет).Теперь каждое из приложений должно иметь разные ресурсы.Изображения, звуки и т. Д. И т. Д. (В настоящее время у меня есть все ресурсы в разных папках с одинаковыми именами, поэтому я могу просто вставить их в любое время, и приложение изменится, но, по меньшей мере, кажется грязным).

Должен ли я создать начальную версию, затем создать новые цели и скопировать все заново?Или мы должны дублировать цель?Как тогда указать разные папки ресурсов?

Спасибо


@ j_mcnally

Вы предлагаете следующее:

CORE_PROJECT
 |
 |-- APP 1 PROJECT
 |    |-- target -> free
 |    |-- target -> paid
 |
 |-- APP 2 PROJECT
 |    |-- target -> free
 |    |-- target -> paid
 ...

итогда у проекта CORE просто не должно быть никаких целей?Просто общие источники?Кажется логичным для меня.Любые другие комментарии?

Ответы [ 2 ]

2 голосов
/ 09 марта 2012

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

Вместо этого я пытаюсь автоматизировать весь процесс и по возможности избегать создания дублирующих конфигураций. Я бы добавил фазу сборки сценария запуска в качестве первого шага в процессе сборки, который перед установкой собирает ссылки или копирует набор ресурсов, соответствующих текущему приложению, в положение. Таким образом, вы можете позволить переменной среды выбирать, какой набор ресурсов используется приложением. Разработчики должны иметь возможность добавлять неиспользуемые схемы в свою локальную рабочую область, если им нужен удобный способ устанавливать и менять значения этих переменных среды при сборке из xcode.

Я обнаружил, что это очень хорошо работает для небольших изменений конфигурации, таких как переключение приложения для взаимодействия с бэкэнд-системами разработки / подготовки / производства, и я упустил тот же уровень согласованности при работе над большим проектом, в котором изложено создавать несколько приложений, основанных только на разных наборах ресурсов, но быстро расходящихся в несовместимые системы, использующие единую кодовую базу.

Теперь, если вы считаете, что существует реальная необходимость добавить уникальное поведение к этим различным приложениям, я предлагаю создать общую цель построения статической библиотеки для общего кода, которая может быть включена целями сборки приложения для каждого приложения. Разделяйте весь кластер как рабочее пространство, и разработчики могут переключать приложения, просто выбирая соответствующую схему. Это должно поддерживать четкое разделение между общим и специфичным для приложения кодом без дополнительных накладных расходов. По мере роста и стабилизации приложений вы, возможно, захотите перейти в несколько репозиториев с проектом статической библиотеки, что является общей зависимостью других. Это приведет к затратам на работу как с приложением, так и с разделяемой библиотекой, но это может быть желательно, если вы должны быть осторожны при внесении изменений в эту базу общего кода. Несколько репозиториев также позволят каждому приложению блокировать определенные ревизии общих библиотек и контролировать, когда они принимают новые изменения, в зависимости от вашего процесса, который может рассматриваться как хороший или плохой.

1 голос
/ 09 марта 2012

Вы можете встроить проект в проект. так что вы могли бы иметь основной проект, а затем встроить его в свой более конкретный проект. таким образом вы сможете ссылаться на один и тот же код ядра, но создавать разные цели.

...