プレイヤーのファイルサイズを削減する 2 つの主な方法は、Xcode 内で適切な リリース用ビルド を作成することと、Unity の ストリッピングレベル を変更することです。
リリース用のビルドは、Xcode コマンドの Product > Archive で行われることを想定しています。このコマンドを使用すると、リリース設定で しかも すべてのデバッグシンボルの削除を確実に実行できます。 このコマンドを発した後、Xcode は Organizer ウィンドウの Archives タブに切り替わります。アプリケーションのサイズを計算する方法やその他のサイズを縮小するためのヒントについては、Apple の Technical Q&A Reducing the size of my App を参照してください。
ノート: 無線でのダウンロード制限 (現在は150MB) を目標としている場合は、エラーに対して若干の余裕を見ておくことをお勧めします。
以下の方法のストリッピングを行い、Mono スクリプトバックエンドビルドのサイズ最適化を行います。
Strip assemblies レベル: スクリプトのバイトコードが分析され、スクリプトから参照されないクラスやメソッドは DLL から削除されます。その結果それらを AOT コンパイルフェーズから除外することができます。この最適化によりメインのバイナリサイズや付随する DLL のサイズは削減され、リフレクションが使用されないかぎり問題ありません。
Strip ByteCode レベル: .NET DLL (Data フォルダーに保管) はストリッピングされてメタデータのみになります。これができるのは、すべてのコードが AOT フェーズですでにプリコンパイルされていて、メインバイナリにリンクされているためです。
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 で簡単に置き換えることが可能で、結果的によりよいパフォーマンスやアプリケーションサイズを得られます。
詳細は managed bytecode stripping with IL2CPP を参照してください。
ノート どのクラスが、アプリケーションに必要とされているのに誤ってストリッピングされてしまったか判断するのか難しい場合があります。シミュレーターでストリッピングされたアプリケーションを実行し Xcode コンソールのメッセージをチェックすると、有用な情報が得られることがしばしばあります。
空プロジェクトはサイズ最適化をすべてオフにすると App Store で 22MB 未満です。コードストリッピングを使用すると、メインカメラのみの空のシーンは App Store でおよそ 12MB 未満に縮小できます (zip や DRM 設定)。
アプリをパブリッシュするときに App Store では最初にバイナリファイルを暗号化して zip で圧縮します。暗号化によってコードセグメントがよりランダムになり、圧縮の条件が悪くなります。前出の「リリースモードでビルド」を参考にして、提出する前に App Store でのサイズを見積もる方法を確認してください。
2018–06–14 限られた 編集レビュー で修正されたページ
2017–14–06 - IL2CPP のストリッピング セクションを更新
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.