Jac*_*nig 143 macos ios cocoapods flutter apple-silicon
我有一个 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>'
Run Code Online (Sandbox Code Playgroud)
基于 Github 解决方法,我尝试使用 rosetta 运行终端,但问题仍然存在:https : //github.com/CocoaPods/CocoaPods/issues/9907#issuecomment-655870749
意识到采用 Apple Silicon 的 Mac 还为时尚早。有没有办法暂时使这项工作?
Lor*_*lor 227
2021 年 9 月仍在工作
#1 安装 ffi
sudo arch -x86_64 gem install ffi
Run Code Online (Sandbox Code Playgroud)
#2 重新安装依赖
arch -x86_64 pod install
Run Code Online (Sandbox Code Playgroud)
Jac*_*nig 177
编辑:我最近禁用了 Rosetta,并且添加了 ffi gem 后 Cocoapods 运行得很好。
对于其他在这个问题上苦苦挣扎的人,我刚刚找到了解决它的方法。除了在 Rosetta 中运行终端:
我安装了一个 gem,它似乎与错误中找不到的符号有关:
sudo gem install ffi
Run Code Online (Sandbox Code Playgroud)
执行此操作后,cocoapods 按预期运行。
Val*_*and 55
brew install ruby)PATH并确保使用新版本which ruby(如果与 Homebrew 一起安装/opt/homebrew/opt/ruby/bin/ruby,/usr/bin/ruby则应该是而不是)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}"
Run Code Online (Sandbox Code Playgroud)
如果您ruby使用 macOS 附带的通用二进制文件调用包含此代码的文件,您将在 M1 Mac 上获得以下结果:
OS: darwin20
Arch: universal-darwin20
Host CPU: x86_64
Build CPU: x86_64
Target CPU: universal
Run Code Online (Sandbox Code Playgroud)
如您所见,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 的无效信息。
Asffi使用来自 RbConfig 的信息(参见https://github.com/ffi/ffi/blob/dfae59e293974efaa7b4d414e5116d7a2187a06e/lib/ffi/platform.rb#L61和https://github.com/ffi/ffi/blob/e37f2cf57b4d414e5116d7a2187a06e / /ffi/fixtures/compile.rb#L11),我们最终得到了 OP 的错误消息。
因此,解决方案是使用 Homebrew、rbenv 或 RVM 获得专为 arm64 构建的 Ruby 版本。
对于自制:
brew install rubyexport PATH=/opt/homebrew/opt/ruby/bin:/opt/homebrew/lib/ruby/gems/3.0.0/bin:$PATH到你的.zshrc($(brew --prefix)如果需要,你可以找到你的 Homebrew 安装目录)source ~/.zshrc或重启你的 shellruby通过执行which ruby(应该是$(brew --prefix)/opt/ruby/bin/ruby)确保您使用的是正确的二进制文件sudo gem install cocoapodspod通过执行which pod(应该是$(brew --prefix)/lib/ruby/gems/3.0.0/bin/pod)确保您使用的是正确的二进制文件ethon版本为 0.13.0 或更高版本gem info ethon,否则运行sudo gem install ethonpod install此外,应该注意的ruby是,macOS 中仍然仅包含“为了与旧软件兼容”,如运行所证明的那样irb -v,因此无论如何这可能是安装您自己的版本的好机会:
警告:此版本的 ruby 包含在 macOS 中,以便与旧版软件兼容。在 macOS 的未来版本中,默认情况下 ruby 运行时将不可用,并且可能需要您安装额外的软件包。
irb 1.0.0 (2018-12-18)
资料来源:
Med*_*dhi 46
要在带有 M1 芯片(Apple Silicon)的 Mac 上完全安装 cocoapods,请按照以下步骤操作:
来源:iPhoneSoft
pfu*_*her 14
在 Rosetta 2 中运行终端的另一种方法是使用 设置架构arch -x86_64,如下所示:
arch -x86_64 sudo gem install cocoapods -n /usr/local/bin
Run Code Online (Sandbox Code Playgroud)
为了给予应有的信任,我在这里找到了这个解决方案
sam*_*miq 12
有一个“更好/更容易?” 现在水已经稳定,通过使用自制程序的方式,如果您安装了自制程序,只需运行
brew install cocoapods
Run Code Online (Sandbox Code Playgroud)
这将安装 ruby 和 libyaml 作为先决条件,到目前为止,这是最直接的方法(也是最有可能推荐的方法)。
Mat*_*teo 11
基本上尝试了这里列出的所有解决方案。
$ arch -arm64 brew install cocoapods
Run Code Online (Sandbox Code Playgroud)
终于为我做到了。
在此之前,请确保已正确安装自制程序并/opt/homebrew使用前缀。本文对此提供了很好的说明。
编辑:另一种选择是删除所有 flutter 和 dart 文件,然后仅使用 homebrew 来完成完整的安装过程,如下所示。这对我在 M1 Pro 上也有效。
小智 10
Kotlin 多平台移动开发
如果您在这里是因为运行时遇到此错误kdoctor
ruby@2.7 为我工作,所以:
brew install ruby@2.7
Run Code Online (Sandbox Code Playgroud)
切换到新安装的Ruby版本:
brew link --overwrite ruby@2.7
Run Code Online (Sandbox Code Playgroud)
然后安装CocoaPods:
brew install cocoapods
Run Code Online (Sandbox Code Playgroud)
小智 8
2021 年 9 月工作,Mac M1
我只想添加Medhi 的答案,在 iOS 文件夹内的同一终端内执行“pod repo update”,因为这对我来说至关重要地修复了错误。
这是完整的待办事项列表:
在实用程序文件夹中复制终端应用程序。
右键单击该应用程序并选择“获取信息”。
根据需要重命名该应用程序的其他版本。
选中“用 Rosetta 打开”选项。
使用命令安装 Cocoapodssudo gem install cocoapods
键入命令行sudo gem install ffi来修复 ffi 捆绑问题。
转到同一终端中应用程序的 iOS 文件夹
做pod repo update
现在你可以pod install毫无问题地进行了。
我花了一个多星期的时间寻找在 M1 机器上成功安装 CocoaPods 的解决方案。你可以看看我的方法是否适合你。
\n该解决方案要求 Terminal.app 在“ Rosetta ”模式下运行。
\n但它不要求终端在 x86 中运行。
\n[环境]
\nMac mini(M1,2020)/macOS Big Sur(版本 11.5.2)/Xcode 版本 13.0 (13A233)
\n要在“ Rosetta ”模式下运行terminal.app ,
\n右键单击 Terminal.app > 选择“获取信息”> 确保选中“使用 Rosetta 打开”。
\n\n(1) 运行以下行来更新 gem。
\n在执行以下任何命令之前,请确保您的 gem 版本是最新的。Medium 上的这篇文章介绍了此更新。
\nsudo gem update -n /usr/local/bin --system\n\nsudo gem install -n /usr/local/bin cocoapods --pre\nRun Code Online (Sandbox Code Playgroud)\n(2) 使用“sudo”命令执行命令。
\nsudo gem install\nRun Code Online (Sandbox Code Playgroud)\n(3)安装旧版本的CocoaPods
\n由于我的情况无法安装最新版本(1.10.0)。我尝试过安装旧版本。该行成功执行,没有任何错误消息。
\n您可以查看Apple 论坛上的帖子。
\nsudo gem install -n /usr/local/bin cocoapods -v 1.8.4\nRun Code Online (Sandbox Code Playgroud)\n然后,编译器可能会给您带来一些错误,例如“活动开发人员路径不存在”。如果您在计算机上安装了 Xcode 的测试版,则会显示此错误。
\n您需要运行以下几行,编译器才能切换到新的活动路径,指向新的 Xcode 应用程序。
\nsudo xcode-select --switch \xef\xbc\x8fApplications/Xcode.app/Contents/Developer\nRun Code Online (Sandbox Code Playgroud)\n如果你的 Xcode拒绝切换,你可以查看Apple 论坛上的这个帖子,看看是否有帮助。
\n(1)取消选中“使用Rosetta打开”
\n然后,可以返回“信息”面板并取消选中“使用 Rosetta 打开”,但取消选中 Rosetta 是可选的。如果需要,您可以选中该框。
\n(2)照常运行CocoaPods命令
\n之后,您可以返回项目目录并运行命令pod init来像往常一样为您的项目启动 CocoaPods
正常 CocoaPods 构建的步骤:
\npod initopen Podfileedit Podfile(用于指定 pod)pod installsudo xcodebuild -license如果您遇到错误(关于 Xcode 注册),请使用。
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 打开
安装cocoapods
sudo arch -x86_64 gem install ffi
Run Code Online (Sandbox Code Playgroud)
安装 Pod 文件
arch -x86_64 pod install
Run Code Online (Sandbox Code Playgroud)
更新 Pod
arch -x86_64 pod update
Run Code Online (Sandbox Code Playgroud)
Pod 未安装在M1 芯片 MAC上???不用担心
运行以下三个命令:-
pod deintegrate
sudo arch -x86_64 gem install ffi
arch -x86_64 pod install
Run Code Online (Sandbox Code Playgroud)
有用 !!
Mac M1 MacOS BigSur解决方案:
brew cleanup -d -v
brew install cocoapods
brew link --overwrite cocoapods
Run Code Online (Sandbox Code Playgroud)
执行以下操作以安装所需的ffi:
sudo arch -x86_64 gem install ffi
而不是pod install使用:
arch -x86_64 pod install
小智 5
如果您已经更新了项目并且已经安装了 ffi,则需要运行以下命令:
arch -x86_64 pod install --repo-update
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
84728 次 |
| 最近记录: |