Подключение · настройка · диагностика

Сначала найдите причину, затем продолжайте сборку

Здесь собраны инструкции по работе с облачным Mac. Если подключаетесь впервые, начните с четырёх карточек ниже. Если проблема возникла на уже работающем экземпляре, найдите описание симптома или сразу перейдите к диагностике.

После первой передачи

Сначала проверьте подключение и права доступа

MacFTP предоставляет выделенный физический компьютер на Apple Silicon с macOS, а не виртуальную машину. В инструкциях ниже используйте фактические IP-адрес, имя пользователя и данные подключения из сведений об экземпляре в панели управления. Не используйте номер заказа вместо имени пользователя.

Вход по SSH

Откройте локальный терминал и замените имя пользователя, IP-адрес и порт в команде подключения значениями из сведений об экземпляре. При первом подключении проверьте отпечаток хоста и только после этого подтвердите доверие.

ssh -p PORT USER@NODE_IP

Определите тип ошибки: при тайм-ауте сначала проверьте сеть; при Connection refused — порт и состояние экземпляра; при Permission denied — имя пользователя и способ аутентификации. Не пытайтесь без конца угадывать пароль.

VNC / общий экран

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

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

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

Пароль и ключи

После первого входа выполните команду passwd для смены пароля текущего пользователя. Создайте SSH-ключ локально и добавьте на удалённый компьютер только открытый ключ в файл ~/.ssh/authorized_keys. Закрытый ключ храните локально.

~/.ssh Установите права доступа к каталогу 700, к файлу authorized_keys — 600. Не закрывая текущую сессию, откройте ещё один терминал и проверьте вход по ключу.

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

Xcode и инструменты командной строки

Сначала выполните xcode-select -p и xcodebuild -version, чтобы проверить текущую среду. Если нужны действия через графический интерфейс, подключитесь удалённо и проверьте Xcode в папке Applications.

Если нужны только инструменты командной строки, выполните xcode-select --install. Для архивации iOS-приложения всё равно нужна полная версия Xcode. После установки Xcode сначала запустите его и подготовьте необходимые компоненты, а затем подключайте CI.

При наличии нескольких версий переключайтесь на фактический каталог нужной версии. Простого переименования приложения недостаточно, если Runner продолжает использовать старый каталог разработчика.

С локального компьютера в облако

Три этапа переноса — три контрольные точки

Сначала запустите разовую сборку одного и того же коммита, затем настройте автоматический запуск. Указанное время — ориентир для планирования, а не срок выполнения: фактическая продолжительность зависит от размера репозитория, сети, загрузки зависимостей и подготовки подписи.

01 / Данные

Синхронизируйте исходный код, но не кеш сборки

Заложите 15–45 минут; для репозиториев с крупными ресурсами потребуется больше времени.

В первую очередь клонируйте из системы контроля версий нужный коммит. Если нужно перенести ещё не зафиксированные файлы, используйте SFTP или rsync. Исключите DerivedData, каталог build проекта и локальные журналы, чтобы не переносить устаревшие пути и кеш на новую машину.

Сначала проверьте список файлов с помощью dry-run, затем запустите синхронизацию. Вместо USER и NODE_IP укажите значения, предоставленные для экземпляра. Для пользовательского порта SSH нужна дополнительная настройка.

rsync -av --dry-run \
  --exclude='DerivedData/' \
  --exclude='build/' \
  ./ USER@NODE_IP:~/project/
git rev-parse HEAD
git status --short

Готово, если: коммиты на обеих сторонах совпадают, все ресурсы на месте, конфиденциальные настройки не попали в репозиторий кода.

02 / Инструменты

Восстановите зависимости и среду подписи

Заложите 30–90 минут; при первой загрузке может потребоваться больше времени.

Запишите версии локальных Xcode, SDK, Homebrew и зависимостей скриптов. Сначала проверьте, установлен ли Homebrew, командой brew --version . Если в проекте есть Brewfile, восстановите зависимости по нему.

Передайте p12 и профили подготовки для подписи по зашифрованному соединению. Импортируйте сертификат в отдельную связку ключей, а профиль поместите в каталог пользователя сборки. Не записывайте пароли в репозиторий или журнал сборки.

