Какой лучший способ поменять содержимое Xcode для проектов, предназначенных для многих клиентов? - PullRequest
7 голосов
/ 18 октября 2011

У меня есть относительно большой проект Xcode, который производит одно приложение. Тем не менее, у меня есть много клиентов / клиентов, которым требуется глубокая настройка и брендинг указанного приложения. Эти конфигурации включают в себя различную графику, несколько разных интерфейсов и реализаций и, возможно, самое главное, файлы .xcconfig.

Мой проект Xcode имеет выделенную группу, которая указывает на папку настроек конкретного клиента на диске, поэтому, открыв проект Xcode и его сборку, вы получите сборку одного приложения с настройками текущего клиента. Чтобы переключиться на другого клиента, я изменяю, куда указывает эта группа на диске. (Я также изменяю и переключаю параметры xcconfig «На основе» в информационной панели проекта, чтобы перезагрузить полное наследование xcconfig; простое изменение группы, содержащей один или несколько файлов xcconfig, не перезагружает это!) + клиенты. Немного утомительно переключать эту папку каждый раз, когда вам нужно собрать приложение для другого клиента и убедиться, что xcconfig правильный, но он работает.

Сейчас я нахожусь в процессе автоматизации сборок через командную строку и сталкиваюсь с проблемами. Быстрое и грязное решение для указания вышеупомянутой группы XCode в другую папку настроек состояло в том, чтобы скопировать файл ProjectName.xcodeproj/project.pbxproj в ProjectName.xcodeproj/project-template.pbxproj и поместить заполнители внутри этого файла, которые можно найти и заменить на имя и путь к нужной папке настроек. , Затем временно перезапишите project.pbxproj с измененным project-template.pbxproj и соберите, чтобы получить правильное приложение.

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

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

Извините за многословность этого вопроса, но он немного сложен! Любые предложения будут с благодарностью!

1 Ответ

2 голосов
/ 18 октября 2011

Я думаю, вам лучше использовать функцию целей в XCode.Иметь один проект и ресурсы каждого клиентов в этом проекте.

Затем вы можете продублировать уже имеющуюся цель (щелкните правой кнопкой мыши по цели, выбрав файл проекта в Навигаторе проектов XCode).

Все ваши цели будут скомпилированы с одинаковым кодом,Вам просто нужно изменить ресурсы в Фазах сборки> Копировать ресурсы комплекта, чтобы создать разные приложения для каждой цели.Нет необходимости просматривать внутренние файлы Xcode.

Вы даже можете изменить код в своих исходных файлах, добавив макрос препроцессора в параметры сборки (что-то вроде FIRST_CLIENT=1), а затем найдите это определение в своем файле.с #if FIRST_CLIENT.

У меня есть такой проект, и он работает очень хорошо:

http://f.cl.ly/items/3G0b0P35261x3O263h14/Screen%20Shot%202011-10-18%20at%2013.55.55.PNG

...