Reputation: 12514
I have a Flutter project that I'm trying to run on iOS. It runs normally on my Intel-based Mac, but on my new Apple Silicon-based M1 Mac it fails to install pods.
LoadError - dlsym(0x7f8926035eb0, Init_ffi_c): symbol not found - /Library/Ruby/Gems/2.6.0/gems/ffi-1.13.1/lib/ffi_c.bundle
/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
/Library/Ruby/Gems/2.6.0/gems/ffi-1.13.1/lib/ffi.rb:6:in `rescue in <top (required)>'
/Library/Ruby/Gems/2.6.0/gems/ffi-1.13.1/lib/ffi.rb:3:in `<top (required)>'
/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
/Library/Ruby/Gems/2.6.0/gems/ethon-0.12.0/lib/ethon.rb:2:in `<top (required)>'
/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
/Library/Ruby/Gems/2.6.0/gems/typhoeus-1.4.0/lib/typhoeus.rb:2:in `<top (required)>'
/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
/Library/Ruby/Gems/2.6.0/gems/cocoapods-1.10.0/lib/cocoapods/sources_manager.rb:74:in `cdn_url?'
/Library/Ruby/Gems/2.6.0/gems/cocoapods-1.10.0/lib/cocoapods/sources_manager.rb:36:in `create_source_with_url'
/Library/Ruby/Gems/2.6.0/gems/cocoapods-1.10.0/lib/cocoapods/sources_manager.rb:21:in `find_or_create_source_with_url'
/Library/Ruby/Gems/2.6.0/gems/cocoapods-1.10.0/lib/cocoapods/installer/analyzer.rb:178:in `block in sources'
/Library/Ruby/Gems/2.6.0/gems/cocoapods-1.10.0/lib/cocoapods/installer/analyzer.rb:177:in `map'
/Library/Ruby/Gems/2.6.0/gems/cocoapods-1.10.0/lib/cocoapods/installer/analyzer.rb:177:in `sources'
/Library/Ruby/Gems/2.6.0/gems/cocoapods-1.10.0/lib/cocoapods/installer/analyzer.rb:1073:in `block in resolve_dependencies'
/Library/Ruby/Gems/2.6.0/gems/cocoapods-1.10.0/lib/cocoapods/user_interface.rb:64:in `section'
/Library/Ruby/Gems/2.6.0/gems/cocoapods-1.10.0/lib/cocoapods/installer/analyzer.rb:1072:in `resolve_dependencies'
/Library/Ruby/Gems/2.6.0/gems/cocoapods-1.10.0/lib/cocoapods/installer/analyzer.rb:124:in `analyze'
/Library/Ruby/Gems/2.6.0/gems/cocoapods-1.10.0/lib/cocoapods/installer.rb:414:in `analyze'
/Library/Ruby/Gems/2.6.0/gems/cocoapods-1.10.0/lib/cocoapods/installer.rb:239:in `block in resolve_dependencies'
/Library/Ruby/Gems/2.6.0/gems/cocoapods-1.10.0/lib/cocoapods/user_interface.rb:64:in `section'
/Library/Ruby/Gems/2.6.0/gems/cocoapods-1.10.0/lib/cocoapods/installer.rb:238:in `resolve_dependencies'
/Library/Ruby/Gems/2.6.0/gems/cocoapods-1.10.0/lib/cocoapods/installer.rb:160:in `install!'
/Library/Ruby/Gems/2.6.0/gems/cocoapods-1.10.0/lib/cocoapods/command/install.rb:52:in `run'
/Library/Ruby/Gems/2.6.0/gems/claide-1.0.3/lib/claide/command.rb:334:in `run'
/Library/Ruby/Gems/2.6.0/gems/cocoapods-1.10.0/lib/cocoapods/command.rb:52:in `run'
/Library/Ruby/Gems/2.6.0/gems/cocoapods-1.10.0/bin/pod:55:in `<top (required)>'
/usr/local/bin/pod:23:in `load'
/usr/local/bin/pod:23:in `<main>'
Based on a Github workaround, I tried to run Terminal using rosetta, but the issue remains the same: https://github.com/CocoaPods/CocoaPods/issues/9907#issuecomment-655870749
Realising it's still early for Macs with Apple Silicon. Is there a way to make this work for the time being?
Upvotes: 481
Views: 587049
Reputation: 301
Kotlin Multiplatform Mobile Development
If you're here because you got this error while running kdoctor
[email protected] is working for me so:
brew install [email protected]
Switch to the newly installed Ruby version:
brew link --overwrite [email protected]
Then install CocoaPods:
brew install cocoapods
INCLUDE SAMPLE ERROR
This way also fix this error:
Upvotes: 19
Reputation: 141
uinstall homebrew first
/bin/bash -c "$(curl -fsSL
https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)"
reinstall for arch 86_64
sudo arch -x86_64 /bin/bash -c "$(curl -fsSL
https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
now run
brew config
you must get rosetta 2:true
also check
arch
you should get i86 if u get arm64, reinstall brew
then install ruby version 3.1.0 or above as they support mac os M1
brew install [email protected]
then u can use
gem install cocoapods
pod install
remember to uninstall previous ruby and cocoapods
you may have to run pod install multiple times as x86_64 is slower than arm64
Upvotes: 0
Reputation: 593
I've spent over a week searching for a solution to install CocoaPods successfully on a M1 machine. You may see if my method works for you or not.
The solution requires the Terminal.app to be running in "Rosetta" mode.
But it does not required the Terminal to be running in x86.
[Environment]
Mac mini (M1, 2020) / macOS Big Sur (Version 11.5.2) / Xcode Version 13.0 (13A233)
To run the terminal.app in "Rosetta" mode,
Right click the Terminal.app > Select "Get Info" > Make sure "Open using Rosetta" is checked.
(1) Run the following lines for updating gem.
Make sure you gem version is up-to-date before executing any commands following. The update is introduced by this article on Medium.
sudo gem update -n /usr/local/bin --system
sudo gem install -n /usr/local/bin cocoapods --pre
(2) Execute the commands using the "sudo" command.
sudo gem install
(3) Install an older version of CocoaPods
As the latest version (1.10.0) cannot be installed for my case. I've tried installing an older version. The line execute successfully without any error messages.
You may check the thread on Apple's forum.
sudo gem install -n /usr/local/bin cocoapods -v 1.8.4
Then, the compiler may bring you some error, like "active developer path do not exist". This error would shown if you've installed a beta version of Xcode on your machine.
You would need run following lines for the compiler to switch to a new active path, pointing to the new Xcode app.
sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
If your Xcode refuses to switch, you may check out this thread on Apple's forum to see if it helps.
(1) Uncheck "Open using Rosetta"
Then, may go back to the "info" panel and uncheck "Open using Rosetta", but unchecking Rosetta is optional. You may keep the box checked if it is needed.
(2) Run CocoaPods commands as usual
After that, you can back to the project directory and run commands pod init
to initiate the CocoaPods for your project as usual
Steps for a normal CocoaPods build:
pod init
open Podfile
edit Podfile
(for specifying pods)pod install
Use sudo xcodebuild -license
if you've faced an error (regarding to Xcode registration).
Upvotes: 7
Reputation: 3683
brew install ruby
)PATH
and make sure the new version is used with which ruby
(should be /opt/homebrew/opt/ruby/bin/ruby
instead of /usr/bin/ruby
if installed with Homebrew)sudo gem install cocoapods
(make sure ethon
is at least version 0.13.0)pod install
All answers suggesting using Rosetta / arch -x86_64
are workarounds and not quite solving the real issue that comes from the way RbConfig and the universal binaries work.
require 'rbconfig'
OSVERSION = RbConfig::CONFIG['host_os']
ARCH = RbConfig::CONFIG['arch']
HOSTCPU = RbConfig::CONFIG['host_cpu']
BUILDCPU = RbConfig::CONFIG['build_cpu']
TARGETCPU = RbConfig::CONFIG['target_cpu']
puts "OS: #{OSVERSION}"
puts "Arch: #{ARCH}"
puts "Host CPU: #{HOSTCPU}"
puts "Build CPU: #{BUILDCPU}"
puts "Target CPU: #{TARGETCPU}"
If you call ruby
on a file containing this code with the universal binary shipped with macOS, you will get the following result on an M1 Mac:
OS: darwin20
Arch: universal-darwin20
Host CPU: x86_64
Build CPU: x86_64
Target CPU: universal
As you can see, RbConfig was compiled for a « universal » CPU but built with an x86 CPU, and the rbconfig.rb
file that was generated (see /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/universal-darwin20/rbconfig.rb
) consequently uses invalid information for the host CPU.
As ffi
uses information from RbConfig (see https://github.com/ffi/ffi/blob/dfae59e293974efaa7b4d414e5116d7a2187a06e/lib/ffi/platform.rb#L61 and https://github.com/ffi/ffi/blob/e3f2cf9b82055709ddbeecbf77810f43438c4b64/spec/ffi/fixtures/compile.rb#L11), we end up with OP’s error message.
The solution is, therefore, to get a version of Ruby built specifically for arm64 by using either Homebrew, rbenv or RVM.
For Homebrew:
brew install ruby
export PATH=/opt/homebrew/opt/ruby/bin:/opt/homebrew/lib/ruby/gems/3.0.0/bin:$PATH
to your .zshrc
(you can find your Homebrew installation directory with $(brew --prefix)
if needed) (replace 3.0.0
with your actual ruby version)source ~/.zshrc
or restart your shellruby
binary by executing which ruby
(should be $(brew --prefix)/opt/ruby/bin/ruby
)sudo gem install cocoapods
pod
binary by executing which pod
(should be $(brew --prefix)/lib/ruby/gems/3.0.0/bin/pod
)ethon
is version 0.13.0 or more with gem info ethon
, otherwise run sudo gem install ethon
pod install
Moreover, it should be noted that ruby
is still included in macOS only « for compatibility with legacy software », as evidenced by running irb -v
, so this is probably a good opportunity to install your own version anyway:
WARNING: This version of ruby is included in macOS for compatibility with legacy software. In future versions of macOS the ruby runtime will not be available by default and may require you to install an additional package.
irb 1.0.0 (2018-12-18)
Sources:
Upvotes: 307
Reputation: 66
For an M1 Mac and Gem/Ruby issues, read this (October 2023):
(First of all you should use homebrew to install rbenv and gem, links below): https://formulae.brew.sh/formula/brew-gem https://formulae.brew.sh/formula/rbenv-bundler
Here we go:
Note when running this you should use APP dir:
Upvotes: 0
Reputation: 9832
Currently, ARCHFLAGS
can be used to create a univeral binary install of cocoapods
with the system Ruby shipped by Apple.
sudo env ARCHFLAGS='-arch arm64 -arch arm64e -arch x86_64' \
gem install cocoapods
## needed for compatibility with system Ruby currently shipping with Ventura
sudo env ARCHFLAGS='-arch arm64 -arch arm64e -arch x86_64' \
gem install activesupport -v 6.1.7.3
## verify that universal binaries were installed:
CHECK_DIR="/Library/Ruby"
find "$CHECK_DIR" -name "*.bundle" | xargs file
# /Library/Ruby/Gems/2.6.0/extensions/universal-darwin-22/2.6.0/ffi-1.15.5/ffi_c.bundle: Mach-O universal binary with 3 architectures: [x86_64:Mach-O 64-bit bundle x86_64] [arm64:Mach-O 64-bit bundle arm64] [arm64e:Mach-O 64-bit bundle arm64e]
# /Library/Ruby/Gems/2.6.0/extensions/universal-darwin-22/2.6.0/ffi-1.15.5/ffi_c.bundle (for architecture x86_64): Mach-O 64-bit bundle x86_64
# /Library/Ruby/Gems/2.6.0/extensions/universal-darwin-22/2.6.0/ffi-1.15.5/ffi_c.bundle (for architecture arm64): Mach-O 64-bit bundle arm64
# /Library/Ruby/Gems/2.6.0/extensions/universal-darwin-22/2.6.0/ffi-1.15.5/ffi_c.bundle (for architecture arm64e): Mach-O 64-bit bundle arm64e
# /Library/Ruby/Gems/2.6.0/gems/ffi-1.15.5/ext/ffi_c/ffi_c.bundle: Mach-O universal binary with 3 architectures: [x86_64:Mach-O 64-bit bundle x86_64] [arm64:Mach-O 64-bit bundle arm64] [arm64e:Mach-O 64-bit bundle arm64e]
# /Library/Ruby/Gems/2.6.0/gems/ffi-1.15.5/ext/ffi_c/ffi_c.bundle (for architecture x86_64): Mach-O 64-bit bundle x86_64
# /Library/Ruby/Gems/2.6.0/gems/ffi-1.15.5/ext/ffi_c/ffi_c.bundle (for architecture arm64): Mach-O 64-bit bundle arm64
# /Library/Ruby/Gems/2.6.0/gems/ffi-1.15.5/ext/ffi_c/ffi_c.bundle (for architecture arm64e): Mach-O 64-bit bundle arm64e
# /Library/Ruby/Gems/2.6.0/gems/ffi-1.15.5/lib/ffi_c.bundle: Mach-O universal binary with 3 architectures: [x86_64:Mach-O 64-bit bundle x86_64] [arm64:Mach-O 64-bit bundle arm64] [arm64e:Mach-O 64-bit bundle arm64e]
# /Library/Ruby/Gems/2.6.0/gems/ffi-1.15.5/lib/ffi_c.bundle (for architecture x86_64): Mach-O 64-bit bundle x86_64
# /Library/Ruby/Gems/2.6.0/gems/ffi-1.15.5/lib/ffi_c.bundle (for architecture arm64): Mach-O 64-bit bundle arm64
# /Library/Ruby/Gems/2.6.0/gems/ffi-1.15.5/lib/ffi_c.bundle (for architecture arm64e): Mach-O 64-bit bundle arm64e
Tested on both an Apple Intel mini and an Apple Silicon mini. Each had a clean macOS Ventura 13.4 install with Xcode 14.3.1 (14E300c) on the boot drive.
The Apple Intel mini can create a universal binary with multiple Instruction Set Architecture (ISA) slices. However, the Intel can only run and test the native x86_64
. The Apple Silicon mini with Rosetta enabled can run|test all of the arm64
, arm64e
, and x86_64
ISA binary slices.
Upvotes: 0
Reputation: 13236
I have got solution for this for cocoapods installation.
There is basically 2 ways to install cocoa pods.
1. install cocoapods via Homebrew:
brew install cocoapods
2. install cocoapods via gem:
sudo gem install ffi
if you are facing issue with Apple M1 or Apple M2 chip
First terminal with Rosetta
you may go for following command:
sudo arch -x86_64 gem install ffi
once finish installation try with following command:
arch -x86_64 pod install
Upvotes: 3
Reputation: 7187
As of Nov 2022. Did the following on a 2021 M1 iMac and it works.
# uninstall cocoapods
sudo gem uninstall cocoapods
# Optional; unshallow homebrew core
git -C /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core fetch --unshallow
# Install homebrew to right locations; from https://brew.sh/
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# Add shortcuts as prompted at the end of running the above command
echo '# Set PATH, MANPATH, etc., for Homebrew.' >> $HOME/.bash_profile
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> $HOME/.bash_profile
eval "$(/opt/homebrew/bin/brew shellenv)"
# Install cocoapods
brew install cocoapods
# Further, install Vim; taken from https://formulae.brew.sh/formula/vim
brew install vim
Upvotes: 0
Reputation: 371
we can easily fix this problem
Upvotes: 0
Reputation: 27387
2022 Nov Update
If you can use Homebrew to manage cocoapods.
# Uninstall the local cocoapods gem
sudo gem uninstall cocoapods
# Reinstall cocoapods via Homebrew
brew install cocoapods
2021 Solution
# STEP 1: Install ffi
sudo arch -x86_64 gem install ffi
# STEP 2: Re-install dependencies
arch -x86_64 pod install
Additional Information
#1 For anyone seeing the arch: posix_spawnp: gem: Bad CPU type in executable
error, you must first install Rosetta. Thanks, @Jack Dewhurst
#2 If you run pod
commands pretty often, setting up an alias in .zshrc
or .bash_profile
might be handy. Thanks, @theMoonlitKnight for the suggestion.
alias pod='arch -x86_64 pod'
Upvotes: 1077
Reputation: 145
Please use this below code: -
arch -x86_64 pod install
This will definitely work, under any circumstances.
Upvotes: 9
Reputation: 744
Click right and open get info menu Check "Open using rosetta"
sudo gem install cocoapods
sudo gem install ffi
sudo gem update --system // Update ruby
If it doesn't work:
Install a ruby manager, I preferred rvm
rvm install:
- $brew install gnupg
Don't forget to add bash profile:
export PATH="$PATH:$HOME/.rvm/bin" # Add RVM to path for scripting (to manage Ruby versions) export PATH="$GEM_HOME/bin:$PATH" [[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session as a function
$rvm -list
command if rvm is installed successfully
$rvm install 3.1.2
$rvm --default use 3.1.2
Then restart the terminal and run $sudo gem install cocoapods
Upvotes: 1
Reputation: 219
Basically tried all solutions listed here.
$ arch -arm64 brew install cocoapods
finally did it for me.
Before doing that, be sure to have homebrew correctly installed with /opt/homebrew
being the prefix. This article provides pretty good instructions on this.
Edit: Another option is to remove all your flutter and dart files and just use homebrew for the complete installation process as shown here. This also worked for me on M1 Pro.
Upvotes: 12
Reputation: 2000
Mac M1 MacOS BigSur solution:
brew cleanup -d -v
brew install cocoapods
brew link --overwrite cocoapods
Upvotes: 6
Reputation: 971
Simplest way I found :
sudo gem uninstall cocoapods
brew install cocoapods
Upvotes: 41
Reputation: 2974
There is a much "better/easier?" way by way of using homebrew now that waters have settled, if you have homebrew install just run
brew install cocoapods
this will install ruby and libyaml as preconditions, so far this is the most straightforward way (and the one, most probably, to be recommended moving forward).
Upvotes: 12
Reputation: 576
All of the above solutions are valid, just wanted to post that with home brew and cocoapods supports native Apple Silicon chips you can run the command without prefixing arch -x86_64
so, sudo gem install ffi
will do the job.
Upvotes: 0
Reputation: 448
If you Are using M1 chip system then use-
go to application folder-
select terminal open with rosseta- then run cmd-
sudo arch -x86_64 gem install ffi
Then
arch -x86_64 pod install
Upvotes: 1
Reputation: 10965
This is what worked for me, trying to build app on Mac M1
first go to your applications
folder and
select terminal
app -> get info -> select run with rosseta
// if you are trying to build the app through xcode
Repeat the above steps for xcode
app
Note: Make sure your terminal and code are closed while doing so.
Now run your terminal switch to your project_folder/ios
Run below-shown commands
sudo gem install cocoapods
sudo gem install ffi
sudo arch -x86_64 gem install ffi
Upvotes: 0
Reputation: 2072
This is how I solved my problem in M1. Someone might be helped.
From System preference. User & group. Set login shell as
/bin/bash
Then close the terminal and reopen it.run this command
sudo gem install -n /usr/local/bin cocoapods -v 1.8.4
Hopefully, this will works.
Upvotes: 4
Reputation: 987
Pod Not installing on M1 Chip MAC ??? No worries
run below three commands : -
pod deintegrate
sudo arch -x86_64 gem install ffi
arch -x86_64 pod install
it works !!
Upvotes: 6
Reputation: 15
the solution for me was to add arch -x86_64 at the begining of the create command
Upvotes: 0
Reputation: 321
If your case is that you've updated your project and already have ffi installed, you will need to run this:
arch -x86_64 pod install --repo-update
Upvotes: 5
Reputation: 126
Working in Sept 2021, Mac M1
I just want to add to Medhi's answer, to do a "pod repo update" within the same terminal inside the iOS folder, because that was critically fixing the error for me.
Here's the complete To-do-list:
Duplicate the Terminal application in the Utilities folder.
Right click on the app and choose "Get Info".
Rename the other version of the app as you like.
Check the option "open with Rosetta".
Install Cocoapods with the command sudo gem install cocoapods
Type the command line sudo gem install ffi
to fix the ffi bundle problem.
Go to the iOS folder of your app in the same terminal
Do pod repo update
Now you can do a pod install
without a problem.
Upvotes: 8
Reputation: 812
I had the same problem with my new MacBook Air M1 just because m1 has a different architecture we should install packages with Rosetta Translation Environment.
You can solve most compatibilities by using rosetta.
and then install packages with this terminal
Upvotes: 1
Reputation: 3225
To install completely cocoapods on Mac with M1 chip (Apple Silicon), please follow these steps:
Source : iPhoneSoft
Upvotes: 71
Reputation: 41
IN MAC M1, for anyone using KMM (Kotlin Multiplatform Mobile), but it may work for other, finding that it does not create files on the .xcworkspace
for the iOS APP, when using CocoaPods as dependency manager, first install CocoaPods by typing
sudo gem install cocoapods
than navigate to your project folder, now on the iOS folder and type
sudo arch -x86_64 gem install ffi
arch -x86_64 pod install
Now you should find all the files in iOS workspace. If you have problems with
/Users/$name/$directory/$projectName/$iosFolderName/$iosAppName.xcodeproj
The linked and embedded framework 'Pods_iosApp.framework' is missing one or more architectures required by this target: x86_64.
You need to add arm64 to xCode, click on the project folder -> Build Settings -> and search for Excluded Architectures and add arm64
Upvotes: 4
Reputation: 29
Install pod in project without using rosetta terminal just follow below steps
Upvotes: 2
Reputation: 970
Execute below to install the required ffi :
sudo arch -x86_64 gem install ffi
Instead of pod install
use :
arch -x86_64 pod install
Upvotes: 20
Reputation: 3000
As of version 1.10.1
Jan 7, 2021, CocoaPods is now supporting the new M1 chip.
Upvotes: 4