【问题标题】:react-native ios Podfile issue with "use_native_modules!"react-native ios Podfile 问题与“use_native_modules!”
【发布时间】:2019-11-16 23:13:39
【问题描述】:

在我的 ios/ 目录中的 react-native 项目 (react-native@0.60) 中,我运行 pod install 并收到此错误:

[!] Invalid `Podfile` file: no implicit conversion of nil into String.

 #  from /Users/coryrobinson/projects/hhs2/ios/Podfile:37
 #  -------------------------------------------
 #  
 >    use_native_modules!
 #  end
 #  -------------------------------------------

我没有在这个 Podfile 中添加或更改任何内容 - 它都是 react-native 生成​​的。 (我在 iOS 开发方面没有经验,所以这可能是一个简单的修复,我只是不知道要寻找什么 :-|)感谢您的帮助!

这是我的 Podfile

platform :ios, '9.0'
require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'

target 'hhs2' do
  # Pods for hhs2
  pod 'React', :path => '../node_modules/react-native/'
  pod 'React-Core', :path => '../node_modules/react-native/React'
  pod 'React-DevSupport', :path => '../node_modules/react-native/React'
  pod 'React-fishhook', :path => '../node_modules/react-native/Libraries/fishhook'
  pod 'React-RCTActionSheet', :path => '../node_modules/react-native/Libraries/ActionSheetIOS'
  pod 'React-RCTAnimation', :path => '../node_modules/react-native/Libraries/NativeAnimation'
  pod 'React-RCTBlob', :path => '../node_modules/react-native/Libraries/Blob'
  pod 'React-RCTImage', :path => '../node_modules/react-native/Libraries/Image'
  pod 'React-RCTLinking', :path => '../node_modules/react-native/Libraries/LinkingIOS'
  pod 'React-RCTNetwork', :path => '../node_modules/react-native/Libraries/Network'
  pod 'React-RCTSettings', :path => '../node_modules/react-native/Libraries/Settings'
  pod 'React-RCTText', :path => '../node_modules/react-native/Libraries/Text'
  pod 'React-RCTVibration', :path => '../node_modules/react-native/Libraries/Vibration'
  pod 'React-RCTWebSocket', :path => '../node_modules/react-native/Libraries/WebSocket'
  pod 'RNFS', :path => '../node_modules/react-native-fs'

  pod 'React-cxxreact', :path => '../node_modules/react-native/ReactCommon/cxxreact'
  pod 'React-jsi', :path => '../node_modules/react-native/ReactCommon/jsi'
  pod 'React-jsiexecutor', :path => '../node_modules/react-native/ReactCommon/jsiexecutor'
  pod 'React-jsinspector', :path => '../node_modules/react-native/ReactCommon/jsinspector'
  pod 'yoga', :path => '../node_modules/react-native/ReactCommon/yoga'

  pod 'DoubleConversion', :podspec => '../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec'
  pod 'glog', :podspec => '../node_modules/react-native/third-party-podspecs/glog.podspec'
  pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec'

  target 'hhs2Tests' do
    inherit! :search_paths
    # Pods for testing
  end

  use_native_modules!
end

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

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

end

