Version: 2017.3
ビルトインプロファイラーでのパフォーマンス測定
物理演算のパフォーマンス最適化

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

プレイヤーのファイルサイズを削減する 2 つの主な方法は、Xcode の Active Build Configuration と、Unity の Stripping Level を変更する方法です。

リリースモードでビルド

完成版のリリース用のビルドは、Xcode 4.x/5.x のコマンドの Product -> Archive で行われることを想定しています。このコマンドを使用すると、リリース設定でのビルドの作成とすべてのデバッグシンボルの削除を確実に実行できます。 このコマンドを送った後、最近の Xcode は Organizer ウィンドウの Archives タブに切り替わります(手動で移動するには、Window -> Organizer の順にメニューを選択します)。そちらには App Store size estimationDistribution の 2 つのとても便利な機能があります。 ビルドサイズ見積り機能はとてもよい働きをしますが、3G ダウンロードリミット (現在は 100MB) に設定する場合、エラーへの対策としていくらか余分なマージンを常に持っておくことをお勧めします。

iOS ストリッピングレベル

ストリッピング作業によるサイズの最適化は以下のように行われます。

  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 のストリッピング

詳細は managed bytecode stripping with IL2CPP を参照してください。

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

ディストリビューションをできる限り最小化する簡単なチェックリスト

  1. アセットを最小化します。 テクスチャで PVRTC 圧縮を有効化し解像度をできる限り下げます。さらに非圧縮音声の数も最小化します。ファイルサイズの削減についての追加ヒントは こちら を参照してください。
  2. iOS の Stripping Level を Use micro mscorlib に設定します。
  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. JS 配列は使用しないでください。
  8. 値型 (構造体も含む) との組み合わせでジェネリックコンテナを使用することは避けます。

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

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

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

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


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