※ これは 2022/11/11 時点の Unity 2022.1.22f1 Localization v1.4.2 の情報です
最新版では動作が異なる可能性がありますのでご注意ください
前回、Unity の Localization でアプリ名の多言語化をやってみたが、ビルド時にエラーが出たので解消を試みる
スポンサードリンク
Localization パッケージ内の PBXProjectExtensions.cs
の 95 行目で AmbiguousMatchException
が発生していた
AmbiguousMatchException
の内容を見るにリフレクションで複数の対象が見つかって対象が特定できない系のエラーっぽい
該当する Localization パッケージ内の Library/PackageCache/com.unity.localization@1.4.2/Editor/Platform/iOS/PBXProjectExtensions.cs
の 95 行目 を見てみると
s_PBXBuildFileDataCreateFromFile = s_PBXBuildFileDat.GetMethod("CreateFromFile", BindingFlags.Static | BindingFlags.Public);
PBXBuildFileData.CreateFromFile()
のメソッドをリフレクションで取得している
・・・というわけで UnityEditor.iOS.Xcode.PBX.PBXBuildFileData.CreateFromFile()
の定義を確認してみると下記のような感じだった
#region アセンブリ UnityEditor.iOS.Extensions.Xcode, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null // UnityEditor.iOS.Extensions.Xcode.dll #endregion using System.Collections.Generic; namespace UnityEditor.iOS.Xcode.PBX { internal class PBXBuildFileData : PBXObjectData { public string fileRef; public string compileFlags; public List<string> assetTags; public bool weak; public bool codeSignOnCopy; public bool removeHeadersOnCopy; public bool publicHeader; public PBXBuildFileData(); public static PBXBuildFileData CreateFromFile(string prefix, string fileRefGUID, bool weak, string compileFlags); public static PBXBuildFileData CreateFromFile(string fileRefGUID, bool weak, string compileFlags); public void SetCompileFlags(string flags); public override void UpdateProps(); public override void UpdateVars(); } }
確かに CreateFromFile()
のシグニチャは2つあり、このままだとどっちのメソッドか特定できない
これは Unity の Localzation パッケージの不具合!
しかたがないので無理やり PBXProjectExtensions.cs
の 95 行目を下記のように使っているシグニチャに特定できるよう書き換える
s_PBXBuildFileDataCreateFromFile = s_PBXBuildFileDat.GetMethod("CreateFromFile", new Type[] { typeof(string), typeof(bool), typeof(string)});
これだけだと UnityEditor に戻ったときにまた元のコードに戻ってしまうので、mac 上で書き変えた .cs ファイルの「情報を見る」ダイアログを開き、ロックをオンにする
これで iOS 用 Xcode プロジェクトのエクスポートを実行してみると・・・
エラーなくエクスポートが完了し、Xcode のプロジェクト内に InfoPlist.strings
が生成された!
ちゃんとアプリ名が多言語化された模様
不具合さえなければ簡単にアプリ名が多言語化されるようになっている
・・・いくら Experimental とはいえこういう不具合は早く直してほしい Unity さん!