252

我有一个试图在 iOS 上运行的 Flutter 项目。它在我基于 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

意识到使用 Apple Silicon 的 Mac 还为时过早。有没有办法暂时使这项工作?

4

35 回答 35

523

2022 更新

如果您可以使用 Homebrew 来管理 cocoapods。

# Uninstall the local cocoapods gem
sudo gem uninstall cocoapods

# Reinstall cocoapods via Homebrew
brew install cocoapods

2021解决方案

#1 Install ffi
sudo arch -x86_64 gem install ffi

#2 Re-install dependencies
arch -x86_64 pod install

附加信息

#1 对于看到arch: posix_spawnp: gem: Bad CPU type in executable错误的任何人,您必须首先安装 Rosetta。谢谢,@杰克杜赫斯特

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

alias pod='arch -x86_64 pod'
于 2020-12-17T04:18:58.180 回答
223

编辑:我最近禁用了 Rosetta,添加 ffi gem 后 Cocoapods 运行良好。

对于其他在这个问题上苦苦挣扎的人,我刚刚找到了解决它的方法。除了在 Rosetta 中运行终端:

  1. 在 Finder 中右键单击终端
  2. 获取信息
  3. 与罗塞塔一起开放

我安装了一个似乎与错误中未找到的符号相关的 gem:

sudo gem install ffi

完成此操作后,cocoapods 将按预期运行。

于 2020-11-18T21:54:06.413 回答
168

TL;博士:

  • 使用 Homebrew / rbenv / RVM 安装您自己的 Ruby 版本(例如brew install ruby
  • 将它和 gems 二进制文件添加到您的PATH并确保使用新版本(如果与 Homebrew 一起安装,则which ruby应该/opt/homebrew/opt/ruby/bin/ruby代替)/usr/bin/ruby
  • 安装 CocoaPods sudo gem install 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}"

如果您ruby使用 macOS 随附的通用二进制文件调用包含此代码的文件,您将在 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(如果需要,您可以找到您的 Homebrew 安装目录$(brew --prefix)
  • 执行source ~/.zshrc或重新启动你的 shell
  • ruby通过执行which ruby(应该$(brew --prefix)/opt/ruby/bin/ruby)确保您使用的是正确的二进制文件
  • 安装 CocoaPodssudo gem install cocoapods
  • pod通过执行which pod(应该$(brew --prefix)/lib/ruby/gems/3.0.0/bin/pod)确保您使用的是正确的二进制文件
  • 确保ethon版本为 0.13.0 或更高版本gem info ethon,否则运行sudo gem install ethon
  • pod install

默认情况下,Ruby 不会随未来的 macOS 版本一起提供

此外,应该注意的ruby是,它仍然包含在 macOS 中,仅“为了与遗留软件兼容”,正如 running 所证明的那样irb -v,所以这可能是安装您自己的版本的好机会:

警告:此版本的 ruby​​ 包含在 macOS 中,以便与旧版软件兼容。在未来的 macOS 版本中,ruby 运行时将默认不可用,并且可能需要您安装额外的包。

irb 1.0.0 (2018-12-18)

资料来源:

于 2021-03-09T23:41:53.403 回答
61

要在带有 M1 芯片(Apple Silicon)的 Mac 上安装完整的 cocoapods,请按照以下步骤操作:

  1. 复制实用程序文件夹中的终端应用程序。
  2. 右键单击应用程序并选择获取信息。
  3. 根据需要重命名应用程序的其他版本。
  4. 选中“使用 Rosetta 打开”选项。
  5. 使用命令“sudo gem install cocoapods”安装 Cocoapods
  6. 键入命令行“gem install ffi”来修复 ffi 捆绑包问题。现在您可以毫无问题地进行“pod install”。

资料来源:iPhoneSoft

于 2020-11-19T19:56:44.243 回答
21

在 Rosetta 2 中运行终端的替代方法是使用 设置架构arch -x86_64,如下所示:

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

为了给予应有的荣誉,我在这里找到了这个解决方案

MacPorts 错误跟踪器,问题 #61545,评论 7

于 2020-12-06T02:40:14.840 回答
19

我发现的最简单的方法:

sudo gem uninstall cocoapods

brew install cocoapods

于 2021-12-14T19:12:49.003 回答
12
  1. 执行以下安装所需的ffi

    sudo arch -x86_64 gem install ffi

  2. 而不是pod install使用:

    arch -x86_64 pod install

于 2021-07-06T18:31:44.060 回答
9

有一个“更好/更容易?” 通过使用自制软件的方式,现在水已经解决了,如果你有自制软件安装就运行

brew install cocoapods

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

于 2021-11-14T15:01:12.933 回答
7

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 打开

于 2021-03-28T14:36:26.013 回答
5

工作于 2021 年 9 月,Mac M1

我只想添加到Medhi 的答案中,在 iOS 文件夹内的同一终端内执行“pod repo 更新”,因为这对我来说非常重要。

这是完整的待办事项清单:

  1. 复制实用程序文件夹中的终端应用程序。

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

  3. 根据需要重命名应用程序的其他版本。

  4. 选中“使用 Rosetta 打开”选项。

  5. 使用命令安装 Cocoapodssudo gem install cocoapods

  6. 键入命令行sudo gem install ffi以修复 ffi 捆绑包问题。

  7. 在同一终端中转到您的应用程序的 iOS 文件夹

  8. pod repo update

  9. 现在你可以pod install毫无问题地做一个。

于 2021-09-01T10:09:28.650 回答
4

安装 cocoapods

sudo arch -x86_64 gem install ffi

安装 pod 文件

arch -x86_64 pod install

更新吊舱

arch -x86_64 pod update
于 2021-05-10T09:42:51.927 回答
4

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

$ arch -arm64 brew install cocoapods

终于为我做了。

在此之前,请确保正确安装了 homebrew 并带有/opt/homebrew前缀。本文提供了很好的说明。

编辑:另一种选择是删除所有颤振和飞镖文件,只使用自制软件进行完整的安装过程,如此处所示。这在 M1 Pro 上也适用于我。

于 2021-12-04T10:29:58.140 回答
3

试试 $ sudo gem install ffi。这对我来说可以。

于 2020-11-20T02:12:06.300 回答
3

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

arch -x86_64 sudo gem install ffi
于 2021-03-22T09:27:23.630 回答
3

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

arch -x86_64 pod install --repo-update
于 2021-09-05T21:07:36.107 回答
3

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

于 2021-06-16T17:20:11.547 回答
2

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

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

该解决方案要求 Terminal.app 在“ Rosetta ”模式下运行。

但它不需要终端在 x86 中运行。

[环境]

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


终端 + 罗塞塔

(CocoaPods 安装需要 Rosetta)

要在“ Rosetta ”模式下运行 terminal.app ,

右键单击 Terminal.app > 选择“获取信息”> 确保选中“使用 Rosetta 打开”。

显示带有项目的复选框的图像


脚步

(1) 运行以下几行来更新 gem。

在执行以下任何命令之前,请确保您的 gem 版本是最新的。此更新由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)。我试过安装旧版本。该行成功执行,没有任何错误消息。

