我找到了一个在Swift框架中成功使用CommonCrypto的GitHub项目:SHA256-Swift。另外,这篇文章关于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编译器-搜索路径”中,将CommonCrypto
目录添加到“ 导入路径”(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模块似乎未包含在自定义框架中。一种解决方法是Import Paths
在使用框架的项目中重复步骤2(设置)。
模块映射不是独立于平台的(当前指向特定的平台,即iOS 8 Simulator)。我不知道如何使标头路径相对于当前平台。
iOS 8更新<=我们应该删除该行 链接“ CommonCrypto”,以获得成功的编译。
更新/编辑
我不断收到以下构建错误:
ld:找不到用于x86_64体系结构的-lCommonCrypto的库clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)
除非我link "CommonCrypto"
从module.map
创建的文件中删除该行。一旦我删除了这条线,它就可以了。