リソーススライスは、iOSアプリケーションのサイズを最適化する方法です

アプリケーションスライシングは、iOSおよびtvOSバージョン9.0で登場した新機能です。 開発者は、さまざまな種類のデバイスの複数のリソースオプションをApp Storeにアップロードできるようになりました。 これにより、ユーザーは特定のデバイスのみのデータパッケージをダウンロードするため、アプリケーションのサイズが大幅に削減されます。







アプリケーションのスライスは、より多くのアセットを元のアプリケーションにパックできると同時に、モバイルインターネット経由でダウンロードするために100 MBの制限内に収まるため、開発者に人気があります。 この結果を達成するために、開発者は、 先ほど説明した 、オンデマンドでリソースを使用する同様の方法を使用することもできます。 ただし、この方法は必ずしも便利で最適ではありません。必要なリソースを動的にロードするには、アプリケーションを事前に適合させる必要があります。 リソースをオンデマンドで使用することはあらゆる点でより複雑であり、アプリケーションをスライスする場合、これらの問題はありません。



アプリケーションのスライスには、実行可能ファイルのスライスとリソースのスライスの2種類があります。 実行可能ファイルのスライスとは、アプリケーションから未使用の実行可能コードを削除することです。 このタイプは、iOS / tvOSバージョン9.0以降のすべてのApp Storeアプリに自動的に適用されます。 リソースのスライス方法は、未使用のアセットの削除を伴うため、開発者の多大な努力が必要になります。 この記事で検討するのはこの方法です。



アプリケーションリソースをスライスする主な目的は、同じ資産の複数のバリアントで未使用の帯域幅とメモリ容量を使用することです。 古いが、それでも広く使用されているiOSデバイスの機能は新しいバージョンとは大きく異なるため、多くの場合、アセットに異なるオプションを適用する必要があります。 iOS 9.0がリリースされる前は、すべてのアセットがメインアプリケーションパッケージに含まれていなければならず、1つのオプションのみが使用されていたため、デバイスの帯域幅とメモリが失われました。 リソーススライシングメソッドを使用すると、メインアプリケーションパッケージから未使用のアセットを除外できます。



資産パッケージを使用すると、アプリケーションリソースを削減できます。 これが最も簡単な構造化方法です。 さらに、アセットパッケージはUnityに簡単に統合でき、そのパフォーマンスは通常のデータ配列の負荷に正比例します。 リソースをオンデマンドで使用する場合、アセットパッケージはバックエンドとしても使用できるため、既にリソースをオンデマンドで使用しているアプリケーションにスライス機能を簡単に追加できます。 アセットパッケージを設定した後、以下のコード例に示すように、リソーススライシングを使用するためにさらにいくつかの変更を行う必要があります。 この記事では、アセットパッケージを詳細に検討しません。そのため、それらについて初めて聞いた場合は、 こちらの資料を読むことをお勧めします



リソースを削減するには、開発者はすべての資産オプションに適したデバイスを指定し、アプリケーションの起動時に必要な資産をロードする必要があります。 元のiOS用のアプリケーションの開発では、リソースは次のようにスライスされます。アセットカタログ内で、データまたは画像オブジェクトが作成され、デバイスのリソースオプションが構成され、その後リソースがUIのプレースホルダーに割り当てられます。 Unityでは、開発者自身がリソースオプションを構成します。リソースオプションは、本質的に、潜在的に異なるアセットセットを持つパッケージです。 アプリケーションリソースのスライスに関係するすべてのパッケージオプションは、APIコールバック関数UnityEditor.iOS.BuildPipeline.collectResourcesを使用してコードで修正する必要があります。 次に、デバイスの正確な要件がUIのゲーム設定に示されます。 最後に、開発者は、アプリケーションの起動時にAssetBundle.CreateFromFile APIを使用してアセットパッケージを手動でダウンロードする必要があります。







アプリケーションリソーススライシングを使用する基本原則を示すコード例:



アプリケーションのスライスに関連するリソースを登録するためのスクリプト:



using UnityEditor.iOS; #if ENABLE_IOS_APP_SLICING public class BuildResources { [InitializeOnLoadMethod] static void SetupResourcesBuild() { UnityEditor.iOS.BuildPipeline.collectResources += CollectResources; } static UnityEditor.iOS.Resource[] CollectResources() { return new Resource[] { new Resource("asset-bundle-name").BindVariant("path/to/asset-bundle.hd"), "hd") .BindVariant("path/to/asset-bundle.md"), "md") .BindVariant("path/to/asset-bundle.sd"), "sd"), }; }
      
      







起動時にアセットパッケージをダウンロードする:



 < ...> var bundle = AssetBundle.LoadFromFile("res://asset-bundle-name"); // now use AssetBundle APIs to load assets // or Application.LoadLevel to load scenes var asset = bundle.LoadAsset("Asset"); < ...>
      
      







アセットパッケージの調査とアプリケーションリソースのスライスは、 BitBucketの Asset Bundle Manager デモプロジェクトから始めるのが最適です。 ここでは、デモプロジェクトの使用方法と設定方法の詳細な説明があります。



All Articles