2016-08-30 65 views
-1

我試圖連接openssl s_server和iOS客戶端使用TCP SSL(另外,我得到another issue with this,也許這個相關)。現在我想要使用此sample code from github此:不同的有效代碼示例拋出相同的錯誤

let mainbun = NSBundle.mainBundle().pathForResource("pd-test", ofType: "cer") 
var key: NSData = NSData.dataWithContentsOfMappedFile(mainbun!)! as NSData 
var cert:SecCertificateRef = 
SecCertificateCreateWithData(kCFAllocatorDefault, key).takeRetainedValue() 

var err:OSStatus = noErr 

let secDict = NSDictionary(
    objects: [kSecClassCertificate,cert], 
    forKeys: [kSecClass, kSecValueRef] 
) 


SecItemAdd(secDict as CFDictionaryRef, nil); 

,但得到的錯誤:

ViewController.swift:67:74: 'AnyObject' is not convertible to 'NSData'; did you mean to use 'as!' to force downcast? 

ViewController.swift:69:9: Value of type 'SecCertificate?' has no member 'takeRetainedValue' 

ViewController.swift:75:23: Value of type 'CFString' does not conform to expected element type 'NSCopying' 

爲什麼我不能建立有效的代碼(我看到了許多樣本這個樣子,他們都幾乎拋相同的錯誤,例如this)?我該如何解決它?

回答

0

爲什麼我不能建立有效的代碼

這是因爲雨燕語言也在不斷髮展;您正在使用比編寫時使用的更新版本的Swift更高版本。這是有效的斯威夫特然後,但它是無效的你的版本的斯威夫特。

(如果你要下載Xcode中8種6,第一線甚至不會編譯;現在有沒有這樣的事情NSBundle,沒有這樣的事情mainBundle(),並沒有這樣的事情pathForResource這個節目。如何從根本上改變Swift語言。)

+0

如何降級我在Xcode中使用的Swift版本?或者自動解決這個問題?因爲我已經手動修改此代碼,現在它不起作用(或者我[創建了無效的SSL證書](http://stackoverflow.com/questions/39185678/cfnetwork-sslhandshake-failed-9807-with-local-ip ),但一些用戶寫道它是正確的方式) –

+0

「我如何降級我在Xcode中使用的Swift版本」您需要知道代碼被寫入哪個版本的Swift,並使用包含該版本的Xcode版本。所有舊版本的Xcode均可從Apple獲得。 「或者自動解決這個問題」你可能無法自動地解決它,但是如果你知道Swift,那麼你得到的編譯器錯誤是非常清楚和容易修復的。至於使用OpenSSL,Stack Overflow已經充滿了有用的信息。 – matt

相關問題