2015-04-29 4 views
6

Ich habe Probleme, Code zu konvertieren, den ich in der Apple-Dokumentation in Swift-Code gefunden habe. Um genau zu sein es Sachen über TSL ist und Zertifikate ...Swift und SecTrust

https://developer.apple.com/library/mac/documentation/NetworkingInternet/Conceptual/NetworkingTopics/Articles/OverridingSSLChainValidationCorrectly.html

Dies ist der ursprüngliche Code in Objective-C

SecTrustResultType secresult = kSecTrustResultInvalid; 
if (SecTrustEvaluate(trust, &secresult) != errSecSuccess) 
    return; 
} 

Und das ist mein Versuch ...

ERROR:

'Int' is not convertible to 'SecTrustResultType' 

ERROR:

Could not find an overload for '!=' that accepts the supplied arguments 

Jetzt sehe ich, dass SecTrustResultType ist ein UInt32 und kSecTrustResultInvalid ist ein Int ... aber dieser Header ist definiert von Apple so nehme ich an, dass es richtig sein sollte: P

typealias SecTrustResultType = UInt32 
var kSecTrustResultInvalid: Int { get } 

über den zweiten Fehler ich weiß nicht, wie es wirklich, da die Funktion zur Verwaltung SecTrustEvaluate ein OSStatus gibt (das ist ein Alias ​​für UInt32) und errSecSuccess ist ein zu OSStatus.

Ich bin wirklich verwirrt. Hast du irgendeinen Vorschlag, dieses Zeug zum Laufen zu bringen?

+1

Für Ihre Fehler 1, Sie können den Int in einen UInt32 konvertieren: 'var secresult: SecTrustResultType = UInt32 (kSecTrus tResultInvalid) ' – Moritz

Antwort

4

Ich bin selbst in dieses Problem geraten und die Header-Dokumente sind ein wenig verwirrend, vor allem da die Konstanten als Int s definiert sind und SecTrustResultType als UInt32 definiert ist.

Aber eine gute Nachricht, ist die Lösung recht einfach init nur SecTrustResultType mit kSecTrustResultInvalid:

var secresult = SecTrustResultType(kSecTrustResultInvalid) 
if (SecTrustEvaluate(serverTrust, &secresult) != errSecSuccess){ 
     return; 
} 
1

Swift 2,3

var secresult = SecTrustResultType.Invalid 
if (SecTrustEvaluate(serverTrust, &secresult) != errSecSuccess){ 
     return; 
} 
0

noch gleich bleibt in Swift 3.0:

var secresult = SecTrustResultType.Invalid 
if (SecTrustEvaluate(serverTrust, &secresult) != errSecSuccess){ 
    return; 
}