Как подписать IPA своим сертификатом

Подписать IPA-файл своим сертификатом чаще всего требуется, когда приложение собрано без Xcode-архивации, получено от стороннего разработчика без подписи или пересобрано после внедрения твиков — iOS откажется устанавливать пакет с недействительной или отсутствующей подписью, выдавая ошибку доверия при запуске. Без корректной связки сертификат + provisioning-профиль система просто не пропустит приложение на этапе проверки целостности.

В этой инструкции разберём полный цикл: от получения сертификата разработчика до финальной проверки подписи через codesign. Материал ориентирован на macOS, поскольку инструменты подписи Apple входят в состав Xcode Command Line Tools и официально доступны только там.

Что такое подпись IPA и зачем она нужна

Файл IPA — это заархивированный пакет приложения, внутри которого лежит папка Payload с бинарником и ресурсами. Перед установкой iOS проверяет цифровую подпись каждого исполняемого файла: кем он подписан, не изменён ли код после подписания и действителен ли сертификат на текущую дату.

Подпись привязывается к provisioning-профилю — файлу, который содержит список разрешённых устройств (UDID), идентификатор приложения (App ID) и ссылку на сертификат. Если хотя бы один элемент этой цепочки не совпадает, установка завершится ошибкой.

⚠️ Внимание: переподписание чужих приложений с последующим распространением может нарушать условия лицензионных соглашений и правила Apple. Используйте переподпись только для собственных сборок, тестирования и легальных сценариев вроде корпоративного развёртывания.

Что понадобится перед началом

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

  • 🍎 Активный аккаунт разработчика Apple Developer Program (платный) или бесплатный Apple ID для тестовой подписи с ограничениями;
  • 💻 Компьютер на macOS с установленным Xcode и пакетом Command Line Tools;
  • 🔐 Экспортированный сертификат подписи в связке ключей (Keychain) или файл .p12 с закрытым ключом;
  • 📄 Файл .mobileprovision — provisioning-профиль, включающий UDID целевого устройства;
  • 📦 Сам IPA-файл, который требуется подписать.

Получение и экспорт сертификата

Сертификат создаётся в личном кабинете Apple Developer в разделе Certificates, Identifiers & Profiles. Для установки на устройства вне App Store подходит сертификат типа Apple Development (для тестов) или Apple Distribution (для распространения через Ad Hoc / Enterprise).

После создания сертификат загружается и импортируется в Keychain Access. Важно, чтобы вместе с сертификатом в связке находился закрытый ключ — без него подписание невозможно. Если сертификат создан на другом Mac, экспортируйте его в формат .p12 вместе с ключом и перенесите на рабочую машину.

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

security find-identity -v -p codesigning

В выводе должна появиться строка вида Apple Development: ваше имя (TEAMID). Запомните или скопируйте точное название — оно понадобится для команды подписи.

📊 Какой у вас тип аккаунта для подписи IPA
Платный Apple Developer Program
Бесплатный Apple ID
Корпоративный (Enterprise) аккаунт
Только планирую оформить

Подготовка provisioning-профиля

Профиль создаётся там же, в разделе Profiles. При его генерации вы выбираете App ID (он должен совпадать с bundle identifier приложения внутри IPA либо быть wildcard-профилем), сертификат и список устройств.

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

Как узнать bundle identifier внутри IPA

Переименуйте файл .ipa в .zip и распакуйте. Внутри папки Payload найдите .app, нажмите правой кнопкой → «Показать содержимое пакета» и откройте Info.plist. Нужное значение — ключ CFBundleIdentifier.

Пошаговая инструкция по подписи IPA

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

Шаг 1. Распакуйте IPA как обычный архив:

unzip app.ipa -d signed_app

Шаг 2. Удалите старую подпись и скопируйте свой provisioning-профиль внутрь пакета под именем embedded.mobileprovision:

