🐛
Xcode 15でUnityが動かない
ついiOS17の新機能を試してみたくて、アップデートしたところ、正式リリースのXcode 15.0 (15A240d)環境でのUnity iOSのビルドにがっつり嵌ったのでメモ。
ハマりどころは2箇所。
そもそもXcodeのビルドが通らない
UnityのLTSを使っている場合は最新版へアップグレードして治りました。
起動時にEXC_BAD_ACCESS
アプリ起動時にEXC_BAD_ACCESSで落ちます。
これは空のプロジェクトでは再現しないので、なにかライブラリの依存があるときに起こるようです。私の場合は、ARCore Extensions パッケージを入れると発生しました。
原因が全然分からず、Xcode14なら問題ないものの、最新のiOSでも動かしたので困っていたら、Other Linker Flagに-ld_classic
を入れると動くとの情報を確認。
Unityのビルド時に自動化するならこんな感じでしょうか↓
using UnityEditor.Build;
using UnityEditor.Build.Reporting;
#if UNITY_IOS
using UnityEditor.iOS.Xcode;
#endif // UNITY_IOS
public class CustomPostBuildProcessor : IPostprocessBuildWithReport
{
public int callbackOrder { get { return 0; } }
public void OnPostprocessBuild(BuildReport report)
{
#if UNITY_IOS
// Add -ld_classic to OTHER_LDFLAGS to avoid Xcode 15 build error
// https://forum.unity.com/threads/project-wont-build-using-xode15-release-candidate.1491761/
// https://developer.apple.com/documentation/xcode-release-notes/xcode-15-release-notes#Linking
string projectPath = PBXProject.GetPBXProjectPath(report.summary.outputPath);
PBXProject pbxProject = new();
pbxProject.ReadFromFile(projectPath);
string target = pbxProject.GetUnityFrameworkTargetGuid();
pbxProject.AddBuildProperty(target, "OTHER_LDFLAGS", "-ld_classic");
pbxProject.WriteToFile(projectPath);
#endif // UNITY_IOS
}
}
Xcode15のリリースノートを見るとKnown Issuesのところに、
Weak symbolがnon-weakでリンクされるからワークアラウンドとして、
-ld_classic
つけてね。(意訳)
みたいなことが書いてありました…。
Xcode15側の問題なので早めに修正されることを願います。
Discussion