【问题标题】:Adding openSSL to Swift OS X project for receipt validation将 openSSL 添加到 Swift OS X 项目以进行收据验证
【发布时间】:2015-04-14 14:16:10
【问题描述】:

我正在尝试将 OpenSSL 包含在 Swift OS X 项目中以进行收据验证。

我已经成功构建了必要的 OpenSSL 头文件和库文件。 我已将它们添加到我的项目中,但这样做并没有提示创建桥接头文件。 我已经为每个 openssl 头文件使用 #import 手动创建了桥接头文件。 在项目构建设置中,我已将“swift 编译器 - 代码生成”下的目标 C 桥接头设置为我的桥接头。 我已经按照收据验证编程指南中的描述生成了有效载荷格式的 ans1c 文件:“Listing 1-1 ASN.1 definition of the payload format”并将它们添加到我的桥接头中。

我在构建时遇到了许多编译错误,主要是针对 openSSL 头文件中的未知类型名称,我原以为会在 ans1c 头文件中定义,但事实并非如此。我也收到错误“无法导入桥接头...(我的桥接头文件)”。

我的想法不多了,可能不得不放弃 openSSL 以进行收据验证。如果有人知道我做错了什么,或者如果您有另一种验证方法,我很想听听。我的应用程序将有 IAP,所以看来我需要某种方式来检查收据。

【问题讨论】:

  • 我相信我已经隔离了我当前的问题,但我不知道如何纠正它。我已经构建了两个基本项目,其中我已经导入了 openSSL 库和头文件,一个在 Swift 中,另一个在 Objective C 中。使用 Objective C 版本,我可以毫无错误地构建。在 Swift 版本中,构建会导致多个编译器错误,其中大多数是一些 openSSL 类型的未知类型名称。当我将头文件引入 Swift 项目时,没有提示我制作桥接头,这让我怀疑我没有正确导入这些文件。

标签: macos swift


【解决方案1】:

我终于弄清楚了编译器错误的来源。 XCode 对 openssl 标头的位置非常挑剔。如果我直接链接到标题为“openssl”的头目录,我会得到编译器错误。如果我链接到名为“include”的父文件夹,则没有错误!

我不理解这种行为,但至少现在我有一个解决方案。感谢Receigenadding OpenSSL as a static library上的说明,我终于准确地遵循了,我能够发现错误的根源。

【讨论】:

  • 我也一直在努力解决这个问题,对于任何新手来说,事实证明,在 openssl 1.0.2a 中,还需要调整 openssl/rsa.h 文件以忘记定义的“I”在 cocoa/foundation 框架的 complex.h 中。这可以通过在 rsa.h 文件中放置“#undef I”来完成,就在“struct rsa_meth_st”的上方
  • @jbaraga 我面临同样的问题 openssl 与 swift。请与我分享解决方案。
  • 这很挑剔,但是如果您准确地按照 Receigen 上的说明进行操作,它应该可以工作。如果没有,您可以尝试此处发布的说明:link。我没有发现有必要更新 openssl/rsa.h 文件,如这些说明中所述,但如果您仍然遇到问题,值得一试。
  • 删除 openssl 并仅使用“include”也对我有用,尽管所有教程都说在路径中包含“openssl”。知道为什么这会解决它吗?刚刚浪费了一个小时来处理这个问题。
  • 我不知道。我现在已将 openSSL 添加到两个 OS X 项目和一个 iOS 项目中,但每次都不是那么简单。对于 iOS 项目,我添加了发布在 Receigen 站点上的最新 openSSL 构建。我必须将 libcrypto.a 文件重命名为 lcrypto.a 才能使其正常工作。
猜你喜欢
  • 2015-10-01
  • 1970-01-01
  • 2013-10-23
  • 1970-01-01
  • 2011-05-25
  • 1970-01-01
  • 1970-01-01
  • 2021-12-05
  • 1970-01-01
相关资源
最近更新 更多