(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

(:3[kanのメモ帳]


本ブログの運営者kan.kikuchiが個人で開発したゲームです!

    

UnityでiOS向けビルドをした際に、AmbiguousMatchException: Ambiguous match foundというエラーが出てInfoPlist.stringsが生成されない(ローカライズされていない)時の対処法【Unity】【iOS】【Localization】


このエントリーをはてなブックマークに追加


この記事でのバージョン
Unity 2022.2.2f1
Localization 1.3.2


はじめに

今回はUnityでiOS向けにビルドした際にLocalization関係の以下のようなエラーが出て、

InfoPlist.stringsが生成されない(ローカライズされていない)時の対処法です!

AmbiguousMatchException: Ambiguous match found.
System.RuntimeType.GetMethodImplCommon (System.String name, System.Int32 genericParameterCount, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, System.Reflection.CallingConventions callConv, System.Type types, System.Reflection.ParameterModifier modifiers) (at <1b72fc97b7c245a483150421232eb6a9>:0)
System.RuntimeType.GetMethodImpl (System.String name, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, System.Reflection.CallingConventions callConv, System.Type types, System.Reflection.ParameterModifier modifiers) (at <1b72fc97b7c245a483150421232eb6a9>:0)
System.Type.GetMethod (System.String name, System.Reflection.BindingFlags bindingAttr) (at <1b72fc97b7c245a483150421232eb6a9>:0)
UnityEditor.Localization.Platform.iOS.PBXProjectExtensions..cctor () (at ./Library/PackageCache/com.unity.localization@1.3.2/Editor/Platform/iOS/PBXProjectExtensions.cs:95)
Rethrow as TypeInitializationException: The type initializer for 'UnityEditor.Localization.Platform.iOS.PBXProjectExtensions' threw an exception.
UnityEditor.Localization.Platform.iOS.Player.AddLocalizationToXcodeProject (System.String projectDirectory, UnityEngine.Localization.Platform.iOS.AppInfo appInfo) (at ./Library/PackageCache/com.unity.localization@1.3.2/Editor/Platform/iOS/Player.cs:58)
UnityEditor.Localization.Platform.iOS.Player.AddLocalizationToXcodeProject (System.String projectDirectory) (at ./Library/PackageCache/com.unity.localization@1.3.2/Editor/Platform/iOS/Player.cs:42)
UnityEditor.Localization.Platform.iOS.LocalizationBuildPlayerIOS.OnPostprocessBuild (UnityEditor.Build.Reporting.BuildReport report) (at ./Library/PackageCache/com.unity.localization@1.3.2/Editor/Platform/iOS/BuildPlayerIOS.cs:57)
UnityEditor.Build.BuildPipelineInterfaces+<>c__DisplayClass18_0.b__1 (UnityEditor.Build.IPostprocessBuildWithReport bpp) (at /Users/bokken/build/output/unity/unity/Editor/Mono/BuildPipeline/BuildPipelineInterfaces.cs:529)
UnityEditor.Build.BuildPipelineInterfaces.InvokeCallbackInterfacesPair[T1,T2] (System.Collections.Generic.List`1[T] oneInterfaces, System.Action`1[T] invocationOne, System.Collections.Generic.List`1[T] twoInterfaces, System.Action`1[T] invocationTwo, System.Boolean exitOnFailure) (at /Users/bokken/build/output/unity/unity/Editor/Mono/BuildPipeline/BuildPipelineInterfaces.cs:465)
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr, Boolean&) (at /Users/bokken/build/output/unity/unity/Modules/IMGUI/GUIUtility.cs:189)



対処法

そもそもこのエラーはLocalizationのバグなので

修正済みのバージョン(1.4.3または1.5.x以上)にすれば直るはずですが、

この記事執筆時点ではまだリリースはされてないようです。

Fix In Review for 1.4.3, 1.5.x


また、Unityのバージョンによっては発生しないようなので、

Unityのバージョンを下げて解決する事も可能です。

Reproducible with: 1.0.5 (2022.1.16f1), 1.4.2 (2022.1.16f1, 2022.1.23f1 2022.2.0f1, 2023.1.0a21)
Not reproducible with: 1.0.5 (2020.3.42f1), 1.4.2 (2020.3.42f1, 2021.3.14f1, 2022.1.15f1)


一応修正されてないUnityやLocalizationのバージョンでも

以下の記事のようにすれば対応する事も可能です。



具体的にはUnity上からは見えない(Finderから探す感じ)

Library/PackageCache/com.unity.localization@1.3.2/Editor/Platform/iOS/PBXProjectExtensions.cs

というファイルの95行目を以下のように書き換え

//↓元あったやつはコメントアウト
//s_PBXBuildFileDataCreateFromFile = s_PBXBuildFileDat.GetMethod("CreateFromFile", BindingFlags.Static | BindingFlags.Public);
//↓新しく追加
s_PBXBuildFileDataCreateFromFile = s_PBXBuildFileDat.GetMethod("CreateFromFile", new Type[] { typeof(string), typeof(bool), typeof(string)});


そのファイルの情報を見るから


ロックし、変更内容が戻らないようにするだけです。