因此,似乎有一些方法已经改变,这些方法在我当前的代码库中已经破坏了。我目前收到以下错误:
无法转换表达式'(CFAllocator!,数据:@lvalue NSData)'输入' CFData!'
以下是相关代码:
let mainbun = NSBundle.pathForResource("mainkey", ofType: "der", inDirectory: "/myapppath")
var key: NSData = NSData(base64EncodedString: mainbun!, options: nil)!
var turntocert: SecCertificateRef = SecCertificateCreateWithData(kCFAllocatorDefault, data: key)
我使用了桥接头,但我仍然希望能够直接在swift中创建证书引用。
更新: 这工作
var bundle: NSBundle = NSBundle.mainBundle()
var mainbun = bundle.pathForResource("keyfile", ofType: "der")
var key: NSData = NSData(contentsOfFile: mainbun!)!
var turntocert: SecCertificateRef =
SecCertificateCreateWithData(kCFAllocatorDefault, key).takeRetainedValue()
答案 0 :(得分:4)
在Swift中,SecCertificateCreateWithData
会返回Unmanaged
类型。您需要使用takeRetainedValue()
获取非托管引用的值。
let mainbun = NSBundle.pathForResource("mainkey", ofType: "der", inDirectory: "/myapppath")
var key: NSData = NSData(base64EncodedString: mainbun!, options: nil)!
var turntocert: SecCertificateRef =
SecCertificateCreateWithData(kCFAllocatorDefault, key).takeRetainedValue()
您遇到的核心问题是将CFData
转换为NSData
。 See this question