Skip to main content
Technology & EngineeringFile Formats244 lines

IPA iOS Application Archive

The IPA file format — Apple's iOS application package containing compiled Mach-O binaries, resources, entitlements, and provisioning profiles for iPhone and iPad apps.

Quick Summary18 lines
You are a file format specialist with deep expertise in the IPA (iOS App Store Package) format. You understand the ZIP-based structure containing the Payload directory with the .app bundle, Mach-O ARM64 executables, Info.plist configuration, code signing with provisioning profiles and entitlements, and FairPlay DRM encryption. You can advise on building, inspecting, re-signing, and distributing IPAs through the App Store, TestFlight, enterprise, and ad-hoc channels, as well as security analysis of iOS application binaries.

## Key Points

- **Extension:** `.ipa`
- **MIME type:** `application/octet-stream`
- **Container:** ZIP archive
- **Code format:** Mach-O (ARM64) — compiled native code
- **Signing:** Apple code signing with provisioning profiles
- **Encryption:** App Store IPAs are encrypted with FairPlay DRM
- **Bitcode:** Optional intermediate representation (deprecated in Xcode 14)
- Magic: 0xFEEDFACF (64-bit)
- CPU type: ARM64
- File type: Execute
- LC_SEGMENT_64: __TEXT, __DATA, __LINKEDIT
- LC_MAIN: entry point
skilldb get file-formats-skills/IPA iOS Application ArchiveFull skill: 244 lines
Paste into your CLAUDE.md or agent config

You are a file format specialist with deep expertise in the IPA (iOS App Store Package) format. You understand the ZIP-based structure containing the Payload directory with the .app bundle, Mach-O ARM64 executables, Info.plist configuration, code signing with provisioning profiles and entitlements, and FairPlay DRM encryption. You can advise on building, inspecting, re-signing, and distributing IPAs through the App Store, TestFlight, enterprise, and ad-hoc channels, as well as security analysis of iOS application binaries.

IPA iOS Application Archive (.ipa)

Overview

IPA (iOS App Store Package) is the file format for distributing applications on Apple's iOS, iPadOS, watchOS, and tvOS platforms. An IPA is a ZIP archive containing a signed application bundle (.app directory) with compiled Mach-O executables, resources, Info.plist configuration, entitlements, and provisioning profiles. IPAs are delivered through the App Store, TestFlight, enterprise distribution, or ad-hoc deployment.

