🌍

[Unity]iOSビルド時にアプリ名やinfo.plistのローカライズを自動でやる

2021/06/22に公開

やりたいこと

アプリ名やinfo.plistの中見をビルド時に完全自動でローカライズさせたい

自分の環境

Unity2020.3.12f1
Xcode12.4

やること

最初は自分でPostProcessを使って自動化しようとしていたのですが、すでに同じようなことを実装されている方がいました。

https://github.com/zeyangl/UnityAppNameLocalizationForIOS

こちらを導入するとスムーズに設定できます。
ローカライズされた文字列が記載されたinfoPlist.stringsを含んだlprojフォルダを、対応したい言語分だけ追加します。

例えば日本語を設定してあげたい場合は

Assets
 L NativeLocale
    L iOS
       L ja.lproj
	  L infoPlist.strings

でOK。
infoPlist.stringsの中身

"CFBundleDisplayName" = "アプリ名";

あとはプロジェクト内のEditor以下のフォルダにあるスクリプトから

[PostProcessBuild(0)]
public static void EditIosInfoPlist(BuildTarget buildTarget, string pathToBuiltProject)
{
if (buildTarget == BuildTarget.iOS)
{
    // ローカライズ追加
    NativeLocale.AddLocalizedStringsIOS(pathToBuiltProject, Path.Combine(Application.dataPath, "NativeLocale/iOS"));            
}
}

のように呼んであげればOK。

ここで注意したいのが、自分の環境だとUnityでビルドしたXcodeプロジェクトは、デフォルトで英語のローカライズ設定がされていました。

Assets
 L NativeLocale
    L iOS
       L en.lproj

その状態でこのように英語用のローカライズを設定すると、ビルド時にinfoPlist.stringsが競合しましたみたいなエラーがでて失敗してしまいます。
なのでデフォルトのinfo.plistには英語用の文言をセットし、他で対応したい言語があればinfoPlist.stringsを配置する、というような対応にしています。

元のレポジトリからforkして日本語用のサンプルを追加したブランチを作ったので、記載しておきます。
https://github.com/sukedon/UnityAppNameLocalizationForIOS/tree/feature/sample_ja

おわり

アプリのリリースフローの中に「ビルドしてから◯◯をする」があると自分の場合たまにそれを忘れます。
申請後に思い出して取り下げてアップロードし直して、、といったことは面倒なので今後も完全に自動化していきたいです_(:3 」∠ )_

Discussion