您可以查看Apple 论坛上的主题

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

错误解决方案

然后,编译器可能会给您带来一些错误,例如“活动开发者路径不存在”。如果您在机器上安装了 Xcode的测试版,则会显示此错误。

您需要运行以下行以使编译器切换到新的活动路径,指向新的 Xcode 应用程序。

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

如果您的 Xcode拒绝切换,您可以在 Apple 论坛上查看此线程,看看它是否有帮助。


最后一步⬇️

(1) 取消勾选“使用 Rosetta 打开

然后,可以返回“信息”面板并取消选中“使用 Rosetta 打开”,但取消选中 Rosetta 是可选的。如果需要,您可以选中该框。

(2) 像往常一样运行 CocoaPods 命令

之后,您可以返回项目目录并pod init像往常一样运行命令为您的项目启动 CocoaPods

普通 CocoaPods 构建的步骤:

  1. pod init
  2. open Podfile
  3. edit Podfile(用于指定 pod)
  4. pod install
  5. .xcworkspace已准备好在Xcode 中打开。

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

于 2021-09-28T17:19:17.523 回答
2

我一直有同样的问题。我确实发现可可豆荚 UI 应用程序似乎按预期工作。

于 2020-11-19T09:47:52.093 回答
2

在 MAC M1中,适用于使用 KMM(Kotlin Multiplatform Mobile)的任何人,但它可能适用于其他人,发现它不会.xcworkspace在 iOS APP 上创建文件,当使用 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.

需要在xCode中添加arm64,点击项目文件夹->构建设置->搜索Excluded Architectures并添加arm64

于 2021-06-29T19:24:39.053 回答
1

在项目中安装 pod 而不使用 Rosetta 终端 ,只需按照以下步骤操作

  • sudo arch -x86_64 gem install ffi
  • 拱 -x86_64 吊舱安装
于 2021-07-11T12:36:20.503 回答
1

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

从系统偏好。用户和组。将登录 shell 设置为

   /bin/bash 

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

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

希望这会奏效。

于 2021-09-30T09:03:30.493 回答
1

Pod 没有安装在M1 芯片 MAC上???不用担心

运行以下三个命令:-

pod deintegrate

sudo arch -x86_64 gem install ffi

arch -x86_64 pod install

有用 !!

于 2021-09-27T09:55:46.543 回答
1

