如何在适用于iOS的SWIFT框架中导入CommonCrypto

我知道如何在SWIFT应用程序中使用CommonCrypto: 您将#import <CommonCrypto/CommonCrypto.h>添加到桥接报头. 但是,SWIFT框架不支持桥接头.documentation人说:

您可以导入具有纯Objective-C代码库、纯Swift代码库或混合语言代码库的外部框架.这个

您可以将框架导入不同的SWIFT文件中的任何SWIFT文件 使用以下语法的目标:

import FrameworkName

不幸的是,IMPORT CommonCrypto不起作用.将#import <CommonCrypto/CommonCrypto.h>添加到伞头也不起作用.

推荐答案

我发现了一个在SWIFT框架中成功使用CommonCrypto的GitHub项目:SHA256-Swift.另外,这篇关于the same problem with sqlite3的文章也很有用.

基于上述情况,具体步骤如下:

1)在项目目录内创建CommonCrypto目录.在中,创建一个module.map文件.模块映射将允许我们将CommonCrypto库用作SWIFT中的模块.它的内容是:

module CommonCrypto [system] {
    header "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator8.0.sdk/usr/include/CommonCrypto/CommonCrypto.h"
    link "CommonCrypto"
    export *
}

2)在生成设置中,在Swift Compiler - Search Paths内,将CommonCrypto目录添加到Import Paths(SWIFT_INCLUDE_PATHS).

构建设置

3) 最后,在Swift文件中导入CommonCrypto和其他模块一样.例如:

import CommonCrypto

extension String {

    func hnk_MD5String() -> String {
        if let data = self.dataUsingEncoding(NSUTF8StringEncoding)
        {
            let result = NSMutableData(length: Int(CC_MD5_DIGEST_LENGTH))
            let resultBytes = UnsafeMutablePointer<CUnsignedChar>(result.mutableBytes)
            CC_MD5(data.bytes, CC_LONG(data.length), resultBytes)
            let resultEnumerator = UnsafeBufferPointer<CUnsignedChar>(start: resultBytes, length: result.length)
            let MD5 = NSMutableString()
            for c in resultEnumerator {
                MD5.appendFormat("%02x", c)
            }
            return MD5
        }
        return ""
    }
}

限制

在另一个项目中使用自定义框架在编译时失败,出现错误missing required module 'CommonCrypto'.这是因为CommonCrypto模块似乎不包含在自定义框架中.解决方法是在使用框架的项目中重复步骤2(设置Import Paths).

模块映射不是独立于平台的(它当前指向一个特定的平台,即iOS 8模拟器).我不知道如何使标题路径相对于当前平台.

iOS8<;更新=我们应该删除第link "CommonCrypto"行,才能成功编译.

UPDATE / EDIT

我一直收到以下生成错误:

ld:找不到体系 struct x86_64的-lCommonCrypto的库 clang:错误:链接器命令失败,退出代码为%1(使用-v查看调用)

除非我从我创建的module.map文件中删除了第link "CommonCrypto"行.一旦我移除这条线,它就可以正常工作了.

Ios相关问答推荐

Xcode15.3上的生成错误:调用的对象类型';facebook::flipper::SocketCertificateProvider';不是函数或函数指针

在某些情况下,UIHostingController在自动调整时不能调整大小

JSON响应中的键有时为Int,有时为字符串

无法下载并安装带有Xcode 15.0的iOS 17.0模拟器运行时

swiftui 图像放大时无法正确拖动

更改订单时如何保存商品的位置?

VStack 显示错误实例方法 'sheet(item:onDismiss:content:)' 要求 'Int' 符合 'Identifiable'

按钮在 SwiftUI 中没有采用给定的高度和宽度

UIImageView 使用 CGAffineTransform 错误旋转

如何告诉 SwiftUI 视图绑定到嵌套的 ObservableObjects

如何使用情节提要重新排列 UITabBarController 项目?

如何获取 UICollectionViewCell 的矩形?

通过touch 传递到下面的 UIViews

Got Unrecognized selector -replacementObjectForKeyedArchiver: 在 Swift 中实现 NSCoding 时崩溃

用 PC 调试 ipad safari

判断可选数组是否为空

将自定义对象保存到 NSUserDefaults

如何获取 iTunes 连接团队 ID 和团队名称?

iOS中的apk类似功能是什么?

Swift:如何在设备旋转后刷新 UICollectionView 布局