Шаг 2 · Переносите зависимости по порядку
Локальный Mac → облачный Mac.
Порядок такой: данные, инструменты, CI. Для начала перенесите один проект, который можно проверить отдельно; не копируйте сразу весь каталог пользователя. Указанное ниже время — ориентир: на ход работ влияют размер репозитория, сеть и загрузка зависимостей.
01 / Данные
Сначала перенесите код и средства подписи
Клонируйте репозиторий из Git и переключитесь на тот же коммит, что и локально. Для приватного репозитория используйте ключ развёртывания с ограниченными правами или временный токен. Не добавляйте постоянные учётные данные в URL репозитория.
git clone <адрес-репозитория>
git rev-parse HEAD
rsync -av --progress ./Assets/ \
admin@<адрес-узла>:~/work/Assets/
Если нужна подпись, экспортируйте из локальной Связки ключей файл .p12 с закрытым ключом, зашифруйте его отдельным паролем при передаче и импортируйте в Связку ключей на узле. Профиль подготовки перенесите отдельно и проверьте срок действия сертификата, команду и целевую конфигурацию.
Для крупных ресурсов используйте инкрементальную синхронизацию rsync. При первом запуске не добавляйте параметры удаления: сначала проверьте целевой каталог, чтобы случайно не удалить созданные на узле артефакты.
02 / Инструменты
Восстановите версии, но не копируйте кэш
Экспортируйте Brewfile на локальном Mac, передайте его на узел и восстановите окружение. Сначала просмотрите список: удалите ненужные приложения и устаревшие зависимости, чтобы сократить объём первой загрузки.
brew bundle dump --file=Brewfile
brew bundle --file=Brewfile
xcodes list
xcodes install <нужная-версия>
Сверьте версии Xcode, Ruby и CocoaPods, необходимые проекту. При установке версии через xcodes соблюдайте условия лицензирования ПО и требования к доступу для загрузки. После установки проверьте выбранную версию командой xcodebuild -version — так вы убедитесь, какая версия выбрана фактически.
Если в проекте есть Gemfile, сначала выполните bundle exec pod install. Для SPM используйте файл блокировки из проекта, чтобы разрешить зависимости. Первую сборку считайте прогревом кэша, а не показателем скорости последующих сборок.
03 / Настройка CI
Сначала добейтесь успеха вручную, потом регистрируйте исполнитель
Сначала выполните сборку и подпись в интерактивном сеансе. Когда сборка из командной строки завершается созданием архива, зарегистрируйте self-hosted runner GitHub Actions или GitLab Runner. Так не придётся одновременно искать проблемы в инструментах и настройках планировщика.
bundle exec fastlane match development --readonly
bundle exec fastlane gym
Тип подписи match и нужный lane зависят от конфигурации проекта. Для CI используйте учётные данные с ограниченными правами, храните ключи в защищённых переменных или хранилище секретов и не записывайте пароли в скрипты.
Назначьте временному исполнителю отдельную метку и сначала разрешите запуск только из доверенных веток. Убедитесь, что учётная запись исполнителя имеет доступ к Связке ключей с ключами подписи и рабочему каталогу, а неинтерактивная сборка не ждёт ответа во всплывающем окне.
Условия успешного переноса:На узле можно создать и забрать архив для того же коммита, с той же версией Xcode и тем же файлом блокировки зависимостей. Одного успешного завершения установки зависимостей недостаточно, чтобы считать перенос среды завершённым.