React Native在Apple Silicon (M1)上的pod安装失败

13

我拥有一台新的Macbook Pro,它配备了M1芯片。

我尝试运行我的React Native项目,但在pod install上卡住了。

之后,我创建了一个空项目并尝试运行,但仍然遇到了相同的错误。

### Command

```
/opt/homebrew/Cellar/cocoapods/1.10.1/libexec/bin/pod install
```

### Report

* What did you do?

* What did you expect to happen?

* What happened instead?


### Stack

```
   CocoaPods : 1.10.1
        Ruby : ruby 2.6.3p62 (2019-04-16 revision 67580) [universal.arm64e-darwin20]
    RubyGems : 3.0.3
        Host : macOS 11.0.1 (20B29)
       Xcode : 12.4 (12D4e)
         Git : git version 2.24.3 (Apple Git-128)
Ruby lib dir : /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib
Repositories : 
```

### Plugins

```
cocoapods-deintegrate : 1.0.4
cocoapods-plugins     : 1.0.0
cocoapods-search      : 1.0.0
cocoapods-trunk       : 1.5.0
cocoapods-try         : 1.2.0
```

### Podfile

```ruby
require_relative '../node_modules/react-native/scripts/react_native_pods'
require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'

platform :ios, '10.0'

target 'temp2' do
  config = use_native_modules!

  use_react_native!(:path => config["reactNativePath"])

  target 'temp2Tests' do
    inherit! :complete
    # Pods for testing
  end

  # Enables Flipper.
  #
  # Note that if you have use_frameworks! enabled, Flipper will not work and
  # you should disable these next few lines.
  use_flipper!
  post_install do |installer|
    flipper_post_install(installer)
  end
end

target 'temp2-tvOS' do
  # Pods for temp2-tvOS

  target 'temp2-tvOSTests' do
    inherit! :search_paths
    # Pods for testing
  end
end
```

### Error

```
LoadError - dlopen(/Library/Ruby/Gems/2.6.0/gems/ffi-1.14.2/lib/ffi_c.bundle, 0x0009): missing compatible arch in /Library/Ruby/Gems/2.6.0/gems/ffi-1.14.2/lib/ffi_c.bundle - /Library/Ruby/Gems/2.6.0/gems/ffi-1.14.2/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.14.2/lib/ffi.rb:6:in `rescue in <top (required)>'
/Library/Ruby/Gems/2.6.0/gems/ffi-1.14.2/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'
/opt/homebrew/Cellar/cocoapods/1.10.1/libexec/gems/cocoapods-1.10.1/lib/cocoapods/sources_manager.rb:74:in `cdn_url?'
/opt/homebrew/Cellar/cocoapods/1.10.1/libexec/gems/cocoapods-1.10.1/lib/cocoapods/sources_manager.rb:36:in `create_source_with_url'
/opt/homebrew/Cellar/cocoapods/1.10.1/libexec/gems/cocoapods-1.10.1/lib/cocoapods/sources_manager.rb:21:in `find_or_create_source_with_url'
/opt/homebrew/Cellar/cocoapods/1.10.1/libexec/gems/cocoapods-1.10.1/lib/cocoapods/installer/analyzer.rb:178:in `block in sources'
/opt/homebrew/Cellar/cocoapods/1.10.1/libexec/gems/cocoapods-1.10.1/lib/cocoapods/installer/analyzer.rb:177:in `map'
/opt/homebrew/Cellar/cocoapods/1.10.1/libexec/gems/cocoapods-1.10.1/lib/cocoapods/installer/analyzer.rb:177:in `sources'
/opt/homebrew/Cellar/cocoapods/1.10.1/libexec/gems/cocoapods-1.10.1/lib/cocoapods/installer/analyzer.rb:1073:in `block in resolve_dependencies'
/opt/homebrew/Cellar/cocoapods/1.10.1/libexec/gems/cocoapods-1.10.1/lib/cocoapods/user_interface.rb:64:in `section'
/opt/homebrew/Cellar/cocoapods/1.10.1/libexec/gems/cocoapods-1.10.1/lib/cocoapods/installer/analyzer.rb:1072:in `resolve_dependencies'
/opt/homebrew/Cellar/cocoapods/1.10.1/libexec/gems/cocoapods-1.10.1/lib/cocoapods/installer/analyzer.rb:124:in `analyze'
/opt/homebrew/Cellar/cocoapods/1.10.1/libexec/gems/cocoapods-1.10.1/lib/cocoapods/installer.rb:414:in `analyze'
/opt/homebrew/Cellar/cocoapods/1.10.1/libexec/gems/cocoapods-1.10.1/lib/cocoapods/installer.rb:239:in `block in resolve_dependencies'
/opt/homebrew/Cellar/cocoapods/1.10.1/libexec/gems/cocoapods-1.10.1/lib/cocoapods/user_interface.rb:64:in `section'
/opt/homebrew/Cellar/cocoapods/1.10.1/libexec/gems/cocoapods-1.10.1/lib/cocoapods/installer.rb:238:in `resolve_dependencies'
/opt/homebrew/Cellar/cocoapods/1.10.1/libexec/gems/cocoapods-1.10.1/lib/cocoapods/installer.rb:160:in `install!'
/opt/homebrew/Cellar/cocoapods/1.10.1/libexec/gems/cocoapods-1.10.1/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'
/opt/homebrew/Cellar/cocoapods/1.10.1/libexec/gems/cocoapods-1.10.1/lib/cocoapods/command.rb:52:in `run'
/opt/homebrew/Cellar/cocoapods/1.10.1/libexec/gems/cocoapods-1.10.1/bin/pod:55:in `<top (required)>'
/opt/homebrew/Cellar/cocoapods/1.10.1/libexec/bin/pod:23:in `load'
/opt/homebrew/Cellar/cocoapods/1.10.1/libexec/bin/pod:23:in `<main>'
```

