Боли · матрица · восемь шагов VNC · четыре факта · смена узла
Если вы пользуетесь арендованным облачным Mac по VNC, рано или поздно столкнётесь с тремя классами сбоев непрерывности: обрыв сети, пробуждение после сна или Power Nap и обслуживание или миграция узла у провайдера. Симптомы часто одинаковы: Xcode открывается, но Archive зависает, подпись падает, Simulator остаётся чёрным или xcodebuild вдруг не видит SDK. Дорогая ошибка в том, что неясно, что чинить первым — сеть, связку ключей или цепочку инструментов. Руководство: список болей, матрица решений и восемь проверок с приоритетом VNC плюс четыре параметра для тикета и FAQ. За десять минут должна проясниться слой — транспорт, toolchain или сертификаты — и момент, когда разумнее сменить узел.
Важна закономерность, потому что поминутная оплата карает отладку «не того слоя». Воспроизводимый runbook — синхронизация времени, исходящий HTTPS, разблокировка связки, обновление учётных записей, затем отпечатки версий — превращает «вчера работало» в проверяемые доказательства. Восстановление только по SSH неполно. См. чек-лист первого запуска (30 минут) и продление и миграция (15 минут).
TCP снова в сети не значит здоровую GUI-сессию: после VNC macOS может быть наполовину «бодрствовать» — устаревший DNS, сдвиг часов, отложенное обновление токена.
Сон может заблокировать связку ключей: политика питания оставляет login-keychain закрытой; подпись тихо падает, пока Organizer не покажет ошибки.
Смена узла меняет контекст идентичности: даже тот же Apple ID — разные UUID хоста, элементы связки и кэши профилей.
Сироты DerivedData и Simulator: резкий обрыв оставляет демоны сборки в несогласованном состоянии; нужна упорядоченная очистка.
Иллюзия пользователя SSH и VNC: пути xcode-select, видимые по SSH, могут не совпадать с GUI-пользователем.
Команды, смешивающие автоматизацию по SSH и ручную работу в Xcode, должны рассматривать восстановление после обрыва как двухканальную задачу. Задокументируйте, какой пользователь владеет identity подписи.
| Сценарий | Сначала | Затем | Далее | Частая ошибка |
|---|---|---|---|---|
| Падение сети, тот же узел | Проверить время и доступность | Разблокировать связку, обновить Accounts | Clean + один Run | Винить сертификаты при старом DNS |
| Сон / крышка / удалённый простой | 30–60 с после пробуждения до Xcode | Связка и политика экрана блокировки | Перезапуск службы Simulator | Спамить Run до разблокировки |
| Новый узел / новый образ | Сравнить hostname и версию macOS | Сертификаты и профили перенесены? | Минимальный smoke Archive | Переиспользовать абсолютные пути старого узла |
| Корпоративный или прокси-стек | Гайд: корпоративная сеть и SSH-туннель | затем первую строку | A/B на хот-споте | Чинить Xcode до сетевого пути |
Как в других VNC-материалах: системные запросы, разблокировка связки и веб-повторная аутентификация — на VNC-рабочем столе; SSH — для отпечатков.
Корпоративные и кампусные сети: ноутбук доходит через split-tunnel, Safari на Mac должен напрямую до Apple. Сначала исправьте маршрут.
Системные настройки: Основные → Дата и время. Включить автоматическое время.
Строка меню, сеть: доступность developer.apple.com. Минимальная проверка в Safari.
Связка ключей: login разблокирована; пара сертификата и закрытого ключа.
Xcode → Настройки → Accounts: обновить.
Отпечатки в Terminal:
sw_vers xcodebuild -version xcode-select -p
В тикет; xcode-select указывает на нужную Xcode.app.
Минимальная очистка DerivedData: сначала Clean Build Folder; точечно по гайду диска.
Simulator: выйти из всех → загрузить целевое устройство.
Дымовая подпись: Run + видимость аккаунта в Organizer. Только новый узел — сначала миграция.
Факт 1: Подождать 30–60 секунд после пробуждения перед тяжёлыми GUI-приложениями снижает ложные зависания.
Факт 2: Ниже примерно 10–15% свободного места давление APFS может проявляться случайными ошибками сборки.
Факт 3: При смене узла архивируйте вместе экспорт сертификата + UUID профиля + xcodebuild -version.
Факт 4: Если SSH-туннель работает, а прямой VNC нет, раздельные пути могут дать успешный git pull и сбой Accounts.
Это не магические числа — они задают ожидания для тикетов.
Если сеть и связка в порядке, а падает только Simulator — обновляйте iOS runtime, не macOS. Если подпись ломается только на новом узле — чек-лист миграции. Если все GUI-приложения падают случайно — фиксируйте временную шкалу.
Даунгрейд macOS на арендованном железе редко экономически оправдан; формулируйте требования как теги образов + воспроизводимые шаги VNC.
Тикет миграции: блокирующая подпись на каждом чистом проекте — дрейф identity/профиля. Фрагменты xcodebuild -showBuildSettings с редактированием секретов. Закрепите пару ОС + Xcode как базовый образ Docker.
Чек-лист 30 минут.
Читать →15 минут до миграции.
Читать →Очистка 20 минут.
Читать →SSH-туннель 15 минут.
Читать →Разблокировать login-keychain; проверить пару сертификата и ключа; после смены узла — p12 или политика провайдера; шаг 8 раздела 3.
Часто нет: закрыть приложения, уменьшить DerivedData или перезапустить службы; раздел 5.
Часто ветки независимо ушли; сначала merge.
Команды — да; разблокировка связки и веб-потоки аккаунтов — нет, нужен VNC.
В облаке с поминутной оплатой случайные повторы жгут бюджет. SSH печатает отпечатки, но не заменяет последовательное восстановление связки и учётных записей.
Видимый стол macOS через VNC даёт проверить те же сигналы, что и инженер на площадке. Сервис удалённого Mac со стабильным VNC (например VNCMac) часто дешевле непрозрачных батчей. В вики: id узла / последний успешный Archive / smoke после разблокировки связки.