# Upgrade Admob SDK Issue 稍微記錄一下 admob 升級時碰到的問題跟查到的 reference 或 solution ###### tags: `sdk` `admob` `issue` ## 5.4.0-native issues 更新時間: 2021/4 ### 1. AdMob iOS 7.68+ 與 Firebase 的 Dependency 衝突 ``` Firebase/Analytics (= 6.32.2) was resolved to 6.32.2, which depends on Firebase/Core (= 6.32.2) was resolved to 6.32.2, which depends on FirebaseAnalytics (= 6.8.2) was resolved to 6.8.2, which depends on GoogleAppMeasurement (= 6.8.2) GoogleMobileAdsMediationChartboost (= 8.2.0.0) was resolved to 8.2.0.0, which depends on Google-Mobile-Ads-SDK (>= 7.61.0) was resolved to 7.69.0, which depends on GoogleAppMeasurement (~> 7.0)) ``` 初步判斷 Google-Mobile-Ads-SDK 升到 7.69.0 的話會跟 Firebase/Analytic 6.32.2 版本衝突 Google Analytic for Firebase 6.16.1 對應到 `iosPod Firebase/Analytics" version="6.32.2"` #### 嘗試解法:Google-Mobile-Ads-SDK 定在 7.68 ``` pod install output: Analyzing dependencies [!] CocoaPods could not find compatible versions for pod "GoogleAppMeasurement": In Podfile: Firebase/Analytics (= 6.32.2) was resolved to 6.32.2, which depends on Firebase/Core (= 6.32.2) was resolved to 6.32.2, which depends on FirebaseAnalytics (= 6.8.2) was resolved to 6.8.2, which depends on GoogleAppMeasurement (= 6.8.2) GoogleMobileAdsMediationFacebook (= 6.2.0.0) was resolved to 6.2.0.0, which depends on Google-Mobile-Ads-SDK (>= 7.67.0) was resolved to 7.68.0, which depends on GoogleAppMeasurement (~> 7.0) ``` 結果:還是出錯,7.68 好像還是會需要 GoogleAppMeasurement (~> 7.0) 試了改回 7.67 就可以執行 pod install 後來找到這篇問題有點像 https://stackoverflow.com/questions/65159944/ios-framework-addition-failed-due-to-a-cocoapods-installation-failure 這個開發者的說明與上面推測符合 [Paul Beusterien](https://stackoverflow.com/a/65160000/13037092): > The Firebase and Google-Mobile-Ads-SDK version specification in the Podfile are incompatible. > > Firebase 6.x is compatible with Google-Mobile-Ads-SDK versions up to 7.67.0. After 7.67.1, Firebase 7.x is required. 還有這篇也是 https://stackoverflow.com/questions/64850730/unity-firebase-admob-conflict-googleappmeasurement >Google-Mobile-Ads-SDK version 7.68 is only compatible with Firebase 7.x. If you want to use Firebase 6.x, you need to use 7.67 or earlier. #### 嘗試解法:升級 Google Analytic for Firebase 到 7.1.0 Failed, Compile error in Editor #### 嘗試解法:升級 Google Analytic for Firebase 到 7.0.0 Unity Build xcode project success Xcode Build success #### NOTE Firebase 目前(2021/4/12)最新版本為 7.1.0,但升上去這個版本的話有 API 更動需要修改專案呼叫的地方,測試 `7.0.0` 與 `AdMob 7.69` 能相容,暫時先進到這個版本。 ### 2. 承上,更新了 Firebase 7.1.0 遇到 Multiple commands produce ``` Multiple commands produce '/Users/user/Library/Developer/Xcode/DerivedData/Unity-iPhone-egovvhljohrqyqbqaxnptyjldagm/Build/Products/ReleaseForRunning-iphoneos/fortunecity.app/Frameworks/Helpshift.framework': 1) Target 'Unity-iPhone' has copy command from '/Users/user/Documents/projects/unity/build/fc/fc-admob540_769-firebase710/Pods/Helpshift/helpshift-sdk-ios-v7.9.1-withCampaigns/Helpshift.framework' to '/Users/user/Library/Developer/Xcode/DerivedData/Unity-iPhone-egovvhljohrqyqbqaxnptyjldagm/Build/Products/ReleaseForRunning-iphoneos/fortunecity.app/Frameworks/Helpshift.framework' 2) That command depends on command in Target 'Unity-iPhone': script phase “[CP] Embed Pods Frameworks” ``` 比對後發現 Firebase 7.1.0 多了 build phase [CP] Embed Pods Frameworks 嘗試把 `[CP] Copy Frameworks` 裡的 helpshift 移除 換報下面這個錯誤: ``` ld: warning: arm64 function not 4-byte aligned: _unwind_tester from /Users/user/Documents/projects/unity/build/fc/fc-admob540_769-firebase710/Libraries/libiPhone-lib.a(unwind_test_arm64.o) Undefined symbols for architecture arm64: "_OBJC_CLASS_$_ASWebAuthenticationSession", referenced from: objc-class-ref in GoogleSignInDependencies(OIDExternalUserAgentIOS_72d27a6b1ff725ce310d91d91741a793.o) ld: symbol(s) not found for architecture arm64 clang: error: linker command failed with exit code 1 (use -v to see invocation) ``` [這篇](https://stackoverflow.com/questions/66758193/undefined-symbols-for-architecture-x86-64-objc-class-aswebauthenticationses) 有人說可以試試看加 AuthenticationServices dependency >As a workaround, you can add the AuthenticationServices dependency manually. – Anastasia Mar 29 at 7:01 1. Add `Sign in with Apple` in Signing & Capabilities tab 2. Add `AuthenticationServices.framework` in General tab / Frameworks and Libraries 到 UnityFramework reference: [Adding Apple Sign-In Capabilities and framework dependencies on PostProcessing ](https://forum.unity.com/threads/adding-apple-sign-in-capabilities-and-framework-dependencies-on-postprocessing.823779/) ### 3. FAN 6.3.0 needs Google-Mobile-Ads-SDK 8.1.0+ ``` iOS framework addition failed due to a CocoaPods installation failure. This will will likely result in an non-functional Xcode project. After the failure, "pod repo update" was executed and succeeded. "pod install" was then attempted again, and still failed. This may be due to a broken CocoaPods installation. See: https://guides.cocoapods.org/using/troubleshooting.html for potential solutions. pod install output: Analyzing dependencies [!] CocoaPods could not find compatible versions for pod "Google-Mobile-Ads-SDK": In Podfile: Google-Mobile-Ads-SDK (= 7.69) GoogleMobileAdsMediationFacebook (= 6.3.0.0) was resolved to 6.3.0.0, which depends on Google-Mobile-Ads-SDK (>= 8.1.0) Specs satisfying the `Google-Mobile-Ads-SDK (= 7.69), Google-Mobile-Ads-SDK (>= 8.1.0)` dependency were found, but they required a higher minimum deployment target. WARNING: CocoaPods requires your terminal to be using UTF-8 encoding. Consider adding the following to ~/.profile: export LANG=en_US.UTF-8 ``` 1. `FAN 6.3.0` depends on `GoogleMobileAdsMediationFacebook 6.3.0.0` 2. `GoogleMobileAdsMediationFacebook 6.3.0.0` depends on `Google-Mobile-Ads-SDK 8.1.0+` 3. Latest version `GoogleMobileAds 5.4.0 (Unity)` mapping to `7.68.0 (iOS)` https://github.com/googleads/googleads-mobile-unity/issues/1569 * opened on 5 Feb, 8 comments * last updated 4 days ago ### 4. [android] AndroidManifest.xml is missing ``` BuildMethodException: [GoogleMobileAds] AndroidManifest.xml is missing. Try re-importing the plugin. ManifestProcessor.StopBuildWithMessage (System.String message) (at Assets/FDMobileAds/GoogleMobileAds/Editor/ManifestProcessor.cs:175) ManifestProcessor.OnPreprocessBuild (UnityEditor.Build.Reporting.BuildReport report) (at Assets/FDMobileAds/GoogleMobileAds/Editor/ManifestProcessor.cs:52) UnityEditor.Build.BuildPipelineInterfaces+<>c__DisplayClass15_0.<OnBuildPreProcess>b__1 (UnityEditor.Build.IPreprocessBuildWithReport bpp) (at /Users/bokken/buildslave/unity/build/Editor/Mono/BuildPipeline/BuildPipelineInterfaces.cs:411) 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/buildslave/unity/build/Editor/Mono/BuildPipeline/BuildPipelineInterfaces.cs:391) UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr) (at /Users/bokken/buildslave/unity/build/Modules/IMGUI/GUIUtility.cs:197) ``` 這個是因為前一次 build 被打斷了,`FDMobileAdsBuildProcessor` 裡面搬動 plugin 的步驟沒有搬回來,導致資料夾裡少了檔案。 把 diff reset 回去就可以了 (但可能要再想一下 build failed 怎麼 handle 讓他復原) ### 5. ``` Win32Exception: ApplicationName='/Applications/Unity/Hub/Editor/2019.4.15f1/PlaybackEngines/AndroidPlayer/SDK/tools/bin/sdkmanager', CommandLine='--list', CurrentDirectory='/Users/user/Documents/projects/unity/fortunecity-client', Native error= Access denied System.Diagnostics.Process.StartWithCreateProcess (System.Diagnostics.ProcessStartInfo startInfo) (at <ef151b6abb5d474cb2c1cb8906a8b5a4>:0) System.Diagnostics.Process.Start () (at <ef151b6abb5d474cb2c1cb8906a8b5a4>:0) (wrapper remoting-invoke-with-check) System.Diagnostics.Process.Start() UnityEditor.Utils.Program.Start (System.EventHandler exitCallback) (at /Users/bokken/buildslave/unity/build/Editor/Mono/Utils/Program.cs:46) UnityEditor.Utils.Program.Start () (at /Users/bokken/buildslave/unity/build/Editor/Mono/Utils/Program.cs:30) UnityEditor.Android.Command.Run (System.Diagnostics.ProcessStartInfo psi, UnityEditor.Android.Command+WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg) (at <dc407cb797ef4a3c9593841f34ad81a7>:0) UnityEditor.Android.AndroidSDKTools.RunAndroidSdkTool (System.String toolName, System.String arguments, System.Boolean updateCommand, System.String errorMsg, System.String toolsDir, System.String[] warningsToIgnore) (at <dc407cb797ef4a3c9593841f34ad81a7>:0) UnityEditor.Android.AndroidSDKTools.ListComponentsVersions () (at <dc407cb797ef4a3c9593841f34ad81a7>:0) UnityEditor.Android.SDKManager.UpdatePackagesList () (at <dc407cb797ef4a3c9593841f34ad81a7>:0) UnityEditor.Android.SDKManager.HighestVersionInstalled (UnityEditor.Android.SDKManager+Component tool) (at <dc407cb797ef4a3c9593841f34ad81a7>:0) UnityEditor.Android.PostProcessor.Tasks.CheckAndroidSDK+SDKToolsDetector.GetVersion () (at <dc407cb797ef4a3c9593841f34ad81a7>:0) UnityEditor.Android.PostProcessor.Tasks.CheckAndroidSDK+SDKComponentDetector.Detect (System.Version minVersion, UnityEditor.Android.PostProcessor.ProgressHandler onProgress) (at <dc407cb797ef4a3c9593841f34ad81a7>:0) UnityEditor.Android.PostProcessor.Tasks.CheckAndroidSDK.EnsureSDKComponentVersion (System.Version minVersion, UnityEditor.Android.PostProcessor.Tasks.CheckAndroidSDK+SDKComponentDetector detector) (at <dc407cb797ef4a3c9593841f34ad81a7>:0) UnityEditor.Android.PostProcessor.Tasks.CheckAndroidSDK.Execute (UnityEditor.Android.PostProcessor.PostProcessorContext context) (at <dc407cb797ef4a3c9593841f34ad81a7>:0) UnityEditor.Android.PostProcessor.PostProcessRunner.RunAllTasks (UnityEditor.Android.PostProcessor.PostProcessorContext context) (at <dc407cb797ef4a3c9593841f34ad81a7>:0) UnityEditor.Android.PostProcessAndroidPlayer.PrepareForBuild (UnityEditor.BuildOptions options, UnityEditor.BuildTarget target) (at <dc407cb797ef4a3c9593841f34ad81a7>:0) UnityEditor.Android.AndroidBuildPostprocessor.PrepareForBuild (UnityEditor.BuildOptions options, UnityEditor.BuildTarget target) (at <dc407cb797ef4a3c9593841f34ad81a7>:0) UnityEditor.PostprocessBuildPlayer.PrepareForBuild (UnityEditor.BuildOptions options, UnityEditor.BuildTargetGroup targetGroup, UnityEditor.BuildTarget target) (at /Users/bokken/buildslave/unity/build/Editor/Mono/BuildPipeline/PostprocessBuildPlayer.cs:149) UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr) (at /Users/bokken/buildslave/unity/build/Modules/IMGUI/GUIUtility.cs:197) ``` Solution: * Reference: https://forum.unity.com/threads/cannot-build-for-android-on-mac-with-android-support-installed-by-unity-hub-due-to-sdkmanager.727298/ ``` 1. Copy this file. (ApplicationName=...) 2. Delete this file. 3. Paste this file. ``` ### 6. ``` TypeLoadException: Could not resolve type with token 01000036 (from typeref, class/assembly Google.EditorInitializer, Google.VersionHandlerImpl, Version=1.2.0.0, Culture=neutral, PublicKeyToken=null) Rethrow as TypeInitializationException: The type initializer for 'Firebase.Editor.GenerateXmlFromGoogleServicesJson' threw an exception. System.Reflection.MonoCMethod.InternalInvoke (System.Object obj, System.Object[] parameters) (at <9577ac7a62ef43179789031239ba8798>:0) Rethrow as TargetInvocationException: Exception has been thrown by the target of an invocation. System.Reflection.MonoCMethod.InternalInvoke (System.Object obj, System.Object[] parameters) (at <9577ac7a62ef43179789031239ba8798>:0) System.RuntimeType.CreateInstanceMono (System.Boolean nonPublic) (at <9577ac7a62ef43179789031239ba8798>:0) System.RuntimeType.CreateInstanceSlow (System.Boolean publicOnly, System.Boolean skipCheckThis, System.Boolean fillCache, System.Threading.StackCrawlMark& stackMark) (at <9577ac7a62ef43179789031239ba8798>:0) System.RuntimeType.CreateInstanceDefaultCtor (System.Boolean publicOnly, System.Boolean skipCheckThis, System.Boolean fillCache, System.Threading.StackCrawlMark& stackMark) (at <9577ac7a62ef43179789031239ba8798>:0) System.Activator.CreateInstance (System.Type type, System.Boolean nonPublic) (at <9577ac7a62ef43179789031239ba8798>:0) System.Activator.CreateInstance (System.Type type) (at <9577ac7a62ef43179789031239ba8798>:0) UnityEditor.AssetPostprocessingInternal.InitPostprocessors (UnityEditor.Experimental.AssetImporters.AssetImportContext context, System.String pathName) (at /Users/bokken/buildslave/unity/build/Editor/Mono/AssetPostprocessor.cs:311) UnityEditor.AssetPostprocessingInternal:InitPostprocessors(AssetImportContext, String) (at /Users/bokken/buildslave/unity/build/Editor/Mono/AssetPostprocessor.cs:322) ``` *WARNING:未知* ### 7. Resolve 完保留 Firebase .arr files NOTE: 要把 .meta 刪掉讓 unity 重新產生,不然 build 的時候會被移除。推測跟 .meta 裡的 label `gpsr` 有關 ref: https://github.com/googlesamples/unity-jar-resolver/issues/19 ### 8. Google.MiniJson.dll 重複 在 `com.google.firebase.app@7.1.0` 跟 `GoogleMobileAds` 兩個地方 ``` PrecompiledAssemblyException: Multiple precompiled assemblies with the same name Google.MiniJson.dll included or the current platform. Only one assembly with the same name is allowed per platform. Assembly paths: /Users/user/Documents/projects/unity/fortunecity-client/Library/PackageCache/com.google.firebase.app@7.1.0/Firebase/Plugins/Google.MiniJson.dll Assets/Plugins/Google.MiniJson.dll UnityEditor.Scripting.ScriptCompilation.EditorBuildRules.ValidateAndGetNameToPrecompiledAssembly (UnityEditor.Scripting.ScriptCompilation.PrecompiledAssembly[] precompiledAssemblies) (at /Users/bokken/buildslave/unity/build/Editor/Mono/Scripting/ScriptCompilation/EditorBuildRules.cs:627) UnityEditor.Scripting.ScriptCompilation.EditorBuildRules.ToScriptAssemblies (System.Collections.Generic.IDictionary`2[TKey,TValue] targetAssemblies, UnityEditor.Scripting.ScriptCompilation.ScriptAssemblySettings settings, UnityEditor.Scripting.ScriptCompilation.EditorBuildRules+CompilationAssemblies assemblies, System.Collections.Generic.HashSet`1[T] runUpdaterAssemblies) (at /Users/bokken/buildslave/unity/build/Editor/Mono/Scripting/ScriptCompilation/EditorBuildRules.cs:639) UnityEditor.Scripting.ScriptCompilation.EditorBuildRules.GenerateChangedScriptAssemblies (UnityEditor.Scripting.ScriptCompilation.EditorBuildRules+GenerateChangedScriptAssembliesArgs args) (at /Users/bokken/buildslave/unity/build/Editor/Mono/Scripting/ScriptCompilation/EditorBuildRules.cs:583) UnityEditor.Scripting.ScriptCompilation.EditorCompilation.CompileScripts (UnityEditor.Scripting.ScriptCompilation.ScriptAssemblySettings scriptAssemblySettings, System.String tempBuildDirectory, UnityEditor.Scripting.ScriptCompilation.EditorScriptCompilationOptions options, UnityEditor.Scripting.ScriptCompilation.CompilationTaskOptions compilationTaskOptions, UnityEditor.Scripting.ScriptCompilation.EditorBuildRules+TargetAssembly[]& notCompiledTargetAssemblies, System.String[]& notCompiledScripts) (at /Users/bokken/buildslave/unity/build/Editor/Mono/Scripting/ScriptCompilation/EditorCompilation.cs:1548) UnityEditor.Scripting.ScriptCompilation.EditorCompilation.CompileScripts (UnityEditor.Scripting.ScriptCompilation.EditorScriptCompilationOptions options, UnityEditor.BuildTargetGroup platformGroup, UnityEditor.BuildTarget platform, UnityEditor.Scripting.ScriptCompilation.CompilationTaskOptions compilationTaskOptions) (at /Users/bokken/buildslave/unity/build/Editor/Mono/Scripting/ScriptCompilation/EditorCompilation.cs:1478) UnityEditor.Scripting.ScriptCompilation.EditorCompilation.TickCompilationPipeline (UnityEditor.Scripting.ScriptCompilation.EditorScriptCompilationOptions options, UnityEditor.BuildTargetGroup platformGroup, UnityEditor.BuildTarget platform) (at /Users/bokken/buildslave/unity/build/Editor/Mono/Scripting/ScriptCompilation/EditorCompilation.cs:2042) UnityEditor.Scripting.ScriptCompilation.EditorCompilationInterface.TickCompilationPipeline (UnityEditor.Scripting.ScriptCompilation.EditorScriptCompilationOptions options, UnityEditor.BuildTargetGroup platformGroup, UnityEditor.BuildTarget platform) (at /Users/bokken/buildslave/unity/build/Editor/Mono/Scripting/ScriptCompilation/EditorCompilationInterface.cs:429) UnityEditor.Scripting.ScriptCompilation.EditorCompilationInterface:TickCompilationPipeline(EditorScriptCompilationOptions, BuildTargetGroup, BuildTarget) (at /Users/bokken/buildslave/unity/build/Editor/Mono/Scripting/ScriptCompilation/EditorCompilationInterface.cs:433) ``` 刪不掉 firebase 的只好刪 AdMob 的,可是不知道是不是因為這樣導致下一個 錯誤 ### 9. Method `Google.MiniJSON.Json.Deserialize(string)' is inaccessible from method `GoogleMobileAds.Common.Utils.CastAssetIDMappings(string)' ``` Caused by: java.lang.Exception: MethodAccessException: Method `Google.MiniJSON.Json.Deserialize(string)' is inaccessible from method `GoogleMobileAds.Common.Utils.CastAssetIDMappings(string)' GoogleMobileAds.Common.Utils.CastAssetIDMappings (System.String jsonMappings) (at <b12c1b9643d845f19ac2d2c567daabf2>:0) _lrzYIkvPC4Ct86Sgf1d6FlyaJ3M._eXQBkxLYQ0eJrSK9oYuIIkse1ON._yEWsWlmKeotZALIGHFAKgQaP2JP () (at <8f3eaa6ff7794cdc9e7fa259b15563b5>:0) _lrzYIkvPC4Ct86Sgf1d6FlyaJ3M._eXQBkxLYQ0eJrSK9oYuIIkse1ON..ctor (UnityEngine.AndroidJavaObject ) (at <8f3eaa6ff7794cdc9e7fa259b15563b5>:0) GoogleMobileAds.Android.AdLoaderClient.onUnifiedNativeAdLoaded (UnityEngine.AndroidJavaObject ad) (at <8f3eaa6ff7794cdc9e7fa259b15563b5>:0) System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) (at <2b3a3162be434770b7a4fac8b896e90c>:0) System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters) (at <2b3a3162be434770b7a4fac8b896e90c>:0) UnityEngine.AndroidJavaProxy.Invoke (System.String methodName, System.Object[] args) (at <64438264e25a42398aa0824121908267>:0) Rethrow as TargetInvocationException: GoogleMobileAds.Android.AdLoaderClient.onUnifiedNativeAdLoaded(UnityEngine.AndroidJavaObject) UnityEngine.AndroidJavaProxy.Invoke (System.String methodName, System.Object[] args) (at <64438264e25a42398aa0824121908267>:0) UnityEngine.AndroidJavaProxy.Invoke (System.String methodName, UnityEngine.AndroidJavaObject[] javaArgs) (at <64438264e25a42398aa0824121908267>:0) UnityEngine._AndroidJNIHelper.InvokeJavaProxyMethod (UnityEngine.AndroidJavaProxy proxy, System.IntPtr jmethodName, System.IntPtr jargs) (at <64438264e25a42398aa0824121908267>:0) ``` #### 嘗試升 Unity Ads 2.6.0 Version 2.6.0 Supports Unity Ads Android adapter version 3.6.0.0. Supports Unity Ads iOS adapter version 3.6.0.0. `Unity Ads 2.6.0` => `classpath 'com.android.tools.build:gradle:4.0.1'` build 不出來 ``` AAPT2 process unexpectedly exit ``` #### 嘗試升 Unity Ads 到 2.5.0 Version 2.5.0 Supports Unity Ads Android adapter version 3.5.0.0. Supports Unity Ads iOS adapter version 3.5.0.0. #### 移除 Firebase package 中的 Google.MiniJson,重裝 AdMob 的 Google.MiniJson 由於 AdMob 跟 Firebase package (用 unity package manager 裝的),兩個裡面都有 `Google.MiniJson`,在前一次整合 MobileAds 的時候是使用 Firebase 的,import GoogleMobileAds 時將其中的 Google.MiniJson 移除,實測結果正常。 但這次更新 Firebase 到 7.1.0,GoogleMobileAds 5.4.0,出現此錯誤: ``` MethodAccessException: Method `Google.MiniJSON.Json.Deserialize(string)' is inaccessible from method `GoogleMobileAds.Common.Utils.CastAssetIDMappings(string)' ``` Google 搜尋不到其他人發問相同問題。 嘗試手動移除 firebase package cache 裡的 Google.MiniJson,改使用 GogleMobileAds 的 Google.MiniJson,實測可行。 但由於 firebase package 是使用 unity package manager 裝的,應該要再用什麼辦法把 Firebase 裡的 Google.MiniJson 移除 ### 10. IL2CPP build failed ``` Exception: /Applications/Unity/Hub/Editor/2019.4.15f1/Unity.app/Contents/il2cpp/build/deploy/il2cppcore/il2cppcore.dll did not run properly! Failed running "/Applications/Unity/Hub/Editor/2019.4.15f1/Unity.app/Contents/il2cpp/build/deploy/il2cppcore/il2cppcore.dll" --convert-to-cpp --emit-null-checks --enable-array-bounds-check --dotnetprofile="unityaot" --compile-cpp --libil2cpp-static --platform="Android" --architecture="ARMv7" --configuration="Release" --outputpath="/Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/assets/bin/Data/Native/armeabi-v7a/libil2cpp.so" --cachedirectory="/Users/user/Documents/projects/unity/fortunecity-client/Assets/../Library/il2cpp_android_armeabi-v7a/il2cpp_cache" --additional-include-directories="/Applications/Unity/Hub/Editor/2019.4.15f1/PlaybackEngines/AndroidPlayer/Tools/bdwgc/include" --additional-include-directories="/Applications/Unity/Hub/Editor/2019.4.15f1/PlaybackEngines/AndroidPlayer/Tools/libil2cpp/include" --tool-chain-path="/Applications/Unity/Hub/Editor/2019.4.15f1/PlaybackEngines/AndroidPlayer/NDK" --incremental-g-c-time-slice=3 --profiler-report --map-file-parser="/Applications/Unity/Hub/Editor/2019.4.15f1/Unity.app/Contents/Tools/MapFileParser/MapFileParser" --directory="/Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/assets/bin/Data/Managed" --generatedcppdir="/Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput" stdout: Building libil2cpp.so with AndroidToolChain Output directory: /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/assets/bin/Data/Native/armeabi-v7a Cache directory: /Users/user/Documents/projects/unity/fortunecity-client/Library/il2cpp_android_armeabi-v7a/il2cpp_cache ObjectFiles: 423 of which compiled: 0 Total compilation time: 600 milliseconds. il2cpp.exe didn't catch exception: Unity.IL2CPP.Building.BuilderFailedException: /Applications/Unity/Hub/Editor/2019.4.15f1/PlaybackEngines/AndroidPlayer/NDK/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++ @"/var/folders/c6/3w_h6c8s75v67xstcs73tnm80000gn/T/tmplFYkkC.tmp" -o "/Users/user/Documents/projects/unity/fortunecity-client/Library/il2cpp_android_armeabi-v7a/il2cpp_cache/linkresult_FDCB2D0145EAAADC3C24D5A5B2D2E4A3/libil2cpp.so" -shared -Wl,-soname,libil2cpp.so -Wl,--no-undefined -Wl,-z,noexecstack -Wl,--gc-sections -Wl,--build-id -stdlib=libc++ -static-libstdc++ -target armv7-linux-androideabi19 -Wl,--wrap,sigaction -llog -rdynamic -fuse-ld=gold /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:15101: error: undefined reference to 'GADUGetResponseInfo' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:15101: error: undefined reference to 'GADUGetResponseInfo' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:15533: error: undefined reference to 'GADUCreateRewardedInterstitialAd' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:15533: error: undefined reference to 'GADUCreateRewardedInterstitialAd' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:15601: error: undefined reference to 'GADUSetRewardedInterstitialAdCallbacks' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:15548: error: undefined reference to 'GADULoadRewardedInterstitialAd' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:15548: error: undefined reference to 'GADULoadRewardedInterstitialAd' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:15563: error: undefined reference to 'GADUShowRewardedInterstitialAd' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:15563: error: undefined reference to 'GADUShowRewardedInterstitialAd' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:15611: error: undefined reference to 'GADURewardedInterstitialAdSetServerSideVerificationOptions' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:15611: error: undefined reference to 'GADURewardedInterstitialAdSetServerSideVerificationOptions' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:15621: error: undefined reference to 'GADURewardedInterstitialAdGetRewardType' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:15640: error: undefined reference to 'GADURewardedInterstitialAdGetRewardAmount' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:15621: error: undefined reference to 'GADURewardedInterstitialAdGetRewardType' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:15640: error: undefined reference to 'GADURewardedInterstitialAdGetRewardAmount' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:15101: error: undefined reference to 'GADUGetResponseInfo' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:15101: error: undefined reference to 'GADUGetResponseInfo' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:15112: error: undefined reference to 'GADUGetResponseInfoDescription' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:15112: error: undefined reference to 'GADUGetResponseInfoDescription' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:14371: error: undefined reference to 'GADUDisableMediationInitialization' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:14698: error: undefined reference to 'GADUCreateRequestConfiguration' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:14709: error: undefined reference to 'GADUSetRequestConfiguration' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:14736: error: undefined reference to 'GADUSetRequestConfigurationTestDeviceIdentifiers' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:14736: error: undefined reference to 'GADUSetRequestConfigurationTestDeviceIdentifiers' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:14736: error: undefined reference to 'GADUSetRequestConfigurationTestDeviceIdentifiers' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:14763: error: undefined reference to 'GADUSetRequestConfigurationMaxAdContentRating' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:14777: error: undefined reference to 'GADUSetRequestConfigurationTagForUnderAgeOfConsent' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:14787: error: undefined reference to 'GADUSetRequestConfigurationTagForChildDirectedTreatment' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:14797: error: undefined reference to 'GADUGetTestDeviceIdentifiers' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:14808: error: undefined reference to 'GADUGetTestDeviceIdentifiersCount' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:14819: error: undefined reference to 'GADUGetMaxAdContentRating' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:14838: error: undefined reference to 'GADUGetRequestConfigurationTagForUnderAgeOfConsent' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:14849: error: undefined reference to 'GADUGetRequestConfigurationTagForChildDirectedTreatment' (at ?) clang++: error: linker command failed with exit code 1 (use -v to see invocation) (at ?) at Unity.IL2CPP.Building.CppProgramBuilder.PostprocessObjectFiles(HashSet`1 objectFiles, CppToolChainContext toolChainContext) at Unity.IL2CPP.Building.CppProgramBuilder.Build(IBuildStatistics& statistics) at il2cpp.Program.DoRun(String[] args, List`1 foundAssemblies) at il2cpp.Program.Run(String[] args, Boolean setInvariantCulture) at il2cpp.Program.Main(String[] args) stderr: Unhandled Exception: Unity.IL2CPP.Building.BuilderFailedException: /Applications/Unity/Hub/Editor/2019.4.15f1/PlaybackEngines/AndroidPlayer/NDK/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++ @"/var/folders/c6/3w_h6c8s75v67xstcs73tnm80000gn/T/tmplFYkkC.tmp" -o "/Users/user/Documents/projects/unity/fortunecity-client/Library/il2cpp_android_armeabi-v7a/il2cpp_cache/linkresult_FDCB2D0145EAAADC3C24D5A5B2D2E4A3/libil2cpp.so" -shared -Wl,-soname,libil2cpp.so -Wl,--no-undefined -Wl,-z,noexecstack -Wl,--gc-sections -Wl,--build-id -stdlib=libc++ -static-libstdc++ -target armv7-linux-androideabi19 -Wl,--wrap,sigaction -llog -rdynamic -fuse-ld=gold /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:15101: error: undefined reference to 'GADUGetResponseInfo' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:15101: error: undefined reference to 'GADUGetResponseInfo' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:15533: error: undefined reference to 'GADUCreateRewardedInterstitialAd' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:15533: error: undefined reference to 'GADUCreateRewardedInterstitialAd' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:15601: error: undefined reference to 'GADUSetRewardedInterstitialAdCallbacks' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:15548: error: undefined reference to 'GADULoadRewardedInterstitialAd' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:15548: error: undefined reference to 'GADULoadRewardedInterstitialAd' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:15563: error: undefined reference to 'GADUShowRewardedInterstitialAd' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:15563: error: undefined reference to 'GADUShowRewardedInterstitialAd' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:15611: error: undefined reference to 'GADURewardedInterstitialAdSetServerSideVerificationOptions' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:15611: error: undefined reference to 'GADURewardedInterstitialAdSetServerSideVerificationOptions' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:15621: error: undefined reference to 'GADURewardedInterstitialAdGetRewardType' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:15640: error: undefined reference to 'GADURewardedInterstitialAdGetRewardAmount' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:15621: error: undefined reference to 'GADURewardedInterstitialAdGetRewardType' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:15640: error: undefined reference to 'GADURewardedInterstitialAdGetRewardAmount' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:15101: error: undefined reference to 'GADUGetResponseInfo' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:15101: error: undefined reference to 'GADUGetResponseInfo' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:15112: error: undefined reference to 'GADUGetResponseInfoDescription' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:15112: error: undefined reference to 'GADUGetResponseInfoDescription' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:14371: error: undefined reference to 'GADUDisableMediationInitialization' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:14698: error: undefined reference to 'GADUCreateRequestConfiguration' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:14709: error: undefined reference to 'GADUSetRequestConfiguration' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:14736: error: undefined reference to 'GADUSetRequestConfigurationTestDeviceIdentifiers' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:14736: error: undefined reference to 'GADUSetRequestConfigurationTestDeviceIdentifiers' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:14736: error: undefined reference to 'GADUSetRequestConfigurationTestDeviceIdentifiers' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:14763: error: undefined reference to 'GADUSetRequestConfigurationMaxAdContentRating' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:14777: error: undefined reference to 'GADUSetRequestConfigurationTagForUnderAgeOfConsent' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:14787: error: undefined reference to 'GADUSetRequestConfigurationTagForChildDirectedTreatment' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:14797: error: undefined reference to 'GADUGetTestDeviceIdentifiers' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:14808: error: undefined reference to 'GADUGetTestDeviceIdentifiersCount' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:14819: error: undefined reference to 'GADUGetMaxAdContentRating' /Users/user/Documents/projects/unity/fortunecity-client/Temp/StagingArea/Il2Cpp/il2cppOutput/GoogleMobileAds.iOS1.cpp:14838: error: undefined reference to 'GADUGetRequestConfigurationTagForUnderAgeOfConsent' /Users/use<message truncated> ``` #### Same issue found! Native ads 5.4.0.90 MiniJson conflicts with Firebase (Mono only) #1587 https://github.com/googleads/googleads-mobile-unity/issues/1587 ### 11. Referenced script on this Behaviour missing ``` 04-16 17:22:38.075 10658-10794/? W/Unity: The referenced script on this Behaviour (Game Object 'FDStoreHandler') is missing! (Filename: Line: 334) 04-16 17:22:38.085 10658-10794/? W/Unity: The referenced script on this Behaviour (Game Object 'Advertisement') is missing! (Filename: Line: 334) 04-16 17:22:44.555 10658-10794/? W/Unity: The referenced script on this Behaviour (Game Object 'GameScene') is missing! (Filename: Line: 334) 04-16 17:22:44.615 10658-10794/? W/Unity: The referenced script on this Behaviour (Game Object 'NativeAd') is missing! (Filename: Line: 334) 04-16 17:22:44.735 10658-10794/? W/Unity: The referenced script on this Behaviour (Game Object 'UniWebView') is missing! (Filename: Line: 334) ``` ### 12. SQLite Create DB failed ``` [FD:Database] database location : /var/mobile/Containers/Data/Application/CAC49D3C-B27D-4AC6-9EB8-EBFFE5338C92/Documents/.playful [FD:Database] Failed to create database: FD.Database.Sqlite.SQLiteException: file is not a database [FD:Database] database location : /var/mobile/Containers/Data/Application/CAC49D3C-B27D-4AC6-9EB8-EBFFE5338C92/Documents/.playful [FD:Database] Failed to create database: FD.Database.Sqlite.SQLiteException: file is not a database ``` 推測可能跟升級第三方 SDK 有關係 https://stackoverflow.com/questions/40529577/use-firebase-with-sqlcipher 這篇說可以加 `-framework SQLCipher` 但實測沒有用 ``` post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| xcconfig_path = config.base_configuration_reference.real_path xcconfig = File.read(xcconfig_path) new_xcconfig = xcconfig.gsub('-l"sqlite3"', '') File.open(xcconfig_path, "w") { |file| file << new_xcconfig } end end end ``` 加了這個之後可以順利開啟 ## 5.2.0-native issues 更新時間: 2020/10 載點:https://dl.google.com/googleadmobadssdk/GoogleMobileAds-native.unitypackage * `GoogleMobileAds-native.unitypackage` 沒有提供版本選擇 * `5.2.0` 是以 Google Mobile Ads Unity Plugin [[release]](https://github.com/googleads/googleads-mobile-unity/releases) 使用的 dependencies 對照判斷的 ### 1. 不要相信 [Native Ads Advanced (Unified)](https://developers.google.com/admob/unity/native-advanced-unified) 教學裡面寫到的 Prerequisites ![](https://i.imgur.com/mGWDDc0.png) #### Problem: 全部刪掉之後安裝 `-native.package` 裡面會缺少 `GADUAdNetworkExtras.h` 標頭檔,在 iOS AdColony 會報錯 ```objectivec= // AdColonyExtrasBuilder.h #import "GADUAdNetworkExtras.h" ``` ![](https://i.imgur.com/tIQR2mY.jpg) #### Solution: **保留 GADU 開頭的檔案不要刪除** #### Details & References 在 [Google Mobile Ads SDK Developers](https://groups.google.com/g/google-admob-ads-sdk/c/dCJX5yV7ODM) 搜尋到類似的發問(這裡發問的人是使用 2018 的 `googlemobileads-eap.unitypackage` 但碰到的問題類似,一樣有人表示缺少 `GADUAdNetworkExtras`) Google Developer 的回覆有點狀況外: > Thanks for getting back to us. You need to also import the full Unity plugin as well. The EAB plugin only has files related to the Native Advanced Unified ad. The main plugin must first be imported to be able to make an AdRequest. The class in question is available here in the full plugin. Also I would suggest that you look into our documentation on how to integrate Vungle via Unity. 提供了一個跟他們的文件不一致的解法,文件寫說要把 main plugin 的檔案全部刪掉,這邊卻說要兩個都裝。但其實兩個都裝反而會報更多錯。 之後他們表示會儘速修復 (2018),到了2019年10月20日仍然有人表示 issue 還是存在。 ### 2. 不要相信 resolver 會自動完成 gradle 的全部設定 mainTemplate.gradle ```gradle implementation(name: 'googlemobileads-unity', ext:'aar') implementation project(':GoogleMobileAdsPlugin.androidlib') ``` 這個要自己手動加 ### 3. __kmsetForChildren Note: 不確定這個 issue 為什麼本來沒有現在跑出來 Platform version: Unity 2019.4.9f1 / xcode 12 ``` Showing Recent Messages Undefined symbol: __kmsetForChildren ``` ![](https://i.imgur.com/vJV3pZv.png) Reference: https://stackoverflow.com/questions/38599154/unity-admob-ios-sdk-linker-error Solution: * 移除 `Assets/Plugins/AdmobAPI` ### 4. Termination Reason: Namespace SPRINGBOARD, Code 0x8badf00d xcode build 出來可以執行,但是如果關掉之後再重開會超時然後被 terminate 掉。 ![](https://i.imgur.com/EB78JKR.png) Reference: https://issuetracker.unity3d.com/issues/ios-unityframework-with-3rd-party-plugins-triggers-watchdog-termination-after-launch?page=1#comments Solution: UnityFramework 預設被 embedded 但是沒有被 linked,我們需要自己把他 link 上去。 Fortuncity 03da8a3