Carthage を使用して Firebase(AdMob)を導入後、ビルドした際に以下のエラーが出たときのお話です。インターネットを検索してもすぐに解決策が見つからなかったので、残しておきます。
ld: Undefined symbols:
_OBJC_CLASS_$_JSContext, referenced from:
in GoogleMobileAds[x86_64][418](GADOMIDLightJSExecutor.o)
clang: error: linker command failed with exit code 1 (use -v to see invocation)
解決策
いきなりですが、JavaScriptCore.framework をアプリの Frameworks, Libraries, and Embedded Content
に追加すれば、エラーは発生しなくなります。
以下は、発生した経緯等の内容なので、ふ〜んってかんじで流し見してください。
環境
Xcode: 15.2
Firebase Apple SDK: 10.28.0
Intel Mac: 13.6.8 (22G820)
Carthage: 0.39.1
エラーが発生するまで
1. Cartfile
Firebase Carthage の GitHub にある手順を参考に必要な機能(ここでは Analytics, AdmMob, Crashlytics [Version 10.28.0])を記載した Cartfile を作成します。
binary "https://dl.google.com/dl/firebase/ios/carthage/FirebaseAnalyticsBinary.json" == 10.28
binary "https://dl.google.com/dl/firebase/ios/carthage/FirebaseAdMobBinary.json" == 10.28
binary "https://dl.google.com/dl/firebase/ios/carthage/FirebaseCrashlyticsBinary.json" == 10.28
2. carthage コマンド実行
carthage update --platform ios --use-xcframeworks
を実行し、xcframework ファイルをダウンロードします。
3. Framework を追加
Xcode でアプリのプロジェクトを開き、Carthage/Build
に出力された xcframework ファイルを Frameworks, Libraries, and Embedded Content
に追加します。
xcframework は、Firebase Apple SDK のバージョンによって異なる場合があるので注意してください。これは、Version 10.28.0 の例です。
4. ビルドを実行 (エラー発生)
Xcode でアプリの .xcodeproj ファイルを開き、PROJECT → Build Settings → Linking - General → Other Linker Flags に -ObjC
を設定後にビルドすると冒頭のエラーが発生します。
さいごに
エラー内容に x86_64 とか書いてあるので、Arm Mac だと発生しないのかなと思っていますが、私は古い Intel Mac を使ってるので、確認できていないです。Arm Mac をお持ちの方はやってみていただけると助かります。
参考URL