【问题讨论】:

    标签: ios react-native cocoapods react-native-ios


    【解决方案1】:

    正确答案如下:

    1 - 您的 POD 文件应在顶部包含此行

    require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
    

    2 - 确保您的 package.jsonnode_module 文件夹已安装此模块

    cli-platform-ios/native_modules

    3 - 如果你在运行yarn install 后没有找到 - 意味着你的机器中有旧的缓存 node_modules,你需要在重新安装包之前清理它。

    4 - 清理缓存yarn cache clean

    5 - 确保你有这个文件 react-native.config.js 并且它的配置是有效的 - 并且它没有不存在的 NPM 包 - 这一步是最后也是错误的原因

    我的react-native.config.js示例

    module.exports = {
      project: {
        ios: {},
        android: {},
      },
      assets: ['./assets/fonts/'],
      dependencies: {}, // make sure this dependencies are all valid installed packages or empty if you don't need it
    };
    

    6 - 安装节点包yarn install,您的 pod 现在应该可以工作了! pod install --repo-update

    编码愉快!

    【讨论】:

    • react-native.config.js 文件应该在根文件夹还是在 ios 中?
    • 还要确保你的配置文件使用require而不是import。 ESLint 自动修复通过将它们换掉而破坏了我的。
    • 另外,如果您的 pod 文件中没有 use_native_modules!,它将无法正常工作,因此请在其中添加它。
    • 我从上面写的错误开始,遵循@Meabed 的建议,现在我得到'[!] Invalid Podfile 文件:JSON 文本必须至少包含两个八位字节!'。对于“use_native_modules!”线。知道为什么吗?我尝试在 SO 中查找此错误,但无法使任何建议的解决方案起作用。
    • @Yossi 请在 gist 中分享您的 pod 文件。
    【解决方案2】:

    将@react-native-community/cli-platform-ios 从 3.1.0 降级到 3.0.0 并且可以正常工作。

    添加

    "@react-native-community/cli-platform-ios": "3.0.0"
    

    到 package.json。

    运行 npm install 然后 pod install 让它再次工作。

    【讨论】:

    • 作品,截至 2020 年 3 月
    • 这消除了错误,但是现在我得到了Specifying multiple post_install hooks is unsupported - 有什么想法吗?
    【解决方案3】:

    如果你正在使用

    pod install --project-directory=ios
    

    您可能需要通过替换来调整 Podfile

    use_native_modules!

    use_native_modules!(".")

    也许这种行为将来会得到改善,我打开了一个关于它的问题https://github.com/react-native-community/cli/issues/657

    【讨论】:

    • [!] 将自定义根传递给 use_native_modules!已弃用。 - CLI 自动检测项目的根目录。 "" 参数被忽略。
    • 我遇到了相反的问题(如果我理解正确的话)——如果我(cd ios; pod install)我得到了错误,但是pod install --project-directory=ios 工作并且我已经使用了多年.但我只是在应用程序中心尝试了一个 CI 构建,它假设 (cd ios; pod install) 并且它中断了。我已经尝试了这个问题的所有修复,但没有任何帮助。 (除了可能删除不支持 cocoapods 的旧 RN 包——不知道如何识别它们。)
    【解决方案4】:

    我刚刚删除了整个 node_modules 和 RN 缓存文件夹并进行了全新的重新安装,这解决了到目前为止的“use_native_modules”问题....但是在那之后我不得不与其他库进行很多麻烦,而其他库只是不是 RN0。 60 准备好了 ;)

    【讨论】:

    • RN缓存文件夹在哪里?
    【解决方案5】:

    这是因为您设备上的 yarn 版本过时, 如果您在 macOS 上,您可以通过以下链接升级/安装纱线: here it is

    注意删除node-moduleyarn.lock文件,重新安装所有软件包,导航到ios文件夹并运行pod install

    【讨论】:

      【解决方案6】:

      对我来说,我删除了 node_modules 并使用 npm install 再次安装。之后,我导航到/ios 文件夹并运行pod install 它工作正常。

      【讨论】:

      • 分享更多细节可能会有所帮助,例如在哪里可以找到“node_modules”
      • @UmairAfzal - 谷歌node_modules。它是您项目中的一个文件夹;项目使用的所有 npm 包的本地缓存。 (我认为它是在您执行npm install 时创建的。)每个使用npm 的项目都会将此作为项目根文件夹的子文件夹。
      【解决方案7】:

      验证您的 package.json 中是否有 @react-native-community/cli-platform-ios

      如果你不跑:

      npm install @react-native-community/cli-platform-ios

      然后

      cd ios && pod install

      【讨论】:

        【解决方案8】:

        不要使用纱线安装。这对我有用...

        • 转到主文件夹
        • 删除节点文件夹
        • 运行sudo npm install 或只运行npm install
        • cd ios
        • pod install

        【讨论】:

          【解决方案9】:

          好的,我猜对大多数人来说,接受的答案将解决他们的问题。对我来说,修复太奇怪了,我不得不在这里添加它。

          无论出于何种原因,我最终在我的 android 本机设置中创建了一个无效的 AndroidManifest.xml 文件。

          我查看了完整的错误输出,错误的第一行引用了行号和列号。那时,在我的 xml 文件中,我破坏了 xml 格式。

          搜索 2 天以找到一个 GitHub 问题,其中描述了look 的位置。

          【讨论】:

            【解决方案10】:

            在 AppCenter 上构建应用时遇到同样的问题,在本地完美运行

            是否有可能跟踪此错误?因为我发现我看到它的原因有很多。

            【讨论】:

              【解决方案11】:

              在删除几个 react-native npm 包(即:react-native-bluetooth-serial、react-native-sound 等...)后,pod install 工作。

              pod 安装错误似乎与不支持可可豆荚的旧 react-native 软件包有关?我不确定细节,但从 node_modules 和 package.json 中删除这些包解决了我的问题。

              【讨论】:

                【解决方案12】:

                问题是:

                use_native_modules!
                

                早期版本的 CocoaPods 不支持。例如,我们的安装是从CocaoPods website 下载的应用程序。那个版本是1.5.2

                运行:

                pod --version
                

                检查哪个版本。如果需要,卸载然后重新安装,但在终端中运行:

                sudo gem install cocoapods
                

                至少截至 2019 年 10 月下旬,当前可用的 gem 版本是 1.8.4。成功安装后,重新尝试pod install,希望一切顺利。

                【讨论】:

                • 投反对票很好,但提供一些解释会礼貌吗?然后我可以尝试改进答案或将其完全删除。
                • 用 1.8.4 测试 - 显然不是由 cocoapods 版本引起的。您的构建是不确定的。您必须在升级时更改其他内容,或者只是假设“它可以正常工作!”用这个版本。
                • @twboc 如果您认为它与 cocoapods 版本无关,您将无法在 1.5.2 和 1.8.4 上重现该错误。你试过 1.5.2 吗?
                • 好的,但要确保您需要尝试 1.5.2。
                【解决方案13】:

                我在尝试 react-native run-ios 一个 Expo 应用程序后收到此错误。我得到的错误表明 Pod 有问题,所以我运行了cd ios && pod install,这就是我得到与 OP 类似的错误的原因。

                在这种情况下,您显然需要expo start 而不是react-native run-ios

                【讨论】:

                  【解决方案14】:

                  今天开始突然发生这种情况,问题是我的目录结构中有一个空间。例如:

                  /path/to/Directory\ Name/RNProject 抛出 !native_modules 错误 /path/to/DirectoryName/RNProject 正常工作

                  Pods 正在寻找“目录”。

                  【讨论】:

                    【解决方案15】:

                    可能与权利问题有关

                    在 package.json 中添加 "@react-native-community/cli-platform-ios": "3.0.0"

                    sudo chown -R 用户。

                    为我工作

                    【讨论】:

                      【解决方案16】:

                      其中一个原因可能是 Ruby 版本过时。使用以下命令进行升级。

                      rvm install 2.6.1
                      rvm use 2.6.1 --default
                      

                      或者你可以关注下面的文章,里面有关于升级 ruby​​ 和相关 gems 的详细解释。

                      https://help.learn.co/en/articles/2789231-how-to-upgrade-from-ruby-2-3-to-2-6

                      【讨论】:

                      • 我使用的是旧版本的节点
                      【解决方案17】:

                      对于这个不围绕摆脱 use_native_modules 的问题,是否有人有一致的可重新创建解决方案?我调查过:

                      • 更改 Ruby 版本
                      • 更改 CocoaPods 版本
                      • 使 NPM 和 Cocoapods 缓存失效

                      而且我无法解决此问题。它似乎是一些 npm 依赖项,但我团队中的其他人没有看到它。

                      【讨论】:

                      • 这不是对 OP 问题的回答。
                      • 如果这里的答案不能解决您的问题,请创建一个新问题。提供此问答的链接,并解释您尝试过的内容以及发生的情况。您需要提供更多详细信息:完整的错误消息、您的 podfile 和您的 package.json(因为 Cory Robinson 的回答说他通过从他的 package.json 中删除一些旧包来修复)。当然,删除任何缓存文件夹或锁定文件。
                      【解决方案18】:

                      摆脱use_native_modules! 行也可以。也许这已被弃用或语法已更改?很想听听别人的意见。

                      更新:似乎是 react-native 0.60.0 的问题。在版本修复此错误之前,可以显式安装 0.59.10,您只需要根据需要添加 CocoaPods。

                      react-native init APP_NAME --version react-native@0.59.10

                      【讨论】:

                        【解决方案19】:

                        转到此存储库: 项目名称 -> ios -> Podfile 在 Podfile 中,删除 use_native_modules! 再次执行 pod install 并享受您的使用

                        【讨论】:

                        • 没用,虽然我们删除了 use_native_modules 那么它不是安装本机依赖...
                        猜你喜欢
                        • 2016-05-10
                        • 1970-01-01
                        • 2021-12-23
                        • 2020-06-15
                        • 2020-07-02
                        • 2017-10-11
                        • 2020-01-31
                        • 1970-01-01
                        • 2019-06-10
                        相关资源
                        最近更新 更多