⚖️

【iOS】xcframeworkのRelease版がDebug版より大きい理由

に公開

本記事は、『iOS Advent Calendar 2025』25日目の記事です。
https://qiita.com/advent-calendar/2025/ios

はじめに

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で以下の手順で確認できます:

  1. プロジェクトまたはターゲットを選択
  2. Build Settings タブを開く
  3. 「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」で指定されたすべてのアーキテクチャをビルドします。

https://medium.com/macoclock/deep-drive-xcode-build-settings-827c3ce4811c

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)の両方のアーキテクチャ向けにフレームワークのバージョンをバンドルする必要があります。

https://medium.com/@infinityvaibhav/why-there-are-different-architectures-here-in-ios-9ae7bac3d6a7

アーキテクチャ確認方法

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.

https://www.thelasttech.com/android/what-is-debug-build-in-android-development

まとめ

  • iOSでRelease版 > Debug版 となるのは正常
  • 原因は Build Active Architecture Only 設定(Debug=YES, Release=NO)
  • Release版はIntel Mac / Apple Silicon Mac両対応のため複数アーキテクチャを含む

Discussion