プレイヤーのサイズを削減するふたつの主な方法は,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.
ストリッピング作業によるサイズの最適化は次の通りにアクティベートします。
Strip assemblies レベル: スクリプトのバイトコードは分析がなされて,スクリプトから参照されないクラスやメソッドはDLLからはずすことが出来て,AOTコンパイルフェーズからは,除外することが出来ます。この最適化によりメインのバイナリ サイズおよび付随するDLLのサイズを削減し,reflectionが使用されてないかぎり安全です。
Strip ByteCode レベル: .NET DLLはストリッピングされてメタデータのみとなります。これが出来るのは全てのコードが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 を使用するベストプラクティスはアプリケーションで必要ないクラスまたは他の機能を使用しないことです。GUIDは省くことが出来る良い例です。簡単にカスタム作成された擬似GUIDにより簡単に置き換えることが出来てこれによりより良いパフォーマンスおよびアプリケーションサイズにつながります。
ストリッピングは静的なコード分析や依存していて効率的に行うことが難しい場合があり,特に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コンソールのメッセージをチェックすることで有用な情報が得られることがしばしばあります。
空プロジェクトはサイズ最適化を全てオフにすればAppStoreで 20 MBになります。もし Advanced ライセンス保有の場合(すなわちストリッピング オプションにアクセス出来る場合),メインカメラのみの空シーンはAppStoreでおよそ 11 MBに下げることが出来ます (zipつき および DRM 付属) 。
アプリをパブリッシュするときにAppleは最初にバイナリファイルを暗号化してzipとして圧縮します。多くの場合AppleのDRMは4 MBほど増えます。原則として最終的なサイズ全てのファイル (実行ファイルを除いて) をzip圧縮したアーカイブ容量に圧縮してない実行ファイルを加えた容量です。