はじめに
こちらのポストがワイにも役に立ったので、「実際どうするの?」ということも含めて書いておこうと思う。
Unity + firebase x Xcode16で、
こんなエラー
unsupported option '-G' for target 'arm64-apple-ios13.0'
でるけど、対応のコードコードをあげておきます。これをEditorフォルダの中にいれたらOK pic.twitter.com/N41GU7dAbW— 堀江 良|アプリ開発者@神戸 (@ryohorie3) September 27, 2024
やること
・UnityのAsset/EditorにXcodeSetPodsSigning.csを作る。
・以下のコードをコピペする。
・UnityのiOS版をビルドしなおす。
・MacのXcodeでビルドする。(特別な設定は不要)
コード
using System.IO; using UnityEditor; using UnityEditor.Callbacks; using UnityEngine; public class XcodeSetPodsSigning : MonoBehaviour { [PostProcessBuild(45)] public static void FixPodFile(BuildTarget buildTarget, string buildPath) { // iOS版のみ if(buildTarget != BuildTarget.iOS) { return; } // PodFileに記述 using (StreamWriter sw = File.AppendText(buildPath + "/Podfile")) { sw.WriteLine("post_install do |installer|"); // pod error(-G)対応 sw.WriteLine("installer.pods_project.targets.each do |target|"); sw.WriteLine("if target.name == 'BoringSSL-GRPC'"); sw.WriteLine("target.source_build_phase.files.each do |file|"); sw.WriteLine("if file.settings && file.settings['COMPILER_FLAGS']"); sw.WriteLine("flags = file.settings['COMPILER_FLAGS'].split"); sw.WriteLine("flags.reject! { |flag| flag == '-GCC_WARN_INHIBIT_ALL_WARNINGS' }"); sw.WriteLine("file.settings['COMPILER_FLAGS'] = flags.join(' ')"); sw.WriteLine("end\nend\nend\nend"); // General設定 sw.WriteLine("installer.generated_projects.each do |project|"); sw.WriteLine("project.targets.each do |target|"); sw.WriteLine("target.build_configurations.each do |config|"); sw.WriteLine("config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '15.0'"); sw.WriteLine("end\nend\nend"); sw.WriteLine("end"); } } }
原因と対策
iOSのBoringSSL-GRPCで以前使っていた「-GCC_WARN_INHIBIT_ALL_WARNINGS」というフラグが、XCode16でどうやら使えなくなったもよう。
最新版だと「-G」と誤認識してしまうみたい。
そのため、上記コードで対象の部分を消してしまう・・・はず。
補足事項
WindowsのUnityを開発して、Macにもっていく人(まさにワイ)向けの手順を以下URLで公開中。
UnityでiOS版をリリースする際に、Firebaseを使っていると起こるビルドエラー「Undefined symbols for architecture arm64」への対応