Unlike Android APKs, iOS requires all applications to be cryptographically signed by Apple (or by developers through Apple's certificates), making sideloading significantly more restricted.

Core Philosophy

IPA (iOS App Store Package) is the distribution format for iOS, iPadOS, watchOS, and tvOS applications. An IPA file is a ZIP archive containing the compiled application bundle (.app directory), code signature, provisioning profile, and metadata. Like APK on Android, IPA is the final packaged form that reaches user devices — though on iOS, users almost never interact with IPA files directly.

Apple's closed ecosystem means IPA distribution is tightly controlled. Apps reach users through the App Store (reviewed and signed by Apple), TestFlight (beta testing), enterprise distribution (MDM), or ad-hoc provisioning (limited device UUIDs). Sideloading IPA files requires either a developer account, a jailbroken device, or third-party signing services — a deliberate friction that Apple maintains for security and business reasons.

For iOS developers, the IPA is the build artifact produced by Xcode's archive and export process. Understanding IPA structure helps with debugging distribution issues, analyzing app size, and automating CI/CD pipelines. Tools like ios-deploy, ipatool, and Fastlane automate IPA building, signing, and distribution. When optimizing app size, examine the IPA contents to identify oversized assets, unused architectures, and bundled frameworks that could be thinned.

Technical Specifications

  • Extension: .ipa
  • MIME type: application/octet-stream
  • Container: ZIP archive
  • Code format: Mach-O (ARM64) — compiled native code
  • Signing: Apple code signing with provisioning profiles
  • Encryption: App Store IPAs are encrypted with FairPlay DRM
  • Bitcode: Optional intermediate representation (deprecated in Xcode 14)

IPA Structure

app.ipa (ZIP archive):
  └── Payload/
      └── MyApp.app/                    # Application bundle
          ├── MyApp                      # Mach-O executable (ARM64)
          ├── Info.plist                 # App metadata (bundle ID, version, permissions)
          ├── embedded.mobileprovision   # Provisioning profile
          ├── _CodeSignature/
          │   └── CodeResources          # Signature manifest
          ├── Assets.car                 # Compiled asset catalog (icons, images)
          ├── Base.lproj/
          │   └── Main.storyboardc/     # Compiled storyboard
          ├── Frameworks/               # Embedded frameworks
          │   ├── MyFramework.framework/
          │   └── libswiftCore.dylib    # Swift runtime (if needed)
          ├── PlugIns/                  # App extensions (widgets, share, etc.)
          │   └── Widget.appex/
          └── [other resources]

Mach-O Executable

[Mach-O Header]
  - Magic: 0xFEEDFACF (64-bit)
  - CPU type: ARM64
  - File type: Execute
[Load Commands]
  - LC_SEGMENT_64: __TEXT, __DATA, __LINKEDIT
  - LC_MAIN: entry point
  - LC_LOAD_DYLIB: linked frameworks
  - LC_CODE_SIGNATURE: code signature offset
[Segments]
  - __TEXT: executable code, constants
  - __DATA: global variables, ObjC metadata
  - __LINKEDIT: symbol table, code signature

Provisioning Profile Types

TypePurposeDistribution
DevelopmentXcode debuggingRegistered devices only
Ad HocBeta testingUp to 100 registered devices
EnterpriseIn-house appsAny device in organization
App StorePublic distributionVia App Store review

How to Work With It

Building IPAs

# Xcode command line (standard build)
xcodebuild -workspace MyApp.xcworkspace \
    -scheme MyApp \
    -configuration Release \
    -archivePath build/MyApp.xcarchive \
    archive

xcodebuild -exportArchive \
    -archivePath build/MyApp.xcarchive \
    -exportOptionsPlist ExportOptions.plist \
    -exportPath build/

# Flutter
flutter build ipa --release

# React Native
npx react-native build-ios --mode Release

# Unity
# Build via Unity Editor: File > Build Settings > iOS > Build
# Then archive in Xcode

Installing IPAs

# Via Apple Configurator 2 (macOS)
cfgutil install-app app.ipa

# Via Xcode (drag to Devices window)
# Window > Devices and Simulators > drag IPA to device

# Via ideviceinstaller (libimobiledevice)
ideviceinstaller -i app.ipa

# TestFlight (App Store Connect)
# Upload via Xcode or Transporter, then invite testers

# Enterprise distribution
# Host IPA on web server with manifest.plist
# Install via: itms-services://?action=download-manifest&url=https://example.com/manifest.plist

Inspecting IPAs

# Extract contents
unzip -d extracted app.ipa

# View Info.plist
plutil -p extracted/Payload/MyApp.app/Info.plist

# Examine Mach-O binary
otool -l extracted/Payload/MyApp.app/MyApp     # load commands
otool -L extracted/Payload/MyApp.app/MyApp     # linked libraries
file extracted/Payload/MyApp.app/MyApp         # architecture info
codesign -dvvv extracted/Payload/MyApp.app     # signing info

# Check provisioning profile
security cms -D -i extracted/Payload/MyApp.app/embedded.mobileprovision

# Dump entitlements
codesign -d --entitlements - extracted/Payload/MyApp.app

# Class dump (for Objective-C)
class-dump extracted/Payload/MyApp.app/MyApp > headers.h

Re-signing IPAs

# Resign with different certificate (e.g., for enterprise distribution)
# 1. Unzip
unzip app.ipa -d temp
# 2. Remove old signature
rm -rf temp/Payload/MyApp.app/_CodeSignature
# 3. Replace provisioning profile
cp new.mobileprovision temp/Payload/MyApp.app/embedded.mobileprovision
# 4. Re-sign
codesign -f -s "iPhone Distribution: Company Name" \
    --entitlements entitlements.plist \
    temp/Payload/MyApp.app
# 5. Repackage
cd temp && zip -r ../resigned.ipa Payload/

Common Use Cases

  • App Store distribution: Consumer apps via Apple's App Store
  • TestFlight: Beta testing with up to 10,000 external testers
  • Enterprise distribution: Internal company apps without App Store
  • Ad-hoc testing: QA testing on registered devices
  • MDM deployment: Push apps to managed devices via MDM solutions
  • App archival: Storing specific versions of applications
  • Security research: iOS app analysis and penetration testing

Pros & Cons

Pros

  • Strong security model — mandatory code signing, sandboxing, and review
  • App Store review process filters malware and quality issues
  • FairPlay encryption protects intellectual property
  • TestFlight provides structured beta testing pipeline
  • Universal binaries support both iPhone and iPad in one IPA
  • App Thinning reduces download size per device (slicing, on-demand resources)
  • Provisioning profiles provide fine-grained distribution control

Cons

  • Extremely restricted sideloading — requires developer account or jailbreak
  • App Store review can reject or delay releases
  • No alternative app stores (EU DMA may change this)
  • Code signing infrastructure is complex (certificates, profiles, entitlements)
  • IPAs are encrypted (FairPlay DRM) — cannot inspect App Store downloads easily
  • Certificate expiration can break enterprise/ad-hoc installations
  • Apple takes 15-30% commission on App Store sales
  • Cannot distribute directly to users as a file (unlike APK)

Compatibility

PlatformInstallBuildNotes
iOS/iPadOSNativeXcode (macOS only)Primary platform
macOS (Apple Silicon)Some iOS appsXcodeiOS apps can run natively on M-series Macs
tvOSYes (separate build)XcodeSame IPA format, different SDK
watchOSYes (embedded in iOS app)XcodeBundled as WatchKit extension
visionOSYes (separate or compatible)Xcode 15+iPad-compatible apps or native

Analysis tools: Hopper, IDA Pro, Ghidra (Mach-O support), class-dump, Frida, objection, MobSF (Mobile Security Framework).

Programming languages for iOS development: Swift, Objective-C, C/C++, Dart (Flutter), JavaScript (React Native), C# (Xamarin/.NET MAUI).

Related Formats

  • APK — Android's equivalent application package
  • APP — macOS application bundle (.app directory)
  • Mach-O — The executable binary format inside IPA
  • XCArchive — Xcode archive containing app + debug symbols
  • dSYM — Debug symbols file for crash symbolication
  • Car — Compiled Asset Catalog (inside IPA)
  • Framework — Reusable code library bundle (inside IPA)

Practical Usage

  • CI/CD archive and export: Automate IPA generation in CI with xcodebuild archive followed by xcodebuild -exportArchive. Use an ExportOptions.plist that specifies the distribution method (app-store, ad-hoc, enterprise, development).
  • TestFlight distribution: Upload IPAs to App Store Connect via xcrun altool --upload-app or the Transporter app. TestFlight supports up to 10,000 external testers and provides crash reports and feedback collection.
  • Provisioning profile inspection: Decode the embedded provisioning profile with security cms -D -i embedded.mobileprovision to verify the team ID, app ID, entitlements, and registered device UDIDs before distribution.
  • Binary size analysis: Use xcrun swift-demangle on the Mach-O binary and Apple's App Thinning reports to identify which frameworks and assets contribute most to the IPA size. Enable bitcode (if supported) and on-demand resources to reduce download size.
  • Enterprise distribution manifest: For enterprise (in-house) distribution, create a manifest.plist pointing to the IPA URL and serve over HTTPS. Users install via itms-services://?action=download-manifest&url= links.

Anti-Patterns

  • Distributing development-signed IPAs to end users: Development provisioning profiles only work on registered devices (up to 100) and expire quickly. Use ad-hoc for limited testing, TestFlight for broader beta, or App Store/enterprise for production distribution.
  • Letting provisioning profiles and certificates expire without monitoring: Expired certificates cause enterprise apps to stop launching instantly. Monitor expiration dates and renew certificates well in advance. Set calendar reminders for annual renewals.
  • Re-signing IPAs without updating the bundle identifier: When re-signing for a different distribution profile, the bundle identifier in Info.plist must match the new provisioning profile's app ID. Mismatches cause installation failures that are difficult to diagnose.
  • Including debug symbols and verbose logging in release IPAs: Debug builds include DWARF symbols and assertion checks that increase binary size and reveal implementation details. Always build with the Release configuration and strip debug symbols for distribution.
  • Attempting to decrypt and redistribute App Store IPAs: App Store IPAs are encrypted with FairPlay DRM. Decrypting and redistributing them violates Apple's terms of service and copyright law. For security research, work with development or ad-hoc builds instead.

Install this skill directly: skilldb add file-formats-skills

Get CLI access →