IPA (iOS App Store Package) to format pliku archiwalnego do dystrybucji aplikacji na iOS. Każda aplikacja, która trafia do App Store, przechodzi przez format IPA: programista buduje projekt, podpisuje go i przesyła IPA do App Store Connect. Według Apple Developer Documentation, 2026, format IPA opiera się na ZIP i zawiera wykonywalny Mach-O plik, zasoby i metadane podpisu.
Najważniejsze
IPA (iOS App Store Package) to format pakietu do dystrybucji aplikacji na platformie Apple. Podobnie jak APK, technicznie IPA to archiwum ZIP, ale z własną strukturą podyktowaną wymaganiami iOS dotyczącymi bezpieczeństwa i podpisu.
Format IPA pojawił się wraz z iPhone OS 2.0 w 2008 roku i App Store. Za podstawę wzięto format pakietu .app z systemu macOS, spakowany w ZIP w celu zmniejszenia rozmiaru podczas przesyłania. Od tego czasu struktura IPA nie uległa radykalnym zmianom — zmieniały się tylko schematy podpisu i metadane.
App Store — główny kanał. Dystrybucja ad-hoc — do testowania na ograniczonej liczbie urządzeń (do 100). Dystrybucja Enterprise — dla aplikacji korporacyjnych bez publikacji w sklepie. Programiści używają również IPA do testowania na rzeczywistych urządzeniach przez Xcode.
Wewnętrzna struktura IPA to archiwum ZIP zawierające folder Payload z .app bundle i metadane.
| Plik/katalog | Przeznaczenie |
|---|---|
| Payload/ | Główny folder z .app bundle |
| Payload/App.app/ | Bundle aplikacji: plik wykonywalny, zasoby, nib/storyboard |
| Payload/App.app/Info.plist | Metadane: bundle ID, wersje, uprawnienia |
| Payload/App.app/embedded.mobileprovision | Provisioning Profile do instalacji |
| iTunesMetadata.plist | Metadane dla iTunes (opcjonalnie) |
| META-INF/ | Podpisy i hashe do weryfikacji |
Wewnątrz folderu Payload znajduje się bundle aplikacji z rozszerzeniem .app. To nie jest plik, ale katalog, który iOS rozpoznaje jako aplikację. Wewnątrz znajduje się plik wykonywalny Mach-O (nazwa zgodna z nazwą bundle), Info.plist, zasoby, obrazy i zlokalizowane ciągi znaków.
Kod źródłowy w Swift lub Objective-C jest kompilowany do kodu maszynowego w formacie Mach-O (Mach Object). Plik zawiera segmenty __TEXT (kod), __DATA (dane) i __LINKEDIT (metadane linkowania). Nowoczesne IPA zawierają tylko 64-bitową architekturę arm64.
Xcode automatyzuje budowę IPA: od kompilacji źródeł po utworzenie podpisanego archiwum gotowego do przesłania do App Store Connect.
Debug — do programowania, bez optymalizacji. Release — do publikacji, z optymalizacjami kompilatora. Każdy schemat określa flagi kompilacji, code signing i entitlements. Xcode tworzy archiwum (Archive) przez menu Product → Archive.
// Info.plist — podstawowe metadane aplikacji
<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 kompiluje każdy plik .swift lub .m do pliku obiektowego (.o), a następnie łączy je w jeden Mach-O plik binarny. Zasoby (obrazy, XIB, storyboard) są przetwarzane osobno: storyboard są kompilowane do binarnego formatu .storyboardc, obrazy są optymalizowane w Asset Catalog (.car).
Podpis — najtrudniejszy aspekt IPA. Apple wymaga cyfrowego podpisu dla każdej aplikacji uruchamianej na rzeczywistym urządzeniu. System weryfikuje certyfikat programisty, entitlements i zgodność z Provisioning Profile.
Certificate (Development lub Distribution) — poświadcza tożsamość programisty. Provisioning Profile — łączy certyfikat, bundle ID i listę dozwolonych urządzeń (dla ad-hoc). Entitlements — uprawnienia aplikacji (push, iCloud, App Groups).
Xcode podpisuje każdą bibliotekę i framework wewnątrz .app bundle, a następnie podpisuje sam bundle. Końcowe IPA jest podpisywane na poziomie archiwum ZIP. Apple sprawdza wszystkie poziomy podpisu podczas instalacji. iOS nie uruchamia aplikacji, jeśli co najmniej jeden komponent ma nieprawidłowy podpis.
// Weryfikacja podpisu przez 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 — platforma Apple do zarządzania publikacją aplikacji. Przesyłanie IPA odbywa się przez Xcode Organizer, Transporter lub wiersz poleceń przez xcrun altool.
Po utworzeniu archiwum Xcode oferuje Distribute App z wyborem metody: App Store Connect, Ad-hoc, Enterprise lub Development. Wybierając App Store Connect, programista wskazuje zespół i potwierdza przesłanie. Xcode sprawdza podpis, wysyła IPA na serwery Apple i zwraca status przetwarzania.
Do CI/CD używa się xcrun altool lub nowszego notarytool. Apple wymaga notarialnego poświadczenia dla aplikacji macOS, dla iOS ten krok jest opcjonalny, ale zalecany. xcodebuild -exportArchive tworzy podpisane IPA gotowe do przesłania.
Apple sprawdza każde IPA pod kątem złośliwego kodu, prywatnych API i zgodności z zasadami App Store Review Guidelines. Proces sprawdzania trwa od 1 godziny do 2 dni.
Podczas przesyłania IPA do App Store Connect Apple stosuje App Thinning — technologię optymalizacji pliku binarnego dla konkretnych urządzeń. Slicing usuwa z IPA zasoby dla nieobsługiwanych rozdzielczości i architektur. On-Demand Resources umożliwia pobieranie części aplikacji (poziomy gier, wideo) tylko na żądanie użytkownika. Bitcode — pośrednia reprezentacja, którą Apple może przekompilować pod nowe architektury bez udziału programisty.
App Store sprawdza również zgodność IPA z wymaganiami Sandbox: aplikacja nie powinna uzyskiwać dostępu do danych innych aplikacji, do systemu plików poza swoim kontenerem ani do funkcji sprzętowych bez wyraźnej zgody użytkownika.
TestFlight — oficjalny serwis Apple do beta-testowania aplikacji. Programista przesyła IPA do App Store Connect i zaprasza testerów przez e-mail lub publiczny link.
Internal Testing — do 100 uczestników z zespołu programisty. Nie wymaga sprawdzenia przez Apple. External Testing — do 10 000 uczestników, wymaga przejścia Beta App Review. TestFlight automatycznie dystrybuuje buildy do testerów i zbiera analitykę.
Build jest dostępny do testowania przez 90 dni po przesłaniu. TestFlight obsługuje do 100 aktywnych buildów jednocześnie. Każdy tester może zainstalować do 30 aplikacji jednocześnie. Crashlytics integruje się z TestFlight w celu zbierania raportów o awariach i błędach niekrytycznych.
Budowa IPA w środowisku CI wymaga runnera macOS. GitHub Actions, GitLab CI i Bitrise zapewniają środowiska macOS do budowy iOS. Fastlane lane `build_app` automatyzuje cały cykl: archiwizację, podpis, eksport IPA i przesłanie do TestFlight. Do zarządzania certyfikatami i profilami używa się Match — narzędzia Fastlane przechowującego podpisy w zaszyfrowanym repozytorium Git.
Programiści napotykają szereg typowych błędów podczas budowy i podpisu IPA. Większość z nich wiąże się z nieprawidłową konfiguracją certyfikatów i profilów.
Xcode nie znajduje Provisioning Profile odpowiadającego bundle ID i certyfikatowi. Rozwiązanie — pobrać aktualne profile w Xcode Accounts → Download Manual Profiles lub użyć Automatic Signing.
Błąd występuje podczas przesyłania IPA z nieprawidłową architekturą. Nowoczesne IPA powinny zawierać tylko arm64. Obecność i386 lub x86_64 w pliku binarnym powoduje odrzucenie. Rozwiązanie — sprawdzić architektury w Build Settings i wykluczyć architektury symulatora.
IPA nie zawiera prawidłowej struktury Payload/App.app. Apple oczekuje dokładnej hierarchii. Rozwiązanie — sprawdzić, czy archiwum zawiera folder Payload z jednym .app bundle, a nie płaską listę plików.
Do dystrybucji korporacyjnej używa się programu Enterprise Apple (299 USD/rok). IPA jest podpisywane certyfikatem Enterprise i może być instalowane na dowolnych urządzeniach firmy bez ograniczenia ilości. Dystrybucja ad-hoc jest ograniczona do 100 urządzeń na konto programisty (99 USD/rok). Systemy MDM (Mobile Device Management), takie jak Jamf i Microsoft Intune, obsługują masową instalację Enterprise-IPA.
Często zadawane pytania
IPA używa wykonywalnego formatu Mach-O zamiast DEX, wymaga Provisioning Profile do instalacji i przechodzi surową weryfikację App Store. APK, w przeciwieństwie do IPA, można zainstalować bezpośrednio bez pośredników (sideloading).
Nie, budowa IPA wymaga Xcode i narzędzi Apple, które są dostępne tylko na macOS. Alternatywy: zdalne serwery macOS (Mac min, AWS Mac) lub chmurowe CI (GitHub Actions z runnerem macOS).
Prosta aplikacja — 5–30 MB. Aplikacja średniej złożoności — 30–150 MB. Gry mogą osiągać 4 GB. Apple ogranicza rozmiar pobierania przez sieć komórkową do 200 MB, ale użytkownik może pobrać przez Wi-Fi.
Do instalacji ad-hoc używa się Xcode lub Apple Configurator. Aplikacje Enterprise są dystrybuowane przez wewnętrzny serwer z manifest.plist. Zwykły użytkownik nie może zainstalować IPA bez jailbreak lub TestFlight.
Fat IPA zawiera kilka architektur (arm64 + x86_64) do uniwersalnej budowy. Thin IPA zawiera tylko jedną architekturę dla konkretnego urządzenia. Apple przyjmuje tylko thin IPA do publikacji — fat pliki binarne są odrzucane.
Podsumowanie
Opracujemy aplikację mobilną pod klucz
IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.
Przeczytaj również