iOSプロジェクトに動画ファイルを追加&ローカライズする
TL;DR 動画ファイルはAssets.xcassetsに入れるのではなくプロジェクトに追加する。
動画ファイルを追加する
Assets.xcassetsに登録した画像ファイルはXcodeの右パネルでLocalizationを指定するとローカライズできる。では動画ファイルは?
Assets.xcassetsに動画ファイルを追加する場合、再生する際に動画ファイルをメモリ上にまるごと読み込み、キャッシュディレクトリに展開する作業が必要になる。特に動画ファイルが10MB以上の大容量の場合では、読み込みと書き込みの時間が必要になる上、メモリの無駄遣いになる。
参考:https://stackoverflow.com/questions/48767676/load-video-from-assets-xcassets
プロジェクトに追加する場合は、ストレージからストリーミング再生できる(おそらく)ため、以上のような無駄は発生しない。Xcodeの左パネルに動画ファイルをドラッグ&ドロップして追加する。
Swiftからは以下のコードで動画ファイルを参照できる。
let url = Bundle.main.url(forResource: "The movie", withExtension: "mp4")
let player = AVPlayer(url: url)
// SwiftUI
VideoPlayer(player: player)
動画ファイルをローカライズ
プロジェクトのInfo -> Localizationsでローカライズ対象の言語が追加されていることを確認する。プロジェクトペインで動画ファイルを左クリックし、右パネルで「Localize…」をクリックする。ローカライズ対象の言語にチェックを入れる。
Finderでプロジェクトを開き、「en.lproj」等のフォルダ内の動画ファイルをローカライズされたものに置き換える。
以上でローカライズは完了するが、ローカライズする前にビルドを実行していた場合、古いファイルがアプリバンドル内に残っていることがある。シミュレーター(または実機)でローカライズされたファイルが再生されない場合は、Xcodeの「Product」メニューの「Clean Build Folder...」を実行する。
参考:https://ja.stackoverflow.com/questions/95196/プロジェクト内の動画ファイルをローカライズする方法について
Discussion