如何在swift中导入DER证书?

时间:2014-12-15 04:01:10

标签: macos swift

因此,似乎有一些方法已经改变,这些方法在我当前的代码库中已经破坏了。我目前收到以下错误:

  

无法转换表达式'(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()

1 个答案:

答案 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转换为NSDataSee this question