The Daily Newsstand · Free, Always
Monday, October 26, 2026

Я вам сборку принёс, но я вам ее не отдам: как установить тестовое приложение на iOS

Translate

Привет, Хабр! На связи Максим, я QA и рассказываю про мобильное тестирование.

Ручные проверки, поиск логов, разбор крешей, автотесты — с чего бы ни начиналась работа тестировщика, первым делом приложение нужно установить на устройство. Звучит как самая простая часть работы, правда?

На Android так и есть: скачал APK, разрешил установку из неизвестных источников — готово. С iOS такой номер не прокатит. Во многих компаниях в качестве сервиса для распространения сборок используется Firebase AppDistribution. В связи с этим часто возникает вопрос от мобильных QA, у которых мало опыта — «Почему вместо кнопки „Скачать“ отображается „Зарегистрировать устройство“? Почти все сложности с установкой объясняются одним механизмом — подписью приложения. Если понять, как она устроена, то любой способ установки перестает быть набором инструкций. С подписи и начнем разбираться в способах установить тестовую сборку на iPhone.

Почему на iPhone нельзя просто скачать и установить

iOS запускает только приложения, подписанные сертификатом разработчика. Вместе с подписью в сборку вшивается provisioning profile — профиль, в котором записано, кто подписал приложение и где ему разрешено работать. Получится ли установить приложение на ваш iPhone, решает именно профиль, а не сам файл сборки.

От типа профиля зависит, кому достанется сборка. Релизный профиль для App Store не привязан к конкретным устройствам: приложение проверяет и распространяет сама Apple. Для тестовых сборок в обход стора обычно используют Ad Hoc‑профиль, и в нём явно перечислены UDID всех устройств, на которые разрешена установка.

UDID — это идентификатор, который однозначно определяет конкретный iPhone, iPad или другое устройство Apple. Он пригодится не только для установки: например, по UDID указывают устройство в консольных утилитах, когда снимают с него логи. Если UDID вашего телефона нет в профиле, iOS откажется ставить приложение, и никакие настройки на самом телефоне это не исправят.

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

Второе следствие — список не резиновый. Apple разрешает зарегистрировать по 100 устройств каждого типа (iPhone, iPad и так далее) на год участия в Apple Developer Program. Удалённое устройство освобождает место только при продлении участия, поэтому добавлять устройства стоит осознанно, а не «на всякий случай».

Есть и способы, которым список UDID не нужен вовсе:

  • TestFlight подписывает сборки тем же профилем, что и App Store, а доступ выдаёт не устройству, а конкретному человеку — по приглашению на Apple ID.

  • симулятор — приложение собирается под Mac и запускается на нём же, поэтому подпись для установки ему не нужна.

Перед тем, как перейдем к способам установить тестовое приложение на iOS — узнаем, как подготовить UDID.

Как узнать UDID устройства

Чтобы найти UDID — для начала нужно выяснить, как он выглядит. Состав UDID принципиально делятся на 2 типа:

  • современные устройства — 25 символов: 8 символов, дефис и ещё 16 символов. Например: 00008030-0014644202B00146;

  • старые модели (всё, что до выходило до iPhone X включительно) — 40 символов. Например: ed3f4964739e62a4782aa75b3e11c390b268526d.

Быстрее всего узнать UDID с помощью Mac и кабеля. Подключите устройство к Mac, откройте Finder и выберите устройство на панели слева. При каждом щелчке строка меняется: модель, серийный номер, UDID и так далее.

Есть UDID и в «Отчёте о системе» macOS, в разделе Аппаратное обеспечение → USB. Но там он притворяется серийным номером и теряет дефис. Его нужно вернуть после восьмого символа, иначе будет добавлен невалидный идентификатор (напр., 000080300014644202B00146 → 00008030-0014644202B00146).

Если у вас установлен Xcode, то тот же идентификатор можно найти, если перейти в Window → Devices and Simulators (⇧⌘2), в поле Identifier. Для этого нужно выбрать устройство на панели Devices слева.

Также есть способ узнать UDID даже без Mac. В настройках Firebase App Distribution, если он уже установлен на телефоне (как его поставить, расскажу ниже). Откройте App Distribution, нажмите на шестерёнку и найдите в списке «Ваши устройства» строку с тегом «Текущее».

А для любителей командной строки можно воспользоваться libimobiledevice — кроссплатформенной библиотекой для работы с iOS‑устройствами. Достаточно одной команды, которая вернет UDID подключенного устройства:

idevice_id -l

Полученный UDID передайте тому, кто в команде управляет сертификатами и профилями, — обычно это iOS‑разработчик или тимлид. Он добавит устройство в Apple Developer и пересоберёт приложение. Все сборки, собранные после этого, можно будет поставить на ваш телефон.

Способы, которым нужен UDID

Firebase App Distribution: сборки по воздуху