rm -rf signed_app/Payload/*.app/_CodeSignature

cp profile.mobileprovision signed_app/Payload/*.app/embedded.mobileprovision

Шаг 3. Подпишите все вложенные фреймворки и бинарники, а затем само приложение. Порядок важен: сначала вложенные компоненты, потом основной бандл:

codesign -f -s "Apple Development: Имя (TEAMID)" signed_app/Payload/.app/Frameworks/

codesign -f -s "Apple Development: Имя (TEAMID)" signed_app/Payload/*.app

Шаг 4. Соберите пакет обратно в IPA:

cd signed_app && zip -qr ../resigned.ipa Payload

☑️ Проверка перед подписью IPA

Выполнено: 0 / 5

Проверка подписи и установка

Перед отправкой на устройство убедитесь, что подпись валидна. Команда верификации:

codesign -dv --verbose=4 signed_app/Payload/*.app

В выводе смотрите на строки Authority и TeamIdentifier — там должны быть ваши данные. Дополнительно проверить соответствие профиля можно через codesign --verify --deep --strict.

Установить готовый IPA на iPhone можно через Apple Configurator 2, Xcode (меню Window → Devices and Simulators) или сторонние менеджеры вроде Sideloadly и AltStore, которые автоматизируют часть шагов. После установки на устройстве откройте Настройки → Основные → VPN и управление устройством и подтвердите доверие сертификату разработчика — без этого приложение не запустится.

⚠️ Внимание: если приложение подписано бесплатным Apple ID, срок действия подписи ограничен — по истечении срока приложение перестанет открываться, и его придётся подписывать и устанавливать заново. Это нормальное поведение, а не сбой устройства.

Сравнение способов подписи

СпособТребованияСложностьКому подходит
Ручной через codesignmacOS, терминал, сертификатВысокаяОпытным разработчикам
Xcode (Devices and Simulators)macOS, аккаунт в XcodeСредняяРазработчикам своих приложений
AltStore / SideStoreКомпьютер + Wi-Fi синхронизацияНизкаяОбычным пользователям
SideloadlyWindows или macOS, Apple IDНизкаяБыстрой установки без Xcode
Enterprise-сертификатКорпоративная программа AppleСредняяКомпаниям для внутренних приложений

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

Типичные ошибки и их решение

Ошибка no identity found означает, что в Keychain нет сертификата с закрытым ключом — импортируйте .p12 заново или пересоздайте сертификат на текущем Mac. Сообщение вида resource fork, Finder information, or similar detritus not allowed говорит о лишних метаданных в файлах: очистите их командой xattr -cr signed_app/Payload/*.app перед подписью.

Если приложение установилось, но падает при запуске, проверьте entitlements — права, зашитые в профиль. Их можно извлечь командой security cms -D -i profile.mobileprovision и передать при подписи через параметр --entitlements entitlements.plist. Несовпадение entitlements — частая скрытая причина вылетов.

⚠️ Внимание: не подписывайте пакет «в лоб», если внутри есть расширения (appex) или watchOS-компоненты — каждый из них подписывается отдельно и своим профилем. Пропуск этого шага приведёт к отказу установки без понятного сообщения об ошибке.

FAQ: частые вопросы

Можно ли подписать IPA на Windows?

Полноценная подпись через codesign доступна только на macOS. На Windows работают сервисы и утилиты вроде Sideloadly, которые отправляют данные на подпись через ваш Apple ID, но сам криптографический процесс при этом выполняется их инфраструктурой.

Сколько действует подпись с бесплатным Apple ID?

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

Что делать, если iPhone пишет «Недоверенный разработчик»?

Откройте Настройки → Основные → VPN и управление устройством, найдите свой сертификат в списке и нажмите «Доверять». После этого приложение запустится. Пункт появляется только после установки подписанного приложения.

Можно ли переподписать приложение из App Store?

Технически IPA из App Store защищён шифрованием FairPlay DRM, и переподписать его в исходном виде нельзя. Переподпись работает для незашифрованных сборок: собственных проектов, тестовых билдов и приложений, полученных без DRM.

Зачем нужен файл embedded.mobileprovision?

Это копия вашего provisioning-профиля внутри пакета. iOS читает его при установке и проверяет, разрешено ли приложению работать на данном устройстве. Без этого файла или с чужим профилем установка будет отклонена.