Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Undefined symbol: _OBJC_CLASS_$_FIRApp

I m trying to add Firebase Analytic and Firebase Crashlytics using Swift package manager here is a link of git for firebase SDK
https://github.com/firebase/firebase-ios-sdk

after that I add this two line in my AppDelegate file

#import <FirebaseCore/FIRApp.h>

#import <Firebase.h>

All fine until when I add this [FIRApp configure]; getting error

Undefined symbols for architecture arm64: "OBJC_CLASS$_FIRApp", referenced from: objc-class-ref in HWOFAppDelegate.o ld: symbol(s) not found for architecture arm64 clang: error: linker command failed with exit code 1 (use -v to see invocation)

I go thought every link of stack-overflow for similar problem try every solution but nothing help me like change Other Linker Flag etc... Please help me..I really appreciate...I m using Xcode 12.1 with Objective-C here is a screenshot of error which i m getting

enter image description here

And screenshot of added dependency

enter image description here

like image 583
Ruchi Makadia Avatar asked Mar 01 '23 22:03

Ruchi Makadia


2 Answers

After so much searched I solved issue. Solution is

  1. "$(inherited)" In Other Linker Flags
  2. Build Active Architecture Only value to "Yes"
  3. Add Run Script for firebase SPM is "${BUILD_DIR%Build/*}SourcePackages/checkouts/firebase-ios-sdk/Crashlytics/run"
  4. Clean project
  5. Build Project
like image 105
Ruchi Makadia Avatar answered Mar 06 '23 06:03

Ruchi Makadia


I got the same issue while integrating MLKit in my recent work. The app was running fine on simulator as well as device but when I tried to archive the build it started throwing me error below-:

Undefined symbol: _OBJC_CLASS_$_MLKFaceDetector

I am using the MLKFaceDetector object in my files.

Resolution:-

Go to Build Settings -> Architectures -> Replace standard architectures with arm64. Also, make sure there is no space between arm & 64.

Reason what I understood is MLKit only supports 64 bit not 32 bit and since we are using standard architectures targeting both 32 and 64 bit, so Xcode while archiving for 32 bit is unable to find MLKit files. So we are explicitly saying Xcode to Archive only for 64 bit and not 32 bit.

Cons - It will not support some of the older iOS devices.

like image 41
Imran Avatar answered Mar 06 '23 05:03

Imran