如何在Apple Silicon上运行CocoaPods (M1)

我有一个Flutter项目,我试图在iOS上运行。它在我那台基于英特尔(intel)处理器的Mac电脑上运行正常,但在我那台基于苹果(Apple) silicon芯片的M1新Mac电脑上却无法安装pod。

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>'

基于Github的解决方案,我尝试使用rosetta运行终端,但问题仍然相同:https://github.com/CocoaPods/CocoaPods/issues/9907#issuecomment-655870749

意识到苹果芯片的mac电脑还为时过早。有没有办法暂时解决这个问题?

346207 次浏览

编辑:我最近禁用了Rosetta, Cocoapods在添加ffi宝石后运行得很好。

对于其他正在为这个问题而挣扎的人来说,我只是找到了解决它的方法。除了在Rosetta中运行终端:

  1. 在查找器中右键单击终端
  2. 得到信息
  3. 打开罗塞塔

我安装了一个宝石,似乎与错误中没有找到的符号有关:

sudo gem install ffi

在这之后,cocoapods就会像预期的那样运行。

我也有同样的问题。我确实发现可可豆的UI应用程序似乎像预期的那样工作。

要在使用M1芯片(Apple Silicon)的Mac上安装完全cocoapods,请遵循以下步骤:

  1. 在Utilities文件夹中复制终端应用程序。
  2. 右键单击应用程序并选择获取信息。
  3. 重命名应用程序的其他版本,如你所愿。
  4. 勾选“与罗塞塔一起开放”选项。
  5. 使用命令“sudo gem Install Cocoapods”安装Cocoapods;
  6. 输入命令行quot;gem install ffi"修复ffi bundle的问题。 现在你可以做一个“豆荚安装”;

来源:iPhoneSoft

尝试$ sudo gem install ffi。这对我来说很有效。

这是我在本机终端中安装ffi时得到的结果:

Fetching ffi-1.13.1.gem
Building native extensions. This could take a while...
ERROR:  Error installing ffi:
ERROR: Failed to build gem native extension.


current directory: /Library/Ruby/Gems/2.6.0/gems/ffi-1.13.1/ext/ffi_c

切换到Rosetta终端,安装“gem install cocoapods”;失败在

You don't have write permissions for the /usr/bin directory.

但是后来ffi的安装很成功…

最后用

sudo gem install cocoapods -n /usr/local/bin

在Rosetta 2中运行Terminal的另一种方法是使用arch -x86_64设置体系结构,如下所示:

arch -x86_64 sudo gem install cocoapods -n /usr/local/bin

我在这里找到了这个解决方案

MacPorts错误跟踪器,问题#61545,注释7

2022年11月更新

如果你能用家酿来管理椰荚。

# Uninstall the local cocoapods gem
sudo gem uninstall cocoapods


# Reinstall cocoapods via Homebrew
brew install cocoapods

2021的解决方案

# STEP 1: Install ffi
sudo arch -x86_64 gem install ffi


# STEP 2: Re-install dependencies
arch -x86_64 pod install

额外的信息

#1对于任何看到arch: posix_spawnp: gem: Bad CPU type in executable错误的人,你必须首先安装Rosetta。谢谢,@Jack Dewhurst

#2如果你经常运行pod命令,在.zshrc.bash_profile中设置一个别名可能很方便。谢谢@theMoonlitKnight的建议。

alias pod='arch -x86_64 pod'

如果你在一个需要移植的旧项目上,不要忘记更新项目。pbxproj文件。xcodeproj和pod .xcodeproj。

IPHONEOS_DEPLOYMENT_TARGET可能仍然指向8.0

更新所有事件如下:

IPHONEOS_DEPLOYMENT_TARGET = 9.0;

我确实在新依赖项(Firebase)添加到回购后遇到了这个问题。然后能够做sudo arch -x86_64 gem安装ffi,但其他问题仍然存在。

我的解决方案是: 重新克隆并再次运行它。

安装:Xcode 12.4 Mac M1 react-native 63.4

