IPA (iOS App Store Package) — это формат архивного файла для распространения приложений на iOS. Каждое приложение, которое попадает в App Store, проходит через формат IPA: разработчик собирает проект, подписывает и загружает IPA в App Store Connect. По данным Apple Developer Documentation, 2026, формат IPA базируется на ZIP и содержит исполняемый Mach-O файл, ресурсы и метаданные подписи.
Главное
IPA (iOS App Store Package) — это формат пакета для распространения приложений на платформе Apple. Как и APK, технически IPA — это ZIP-архив, но с собственной структурой, продиктованной требованиями iOS к безопасности и подписи.
Формат IPA появился вместе с iPhone OS 2.0 в 2008 году и App Store. За основу был взят пакетный формат .app из macOS, упакованный в ZIP для уменьшения размера при передаче. С тех пор структура IPA не претерпела кардинальных изменений — менялись только схемы подписи и метаданные.
App Store — основной канал. Ad-hoc распространение — для тестирования на ограниченном числе устройств (до 100). Enterprise-распространение — для корпоративных приложений без публикации в магазине. Разработчики также используют IPA для тестирования на реальных устройствах через Xcode.
Внутренняя структура IPA представляет собой ZIP-архив, содержащий папку Payload с .app-бандлом и метаданные.
| Файл/директория | Назначение |
|---|---|
| Payload/ | Корневая папка с .app бандлом |
| Payload/App.app/ | Бандл приложения: исполняемый файл, ресурсы, nib/ storyboard |
| Payload/App.app/Info.plist | Метаданные: bundle ID, версии, разрешения |
| Payload/App.app/embedded.mobileprovision | Provisioning Profile для установки |
| iTunesMetadata.plist | Метаданные для iTunes (опционально) |
| META-INF/ | Подписи и хеши для верификации |
Внутри папки Payload находится бандл приложения с расширением .app. Это не файл, а директория, которую iOS распознаёт как приложение. Внутри — исполняемый Mach-O файл (имя совпадает с именем бандла), Info.plist, ресурсы, изображения и локализованные строки.
Исходный код на Swift или Objective-C компилируется в машинный код в формате Mach-O (Mach Object). Файл содержит сегменты __TEXT (код), __DATA (данные) и __LINKEDIT (метаданные линковки). Современные IPA содержат только 64-битную архитектуру arm64.
Xcode автоматизирует сборку IPA: от компиляции исходников до создания подписанного архива, готового к загрузке в App Store Connect.
Debug — для разработки, без оптимизаций. Release — для публикации, с оптимизациями компилятора. Каждая схема определяет флаги компиляции, код-сигнинг и entitlements. Xcode создаёт архив (Archive) через меню Product → Archive.
// Info.plist — базовые метаданные приложения
<key>CFBundleName</key>
<string>MyApp</string>
<key>CFBundleIdentifier</key>
<string>com.example.myapp</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>CFBundleShortVersionString</key>
<string>1.0.0</string>
Xcode компилирует каждый файл .swift или .m в объектный файл (.o), затем линкует их в единый Mach-O бинарник. Ресурсы (изображения, XIB, storyboard) обрабатываются отдельно: storyboard компилируются в бинарный формат .storyboardc, изображения оптимизируются в Asset Catalog (.car).
Подпись — самый сложный аспект IPA. Apple требует цифровой подписи для любого приложения, запускаемого на реальном устройстве. Система проверяет сертификат разработчика, entitlements и соответствие Provisioning Profile.
Certificate (Development или Distribution) — удостоверяет личность разработчика. Provisioning Profile — связывает сертификат, bundle ID и список разрешённых устройств (для ad-hoc). Entitlements — разрешения приложения (push-уведомления, iCloud, App Groups).
Xcode подписывает каждую библиотеку и фреймворк внутри .app бандла, затем подписывает сам бандл. Финальный IPA подписывается на уровне ZIP-архива. Apple проверяет все уровни подписи при установке. iOS не запускает приложение, если хотя бы один компонент имеет невалидную подпись.
// Проверка подписи через Security framework
import Security
func checkSignature() -> Bool {
let url = Bundle.main.bundleURL
var staticCode: SecStaticCode?
guard SecStaticCodeCreateWithPath(
url as CFURL,
[], &staticCode
) == errSecSuccess else {
return false
}
return true
}
App Store Connect — платформа Apple для управления публикацией приложений. Загрузка IPA выполняется через Xcode Organizer, Transporter или командную строку через xcrun altool.
После создания архива Xcode предлагает Distribute App с выбором метода: App Store Connect, Ad-hoc, Enterprise или Development. Выбрав App Store Connect, разработчик указывает команду и подтверждает загрузку. Xcode проверяет подпись, отправляет IPA на серверы Apple и возвращает статус обработки.
Для CI/CD используется xcrun altool или более новый notarytool. Apple требует нотариального заверения для macOS-приложений, для iOS этот шаг опционален, но рекомендуется. xcodebuild -exportArchive создаёт подписанный IPA готовый к загрузке.
Apple проверяет каждый IPA на наличие вредоносного кода, приватных API и соответствие правилам App Store Review Guidelines. Процесс проверки занимает от 1 часа до 2 суток.
При загрузке IPA в App Store Connect Apple применяет App Thinning — технологию оптимизации бинарника под конкретные устройства. Slicing удаляет из IPA ресурсы для неподдерживаемых разрешений и архитектур. On-Demand Resources позволяет загружать части приложения (уровни игры, видео) только по запросу пользователя. Bitcode — промежуточное представление, которое Apple может перекомпилировать под новые архитектуры без участия разработчика.
App Store также проверяет соответствие IPA требованиям Sandbox: приложение не должно получать доступ к данным других приложений, к файловой системе вне своего контейнера и к аппаратным функциям без явного разрешения пользователя.
TestFlight — официальный сервис Apple для бета-тестирования приложений. Разработчик загружает IPA в App Store Connect и приглашает тестировщиков через email или публичную ссылку.
Internal Testing — до 100 участников из команды разработчика. Не требует проверки Apple. External Testing — до 10 000 участников, требует прохождения Beta App Review. TestFlight автоматически распределяет билды по тестировщикам и собирает аналитику.
Билд доступен для тестирования 90 дней после загрузки. TestFlight поддерживает до 100 активных билдов одновременно. Каждый тестировщик может установить до 30 приложений одновременно. Crashlytics интегрируется с TestFlight для сбора отчётов о падениях и нефатальных ошибках.
Сборка IPA в CI-окружении требует macOS-раннера. GitHub Actions, GitLab CI и Bitrise предоставляют macOS-окружения для iOS-сборок. Fastlane lane `build_app` автоматизирует весь цикл: архивация, подпись, экспорт IPA и загрузка в TestFlight. Для управления сертификатами и профилями используется Match — инструмент Fastlane, хранящий подписи в зашифрованном Git-репозитории.
Разработчики сталкиваются с рядом характерных ошибок при сборке и подписи IPA. Большинство связано с некорректной конфигурацией сертификатов и профилей.
Xcode не находит Provisioning Profile, соответствующий bundle ID и сертификату. Решение — скачать актуальные профили в Xcode Accounts → Download Manual Profiles или использовать Automatic Signing.
Ошибка возникает при загрузке IPA с невалидной архитектурой. Современные IPA должны содержать только arm64. Наличие i386 или x86_64 в бинарнике вызывает отклонение. Решение — проверить архитектуры в Build Settings и исключить симуляторные архитектуры.
IPA не содержит правильную структуру Payload/App.app. Apple ожидает точную иерархию. Решение — проверить, что архив включает папку Payload с одним .app бандлом, а не плоский список файлов.
Для корпоративного распространения используется Enterprise программа Apple ($299/год). IPA подписывается Enterprise-сертификатом и может устанавливаться на любые устройства компании без ограничения по количеству. Ad-hoc распространение ограничено 100 устройствами на аккаунт разработчика ($99/год). MDM (Mobile Device Management) системы, такие как Jamf и Microsoft Intune, поддерживают массовую установку Enterprise-IPA.
Часто задаваемые вопросы
IPA использует исполняемый формат Mach-O вместо DEX, требует Provisioning Profile для установки и проходит строгую проверку App Store. APK, в отличие от IPA, можно установить напрямую без посредников (sideloading).
Нет, сборка IPA требует Xcode и инструментов Apple, которые доступны только на macOS. Альтернативы: удалённые серверы macOS (Mac min, AWS Mac) или облачные CI-сервисы (GitHub Actions с macOS раннером).
Простое приложение — 5–30 МБ. Приложение средней сложности — 30–150 МБ. Игры могут достигать 4 ГБ. Apple ограничивает размер загрузки по сотовой сети 200 МБ, но пользователь может скачать через Wi-Fi.
Для ad-hoc установки используется Xcode или Apple Configurator. Enterprise-приложения распространяются через внутренний сервер с manifest.plist. Обычный пользователь не может установить IPA без jailbreak или TestFlight.
Fat IPA содержит несколько архитектур (arm64 + x86_64) для универсальной сборки. Thin IPA содержит только одну архитектуру для конкретного устройства. Apple принимает только thin IPA для публикации — fat бинарники отклоняются.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также