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形式は2008年にiPhone OS 2.0とApp Storeとともに登場しました。macOSの.appバンドル形式をベースに、転送時のサイズを減らすためにZIPでパッケージ化されました。それ以来、IPA構造は大きな変更を受けておらず、署名スキームとメタデータのみが進化してきました。
App Store — 主要なチャネル。アドホック配布 — 限られた数のデバイス(最大100台)でのテスト用。エンタープライズ配布 — ストアに公開せずに企業アプリを配布するため。開発者はXcodeを介して実際のデバイスでテストするためにもIPAを使用します。
IPAの内部構造は、.appバンドルを含むPayloadフォルダとメタデータを含むZIPアーカイブです。
| ファイル/ディレクトリ | 目的 |
|---|---|
| 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 — 公開用、コンパイラ最適化あり。各スキームはコンパイルフラグ、コード署名、エンタイトルメントを定義します。Xcodeは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)は別々に処理されます:ストーリーボードはバイナリの.storyboardc形式にコンパイルされ、画像はAsset Catalog(.car)に最適化されます。
署名はIPAの最も複雑な側面です。Appleは実際のデバイスで実行するすべてのアプリケーションにデジタル署名を要求します。システムは開発者証明書、エンタイトルメント、Provisioning Profileの準拠を検証します。
証明書(DevelopmentまたはDistribution) — 開発者の身元を証明します。Provisioning Profile — 証明書、bundle ID、許可されたデバイスのリスト(アドホック用)を結び付けます。エンタイトルメント — アプリの権限(プッシュ通知、iCloud、App Groups)。
Xcodeは.appバンドル内の各ライブラリとフレームワークに署名し、次にバンドル自体に署名します。最終的なIPAはZIPアーカイブレベルで署名されます。Appleはインストール時にすべての署名レベルを検証します。iOSは、1つでもコンポーネントの署名が無効な場合、アプリケーションを起動しません。
// 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はサポートされていない解像度とアーキテクチャのリソースを削除します。On-Demand Resourcesは、ユーザーのリクエストに応じてアプリの一部(ゲームレベル、動画)のみをロードできます。Bitcodeは中間表現であり、Appleは開発者の関与なしに新しいアーキテクチャ用に再コンパイルできます。
App Storeはまた、Sandbox要件へのIPA準拠をチェックします:アプリは他のアプリのデータ、そのコンテナ外のファイルシステム、またはユーザーの明示的な許可なしにハードウェア機能にアクセスしてはなりません。
TestFlightは、アプリのベータテストのためのAppleの公式サービスです。開発者はIPAをApp Store Connectにアップロードし、メールまたは公開リンクを介してテスターを招待します。
Internal Testing — 開発者チームの最大100名まで。Appleのレビューは不要です。External Testing — 最大10,000名のテスターまで、Beta App Reviewに合格する必要があります。TestFlightは自動的にテスターにビルドを配布し、分析情報を収集します。
ビルドはアップロード後90日間テスト可能です。TestFlightは同時に最大100のアクティブビルドをサポートします。各テスターは同時に最大30のアプリをインストールできます。CrashlyticsはTestFlightと統合してクラッシュレポートと非致命的エラーを収集します。
CI環境でのIPAビルドにはmacOSランナーが必要です。GitHub Actions、GitLab CI、BitriseはiOSビルド用のmacOS環境を提供します。Fastlaneのlane `build_app`は、アーカイブ、署名、IPAエクスポート、TestFlightへのアップロードの全サイクルを自動化します。証明書とプロファイルの管理には、暗号化されたGitリポジトリに署名を保存するFastlaneツールのMatchが使用されます。
開発者はIPAのビルドと署名時にいくつかの特徴的なエラーに直面します。ほとんどは証明書とプロファイルの誤った設定に関連しています。
Xcodeがbundle IDと証明書に一致するProvisioning Profileを見つけられません。解決策 — XcodeのAccounts → Download Manual Profilesで最新プロファイルをダウンロードするか、Automatic Signingを使用します。
このエラーは無効なアーキテクチャでIPAをアップロードする際に発生します。最新のIPAにはarm64のみを含める必要があります。バイナリにi386やx86_64が含まれていると拒否されます。解決策 — Build Settingsでアーキテクチャを確認し、シミュレータアーキテクチャを除外します。
IPAに正しいPayload/App.app構造が含まれていません。Appleは正確な階層を期待します。解決策 — アーカイブに.appバンドルを含むPayloadフォルダが含まれていることを確認します(フラットなファイルリストではありません)。
エンタープライズ配布には、Enterprise Apple Developer Program(年間$299)が使用されます。IPAはEnterprise証明書で署名され、数量制限なしに会社の任意のデバイスにインストールできます。アドホック配布は開発者アカウントごとに100デバイスに制限されています(年間$99)。MDM(モバイルデバイス管理)システム(JamfやMicrosoft Intuneなど)は、Enterprise IPAの一括インストールをサポートしています。
よくある質問
IPAはDEXの代わりにMach-O実行可能形式を使用し、インストールにProvisioning Profileが必要で、厳格なApp Storeレビューを受けます。APKはIPAとは異なり、仲介者なしで直接インストールできます(サイドローディング)。
いいえ、IPAのビルドにはXcodeとAppleツールが必要であり、これらはmacOSでのみ利用可能です。代替手段:リモートmacOSサーバー(Mac mini、AWS Mac)またはクラウドCIサービス(macOSランナーを使用するGitHub Actions)。
シンプルなアプリ — 5〜30 MB。中程度の複雑さのアプリ — 30〜150 MB。ゲームは4 GBに達する可能性があります。Appleはセルラーネットワークでのダウンロードサイズを200 MBに制限していますが、ユーザーはWi-Fi経由でダウンロードできます。
アドホックインストールにはXcodeまたはApple Configuratorが使用されます。エンタープライズアプリはmanifest.plistを使用して内部サーバーを介して配布されます。一般ユーザーはjailbreakまたはTestFlightなしではIPAをインストールできません。
Fat IPAにはユニバーサルビルド用に複数のアーキテクチャ(arm64 + x86_64)が含まれています。シンIPAには特定のデバイス用のアーキテクチャが1つだけ含まれています。Appleは公開用にシンIPAのみを受け入れます — fatバイナリは拒否されます。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。