Firebase App Distribution — сервис Google для раздачи тестовых сборок. Разработчики или CI загружают туда сборку, а тестировщики получают письмо и ставят её прямо на телефон, без Mac и кабеля. Каждая сборка хранится 150 дней. У неё есть номер, описание и заметки к релизу, куда команды обычно пишут ветку и окружение. Поэтому для повседневного ручного тестирования это самый удобный вариант: нашёл в поиске номер сборки из CI и нажал «Скачать» → «Установить».

Чтобы до этого дойти, телефон нужно один раз настроить. Понадобятся Google‑аккаунт на рабочую почту и приглашение в проект: команда добавляет вас вручную или даёт invite‑ссылку (Firebase → App Distribution → Invite links). Дальше порядок такой:

  1. Если на телефоне уже есть старый профиль Firebase, удалите его в Настройки → Основные → VPN и управление устройством. Иначе новый не установится, и это самая частая причина, по которой настройка тормозится еще на старте.

  2. Откройте ссылку из письма‑приглашения на телефоне, причём именно в Safari: в других браузерах профиль не установится.

  3. Войдите в Google‑аккаунт, примите приглашение и выберите приложение.

  4. Согласитесь добавить App Distribution на главный экран и нажмите «Скачать профиль».

  5. Откройте Настройки, нажмите на плашку «Профиль загружен» и установите профиль, подтвердив действие паролем устройства.

Профиль нужен не только ради иконки на рабочем столе. Через него App Distribution узнаёт UDID телефона и показывает его разработчикам в консоли Firebase. Но, как я говорил ранее, в сборку устройство попадёт только после регистрации в Apple Developer и пересборки. До этого у сборок вместо «Скачать» будет кнопка «Зарегистрировать устройство».

Отдельно стоит сказать о доступности. С 2 022 года доступ к Firebase для российских компаний ограничен, и из российской сети App Distribution может не открываться. Верный признак проблемы — непрогрузившиеся иконки приложений: в таком состоянии установка, скорее всего, закончится ошибкой. Многие команды из‑за этого перешли на альтернативы.

1. ipa через Mac: когда есть файл и кабель

Иногда сервис раздачи недоступен или нужную сборку туда просто не загружали: например, она лежит в артефактах конкретного CI‑пайплайна. Тогда .ipa‑файл можно поставить напрямую через Mac. Ограничения подписи при этом никуда не деваются: если UDID нет в профиле сборки, установка закончится ошибкой.

Проще всего сделать это в Apple Configurator — перетащить .ipa мышкой на карточку подключённого устройства.

В Xcode то же самое делается в Window → Devices and Simulators: выберите устройство и нажмите «+» под списком Installed Apps.

А если установку нужно встроить в скрипт, пригодится утилита ideviceinstaller из той же libimobiledevice:

ideviceinstaller -i MyApp.ipa      # установить .ipa
ideviceinstaller -l                # список установленных приложений
ideviceinstaller -U com.example.app # удалить приложение по Bundle Identifier

2. Xcode на реальном устройстве: когда нужны логи

Если у вас есть доступ к коду, приложение можно собрать и запустить на подключённом iPhone прямо из Xcode. По сути, это тот же запуск, что и на симуляторе, только на настоящем железе. Главный бонус — режим отладки: в консоли Xcode в реальном времени видны логи, можно ставить брейкпоинты и смотреть, что происходит внутри. Так удобнее всего разбираться с багом, который воспроизводится только на устройстве, или проверять сценарии, завязанные на железо, — камеру, пуши, производительность — прямо из ветки.

Подготовка здесь дольше, чем у остальных способов. Нужно добавить учётную запись Apple в Xcode и выбрать её в поле Team на вкладке Signing & Capabilities, а устройство должно быть зарегистрировано в аккаунте разработчика. При первом подключении телефон спросит, доверять ли этому компьютеру. Начиная с iOS 16, без режима разработчика запуск не сработает: он включается в Настройки → Конфиденциальность и безопасность → Режим разработчика. Пункт появляется только после первого подключения к Xcode, а после включения телефон попросит перезагрузку.

Если Xcode всё равно отказывается запускать приложение, проверьте по очереди поле Team, доверие компьютеру и режим разработчика. Почти всегда проблема в одном из этих трёх пунктов.

Подписать сборку можно и бесплатным Apple ID (Personal Team), но тогда приложение проработает только 7 дней. А перед первым запуском разработчика придётся вручную разрешить в Настройки → Основные → VPN и управление устройством.

Способы, которым не нужен UDID

1. TestFlight: сборка, подписанная как релиз

TestFlight — официальный сервис Apple для бета‑тестирования. Сборка загружается в App Store Connect и подписывается профилем для App Store, поэтому список UDID ей не нужен. Доступ выдаётся конкретному человеку, а не устройству. Вы получаете приглашение на Apple ID по почте или публичной ссылке, ставите приложение TestFlight из App Store, нажимаете «Принять» и «Установить» — и сборка встаёт на любой ваш телефон без регистрации и пересборки. Если нужна не последняя сборка, а одна из предыдущих, её можно выбрать на странице приложения.