brew --version
xcodebuild -version
xcodebuild -showsdks
security find-identity -v -p codesigning

Готово, если: SDK соответствует требованиям проекта, сертификат для подписи действителен, ручная архивация завершается без ошибок.

03 / Интеграция CI

Зарегистрируйте Runner, затем включите автоматический запуск

Заложите 20–60 минут без учёта времени на тестирование проекта.

Установите GitHub Actions self-hosted Runner или GitLab Runner по инструкции регистрации, сформированной вашей платформой для работы с кодом. Токен регистрации используйте только при настройке; не храните пароль от машины в рабочем процессе.

Проверьте метки self-hosted, macOS и ARM64 . Сначала вручную запустите сборку фиксированного коммита и проверьте рабочий каталог, путь к артефактам и права подписи. Только после этого включайте автоматическую сборку веток.

uname -m
sw_vers -productVersion
xcode-select -p
git rev-parse HEAD

Готово, если: Runner подключён, выбран нужный коммит, архив сборки можно получить, а в журнале нет учётных данных.

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

Выполняйте по шагам

Полезные команды: сначала проверьте условия, затем копируйте

Названия каталогов и файлов в примерах команд условны: перед запуском подставьте фактические пути на машине. Для команд с sudo нужны права администратора. Не вставляйте команды с паролями в общедоступные журналы.

Выбор каталога разработчика Xcode

Этот пример подходит, если уже существует /Applications/Xcode.app . При нескольких версиях сначала проверьте путь к приложению, а после переключения — версию и SDK. Если другую версию нужно использовать только для текущей задачи, задайте в ней переменную DEVELOPER_DIR.

Переключение и проверка
sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
xcode-select -p
xcodebuild -version
xcodebuild -showsdks

Импорт p12 в связку ключей для сборки

Сначала создайте отдельную связку ключей с именем build.keychain-db и разблокируйте её в пользовательской сессии, из которой запускается задача. При импорте введите пароль p12 по запросу системы. Наличие сертификата ещё не означает, что у CI есть необходимые права на доступ к закрытому ключу.

Импорт и проверка идентификатора
security import ./signing.p12 \
  -k "$HOME/Library/Keychains/build.keychain-db" \
  -T /usr/bin/codesign
security find-identity -v -p codesigning \
  "$HOME/Library/Keychains/build.keychain-db"

Управление Runner через launchd

Инструкции ниже подходят для каталога уже зарегистрированного GitHub Actions Runner, в котором есть скрипт svc.sh . Скрипт устанавливает и запускает службу, которой управляет launchd. Для GitLab Runner используйте собственные команды управления службой — этот скрипт для него не подходит.

Выполните в каталоге Runner
./svc.sh install
./svc.sh start
./svc.sh status
launchctl list | grep -i runner

Наличие задачи в launchd означает только то, что служба зарегистрирована. Вернитесь на платформу для работы с кодом, убедитесь, что Runner в сети, и запустите пробную сборку. Для задач, которым нужны графический интерфейс или доступ к связке ключей, также проверьте состояние пользовательской сессии.

Заказ и срок аренды

Проверяйте дату окончания аренды отдельно от статуса оплаты

Услуга оплачивается заранее за день, неделю, месяц или квартал — одним платежом за выбранный срок аренды. Состояния учётной записи, платежа и экземпляра различаются. При обращении укажите и номер заказа, и номер экземпляра.

Как продлить аренду и убедиться, что данные сохранятся?

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

Придёт ли напоминание об окончании аренды и какой срок считать актуальным?

Ориентируйтесь на дату окончания заказа в панели управления и проверьте указанный там часовой пояс. Убедитесь, что адрес электронной почты в учётной записи доступен, и проверьте входящие и спам. Не полагайтесь только на получение письма при проверке срока аренды. Рекомендуем настроить собственное напоминание в календаре команды и до окончания аренды продлить её либо перенести код, сертификаты и артефакты сборки.

Какие способы оплаты и валюты доступны и как проверить транзакцию?

