ゲーム開発の備忘録

趣味のゲーム開発でのノウハウや、技術的に嵌ったポイントを忘れないように書き記しておくブログです。

MobiVMでビルド時にAssertion Failed: (aliasSectionNum == sectionNum && "alias and its target must be located in the same section")が表示される場合の対処法

はじめに

今回は、MobiVMでビルド時にAssertion Failed: (aliasSectionNum == sectionNum && "alias and its target must be located in the same section")という、アサーションチェックに失敗した旨のエラーメッセージが表示された場合の対処法について共有します。
このエラーはiOS17対応がなされているXcode 15以降を用いてビルドする際に、それ以前のバージョンのXcode向けに作成されたプロジェクトをビルドしようとすると発生するものです。

MobiVMを使用しない場合は、XcodeプロジェクトのBuild SettingsにてOther Linker Flagsに-ld_classicを追加することで対処できます。(-ld64でもよいですが、deprecatedとなっているので-ld_classicのほうを使用しましょう)

では、Xcodeプロジェクトがビルド前に存在しないMobiVMの場合は、どのようにすればOther Linker Flagsに-ld_classicを指定してビルドできるのでしょうか。

MobiVMプラグインの更新

実は、つい最近まではMobiVMではOther Linker Flagsへの設定は行えませんでした。
2023/9/17に、Android Studioで利用可能なMobiVM Pluginのver 2.3.20がリリースされました。このバージョンであればOther Linker Flagsへの設定ができるようになっています。(そのため、MobiVMのフォーク元であるRoboVMでは本件には対処不可能ということになります)

まずは、Android StudioのMobiVM Pluginを最新化しましょう。

robovm.xmlの変更

MobiVM Plugin ver 2.3.20であれば、以下のようにしてrobovm.xmlからOther Linker Flagsの設定が行えます。(ちなみに、設定方法はMobiVMのGitHubリポジトリのPRを漁って見つけました)

<config>
 <!-- その他の設定 -->
 
 <tools>
  <linker>
   <flags>
    <flag>-ld_classic</flag>
   </flags>
  </linker>
 </tools>
</config>

おわりに

今回は直近のXcodeの更新への対応ということでWeb上の情報量が極端に少なく、Android StudioのMobiVM Pluginのリリースノートが一番の情報源でした。今後もiOSXcodeの更新に追従してMobiVMが更新されることを祈るばかりです。