ソースコード
using UnityEditor; using UnityEditor.Callbacks; using UnityEditor.iOS.Xcode; namespace Kogane.Internal { /// <summary> /// Xcode 15 でビルドできるようにするエディタ拡張 /// Xcode の Build Settings の「Other Linker Flags」に「-ld_classic」を設定することでビルドできるようにする /// Xcode の Build Settings の「Other Linker Flags」に「-Wl」を設定することで iOS 12 で強制終了しないようにする /// /// 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 /// > Known Issues /// > Binaries using symbols with a weak definition crash at runtime on iOS 14/macOS 12 or older. /// > This impacts primarily C++ projects due to their extensive use of weak symbols. (114813650) (FB13097713) /// > /// > Workaround: Bump the minimum deployment target to iOS 15, macOS 12, watchOS 8 or tvOS 15, or add -Wl, /// > -ld_classic to the OTHER_LDFLAGS build setting. /// </summary> internal static class FixXcode15BuildOnPostProcessBuild { //================================================================================ // 関数(static) //================================================================================ /// <summary> /// ビルド完了時に呼び出されます /// </summary> [PostProcessBuild( 1000 )] // この値を変えると動かなくなる可能性があるので注意 private static void OnPostProcessBuild ( BuildTarget buildTarget, string pathToBuiltProject ) { if ( buildTarget != BuildTarget.iOS ) return; var projectPaths = new[] { PBXProject.GetPBXProjectPath( pathToBuiltProject ), $"{pathToBuiltProject}/Pods/Pods.xcodeproj/project.pbxproj", }; foreach ( var projectPath in projectPaths ) { var project = new PBXProject(); project.ReadFromFile( projectPath ); var targetGuid = project.ProjectGuid(); project.AddBuildProperty( targetGuid, "OTHER_LDFLAGS", "-Wl" ); project.AddBuildProperty( targetGuid, "OTHER_LDFLAGS", "-ld_classic" ); project.WriteToFile( projectPath ); } } } }
補足
Firebase を使用している Unity プロジェクトを Xcode 15 でビルドして
iOS 12 の iPhone や iPad で起動する時にアプリが強制終了してしまう場合、
「Unity-iPhone.xcodeproj」の PROJECT の「Unity-iPhone」の
「Build Settings」の「Other Linker Flags」に -Wl -ld_classic
を設定して
「Pods.xcodeproj」の PROJECT の「Pods」の
「Build Settings」の「Other Linker Flags」に -Wl -ld_classic
を設定することで
アプリが強制終了せずに正常に起動できるようになる
前述のエディタ拡張はこの設定を iOS ビルド時に自動で行う
開発環境
- Unity 2022.1.23f1
- Firebase 9.6.0
- Xcode 15.0