Поддерживаются только USDT-TRC20 и Visa / Mastercard / Amex (через Stripe). Все платежи проводятся в долларах США (USD); доступные шлюзы отображаются в ответе серверного интерфейса. При оплате в блокчейне проверьте сеть, сумму и данные на странице оплаты. При оплате картой ориентируйтесь на результат, отображаемый в заказе. Если возникла проблема, укажите номер заказа или хеш транзакции; не отправляйте полный номер карты, код подтверждения или закрытый ключ кошелька.

Куда обращаться по вопросам оплаты, возврата и квитанций?

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

Сначала сохраните данные о проблеме

Самостоятельная диагностика: от локальной проблемы к общесистемной

Сначала определите, затронут ли один клиент, отдельная сессия или весь узел. Сохраните исходное сообщение об ошибке и время её возникновения. Выполняйте действия по одному. Не меняйте одновременно сеть, пароль и настройки перезапуска — так будет сложнее отследить причину.

Сеть и адрес подключения

Сверьте IP-адрес, порт и имя пользователя со сведениями об экземпляре. Попробуйте подключиться через другую локальную сеть; проверьте локальный прокси, брандмауэр и правила исходящего трафика в вашей организации. Отсутствие ответа на ICMP само по себе не доказывает, что SSH недоступен: проверьте подключение к нужному порту.

ssh -vv -o ConnectTimeout=10 -p PORT USER@NODE_IP

Запишите результат: тайм-аут, отказ в подключении или ошибка аутентификации. Перед отправкой отладочного журнала удалите локальное имя пользователя, конфиденциальные пути и данные аутентификации.

Диск и кеш сборки

Сначала выполните команду df -h / и проверьте свободное место. Затем выполните du -sh ~/Library/Developer/Xcode/DerivedData для проверки размера кеша. Перед очисткой остановите связанные сборки и удаляйте файлы выборочно, чтобы не затронуть создаваемый архив.

Сохраните артефакты, подготовленные к передаче, файлы подписи и необходимые журналы. После очистки повторите сборку того же коммита и проверьте, не повреждены ли зависимости и правильно ли указан путь.

Уведомления системы и инструменты

Подключитесь через графический интерфейс и проверьте, не осталось ли незакрытых системных диалогов или запросов первого запуска Xcode. Выполните команды sw_vers, xcodebuild -version и xcodebuild -showsdks, чтобы убедиться, что среда CI соответствует ожидаемой.

Сначала приостановите задачи и создайте резервную копию. Решение об обновлении системы или инструментов принимайте самостоятельно. Не меняйте путь к Xcode во время архивации.

Восстановление сессии и перезапуск

Сначала отключитесь от удалённого клиента и подключитесь снова. Если SSH по-прежнему работает, проверьте командой uptime и убедитесь, что нужные задачи выполняются. Перезапускайте весь компьютер только в том случае, если подтверждено, что это необходимо: войдите в панель управления, откройте сведения об экземпляре и используйте доступную там команду перезапуска.

Перезапуск прервёт сборку и удалённые подключения. Сначала сохраните доступные журналы и артефакты. Если доступ отсутствует или подходящего действия нет, отправьте обращение в поддержку. Не отправляйте запросы на перезапуск снова и снова.

Проблема не решена

Подготовьте обращение с полезной информацией

Войдите в панель управления и отправьте обращение в техническую поддержку — так его можно связать с заказом и экземпляром. Если войти не удаётся или вы хотите обсудить услугу до покупки, напишите на support@macftp.com. Другие способы связи указаны на странице контактов.

  • Укажите экземпляр: номер заказа, номер экземпляра, узел и модель. Узел находится в Сингапуре, Токио, Сеуле или Гонконге. Укажите полное название модели из сведений об экземпляре.
  • Опишите ситуацию: время возникновения проблемы и часовой пояс, полный текст ошибки, шаги для её воспроизведения, а также доступность SSH и графического подключения по отдельности.
  • Сократите переписку: перечислите уже выполненные проверки, недавние изменения и приложите фрагменты журналов без конфиденциальных данных. Не отправляйте пароли, закрытые ключи, пароль p12 или полные платёжные данные.