強火で進め

このブログではプログラム関連の記事を中心に書いてます。

AssetBundle が iCloud のバックアップ対象と成っている問題の対象方法

Unity5.3.2p2~4 で AssetBundle が iCloud のバックアップ対象に成っているという問題が発生しているみたいです。

Unity5.3.2p2~4でAssetBundleがiCloudに入っちゃう暫定対策
http://sassembla.github.io/Public/2016:02:19%2017-17-27/2016:02:19%2017-17-27.html

自分でもバージョン 5.3.2f1 にてビルドしてテストした所、症状が発生しました。

原因を調査した所、 Unity では Library/UnityCache というフォルダにファイルを保存していました。

iOS ではアプリフォルダの Library フォルダはバックアップ対象です。しかし、その中の Caches フォルダ(つまり Library/Caches )はバックアップ対象外というルールが有ります。その除外対象のフォルダを使っていない為にバックアップ対象に成っていたという事です。

ちなみに Library/Caches って OS からの自動削除される可能性が有るフォルダだったりします。

今こそ復習したい、iOSアプリのディレクトリ構成 - Qiita
http://qiita.com/tototti/items/8646405f47cc56a59722

そこを避ける為に意図的に Library/Caches の中に保存するのを避けたのかな?と見ています。

そのうち修正されるでしょうがそれまでは AssetBundle をダウンロード&読み込んだ後にこんな感じで問題のフォルダをバックアップ対象から除外するコードを差し込んでおいて対応しておきましょう。

#if !UNITY_EDITOR && UNITY_IOS
		string dirPath = Application.temporaryCachePath + "/../UnityCache";
		if (System.IO.Directory.Exists(dirPath)) {
			UnityEngine.iOS.Device.SetNoBackupFlag(dirPath);
		}
#endif

(追記)
公式フォーラムのこちらのページで Unity の中の人が「 WWW.LoadFromCacheOrDownload を使ってダウンロードした場合には常にバックアップ対象外のフラグ付けるって動作に成っているよ」と回答しているので本来は付けているはずだけどこのバージョンでは付けられてないという事みたいです。

iOs and asset bundles? | Unity Community
http://forum.unity3d.com/threads/ios-and-asset-bundles.131865/#post-1202287

(追記ここまで)