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 mini, 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 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.
Читайте також