ビルトインプロファイラでのパフォーマンス測定
Optimizing Physics Performance

ビルドされるiOSプレイヤーのサイズ最適化

Suggest a change

Success!

Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable.

Close

Sumbission failed

For some reason your suggested change could not be submitted. Please try again in a few minutes. And thank you for taking the time to help us improve the quality of Unity Documentation.

Close

Cancel

プレイヤーのサイズを削減するふたつの主な方法は,Xcodeの Active Build Configuration と, Unityの Stripping Level を変更する方法です。

リリースモードでビルド

Since Unity 4.2 it is expected that final release builds are made using Xcode 4.x/5.x command Product -> Archive. Using this command ensures that build is made with release configuration and all the debug symbols are stripped. After issuing this command latest Xcode switches to Organizer window Archives tab (you can navigate there manually via Window -> Organizer menu). You will find there two very useful functions there: App Store size estimation and Distribution. Build size estimation function works pretty well, but it is always recommended to have some small extra margin for error when aiming for 3G download limit (which currently is 100MB).

Note: xcodebuild utility currently does not have proper equivalent of “Archive” command. If you rely on building for distribution on this tool you might consider passing -Wl,-S,-x extra linker flag to it.

iOS ストリッピング レベル (Advanced ライセンス機能)

ストリッピング作業によるサイズの最適化は次の通りにアクティベートします。

  1. Strip assemblies レベル: スクリプトのバイトコードは分析がなされて,スクリプトから参照されないクラスやメソッドはDLLからはずすことが出来て,AOTコンパイルフェーズからは,除外することが出来ます。この最適化によりメインのバイナリ サイズおよび付随するDLLのサイズを削減し,reflectionが使用されてないかぎり安全です。

  2. Strip ByteCode レベル: .NET DLLはストリッピングされてメタデータのみとなります。これが出来るのは全てのコードが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 を使用するベストプラクティスはアプリケーションで必要ないクラスまたは他の機能を使用しないことです。GUIDは省くことが出来る良い例です。簡単にカスタム作成された擬似GUIDにより簡単に置き換えることが出来てこれによりより良いパフォーマンスおよびアプリケーションサイズにつながります。

テクニック

Reflection を使用するときのストリッピングの対応方法

ストリッピングは静的なコード分析や依存していて効率的に行うことが難しい場合があり,特にreflectionのように動的な機能が使用される場合です。そういう状況ではどのクラスを対象外とするかの情報をヒントとして渡す必要があります。Unityは ブラックリスト をプロジェクト単位でサポートします。ブラックリストを使用するには link.xml ファイルを作成してAssets フォルダに置くのみです。 link.xml の記載方法のサンプルは次の通りです:-

<linker>
       <assembly fullname="System.Web.Services">
               <type fullname="System.Web.Services.Protocols.SoapTypeStubInfo" preserve="all"/>
               <type fullname="System.Web.Services.Configuration.WebServicesConfigurationSectionHandler" preserve="all"/>
       </assembly>

       <assembly fullname="System">
               <type fullname="System.Net.Configuration.WebRequestModuleHandler" preserve="all"/>
               <type fullname="System.Net.HttpRequestCreator" preserve="all"/>
               <type fullname="System.Net.FileWebRequestCreator" preserve="all"/>
       </assembly>
</linker>

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

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

  1. アセットを最小化します: テクスチャでPVRTC圧縮を有効化し解像度を出来る限り下げます。さらに未圧縮音声の数も最小化します。ファイルサイズのテクニックについては ここ を参照下さい。
  2. iOSストリッピングレベルを Use micro mscorlib に設定します。
  3. スクリプト コール最適化を 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 でアプリケーションはどれぐらい小さくできますか?

空プロジェクトはサイズ最適化を全てオフにすればAppStoreで 20 MBになります。もし Advanced ライセンス保有の場合(すなわちストリッピング オプションにアクセス出来る場合),メインカメラのみの空シーンはAppStoreでおよそ 11 MBに下げることが出来ます (zipつき および DRM 付属) 。

AppStoreでリリースした後にアプリサイズが増加したのはなぜでしょう?

アプリをパブリッシュするときにAppleは最初にバイナリファイルを暗号化してzipとして圧縮します。多くの場合AppleのDRMは4 MBほど増えます。原則として最終的なサイズ全てのファイル (実行ファイルを除いて) をzip圧縮したアーカイブ容量に圧縮してない実行ファイルを加えた容量です。

ビルトインプロファイラでのパフォーマンス測定
Optimizing Physics Performance