【iOS】xcframeworkのRelease版がDebug版より大きい理由
本記事は、『iOS Advent Calendar 2025』25日目の記事です。
はじめに
SDKのビルド成果物を確認していたところ、以下の現象に気づきました。
| プラットフォーム | Debug版 | Release版 |
|---|---|---|
| Android | 2.0 MB | 1.5 MB |
| iOS | 5.0 MB | 10.0 MB |
※ サイズは例です
Androidは Debug > Release なのに、iOSは Release > Debug になっている。
これは正常な動作なのか?調査した結果をまとめます。
結論
正常な動作です。
iOSでRelease版が大きくなる原因は、Xcodeの Build Active Architecture Only 設定によるものです。
Build Active Architecture Only とは
ビルド対象を「今の開発環境だけ」に絞るかどうか設定する箇所になります。
YESにすると速く・小さく、NOにすると遅く・大きくなります。
設定の場所
Xcodeで以下の手順で確認できます:
- プロジェクトまたはターゲットを選択
- Build Settings タブを開く
- 「architecture」のBuild Active Architecture Only を確認

デフォルト設定
| 設定 | Debug(デフォルト) | Release(デフォルト) |
|---|---|---|
| Build Active Architecture Only | YES | NO |
| ビルドされるアーキテクチャ | 1つだけ | 全て |
| ファイルサイズ | 小さい | 大きい |
設定の意味
-
YES: 現在接続中のデバイス/シミュレータのアーキテクチャを1つだけビルドする
- ビルド時間短縮のため
-
NO: 配布用に全アーキテクチャをビルドする
- どの環境でも動作させるため
参考サイト:
原文を見る
By default in Debug mode Build Active Architecture Only value is YES.
What this mean that Xcode will build the architecture which is specified in the target.
For Release mode, the default value will be NO.
When we specify the value for Build Active Architecture Only as NO, Xcode will build all the architectures which are specified under Valid Architectures.
デバッグモードでは、デフォルトで「Build Active Architecture Only」の値はYESです。
これは、Xcodeがターゲットで指定されたアーキテクチャのみをビルドすることを意味します。
リリースモードでは、デフォルト値はNOになります。
「Build Active Architecture Only」の値をNOに設定すると、Xcodeは「Valid Architectures」で指定されたすべてのアーキテクチャをビルドします。
Release版が大きくなる理由
Release版(Build Active Architecture Only = NO)では、以下のアーキテクチャが含まれます:
MySDK.xcframework/
├── ios-arm64/ ← 実機用(arm64)
└── ios-arm64_x86_64-simulator/ ← シミュレータ用(arm64 + x86_64)
シミュレータ用に2つのアーキテクチャが含まれる理由:
| Mac の種類 | CPU | 必要なアーキテクチャ |
|---|---|---|
| Intel Mac | x86_64 | x86_64 |
| Apple Silicon Mac (M1/M2/M3) | arm64 | arm64 |
Release版はどちらのMacでも開発できるよう、両方を含んでいます。
参考サイト:
原文を見る
Simulators (x86_64 or arm64): Simulators running on Intel-based Macs (before the M1 transition) use x86_64architecture.
However, if you’re using a Mac with Apple Silicon (M1, M2, etc.), the simulator uses the arm64architecture, just like real devices.
When creating an XCFramework, you need to bundle versions of the framework for both device (arm64) and simulator (x86_64 and/or arm64) architectures
XCFrameworksに異なるアーキテクチャが必要な理由
実機デバイス(arm64):iPhoneやiPadなどのiOSデバイスはARMベースのプロセッサを使用するため、これらのデバイスでネイティブに動作させるには、フレームワークをarm64アーキテクチャ向けにコンパイルする必要があります。
シミュレータ(x86_64 または arm64):IntelベースのMac(M1移行前)上で動作するシミュレータはx86_64アーキテクチャを使用します。
ただし、Apple Silicon(M1、M2など)搭載のMacを使用している場合、シミュレータは実機と同様にarm64アーキテクチャを使用します。
XCFrameworkを作成する際には、デバイス用(arm64)とシミュレータ用(x86_64 および/または arm64)の両方のアーキテクチャ向けにフレームワークのバージョンをバンドルする必要があります。
アーキテクチャ確認方法
xcframeworkのフォルダ構造を見ると、含まれているアーキテクチャが分かります。

フォルダ名から、シミュレータ用には arm64 と x86_64 の2つのアーキテクチャが含まれていることがわかります。
図解
Debug版とRelease版の違いは、シミュレータ用バイナリに含まれるアーキテクチャ数だと分かりました。
【Debug版(Build Active Architecture Only = YES)】
┌─────────────────────────────────────────────┐
│ ios-arm64/ → arm64 │ ← 実機用
│ ios-arm64_x86_64-simulator/ → arm64のみ │ ← 現在のMacに合わせて1つだけ
└─────────────────────────────────────────────┘
合計: 約5.0MB
【Release版(Build Active Architecture Only = NO)】
┌─────────────────────────────────────────────┐
│ ios-arm64/ → arm64 │ ← 実機用
│ ios-arm64_x86_64-simulator/ │
│ ├ arm64 ← Apple Silicon Mac用 │
│ └ x86_64 ← Intel Mac用 │
└─────────────────────────────────────────────┘
合計: 約10.0MB(シミュレータ用が約2倍)
AndroidとiOSの違い
なぜAndroidは逆(Debug > Release)なのか?
Android: Debug版が大きい理由
Debug版にはデバッグ用の情報が含まれるため、サイズが大きくなります:
- デバッグシンボル(変数名、行番号など)
- ログ出力コード
- 未使用コード
Release版ではこれらが削除・圧縮(ProGuard/R8)されるため、小さくなります。
iOS: Release版が大きい理由
Release版は配布用に全アーキテクチャを含むため、サイズが大きくなります:
- Debug版: 1アーキテクチャのみ
- Release版: arm64 + x86_64(シミュレータ用)
| 要因 | Android | iOS |
|---|---|---|
| サイズに影響する主な要因 | デバッグ情報の有無 | アーキテクチャ数 |
| Debug版 | デバッグ情報あり → 大きい | 1アーキテクチャ → 小さい |
| Release版 | 最適化・圧縮 → 小さい | 全アーキテクチャ → 大きい |
Androidの参考:
Debug APKs are larger because they include symbols and logs.
まとめ
- iOSでRelease版 > Debug版 となるのは正常
- 原因は
Build Active Architecture Only設定(Debug=YES, Release=NO) - Release版はIntel Mac / Apple Silicon Mac両対応のため複数アーキテクチャを含む
Discussion