这是我尝试在本机终端中安装 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
于 2020-11-20T23:57:27.367 回答
1

Mac M1 MacOS BigSur解决方案:

brew cleanup -d -v    
brew install cocoapods
brew link --overwrite cocoapods
于 2022-01-15T21:38:54.720 回答
0

在将新依赖项(Firebase)添加到存储库后,我确实遇到了这个问题。然后能够执行 sudo arch -x86_64 gem install ffi,但之后仍然存在其他问题。

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

设置:Xcode 12.4 Mac M1 react-native 63.4

于 2021-02-16T11:19:32.827 回答
0

我的新 MacBook Air M1 遇到了同样的问题,因为 m1 具有不同的架构,我们应该使用Rosetta Translation Environment安装软件包。

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

解决步骤:

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

然后用这个终端安装包 在此处输入图像描述

于 2021-08-26T10:25:40.753 回答
0

我对这个答案有一个转折:

sudo gem install ffi
  1. 扭曲我重新启动了我的机器,然后它工作了。
于 2021-05-06T17:05:06.740 回答
0

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

安装 ffi 后:

sudo arch -x86_64 gem install ffi

更新依赖项

arch -x86_64 pod update
于 2021-04-15T13:49:01.680 回答
0

以上所有解决方案都是有效的,只是想发布一下,使用 home brew 和 cocoapods 支持原生 Apple Silicon 芯片,您可以运行命令而无需前缀arch -x86_64

所以,sudo gem install ffi会做这项工作。

于 2021-11-07T14:29:15.330 回答
0

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

于 2021-09-19T18:25:35.913 回答
0

这对我有用,试图在 Mac M1 上构建应用程序

首先转到您的applications文件夹,然后

选择terminal应用程序-> 获取信息->select run with rosseta

// if you are trying to build the app through xcodexcode对应用 重复上述步骤

注意:确保您的终端和代码在执行此操作时已关闭。

现在运行你的终端切换到你的project_folder/ios

运行如下所示的命令

sudo gem install cocoapods

sudo gem install ffi

sudo arch -x86_64 gem install ffi
于 2021-10-01T11:49:57.457 回答
0

没有罗塞塔你可以这样做

  1. 确保操作系统更新到 macOS Big Sur 11.3.1
  2. /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  3. brew install cocoapods
于 2022-02-28T16:07:12.850 回答
-1

对于 Final Run Mac 1 Silicon 0.65(任何版本)

Npx 反应原生初始化 Nitin2

然后更改pod文件

光盘iOS

打开 pod 文件

添加

平台:ios,'12.1'

use_flipper!() post_install 做 |installer| react_native_post_install(installer) installer.pods_project.build_configurations.each 做 |config| config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64" end end

通过添加新的 swift 文件和桥头,添加桥头后请删除 swift 文件,否则 swift 文件可能会产生错误。

豆荚文件

用于创建 Swift 文件。

转到项目nitin2 - > Nitin2(子项目)并右键单击它单击新建文件选择swift文件->下一步然后选择iOS文件夹中的nitin2目录保持文件名相同单击目标中的复选框nitin2单击创建现在它将要求创建桥接头。h 是的,创建文件现在转到

转到项目 nitin2 -> Nitin2 (子项目) 查看 file.swift 并将其删除。

xcode 添加桥头 arm64

现在转到 Xcode -> 目标 Nitin2 -> 构建设置在架构中单击排除架构并添加 arm64

现在从 Xcode 产品菜单中删除构建文件夹

现在通过终端做事

cd 转到 iOS 目录

pod 缓存清理 --all

纱线缓存清理

rm -rf ~/Library/Developer/Xcode/DerivedData/*

打开 nitin2.xcworkspace

rm -rf Pods Podfile.lock

吊舱解体 && 吊舱设置 && 吊舱安装

代码 /Users/nitin/D1/www/projects//ios/Pods/../../node_modules/react-native/React/FBReactNativeSpec/../../scripts/generate-specs.sh

添加导出 PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin

然后运行 ​​iOS npx react-native run-ios

于 2021-09-08T10:08:04.853 回答
-1

如果您使用的是需要移植的旧项目,请不要忘记更新 Runner.xcodeproj 和 Pods.xcodeproj 中的 project.pbxproj 文件。

IPHONEOS_DEPLOYMENT_TARGET 可能仍指向 8.0

更新所有事件如下:

IPHONEOS_DEPLOYMENT_TARGET = 9.0;
于 2021-01-20T02:36:57.840 回答
-2

如果您使用的是 M1 芯片系统,请使用-

转到应用程序文件夹-

选择终端打开 rosseta- 然后运行 ​​cmd-

sudo arch -x86_64 gem install ffi

然后

arch -x86_64 pod install
于 2021-09-27T10:30:19.487 回答