2013-05-23 5 views
2

У меня есть приложение iOS с двумя разными версиями, в основном одно из них опубликовано в App Store (онлайн-версия), а другое - для внутреннего распространения (автономная версия).GitHub: Каков наилучший способ управления различными версиями приложения?

Что я ищу - это лучший способ опубликовать мой код на GitHub, так что я могу легко обновлять обе проекты Xcode в будущем, потому что только часть кода отличается для двух версий.

Как я понимаю, ветви сделаны объединенными с «мастером», но в моем случае обе версии должны быть разделены, и для их объединения требуется только несколько изменений.

Я попытался создать вторую ветку для моего репозитория GitHub, но я не могу понять, является ли это самым простым способом сохранить оба проекта вместе, или было бы лучше создать два отдельных хранилища на GitHub?

Благодарим вас за отзыв!

ответ

1

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

Для решения этой проблемы мы предпочитаем использовать отдельные целевые конфигурации в XCode.

Самый простой способ создать новую версию приложения:

  • Дублировать текущую цель
  • переименовывать его, как «XXX в доме» вместо «XXX копии» (по желанию)
  • Изменить идентификатор связки должен отличаться от исходной цели
  • Переименуйте файл «XXX copy-Info.plist» на лучшее имя и измените ссылку на Info.plist из настроек сборки цели (необязательно)

Теперь вы можете изменить любую конфигурацию из панели конфигурации цели.

Чтобы определить, какая версия приложения работает, вы можете определить макросы в настройках сборки цели (например, FREE = 1), или вы можете проверить текущий идентификатор, имя приложения и т. Д. В своем коде, чтобы установить текущую версию.

typedef enum { 
    QWEAppStore, 
    QWEAppStoreFree, 
} QWEAppVersion; 

#ifdef FREE 
    #define QWECurrentVersion QWEAppStoreFree 
#else 
    #define QWECurrentVersion QWEAppStore 
#endif 

Затем использовать его в своих классах, как:

- (IBAction)buttonTapped:(id)sender 
{ 
    if (QWECurrentVersion == QWEAppStore) { 
     // Do something 
    } else { 
     // Do something else 
    } 
} 
+0

Спасибо за подробный ответ! Это определенно выглядит как лучшее решение. Однако моя автономная версия использует много дополнительных изображений и звуков, которые находятся в комплекте моего приложения. Должен ли я вручную добавлять и удалять эти дополнительные файлы при переключении между онлайн-версией и автономной версией или каким-либо образом я могу сделать папку ресурсов опциональной в зависимости от выбранного макроса? – NSpehler

+0

Вы можете выбрать, какой ресурс вы хотите добавить в целевую аудиторию из области ** Target Membership ** ресурса. Также вы можете управлять ими в разделе ** Сборка фаз **> ** Копирование ресурсов ** в конфигурации цели. – irmakcanozsut

+0

Это отличное решение, но одно примечание - я получаю предупреждения «Код никогда не будет выполнен», если я использую перечисление. Лучший способ проверить версию состоит в том, чтобы просто использовать '#ifdef FREE ... # endif' или независимо от вашего макроса – Cbas

0

Имея два git repo, было бы сложно управлять.

Типичный рабочий будет иметь 3 ветви

мастер AppStore внутренний

Когда вы вносите изменения кода, вам нужно будет нажать его как AppStore и внутренних ветвей.

Вот пример проект, который имеет много различных версий релиза все в один мерзавца репо

https://github.com/adaptivecomputing/torque

Смежные вопросы