Я принимал участие в проектах, которые делали это раньше, все с использованием следующего макета:
* app-workspace
* App.workspace
* library [submodule]
* Library.xcodeproj
* library sources
* app [submodule]
* App.xcodeproj
* app sources
Итак, рабочая область знает о проектах и схемах сборки. Git-репозиторий рабочей области знает о подмодулях, содержащих проекты.
На практике требуется много усилий, чтобы поддерживать определения подмодулей на верхнем уровне в актуальном состоянии, поэтому мы обычно заканчивали работой над основными ветвями подмодулей. Фиксация определенных версий в подмодулях рабочей области происходит при добавлении важных изменений: не так уж редко, если система CI строится из проекта верхнего уровня.
Конечно, для модульных тестов вы можете указать CI на каждый подмодуль независимо, только интеграционные тесты потребуют всего рабочего пространства. Важный шаг, который нужно помнить здесь - и который я иногда ошибаюсь - заключается в том, что вы должны обновлять определение подмодуля до определенного коммита после того, как вы выдвинули этот коммит в общий источник репозитория CI и разработчика. Если вы забудете об этом, вы рискуете сломать извлечение для других людей, когда родительский проект ссылается на коммит субмодуля, которого у них нет.
Место, где у вас могут возникнуть проблемы с взаимодействием с XCode, - это определение ваших схем сборки. Подход, который я недавно использовал, заключается в том, чтобы использовать редактор схем, чтобы определить схемы, которые я хочу использовать, как общие (вместо отдельных пользователей) и определенные в рабочей области на верхнем уровне, а не в проектах в подмодулях. , После того, как это сделано, и те определения схемы, переданные в git, отключите автоматическую генерацию схемы. Теперь все ваши разработчики и система CI согласны с тем, как создать ваш продукт.