【问题标题】:Bundle.main.url(forResource: "AppleIncRootCertificate", withExtension: "cer") == nilBundle.main.url(forResource: "AppleIncRootCertificate", withExtension: "cer") == nil
【发布时间】:2019-04-06 09:48:37
【问题描述】:

为了在Swift iOS 应用程序中设置 Receipt-Validation(使用 In-App-Purchase),我正在学习本教程:https://www.raywenderlich.com/9257-in-app-purchases-receipt-validation-tutorial 并在此处阅读:Validating Apple Signed the Receipt .

这是我现在遇到的一个问题。

在代码中我有这个:

Bundle.main.url(forResource: "AppleIncRootCertificate", withExtension: "cer")

当我检查它的值时,它是 nil。由于它应该用于提取更多信息,因此它显然不应该是 nil。问题是:代码或某些设置中可能有什么问题导致此为 nil?

这是我第一次实现 Receipt-Validation,所以很可能我缺少一些基本的东西。

【问题讨论】:

  • 检查这个:developer.apple.com/documentation/foundation/bundle/1411540-url这个方法的返回值可以是资源文件的文件URL,如果找不到文件,则返回nil。
  • 好的。我以为我应该在调用 SKReceiptRefreshRequest() 时得到它。我有点失落。如果没有,我该怎么做才能得到这个文件?
  • 它是nil 因为文件 AppleIncRootCertificate.cer 没有添加到您的目标中
  • 好吧,既然我在我的电脑上找不到它,我想我应该从apple.com/certificateauthority 那里得到它。我说的对吗?

标签: ios swift openssl pkcs#7 receipt-validation


【解决方案1】:

我认为您可能解决了您的问题,但这可能对其他人如何清楚地解决问题有用。所以,如果

Bundle.main.url(forResource: "AppleIncRootCertificate", withExtension: "cer")

给你nil,你没有这个证书。按照上面 cmets 的建议,转到 here 并在 Apple Root Certificates -> Apple Inc. Root Certificate 下下载所需的证书。

现在您需要将下载的证书添加到您的目标。移动到目标的构建阶段,展开复制捆绑资源并按“+”按钮。然后选择“打开其他...”并选择证书。选中“如果需要导入”或类似的框并启动应用程序。现在你不应该得到 nil。

【讨论】:

  • 谢谢,2020 年还是很有用的!
猜你喜欢
  • 2019-06-30
  • 1970-01-01
  • 2017-05-29
  • 2022-11-27
  • 2020-11-25
  • 2018-08-11
  • 1970-01-01
  • 2013-09-10
  • 1970-01-01
相关资源
最近更新 更多