【问题标题】:How to run CocoaPods on Apple Silicon (M1)如何在 Apple Silicon (M1) 上运行 CocoaPods
【发布时间】:2021-03-02 04:47:06
【问题描述】:

我有一个尝试在 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 还为时过早。有没有办法让这项工作暂时发挥作用?

【问题讨论】:

  • 在新的 M1 mac mini 上,如果没有接受接受的答案的 Rosetta,则无法使其正常工作。一旦通过rosetta 安装,它可能仍然在兼容模式下运行,即使后来关闭了rosetta。正确答案是Valentin Briand下面的答案。默认情况下,Mac 上安装了一个非常过时的 Ruby 版本。需要的是安装一个较新的 ruby​​(通过自制软件最简单),配置终端以使用该版本,然后正常安装 cocoapods

标签: ios macos flutter cocoapods apple-silicon


【解决方案1】:

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

所以,sudo gem install ffi 将完成这项工作。

【讨论】:

    【解决方案2】:

    没有罗塞塔你也可以这样做

    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

    【讨论】:

      【解决方案3】:

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

      IPHONEOS_DEPLOYMENT_TARGET 可能仍指向 8.0

      如下更新所有匹配项:

      IPHONEOS_DEPLOYMENT_TARGET = 9.0;
      

      【讨论】:

        【解决方案4】:

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

        Npx react-native init Nitin2

        然后改变pod文件

        前往

        Cd 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文件可能会产生错误。

        Pod 文件

        用于创建 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

        pod deintegrate && pod setup && pod install

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

        添加导出路径=/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin

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

        【讨论】:

        • 您似乎已经在其他地方发布了一个极其相似(几乎相同)的answer。请不要这样做;在这种情况下,链接到您之前的答案的评论可能更合适。
        【解决方案5】:

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

        转到应用程序文件夹-

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

        sudo arch -x86_64 gem install ffi
        

        然后

        arch -x86_64 pod install
        

        【讨论】:

        • 这只是其他早期答案的重复。不需要用 Rosetta 打开
        猜你喜欢
        • 1970-01-01
        • 2021-04-03
        • 2021-08-04
        • 2021-05-11
        • 1970-01-01
        • 2021-04-21
        • 1970-01-01
        • 2021-06-13
        相关资源
        最近更新 更多