【问题标题】:React-native/iOS app: Module 'SquareInAppPaymentsSDK' not found, although it has been added to the projectReact-native/iOS 应用程序:未找到模块“SquareInAppPaymentsSDK”,尽管它已添加到项目中
【发布时间】:2020-05-07 17:58:18
【问题描述】:

更多信息

总结问题

  • 我遇到的问题是我在 Xcode 中配置了一个 react-native 包 (react-native-square-in-app-payments),但我收到一条错误消息,提示“找不到模块 xxx”。

问题是:

  • 为什么 Xcode 找不到“缺失”模块?什么配置不正确?我应该去哪里检查?

错误如下

Module 'SquareInAppPaymentsSDK' not found

我的播客文件:

platform :ios, '11.0'

target 'myproject' do
  use_frameworks!

  pod 'React', :path => '../node_modules/react-native'
  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'

  pod 'RNSquareInAppPayments', :path => '../node_modules/react-native-square-in-app-payments'

  post_install do |installer|
    installer.pods_project.targets.each do |target|
      if target.name == 'React'
        target.remove_from_project
      end
    end
  end

end

我的 project.pbxproj 文件(这里无法附上,但你可以在 github 中访问):

https://github.com/square/in-app-payments-react-native-plugin/issues/66#issuecomment-625333601

更新:链接(在第一条评论和@DenisTsoi 回答之后)

我尝试了自动链接(如前所述,我需要它,因为我使用的是 RN 0.59.9),然后我再次开始尝试手动链接,因为我都有同样的错误。你可以在https://github.com/square/in-app-payments-react-native-plugin/issues/66#issuecomment-625330210看到我的cmets@

顺便说一句,在“将二进制文件与库链接”下,我有两个包条目:

评论以下@MuhammadNuman 的回答:

我在一个新的 react-native 项目(由 react-init 创建)中尝试了您的 podfile。当我添加

import { SQIPCore } from 'react-native-square-in-app-payments';

我收到https://github.com/square/in-app-payments-react-native-plugin/issues/66#issuecomment-629762613中描述的错误

你可以在https://github.com/rahamin1/square_with-podfile找到我的repo

【问题讨论】:

  • 如果你正在运行 rn 0.60+,应用程序应该自动链接大多数 rn 依赖项,但是在 60+ 之前你需要手动链接它。
  • 我知道,我做到了,谢谢!
  • 有没有帮助? - 下面的答案也有帮助吗?
  • 没有。刚刚在我的问题底部添加了几行关于它的内容。
  • 你能帮我们一个忙,做一个最小的回购(没有别的,只是能够在一个单独的示例回购中重现这个错误)——我们需要永远设置一些不会与您的 RN 设置相同

标签: xcode react-native-ios square


【解决方案1】:

我过去曾遇到过此类错误。因为一些配置的东西丢失或损坏导致这些类型的问题。所以我给你的建议是创建一个新的 react-native 项目,从那里库的 NPM 或 GitHub 文档中一一安装 package.json 中的所有库。然后将代码从 src (React Code) 复制到新项目中。如果您在 ios 和 android 文件夹中有任何更改,则只需从文件中复制更改并粘贴到新项目 android/ios 文件夹的文件中。 (如果没有任何效果,请应用此解决方案。它总是对我有用)

【讨论】:

  • 似乎这是迄今为止我得到的最佳建议。我会尝试并在这里更新。我将此标记为已接受的答案,因为另一个是我在发布问题之前尝试过的(但它没有用)。
  • 确实,这解决了问题,但我现在面临另一个问题:github.com/square/in-app-payments-react-native-plugin/issues/…
  • @Yossi 我认为 square app-payments-react-native-plugin 的库有问题我也遇到了同样的问题。
  • 在上述github问题中等待他们的回复
【解决方案2】:

根据您的 github 问题链接,

你正在运行 react 0.59.x。这意味着您将需要运行

react-native link

用于在 iOS XCode 中链接的原生库。

另一种方法是在XCode中链接依赖,可以在react native上找到docs

摘录

第 1 步如果库有原生代码,则必须有一个 .xcodeproj 文件夹内的文件。将此文件拖到 Xcode 上的项目中 (通常在 Xcode 的 Libraries 组下);

第 2 步单击您的主项目文件(代表 .xcodeproj) 选择 Build Phases 并从 您要导入到 Link Binary 的库中的 Products 文件夹 带库

第 3 步 并非每个库都需要此步骤,您需要 考虑的是:我是否需要在编译时知道库的内容 时间?这意味着,你是在本机上使用这个库吗? 侧面还是仅在 JavaScript 中?如果你只在 JavaScript 中使用它, 你已准备好出发!如果您确实需要从本地调用它,那么我们 需要知道图书馆的标题。为了实现这一点,你必须去 您的项目文件,选择 Build Settings 并搜索 Header 搜索路径。在那里你应该包括你的图书馆的路径。 (这 用于推荐使用递归的文档,但这不再是 推荐,因为它可能导致微妙的构建失败,尤其是 CocoaPods。)

对于 RN 0.60+,链接是自动完成的。

编辑:

你也可以通过<YOUR_PROJECT_DIRECTORY>/ios目录下的命令安装带有cocoapods的SDK

pod install

【讨论】:

  • 谢谢!两个都试过了。请参阅问题的更新(关于底部链接的几行)。
  • 看看 - (有点困难,因为没有可以克隆和重现的最小示例 repo)
  • 在您对该问题发表评论后回答。
【解决方案3】:

您还可以克隆和测试 react-native 0.59.9

的样板文件

https://github.com/nomi9995/in-app-payments-0.59.9.git

改变你的 podfile

platform :ios, '11.1'

target 'myproject' do
  use_frameworks!

  rn_path = '../node_modules/react-native'
  pod 'React', path: rn_path, subspecs: [
  'CxxBridge',
  'RCTText',
  'RCTNetwork',
  'RCTWebSocket',
  'RCTAnimation',
  'RCTActionSheet',
  'RCTGeolocation',
  'RCTImage',
  'RCTSettings',
  'RCTVibration',
  'RCTLinkingIOS'
  ]
  pod 'yoga', :path => "#{rn_path}/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'

  pod 'RNSquareInAppPayments', :path => '../node_modules/react-native-square-in-app-payments'


end

然后再次安装 podfile

pod install

【讨论】:

  • 谢谢@MMuhammadNuman!但我使用了相同的 RNSquareInAppPayments pod。
  • 你在使用 pod 'React',路径:rn_path,子规范:['CxxBridge','RCTText','RCTNetwork','RCTWebSocket','RCTAnimation','RCTActionSheet','RCTGeolocation' , 'RCTImage', 'RCTSettings', 'RCTVibration', 'RCTLinkingIOS' ]
  • 你能检查我的样板吗?
  • 首先,非常感谢您的回复。谢谢!对于第一个问题:我没有使用它们。第二:我没有,因为我的问题不在于样板。我有一个带有 2 个正在工作的方形插件的样板。问题是让它与我的应用程序一起工作。
  • @Yossi 请 pod 'React',路径:rn_path,子规范:['CxxBridge','RCTText','RCTNetwork','RCTWebSocket','RCTAnimation','RCTActionSheet','RCTGeolocation' , 'RCTImage', 'RCTSettings', 'RCTVibration', 'RCTLinkingIOS' ]试试这个
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-16
  • 2019-04-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多