🍏

Unity as a LibraryにおいてiOSビルドが通らない

に公開

エラー内容

iOSのXCodeビルドで失敗する。

Could not build the precompiled application for the device.
Error (Xcode): B(l) ARM64 branch out of range (-137152180 max is +/-128MB): from
___Il2CppComObject_Finalize_m720B2062F661A0770A32D24B731AD4AFE314A5CD (0x08310048) to
__Z40il2cpp_codegen_il2cpp_com_object_cleanupP15Il2CppComObject (0x000439C4) in
'___Il2CppComObject_Finalize_m720B2062F661A0770A32D24B731AD4AFE314A5CD' from
/XXXX/build/ios/Debug-iphoneos/libGameAssembly.a(tyjo
7lovil21.o) for architecture arm64

解決策

Unity側設定の見直し

iOSのBuild Profile(Unity2023以前ではProject Settings/Player/Other Settings)を開き、以下の設定をする。

IL2CPP Code Geneartion
Strip Engine Code

IL2CPP Code Generation

  • Optimize for code size and build time

Strip Engine Code

  • 有効

Managed Stripping Level

  • High

これらの設定を行うことでIL2CPPビルドにおいて最適化が行われ、リンカが飛び先の距離制限を超えないようになるのだと思う(全然理解はできていない)

設定を見直したら再ビルドして確認する。

設定の見直しをしても改善しない場合

Releaseビルドを試す

まずはReleaseビルドを試す。Development BuildやScript Debuggingはオフにし、XCodeでもReleaseビルドにする。

Flutter x Unity as a Libraryの場合はflutter run --releaseで実行する。
Releaseビルドでも通らない場合、別の問題の可能性がある。

Unity6でBuild Profileを利用しているのにも関わらずProject Settingsから設定を変更していないか?

これは私が実際にハマったことだが、設定を反映したのに改善が見られず悩んでいたらUnity2022時代の癖でBuild Profileの設定ではなくProject Settings(Player Settings)の設定の方を変えていた、ということがあった。

いずれも解決しない

是非コメントで情報共有していきましょう。また、この問題は意外とChatGPTも答えてくれます。

Discussion