当前位置: 首页 > 知识库问答 >
问题:

如何在苹果硅(M1)上运行CocoaPods

亢嘉茂
2023-03-14

我有一个Flutter项目,我正试图在iOS上运行。它在我的基于英特尔的Mac电脑上正常运行,但在我的新的基于苹果硅的M1 Mac电脑上,它无法安装吊舱。

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运行Terminal,但问题仍然是:https://github.com/CocoaPods/CocoaPods/issues/9907#issuecomment-655870749

意识到现在使用苹果硅芯片的Mac电脑还为时过早。有没有办法让这项工作暂时有效?

共有3个答案

孔鸿云
2023-03-14
  • 使用Homebrew/rbenv/RVM安装您自己的Ruby版本(例如brew install ruby
  • 将它和宝石二进制文件添加到您的PATH并确保新版本与哪个ruby一起使用(如果与Homebrew一起安装,则应该是/opt/hombrew/opt/ruby/bin/ruby而不是/usr/bin/ruby
  • 使用sudo gem安装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是为«编译的

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

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

对于自制:

  • 执行brew安装ruby

此外,需要注意的是ruby仍然只包含在macOS中”

警告:macOS中包含此版本的ruby是为了与旧软件兼容。在未来版本的macOS中,ruby运行时默认情况下不可用,可能需要您安装额外的软件包。

IRB1.0.0 (2018-12-18)

来源:

  • https://betterprogramming.pub/ruby-on-apple-silicon-m1-macs-fb159849b2f5
傅俊德
2023-03-14

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

对于其他与这个问题斗争的人,我只是找到了一种解决方法。除了在罗塞塔运行航站楼外:

  1. 右键单击Finder中的终端
  2. 获取信息
  3. 用罗塞塔开场

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

sudo gem install ffi

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

匡玉堂
2023-03-14

2022年5月更新

如果你能用自制软件管理椰子荚。

# 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错误,必须首先安装Rosetta。谢谢,杰克·德赫斯特

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

alias pod='arch -x86_64 pod'
 类似资料:
  • 我刚刚尝试在Apple Mac Pro上运行Apache Flink的基本示例,新的M1处理器使用Rosetta 2兼容层。 不幸的是,它在以下堆栈跟踪中失败: 所以我的问题是,有人让它运行了吗?有可能在苹果硅上执行Flink工作吗? 编辑(13.04.2021)顺便说一句:使用Rosetta兼容层运行时发生此错误。因此,不幸的是,这并不能解决当前的问题。 编辑(2021年4月14日,回应理查德·

  • 由于ffi问题,我在M1 MacBook上运行“pod安装”失败,如下所述。 我遵循了一些解决方法(我想我以不同的顺序尝试了所有方法),但现在我得到了一个稍微不同的错误: 看来我现在有了ffi,但架构不对?我该怎么解决这个问题?在Rosetta模式下运行/不运行终端时会发生这种情况。 顺便说一句,其中一个提议的变通办法对我来说没有成功。当我尝试时: 我得到: 不确定这是否相关。

  • 新的Xcode 12是否支持为不在新的Apple Silicon上运行的计算机制作应用程序?我想知道这一点,因为我需要为自己制作一个新的应用程序。

  • 在我之前的基于英特尔的Mac电脑上,我曾经包括 在我的shell资源文件中。新的基于ARM的Apple芯片上的正确编译标志是什么?????似乎还没有很多资源,任何指针都非常感谢!

  • 是否需要专门发布OpenJDK来支持新的苹果M1芯片? 我看到目前有下载用于macOS/OS的JDK

  • 所以我已经从他们的网站上下载了正确的苹果硅android studio安装。当试图安装时,安装过程卡在这条消息上: 正在下载https://dl . Google . com/Android/repository/emulator-Darwin _ aarch 64-8807927 . zip警告:此下载无法从临时状态完成。不缓存重试。正在下载https://dl . Google . com/A