У GitHub Actions arm64 Runner нет постоянного UDID? Что делать с iOS CI в 2026 году

В пайплайне ошибка сообщает, что у arm64 Runner нет постоянного UDID, и команда хочет менять всю схему сборки.

Быстрое решение: не мигрируйте только из-за этого сообщения. Отсутствие постоянного UDID у GitHub Actions arm64 Runner само по себе не блокирует обычную сборку iOS, тесты в симуляторе или выпуск через App Store. Сначала разделите UDID Mac-хоста и идентификатор реального iPhone, затем проверьте, какая задача действительно зависит от нужного устройства. Текущие сведения об архитектурах и UDID сверяйте с документацией GitHub по большим Runner.

Эта инструкция для руководителей IT и платформенных команд, которые выбирают GitHub Actions и macOS Runner. Она поможет выяснить, влияет ли ограничение на вашу подпись, тесты с устройством или только на отдельную проверку пайплайна.

Последнее обновление: 4 октября 2026 года. Сведения о Runner сверены с документацией GitHub, правила регистрации и профилей — с материалами Apple Developer, ссылки на которые приведены ниже.

01 Сначала определите, какой UDID требует задача

В сообщении об ошибке слово UDID может относиться к Mac, iPhone или другому устройству. Если принять их за один и тот же идентификатор, легко выбрать неподходящий Runner и потратить время на перенос сборки, который не исправит исходную проблему.

  • UDID Mac Runner относится к хосту, на котором выполняется задание CI. В документации GitHub сказано, что arm64 macOS Runner не имеет статического UUID/UDID. Для Intel macOS Runner документация указывает вариант со статическим UDID. Проверяйте действующие условия непосредственно перед изменением workflow: доступность Runner, его архитектура и статус функции могут меняться.
  • UDID iPhone или iPad относится к физическому тестовому устройству. При соответствующем сценарии его регистрируют в Apple Developer, чтобы использовать с подходящим профилем разработки или Ad Hoc. Процедура Apple описывает регистрацию именно устройства, а не Mac, на котором выполняется сборка. См. инструкцию Apple по регистрации устройства.
  • Идентификатор в профиле подписи определяет область применимости профиля и связанной с ним сборки. Требования зависят от типа профиля и способа распространения. Поэтому ошибка подписи сама по себе ещё не доказывает, что нужен статический UDID хоста.

Для диагностики найдите в логе конкретный шаг с ошибкой: компиляция, создание архива, импорт сертификата, установка приложения на устройство, запуск теста или загрузка сборки. Затем зафиксируйте, какой идентификатор он запрашивает. Не меняйте архитектуру Runner, пока не выяснили, относится ли сообщение к Mac-хосту или к целевому устройству.

02 Ограничение arm64 Runner не равно запрету на iOS CI

Разделите пайплайн по конечному результату, а не по общему ярлыку «iOS-сборка». В одном workflow могут соседствовать задачи, у которых совершенно разные требования к узлу.

  • Компиляция и подготовка архива. Если задача собирает приложение и не устанавливает его на зарегистрированный iPhone, отсутствие постоянного UDID Mac само по себе не является причиной остановки. Проверяйте фактическую ошибку компилятора, Xcode или подписи отдельно.
  • Проверка в симуляторе. Симулятор не является физическим iPhone, который нужно добавить в список зарегистрированных устройств. Не распространяйте требования профиля для установки на реальные устройства на сценарий, который проверяет приложение только в симуляторе.
  • Разработка и установка на тестовый аппарат. Здесь важны зарегистрированный iPhone, соответствующий профиль, доступ к устройству и возможность установить на него результат сборки. Apple описывает создание профиля разработки; проверяйте его устройство и назначение.
  • Распространение Ad Hoc. Это отдельный путь, для которого Apple связывает профиль с зарегистрированными устройствами. Сверяйте список устройств и выбранный профиль с правилами создания профиля Ad Hoc.
  • Публикация через App Store. Не считайте её эквивалентом установки на заранее зарегистрированный iPhone. Для выпуска проверяйте применяемый вариант подписи и этап передачи сборки; Apple описывает загрузку сборок в документации App Store Connect.