< h3 id = " tldr-rrji " > TL;博士:< / h3 >
  • 使用Homebrew / rbenv / RVM安装您自己的Ruby版本(例如brew install ruby)
  • 将它和gems二进制文件添加到你的PATH中,并确保新版本与which ruby一起使用(如果安装了Homebrew,应该是/opt/homebrew/opt/ruby/bin/ruby而不是/usr/bin/ruby)
  • 使用sudo gem install cocoapods安装CocoaPods(确保ethon至少是0.13.0版本)
  • 运行pod install

详细回答:

.

所有建议使用Rosetta / arch -x86_64的答案都是变通方法,并没有完全解决来自RbConfig和通用二进制文件工作方式的真正问题。

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}"

如果你用macOS附带的通用二进制对包含此代码的文件调用ruby,你将在M1 Mac上得到以下结果:

OS: darwin20
Arch: universal-darwin20
Host CPU: x86_64
Build CPU: x86_64
Target CPU: universal

正如你所看到的,RbConfig是为«通用»CPU编译的,但是用x86 CPU构建的,因此生成的rbconfig.rb文件(参见/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/universal-darwin20/rbconfig.rb)使用了主机CPU的无效信息。

由于ffi使用来自RbConfig的信息(参见https://github.com/ffi/ffi/blob/dfae59e293974efaa7b4d414e5116d7a2187a06e/lib/ffi/platform.rb#L61https://github.com/ffi/ffi/blob/e3f2cf9b82055709ddbeecbf77810f43438c4b64/spec/ffi/fixtures/compile.rb#L11),我们最终得到OP的错误消息。

因此,解决方案是通过使用Homebrew、rbenv或RVM来获得一个专门为arm64构建的Ruby版本。

自制程序:

  • 执行brew install ruby
  • export PATH=/opt/homebrew/opt/ruby/bin:/opt/homebrew/lib/ruby/gems/3.0.0/bin:$PATH添加到你的.zshrc(如果需要,你可以用$(brew --prefix)找到你的Homebrew安装目录)
  • 执行source ~/.zshrc或重新启动shell
  • 通过执行which ruby(应该是$(brew --prefix)/opt/ruby/bin/ruby),确保你使用了正确的ruby二进制
  • 使用sudo gem install cocoapods安装CocoaPods
  • 通过执行which pod(应该是$(brew --prefix)/lib/ruby/gems/3.0.0/bin/pod),确保你使用了正确的pod二进制
  • 确保ethon是带有gem info ethon的0.13.0或更高版本,否则运行sudo gem install ethon
  • 运行pod install

未来macOS版本默认不附带Ruby

此外,应该注意的是,ruby仍然只包含在macOS中«与遗留软件兼容»,这可以通过运行irb -v来证明,所以这可能是一个安装自己版本的好机会:

警告:此版本的ruby包含在macOS兼容性 使用遗留软件。在macOS的未来版本中,ruby运行时 默认情况下不可用,可能需要您安装 额外的包。< / p >

Irb 1.0.0 (2018-12-18)

来源:

  • < a href = " https://betterprogramming。pub / ruby-on-apple-silicon-m1-macs-fb159849b2f5 noreferrer“rel = > https://betterprogramming.pub/ruby-on-apple-silicon-m1-macs-fb159849b2f5 < / >
  • https://github.com/ffi/ffi/issues/870

我也有同样的问题,这对我很有帮助。打开终端,输入以下命令:

arch -x86_64 sudo gem install ffi

3月28日更新

1 - arch -x86_64 sudo gem install cocoapods -n /usr/local/bin

2 - arch -x86_64 sudo gem install ffi

3 - pod install

无需复制或使用Rosetta打开

对于更新pod,也许有人会帮助:

安装ffi后:

sudo arch -x86_64 gem install ffi

更新附件

arch -x86_64 pod update

我对这个答案有个曲解:

  1. 运行
sudo gem install ffi
  1. 的转折: 我重启了我的机器,然后它工作了。

安装cocoapods

sudo arch -x86_64 gem install ffi

安装pod文件

arch -x86_64 pod install

更新豆荚

arch -x86_64 pod update

截至2021年1月7日版本1.10.1, CocoaPods现在支持新的M1芯片。

在MAC m1中,对于任何使用KMM (Kotlin Multiplatform Mobile)的人,但它可能适用于其他,发现它不会在iOS应用程序的.xcworkspace上创建文件,当使用CocoaPods作为依赖管理器时,首先通过键入来安装CocoaPods

sudo gem install cocoapods

然后导航到你的项目文件夹,现在在iOS文件夹中输入

sudo arch -x86_64 gem install ffi
arch -x86_64 pod install
现在你应该在iOS工作区中找到所有的文件。 如果你有

的问题
/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.

你需要添加arm64到xCode,点击项目文件夹->建立设置→并搜索排除架构并添加arm64

  1. 下面的< >强执行< / >强< >强安装< / >强所需的< >强ffi < / >强:

    sudo arch -x86_64 gem install ffi

  2. 代替pod install使用:

    arch -x86_64 pod install

在项目中安装pod而不使用rosetta终端 只需遵循以下步骤

  • Sudo arch -x86_64 gem安装ffi
  • Arch -x86_64 pod安装

我的新MacBook Air M1也遇到了同样的问题,因为M1有不同的架构,我们应该用Rosetta翻译环境安装包。

您可以通过使用rosetta解决大多数兼容性问题。

解决步骤:

  1. 打开查找器/应用程序
  2. 复制您的终端
  3. 右键单击新终端并选中复选框 [x]使用
  4. 打开

,然后用这个终端安装包 enter image description here < / p >

Mac M1将于2021年9月开始工作

我只想添加到Medhi的回答,做一个“pod repo update”;在同一个终端的iOS文件夹中,因为这为我修复了错误。

以下是完整的待办事项清单:

  1. 在Utilities文件夹中复制终端应用程序。

  2. 右键单击应用程序并选择“获取信息”。

  3. 重命名应用程序的其他版本,如你所愿。

  4. 选中“用rosetta打开”选项。

  5. 使用sudo gem install cocoapods命令安装Cocoapods

  6. 输入命令行sudo gem install ffi来修复ffi bundle问题。

  7. < p > 在同一终端进入应用程序的iOS文件夹

  8. < p > pod repo update

  9. 现在你可以毫无问题地执行pod install

如果你的情况是你已经更新了你的项目并且已经安装了ffi,你将需要运行这个:

arch -x86_64 pod install --repo-update

我的解决方案是在create命令的开头添加arch -x86_64

Pod未安装在M1芯片MAC ??不用担心

执行以下3条命令:-

pod deintegrate


sudo arch -x86_64 gem install ffi


arch -x86_64 pod install

真的有用!!

如果您使用M1芯片系统,则使用-

进入应用程序文件夹-

选择终端打开rosseta- 执行cmd-

sudo arch -x86_64 gem install ffi

然后

arch -x86_64 pod install

✅下面的解决方案适用于我的Apple M1机器。

我花了一个多星期的时间寻找在M1机器上成功安装CocoaPods的解决方案。你可以看看我的方法对你是否有效。🔍

解决方案需要终端。Rosetta"模式。

但是它不要求终端在x86上运行。

(环境)

Mac mini (M1, 2020) / macOS Big Sur (Version 11.5.2) / Xcode Version 13.0 (13A233)


终端+罗塞塔

(CocoaPods安装时需要Rosetta)

运行终端。罗塞塔"模式,

右击终端。应用程序在选择“得到信息">确保"使用Rosetta打开"检查。

图片显示带有项目的复选框 < / >


步骤

(1)运行以下代码行更新gem。

在执行以下命令之前,请确保您的gem版本是最新的。此更新由这篇文章 on Medium引入。

sudo gem update -n /usr/local/bin --system


sudo gem install  -n /usr/local/bin cocoapods --pre

(2)用&;sudo"命令。

sudo gem install

(3)安装较旧版本的CocoaPods

由于我的情况下无法安装最新版本(1.10.0)。我试着安装了一个旧版本。该行成功执行,没有任何错误消息。

你可以在苹果的论坛上查询线程

sudo gem install -n /usr/local/bin cocoapods -v 1.8.4

错误的解决方案

然后,编译器可能会给你带来一些错误,比如&;活动开发人员路径不存在"。这个错误会在你的机器上显示Xcode的如果你安装了测试版

你需要运行下面几行代码让编译器切换到一个新的活动路径,指向新的Xcode应用程序。

sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer

如果你的Xcode是拒绝转换,你可以在苹果的论坛上查看这个线程,看看它是否有帮助。


最后一步⬇️

(1)取消选中“使用Rosetta打开”;

然后,可以回到“信息”;面板和取消选中“__abc0”,但取消选中Rosetta是可选的。如果需要,你可以把这个框打勾。

(2)照常运行CocoaPods命令

在此之后,您可以返回到项目目录并运行命令pod init为您的项目像往常一样初始化CocoaPods

构建正常CocoaPods的步骤:

  1. pod init
  2. open Podfile
  3. edit Podfile(用于指定pods)
  4. pod install
  5. .xcworkspace已经可以在Xcode中打开了。

如果遇到错误(关于Xcode注册),请使用sudo xcodebuild -license

这就是我在M1中解决问题的方法。有人可能会得到帮助。

来自系统首选项。用户,组。设置登录shell为

   /bin/bash

然后关闭终端并重新打开它。运行此命令

sudo gem install -n /usr/local/bin cocoapods -v 1.8.4

希望这能起作用。

这对我来说很有用,试着在Mac M1上创建应用

首先进入你的applications文件夹

select terminal app ->获取信息->select run with rosseta

< p > // if you are trying to build the app through xcodexcode app

重复上述步骤

注意:在这样做时,请确保您的终端和代码是关闭的。

现在运行终端开关到project_folder/ios

运行以下显示的命令

sudo gem install cocoapods


sudo gem install ffi


sudo arch -x86_64 gem install ffi

上面所有的解决方案都是有效的,只是想发布家庭酿造和cocoapods支持本地苹果硅芯片,你可以在没有前缀arch -x86_64的情况下运行命令

因此,sudo gem install ffi将完成这项工作。

“更好/更容易?”通过使用家酿的方式,现在,水已经解决,如果你有家酿安装只是运行

brew install cocoapods

这将安装ruby和利比亚aml作为先决条件,到目前为止,这是最直接的方法(也是最有可能被推荐的方法)。

基本上尝试了这里列出的所有解决方案。

$ arch -arm64 brew install cocoapods

终于为我做到了。

在此之前,请确保正确安装了自制程序,并将/opt/homebrew作为前缀。文章对此提供了很好的说明。

编辑:另一种选择是删除所有的flutter和dart文件,只使用自制的完整安装过程,如在这里所示。我在M1 Pro上也是这样。

我发现最简单的方法是:

sudo gem uninstall cocoapods

brew install cocoapods

Mac M1 MacOS BigSur解决方案:

brew cleanup -d -v
brew install cocoapods
brew link --overwrite cocoapods

单击右,打开获取信息菜单 选中“使用rosetta打开”;

Sudo gem安装cocoapods

Sudo gem安装ffi

sudo gem update——system //更新ruby

如果不起作用:

安装一个ruby管理器,我更喜欢数位视讯

rvm安装:

  • 安装gnupg
  • gpg——keyserver hkp://pool.sks-keyservers.net——recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
  • \curl -sSL https://get.rvm.io | bash

不要忘记添加bash配置文件:

< p > =出口路径,路径:美元$ HOME / .rvm / bin"#添加RVM到脚本路径(到 $GEM_HOME/bin:$PATH"[[s “$ HOME / .rvm /脚本/ rvm"]],,源“$ HOME / .rvm /脚本/ rvm"#负载 RVM到shell会话作为一个函数

  • 检查

美元区附些

RVM安装成功后执行此命令

  • 安装新的ruby版本:

$rvm install 3.1.2

  • 选择默认版本:

$rvm—默认使用3.1.2

然后重新启动终端并运行$sudo gem install cocoapods

请使用以下代码:-

arch -x86_64 pod install

在任何情况下,这都是有效的。

我们可以很容易地解决这个问题

  1. 点击Finder
  2. 进入应用程序
  3. 右键点击xcode
  4. 点击获取信息
  5. 使用Rosetta标记打开 李enter image description here < / >

截至2022年11月。在一台2021年的M1 iMac上做了下面的测试,它成功了。

# 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