Xiiryo
Xiiryo

Reputation: 3267

React Native on Apple Silicon M1 - The linked library 'libPods-ProjectName.a' is missing one or more architectures required by this target: x86_64

I'm trying to build a React Native project on a MacBook Pro with a M1 architecture, for iOS simulator.

The project built nicely on Intel architecture.

It also build on device and archive well on M1. But not on simulator.

I had this classical error when switching to the M1 chipset.

in /project-folder/ios/Pods/OpenSSL-Universal/ios/lib/libcrypto.a(cryptlib.o), building for iOS Simulator, but linking in object file built for iOS, file '/project-folder/ios/Pods/OpenSSL-Universal/ios/lib/libcrypto.a' for architecture arm64

I added arm64 to excluded architectures.

I also added the following snippet but it also react the same way without it.

post_install do |installer|
  installer.pods_project.build_configurations.each do |config|
    config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64"
  end
end

Now I have:

/project-folder/ios/ProjectName.xcodeproj The linked library 'libPods-ProjectName.a' is missing one or more architectures required by this target: x86_64.

I tried to add x86_64 on the list of architectures of the project, with no results.

I'm building from Xcode IDE. This error message appears for all iPhones I tried: 8, 11, 12 and all targets I tried: iOS 9, 10 and 13.

Upvotes: 73

Views: 69505

Answers (6)

Deepak Ghadi
Deepak Ghadi

Reputation: 183

In my case, Using Xcode 13.4.1, The project's frameworks are build for device and whenever I disconnect from device, it shows me error. After connecting device and clean build and then run, does the job.

Upvotes: 0

Mahesh Agrawal
Mahesh Agrawal

Reputation: 3358

I was getting this error when using run-ios command targeting a simulator. I just added below script to the post install area of Podfile, did pod install and build was successful when i ran same run-ios command targeting simulator. Using Xcode 13.2.1 for reference.

installer.pods_project.build_configurations.each do |config|
    config.build_settings["ONLY_ACTIVE_ARCH"] = "NO"
end

Hope someone gets help from this.

Edit: I am on a M1 machine and used rosetta terminal for creating the project but all other pod install done from non-rosetta terminal. my cocoapods and ffi installations were also from rosetta terminal including brew installation as well.

Upvotes: 1

Vlad R
Vlad R

Reputation: 2634

I had the same issue on my M1 Mac and here is what I did to fix this:

  1. brew install watchman
    if you don't have node => brew install node
  2. sudo arch -x86_64 gem install ffi
  3. add this code at the end of the pod file which is inside ios folder:
post_install do |installer|
    installer.pods_project.targets.each do |target|
      target.build_configurations.each do |config|
        config.build_settings["ONLY_ACTIVE_ARCH"] = "NO"
      end
    end
  end
  1. cd ios/ && arch -x86_64 pod install.

  2. run Xcode with Rosetta.
    enter image description here.
    You can install Rosetta by running: softwareupdate --install-rosetta

  3. exclude architecture arm64. enter image description here

  4. clean build - open xcode then press Command + Shift + K


  1. If you're using nvm try to replace NODE_BINARY=node with the actual result of the which node command, which in my case looks something like this:enter image description here
    enter image description here

Shoutout to these answers: one two three

Upvotes: 3

Waltari
Waltari

Reputation: 1259

For me opening Xcode in Rosetta mode was what solved the problem. You may have to remove DerivedData also at: /Users/<username>/Library/Developer/Xcode/DerivedData

enter image description here

You can install Rosetta by running: softwareupdate --install-rosetta

Also it seems OS prompts you to install if trying to open an app that requires Rosetta: https://support.apple.com/en-us/HT211861

Upvotes: 31

Aaron Iba
Aaron Iba

Reputation: 625

XCode 12.5 broke most of the above answers. For those using XCode 12.5 and react-native 0.64.2, I wrote up a little guide to get things working:

https://github.com/aiba/react-native-m1/blob/main/README.md

Upvotes: 13

Bek
Bek

Reputation: 1436

I had the same issue and finally, I fixed it. There are 2 main reasons for the errors:

  1. arm64 architecture support & and Xcode 12 compatible version have not been provided by many popular third party libraries yet (like Firebase, AFNetworking, etc). Xcode 11 used to automatically translate building for arm64 for the simulator into building for x86_64, but now that arm64 is a valid simulator architecture (it’s the Apple Silicon architecture), that translation no longer occurs.

  2. Because the Valid Architectures build setting has been removed from Xcode 12, the Project file, opened in Xcode 12, will auto-generate a VALID_ARCHS macro in User-Defines, and this macro will make the build fail.

I follow all steps in this post: https://medium.com/@khushwanttanwar/xcode-12-compilation-errors-while-running-with-ios-14-simulators-5731c91326e9

Final step was updating all pods by running below command inside the project folder:

pod deintegrate
pod update

Then I exclude the arm64 for the Simulator architecture, both from main project and the Pod project.

Xcode build settings

Clean the project ( + + k) then run.

Upvotes: 142

Related Questions