Version: 2023.1
言語: 日本語
ビルトインプロファイラーによるパフォーマンスの測定
物理演算のパフォーマンス最適化

ビルドした iOS プレイヤーのサイズ最適化

プレイヤーのファイルサイズを削減する 2 つの主な方法は、Xcode 内で適切な リリース用ビルド を作成することと、Unity の ストリッピングレベル を変更することです。

リリースモードでビルド

リリース用のビルドは、Xcode コマンドの Product > Archive で行われることを想定しています。このコマンドを使用すると、リリース設定で しかも すべてのデバッグシンボルの削除を確実に実行できます。 このコマンドを発した後、Xcode は Organizer ウィンドウの Archives タブに切り替わります。アプリケーションのサイズを計算する方法やその他のサイズを縮小するためのヒントについては、Apple の Technical Q&A Reducing the size of my App を参照してください。

ノート: 無線でのダウンロード制限 (現在は150MB) を目標としている場合は、エラーに対して若干の余裕を見ておくことをお勧めします。

iOS ストリッピングレベル

以下の方法のストリッピングを行い、Mono スクリプトバックエンドビルドのサイズ最適化を行います。

  1. Strip assemblies レベル: スクリプトのバイトコードが分析され、スクリプトから参照されないクラスやメソッドは DLL から削除されます。その結果それらを AOT コンパイルフェーズから除外することができます。この最適化によりメインのバイナリサイズや付随する DLL のサイズは削減され、リフレクションが使用されないかぎり問題ありません。

  2. Strip ByteCode レベル: .NET DLL (Data フォルダーに保管) はストリッピングされてメタデータのみになります。これができるのは、すべてのコードが AOT フェーズですでにプリコンパイルされていて、メインバイナリにリンクされているためです。

  3. Use micro mscorlib レベル: 特別で小さいバージョンの mscorlib が使用されます。いくつかのコンポーネント、例えば、Security、Reflection.Emit、Remoting、non Gregorian calendars、その他はこのライブラリから除かれます。さらに内部コンポーネント間の相互依存関係は最小限になります。この最適化によりメインバイナリや mscorlib.dll サイズを削減できますが、いくつかの System や System.Xml アセンブリクラスと互換性がないため慎重に使用してください。

これらのレベルは累積なので、レベル 3 の最適化は暗示的にレベル 1、2 を含み、レベル 2 は暗示的にレベル 1 を含みます。

Micro mscorlib はコアライブラリが大きくストリッピングされたバージョンです。Unity で Mono ランタイムに必要なアイテムのみが残ります。micro mscorlib を使用するベストプラクティスは、アプリケーションで必要ない .NET のクラスや機能を使用しないことです。GUID などは、そのいい例です。GUID はカスタム作成された擬似 GUID で簡単に置き換えることが可能で、結果的によりよいパフォーマンスやアプリケーションサイズを得られます。

IL2CPP のストリッピング

詳細は IL2CPP を使ったマネージバイトコードのストリッピング を参照してください。

ノート アプリケーションに必要とされているのに誤ってストリッピングされてしまったクラスがどれなのかを判断するのが難しい場合があります。シミュレーターでストリッピングされたアプリケーションを実行し Xcode コンソールのメッセージをチェックすると、有用な情報が得られることがしばしばあります。

配布をできる限り最小化する簡単なチェックリスト

  1. アセットを最小化します: テクスチャで圧縮を有効化し解像度をできる限り下げます。さらに未圧縮音声の数も最小化します。ファイルサイズの削減についての追加ヒントは こちら を参照してください。
  2. Mono で iOS Stripping LevelUse micro mscorlib に設定するか、 IL2CPP で Strip Engine Code を有効にします。
  3. Script Call Optimization を Fast but no exceptions に設定します。
  4. コードの中で System.dll や System.Xml.dll に属するものは一切使用しないでください。これらのライブラリは micro mscorlib と互換性が ありません
  5. 不要なコードの依存関係を取り除く。
  6. API Compatibility Level に .Net 2.0 subset を設定します。.Net 2.0 subset は他のライブラリと限られた互換性しかないことに注意してください。
  7. 値型 (構造体も含む) との組み合わせでジェネリックコンテナーを使用することは避けます。

Unity でアプリケーションはどれぐらい小さくできますか。

空プロジェクトはサイズ最適化をすべてオフにすると App Store で 22MB 未満です。コードストリッピングを使用すると、メインカメラのみの空のシーンは App Store でおよそ 12MB 未満に縮小できます (zip や DRM 設定)。

App Store でリリースした後にアプリケーションのサイズが増加したのはなぜですか。

アプリをパブリッシュするときに App Store では最初にバイナリファイルを暗号化して zip で圧縮します。暗号化によってコードセグメントがよりランダムになり、圧縮の条件が悪くなります。前出の「リリースモードでビルド」を参考にして、提出する前に App Store でのサイズを見積もる方法を確認してください。


  • 2018–06–14 修正されたページ

  • 2017–14–06 - IL2CPP のストリッピング セクションを更新

ビルトインプロファイラーによるパフォーマンスの測定
物理演算のパフォーマンス最適化