Так вы отделите реальное ограничение от ложной связи. Например, если архив успешно создаётся, но установка на тестовый iPhone не проходит, замена arm64 Runner на Intel может ничего не исправить: причиной могут быть профиль, список зарегистрированных устройств или отсутствие физического подключения.

Не используйте формулировку «подпись не работает из-за UDID» как итог диагностики. Запишите точный этап сбоя и идентификатор, который этот этап ожидает: Mac-хост, тестовое устройство или профиль.

03 Для тестирования на iPhone нужен отдельный план устройства

GitHub-hosted macOS Runner нельзя считать автоматически подключённым к вашему iPhone. Удалённый macOS-хост и физическое тестовое устройство — два разных ресурса. Если тест предполагает установку и запуск на аппарате, в схеме CI должны быть предусмотрены само устройство, его регистрация и путь соединения с узлом.

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

Для тестовой установки соберите подтверждения по всей цепочке:

  • iPhone внесён в список устройств разработчика и его идентификатор совпадает с ожидаемым;
  • профиль разработки или Ad Hoc соответствует типу установки и содержит требуемые устройства;
  • сертификат и профиль доступны заданию без передачи секретов в открытый лог;
  • Runner видит подключённый аппарат, а команда установки завершается успешно;
  • тест действительно запускается на физическом устройстве, а не только проходит сборку или симуляторную проверку.

Apple позволяет управлять профилями, включая просмотр, загрузку и удаление; перед повторной генерацией проверьте текущее состояние в документации по управлению профилями. Это особенно важно, если профиль недавно обновляли или меняли список устройств: наличие файла в CI ещё не подтверждает, что в нём записан актуальный набор.

04 Выбирайте узел по ограничению, а не по названию архитектуры

Если выяснилось, что задаче действительно нужен постоянный UDID Mac, проверьте указанный GitHub вариант для Intel macOS Runner и его текущую применимость. Наличие такой опции не делает Intel-узел универсальным решением для всех Apple-платформенных задач. Он не заменяет регистрацию тестового iPhone и не создаёт физическое подключение к нему.

Когда требуется другой способ исполнения, разделите варианты по назначению:

  • Оставить GitHub-hosted Runner для задач, которым подходят штатная компиляция, симуляторная проверка и выбранный путь публикации. Это разумный вариант, если ваши логи и проверки подтверждают, что ограничение UDID не затрагивает критический этап.
  • Использовать самоуправляемый Runner на узле с нужным идентификатором или подключением к тестовому устройству. При этом команда получает больше контроля над средой, но также принимает на себя эксплуатацию, обновления, управление доступом и изоляцию заданий. GitHub описывает требования и модель самостоятельно размещённых Runner.
  • Выделить специальный удалённый Mac для задач, которым нужен управляемый хост, постоянная среда подписи или проверка с физическим устройством. Это решение следует принимать по результатам испытания конкретного workflow, а не по одному сообщению об отсутствии UDID.

Вариант с самоуправляемым узлом требует отдельной проверки безопасности. Runner может выполнять код из workflow, а доступ к нему и его окружению нужно ограничивать с учётом источника заданий. GitHub отдельно предупреждает о рисках небезопасного использования self-hosted Runner в контексте pull_request_target; изучите рекомендации GitHub по этому событию. Успешный удалённый вход на Mac не доказывает, что узел безопасно допущен к производственным сертификатам.

05 Проведите пилот по контрольным свидетельствам

До смены пула Runner опишите, какой результат должен дать каждый этап. Такой порядок не позволяет принять успешный build за доказательство того, что устройство зарегистрировано, приложение установлено, а публикационный артефакт соответствует требованиям.

  • [ ] Классифицируйте задание. Укажите, выполняет ли оно компиляцию, симуляторный тест, разработческую установку, Ad Hoc-проверку или загрузку для App Store.
  • [ ] Сохраните исходную ошибку. Запишите шаг workflow, полный текст сообщения и момент, когда оно появляется. Не ограничивайтесь кратким статусом красного задания.
  • [ ] Установите владельца идентификатора. Определите, запрошен ли UDID Mac Runner или зарегистрированного iPhone. Если лог не позволяет это понять, добавьте диагностический вывод без раскрытия секретов.
  • [ ] Проверьте профиль и устройство. Сверьте назначение профиля, тип установки и список зарегистрированных устройств с правилами Apple для выбранного сценария.
  • [ ] Подтвердите соединение с устройством. Для физического теста сохраните свидетельство, что Runner обнаружил аппарат и смог выполнить установку.
  • [ ] Разделите статусы приёмки. Отмечайте отдельно успешную сборку, проверку подписи, установку и запуск на устройстве, а также загрузку итогового артефакта.
  • [ ] Сравните узлы на одном задании. Если требуется смена Runner, повторите тот же этап на выбранном варианте и выясните, устранена ли именно исходная причина.
  • [ ] Проверьте границы секретов. Убедитесь, что сертификаты, пароли и ключи не попадают в логи, а доступ к узлу и рабочей среде соответствует правилам команды.