――― TEMPLATE END ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――

[!] Oh no, an error occurred.

Search for existing GitHub issues similar to yours:
https://github.com/CocoaPods/CocoaPods/search?q=dlopen%28%2FLibrary%2FRuby%2FGems%2F2.6.0%2Fgems%2Fffi-1.14.2%2Flib%2Fffi_c.bundle%2C+0x0009%29%3A+missing+compatible+arch+in+%2FLibrary%2FRuby%2FGems%2F2.6.0%2Fgems%2Fffi-1.14.2%2Flib%2Fffi_c.bundle+-+%2FLibrary%2FRuby%2FGems%2F2.6.0%2Fgems%2Fffi-1.14.2%2Flib%2Fffi_c.bundle&type=Issues

If none exists, create a ticket, with the template displayed above, on:
https://github.com/CocoaPods/CocoaPods/issues/new

Be sure to first read the contributing guide for details on how to properly submit a ticket:
https://github.com/CocoaPods/CocoaPods/blob/master/CONTRIBUTING.md

Don't forget to anonymize any private data!

Looking for related issues on cocoapods/cocoapods...
 - Couldn't determine repo type for URL: `https://cdn.cocoapods.org/`: Invalid ABI specified
   https://github.com/CocoaPods/CocoaPods/issues/10368 [open] [2 comments]
   a week ago

 - CocoaPods compatibility with Apple DTK (Apple Silicon)
   https://github.com/CocoaPods/CocoaPods/issues/9907 [open] [75 comments]
   15 hours ago

 - Firebase installation error on xcode 12 com m1 processor
   https://github.com/CocoaPods/CocoaPods/issues/10329 [closed] [4 comments]
   12 hours ago

and 3 more at:
https://github.com/cocoapods/cocoapods/search?q=dlopen%28%2FLibrary%2FRuby%2FGems%2F2.6.0%2Fgems%2Fffi-1.14.2%2Flib%2Fffi_c.bundle%2C%200x0009%29%3A%20missing%20compatible%20arch%20in%20%2FLibrary%2FRuby%2FGems%2F2.6.0%2Fgems%2Fffi-1.14.2%2Flib%2Fffi_c.bundle%20-%20%2FLibrary%2FRuby%2FGems%2F2.6.0%2Fgems%2Fffi-1.14.2%2Flib%2Fffi_c.bundle&type=Issues&utf8=✓

