現象
UnityでビルドしたXcodeプロジェクトを、USB経由で実機デバッグしようとした際に次のエラーが出る。
Error loading /var/containers/Bundle/Application/****/ProductName.app/Frameworks/UnityFramework.framework/UnityFramework: dlopen(/var/containers/Bundle/Application/****/****.app/Frameworks/UnityFramework.framework/UnityFramework, 265): Library not loaded: @rpath/libswiftCore.dylib Referenced from: /private/var/containers/Bundle/Application/****/****.app/Frameworks/UnityFramework.framework/UnityFramework Reason: image not found
急に起きた..わけではなく、プロジェクトで使用しているUnityを2019.4.20f1から2019.4.37f1にアップデートして、その際に使用しているライブラリやアセットのバージョンも上げた。
おそらく広告で使用しているMAXのSDKが原因。
環境
Unity 2019.4.37f1
MacOS 12.3.1 Monterey
Applovin MAX 11.4.1
対応
XcodeのProject → BuildSettings →ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIESをYesにする
XcodeのProject → BuildSettings → RUNPATH_SEARCH_PATHに /usr/lib/swiftを追加する
1つ目に/usr/lib/swiftが来るようにする
これで直る(はず)
この修正を毎回手動でやるのは面倒なので、PostProcessに↓を追記する。
[PostProcessBuild(999)] public static void ModifyPbx(BuildTarget buildTarget, string pathToBuiltProject) { if (buildTarget == BuildTarget.iOS) { string projPath = pathToBuiltProject + "/Unity-iPhone.xcodeproj/project.pbxproj"; PBXProject proj = new PBXProject (); proj.ReadFromString (File.ReadAllText (projPath)); string target = proj.GetUnityMainTargetGuid(); proj.SetBuildProperty(target, "ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES", "YES"); string runPathSearchPath = proj.GetBuildPropertyForAnyConfig(target, "LD_RUNPATH_SEARCH_PATHS"); runPathSearchPath = "/usr/lib/swift " + runPathSearchPath; proj.SetBuildProperty(target,"LD_RUNPATH_SEARCH_PATHS",runPathSearchPath); File.WriteAllText (projPath, proj.WriteToString ()); } }
それでも直らない場合
DerivedDataを削除する
$ rm -rf ~/Library/Developer/Xcode/DerivedData/*
Xcodeをクリーンする
cmd + shift + Kでプロジェクトがクリーンされます
このアプリの作業中でした
参考
https://github.com/AppLovin/AppLovin-MAX-SDK-iOS/issues/82
https://stackoverflow.com/questions/26104975/dyld-library-not-loaded-rpath-libswiftcore-dylib-image-not-found