Итог пилота должен быть проверяемым: какая задача не проходила, что именно требовала, какой узел использовался и какое свидетельство подтверждает исправление. Если сборка и симулятор работают, а ломается только установка на iPhone, меняйте или дополняйте прежде всего контур тестового устройства. Если воспроизводится зависимость именно от постоянного UDID Mac, проверяйте поддерживаемую конфигурацию Runner и испытывайте выделенный узел.

06 Частые вопросы о Runner и идентификаторах

Влияет ли отсутствие фиксированного UDID arm64 Runner на iOS-подпись?
Только если конкретная процедура подписи зависит от постоянного идентификатора Mac-хоста. Для разработки на зарегистрированном iPhone важны идентификатор самого телефона и соответствующий профиль. Для распространения через App Store проверяйте отдельный путь публикации. Поэтому сначала найдите этап и тип профиля, а затем решайте, требуется ли менять Runner.

Чем отличается UDID Mac от идентификатора iPhone?
Это идентификаторы разных устройств с разными функциями в процессе. Mac выполняет задание GitHub Actions, а iPhone может быть целевым устройством установки и тестирования. Регистрация телефона в Apple Developer не фиксирует UDID Mac, а статический идентификатор Mac не регистрирует iPhone. Не подменяйте одно требование другим при разборе ошибки.

Подключён ли iPhone к GitHub-hosted macOS Runner для теста?
Не предполагайте этого по факту наличия Runner. Для проверки на реальном устройстве заранее подтвердите, что выбранная схема предоставляет заданию доступ к физическому аппарату и позволяет установить приложение. Если такого подтверждения нет, настройте подходящий тестовый узел или разделите пайплайн: сборку и симуляторный этап оставьте отдельно, а проверку на устройстве выполняйте там, где аппарат доступен.

Какие этапы могут требовать постоянный UDID Mac?
Только те, для которых постоянный идентификатор хоста является явным требованием используемой процедуры. Это нужно подтвердить документацией и тестом на том же этапе, где возникает отказ. Не делайте вывод о необходимости такого идентификатора по общей ошибке подписи, по отсутствию UDID у arm64 Runner или по тому, что iOS-проект в целом работает на macOS.

07 Примите решение по данным пайплайна

Оставляйте текущий GitHub-hosted Runner, если обычная сборка и симуляторные проверки проходят, а сбой связан с настройкой профиля или отсутствующим физическим устройством. Тестируйте вариант со статическим UDID, когда ограничение Mac-хоста подтверждено конкретным этапом и такой вариант поддерживается текущей документацией GitHub. Рассматривайте выделенный самоуправляемый или удалённый Mac, если задача требует контролируемого хоста, доступного iPhone или отдельной среды подписи.

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

Поддержка и развитие собственного Mac-узла дают больше контроля, но требуют обслуживания, защиты ключей, настройки Runner и организации доступа к тестовым устройствам. Если вам нужна временная или расширяемая среда для проверки конкретного сценария, удалённая аренда реального Mac может оказаться удобнее, чем закупка отдельной машины под неопределённую нагрузку. Возможности удалённого доступа CALMVPS и сам формат сервиса описаны в обзоре CALMVPS; условия можно изучить на странице тарифов CALMVPS. Это не отменяет необходимости проверить ваш профиль, подключение iPhone и требования безопасности. А если ваши задачи ограничиваются сборкой и симулятором, не переносите их только потому, что у Runner отсутствует постоянный UDID.