在研究了这个主题后,我找到了几种解决方案,但我的问题仍未解决。
我已经尝试安装:
sudo gem install ffi

然后我再次尝试运行pod install,但仍然出现相同的错误。

根据我的研究,有些人建议使用带有rosetta的终端或另一种方式来使用rosetta。

sudo arch -x86_64 gem install ffi
arch -x86_64 pod install

在尝试安装这些基于英特尔的软件时,我遇到了以下错误:

Analyzing dependencies
Fetching podspec for `DoubleConversion` from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`
Fetching podspec for `Folly` from `../node_modules/react-native/third-party-podspecs/Folly.podspec`
Fetching podspec for `glog` from `../node_modules/react-native/third-party-podspecs/glog.podspec`
[!] Couldn't determine repo type for URL: `https://cdn.cocoapods.org/`: Invalid ABI specified

有人遇到过这个问题吗?我做错了什么或者需要做些什么才能运行我的项目?

12个回答

13

对于Homebrew用户

步骤1:brew install cocoapods

步骤2:sudo arch -x86_64 gem install ffi

步骤3:arch -x86_64 pod install

此方法解决了我的问题。


这个答案节省了我2天的时间。它完美地解决了我的问题,效果达到了10000%。非常感谢! - SatelBill
1
这是否意味着我将来每次想要执行 pod install 都需要使用 arch -x86_64 pod install 命令? - Aung Myint Thein
是的 @AungMyintThein 但是还有另一种解决方案 使用Rosetta终端 - Syed Amir Ali

9

我用brew install cocoapods解决了ffi的问题 =)

最初,我试着使用bundler进行安装,但它含有一个旧版本的cocoapods,该版本还不支持m1; 然后我使用了brew,现在使用最新版本的cocoapods可以正常工作。


1
这应该是被接受的答案,因为它保留了使用homebrew的能力。我没有尝试被接受的答案,因为我不想仅仅为了RN而完全放弃homebrew,所以我不知道它是否有效,但是这个方法对我有效。 - noisiveRevision

4

我的问题是使用gem 安装 cocoapods(大多数在线教程都会告诉你这样做)。尝试使用以下命令卸载cocoapods:

gem uninstall cocoapods

然后使用brew再次安装它

brew install cocoapods

Homebrew安装了arm64版本,而gem似乎默认使用其他版本。


谢谢,对我来说这是正确的方式和最好的! - Mike Vargas

3

当我将React Native从.64升级到.65时,在运行pod update时,这对我非常成功。 - Before The Empire

2

我意识到Homebrew的安装搞乱了CocoaPods。

简单来说,我卸载了Homebrew并重新开始。然后它就正常工作了。


1
这对我很有帮助:(M1 Pro)
arch -x86_64 sudo gem install cocoapods
arch -x86_64 pod repo update
arch -x86_64 pod install

来源: https://github.com/CocoaPods/CocoaPods/issues/10349

这个问题是由于CocoaPods 1.10.0引入了一个新的特性,在Podfile.lock文件中使用了插件,但是在旧版本的CocoaPods中没有相应的支持,所以会导致解析错误。
解决方法是升级到最新版本的CocoaPods,或者将Podfile.lock文件中的插件相关内容删除。

0

在我的情况下,问题是CocoaPod flipper已经过时了。 Pod文件中的更改来自

 use_flipper()!

use_flipper!({ 'Flipper' => '0.95.0', 'Flipper-Folly' => '2.6.7', 'Flipper-RSocket' => '1.4.3', 'Flipper-DoubleConversion' => '3.1.7', 'Flipper-Glog' => '0.3.9', 'Flipper-PeerTalk' => '0.0.4' })

帮助了我。


0

我在使用M1芯片的MacBook上遇到了同样的问题。最终我做了以下操作:

在Rosetta终端中:

-- sudo rm -rf ~/.cocoapods/repos

iOS文件夹内部

pod install

0

对我来说解决方案是这样初始化应用程序的

arch -x86_64 npx react-native init awsomeproject

0

对我来说,这个命令有效:

arch -x86_64 pod install


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接