##やりたいこと
アプリ名とかのローカライズの設定を毎回xcodeで設定が面倒なのでunity内で完結したい
アプリ名や、ios固有のATT表示の赤枠のメッセージなどが対象
ATTの中のテキスト | アプリ名 |
---|---|
##検証環境
unity 2019.3.0f6 / Xcode 12.4
#手順
###1,プロジェクトにローカライズのデータを設置
何処に設置してもよいが下記2点は守ること
・ファイル名はInfoList.strings
(末尾のsを忘れないこと)
・格納するフォルダは対応言語に合わせること 日本語ならja
(jpと間違えないこと)
言語コードはコチラ参照https://qiita.com/hirobe/items/cb906cca486675d02a87
Base.lproj は用意されてない言語が端末で選択されているときに参照されるデフォルト用
(デフォルト用のつもりでしたが参照されて無い感じがしたのでbaseは見なかったことにしてください)
###2, InfoList.strings
の編集
例としてfr.lproj/InfoList.stringsの中を記載
CFBundleDisplayName = "フランス"; // アプリ名
ATTのメッセージを変えるなら NSUserTrackingUsageDescription
を指定
このあたりの設定のkey 的なものの一覧がどこかにあるのだろうけどパッと見つからなかったので割愛
###3、PostProcessBuildで1で作成したデータを紐づける
PostProcessBuildとは、という説明は割愛
public class PostProcessBuild : IPostprocessBuildWithReport
{
const string IOSPbxProjectPath = "/Unity-iPhone.xcodeproj/project.pbxproj";
int IOrderedCallback.callbackOrder => default;
void IPostprocessBuildWithReport.OnPostprocessBuild(BuildReport report)
{
var summary = report.summary;
if (summary.platformGroup != BuildTargetGroup.iOS) {
return;
}
string pbxPath = summary.outputPath + IOSPbxProjectPath;
var project = new PBXProject();
project.ReadFromFile(pbxPath);
string targetGuid = project.GetUnityMainTargetGuid();
// 指定パス以下にあるローカライズデータを紐づける
string[] languageArray = new string[] { "Base", "ja", "fr" }; // 紐づけたい言語を記載
foreach (string lang in languageArray) {
string dirPath = Application.dataPath + $"/Editor/Localisations/{lang}.lproj"; // project内に設置したパスを指定
var lGuid = project.AddFolderReference(dirPath, $"{lang}.lproj");
project.AddFileToBuild(targetGuid, lGuid);
}
project.WriteToFile(pbxPath);
}
}
###間違えやすいこと(やってて間違えてたこと)
// 似たような関数があるので注意 project.GetUnityFrameworkTargetGuidではない
string targetGuid = project.GetUnityMainTargetGuid();
##ビルドして完了
いつものようにビルドをして書き出されたxcodeプロジェクトを開くと
指定したフォルダを見つけることができるはず
あとは端末の言語を切り替えながら動作チェックしてみてください
まとめ
androidはコチラでできるみたい
https://qiita.com/ptkyoku/items/3f25872ae0f356966c88
デフォルトの設定は後ほど探しておきます
その他まちがってたらおしえてください