Тестировщики в TestFlight бывают двух видов:

— внутренние — до 100 участников команды в App Store Connect — получают сборку сразу после обработки;

— внешние — до 10 000 человек по приглашению или публичной ссылке — ждут, пока Apple одобрит первую сборку каждой версии, а это может занять время.

Каждая сборка работает 90 дней. Прямо из TestFlight можно отправить отзыв со скриншотом, а после креша — описать, что к нему привело.

Сборка в TestFlight подписана так же, как будущий релиз, поэтому он хорош для регресса и приёмки релиз‑кандидата. Ещё он выручает, когда тестировщиков много, а лимит UDID на исходе, и подходит для беты с коллегами из других отделов. Учтите одну деталь: у сборки из TestFlight тот же Bundle Identifier, что у версии из App Store, поэтому она заменит её на устройстве, а не встанет рядом.

2. Симулятор: когда подпись не нужна

С точки зрения подписи симулятор — самый простой способ. Приложение собирается под Mac и на нём же запускается, поэтому ни UDID, ни сертификаты не нужны. Если есть доступ к коду, достаточно открыть проект в Xcode, выбрать симулятор в верхней панели и нажать Run (⌘R). Первая сборка может идти долго, а последующие пойдут быстрее: Xcode кеширует промежуточные результаты в папке DerivedData и не компилирует заново то, что не изменилось.

Без доступа к коду симулятор тоже можно использовать. Попросите разработчиков собрать приложение под симулятор и передать вам .app‑файл. Его достаточно перетащить в окно запущенного симулятора или установить командой:

xcrun simctl install booted TestApp.app

А вот .ipa для реального устройства в симулятор не встанет: это сборки под разные платформы и процессорные архитектуры.

Симулятор незаменим для проверки вёрстки на разных моделях и версиях iOS, ведь переключение между ними занимает пару кликов. Он выручает, когда нужно проверить фичу прямо из ветки, не дожидаясь CI, или когда реального устройства под рукой нет. Но камеру и реальную производительность на нём не проверить, для этого всё равно нужен настоящий iPhone.

Почему сборка перестала открываться

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

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

Новый профиль Firebase не устанавливается. На устройстве остался старый профиль. Удалите его в Настройки → Основные → VPN и управление устройством и повторите установку.

Приложение установилось, но не запускается: «Ненадёжный корпоративный разработчик». Так iOS реагирует на сборки, подписанные корпоративным (Enterprise) сертификатом, — их нужно один раз разрешить вручную. Перейдите в Настройки → Основные → VPN и управление устройством, выберите профиль разработчика и нажмите «Доверять».

Приложение работало, а потом перестало открываться. У каждой сборки есть срок годности:

  • сборка из TestFlight — 90 дней;

  • сборка, подписанная бесплатным Apple ID, — 7 дней;

  • Ad Hoc‑ и Development‑сборки — пока действуют их профиль и сертификат (обычно до года).

Решение одно — поставить свежую сборку.

Xcode не запускает приложение на устройстве. Проверьте три вещи: включён ли режим разработчика, подтверждено ли доверие компьютеру на самом устройстве и выбрана ли Team на вкладке Signing & Capabilities.

Как выбрать способ

Сравнительная таблица 5‑ти способов установить тестовую сборку на iOS:

Способ

Где запускается

Нужен Mac

Нужна регистрация UDID

Главное преимущество

Firebase App Distribution

Реальное устройство

Нет

Да

Установка без проводов в пару тапов

.ipa через Mac

Реальное устройство

Да

Да

Не нужен сервис раздачи сборок

Xcode на устройстве

Реальное устройство

Да

Да

Отладка и логи в реальном времени

TestFlight

Реальное устройство

Нет

Нет

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

Xcode Simulator

Симулятор

Да

Нет

Любая модель и версия iOS за пару кликов

Если свести всё к одному правилу: сначала поймите, как подписана сборка, и выбор способа станет очевиден. Для повседневной проверки на своём телефоне подойдёт сервис раздачи вроде App Distribution, для приёмки релиза — TestFlight, для вёрстки — симулятор, а для отладки — Xcode на устройстве.

На этом тему со способами установить тестовое приложение на iOS можно считать закрытой. Поначалу установка сборки на iPhone кажется запутанной: профили, UDID, регистрация, пересборка. Но стоит один раз разобраться, как устроена подпись, зачем нужен UDID, и дальше всё сводится к простым действиям, которые потом делаешь по наитию. Сохраните статью в закладки — она пригодится в тот день, когда вместо кнопки «Скачать» вы снова увидите «Зарегистрировать устройство».

А как вы раздаёте тестовые сборки в своей команде? Поделитесь в комментариях.

View the original on Хабр →

KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.