kSecSharedPassword is unusable in Swift
| Originator: | tangphillip | ||
| Number: | rdar://18189750 | Date Originated: | 31-Aug-2014 04:18 PM |
| Status: | Closed | Resolved: | |
| Product: | iOS SDK | Product Version: | Xcode Version 6.0 (6A280e), iOS 8 SDK, beta 5 |
| Classification: | Reproducible: | Always |
Summary:
It is impossible to using Core Foundation collections directly in Swift, because `CFDictionaryGetValue`, `CFArrayGetValueAtIndex`, etc return `UnsafePointer` (and you can't downcast that to anything useful). So, we're stuck casting the collection to its bridged Foundation counterpart.
Which leads us to the problem: kSecSharedPassword is declared as `Unmanaged<AnyObject>!` in the Swift header. Since `kSecSharedPassword` is meant to be used as a key to a dictionary, it should be declared as NSCopying.
Steps to Reproduce:
Attempt to get a password with `SecRequestSharedWebCredential()` in Swift. You'll end up with code that looks a bit like this:
SecRequestSharedWebCredential(nil, nil) { (cfCredentialsArray: CFArray!, error: CFError!) -> Void in
let credentialsArray = cfCredentialsArray as NSArray
if let credentials = credentialsArray.objectAtIndex(0) as? NSDictionary {
let username = credentials[kSecAttrAccount] as? String
let password = credentials[kSecSharedPassword] as? String
let service = credentials[kSecAttrService] as? String
NSLog("username: %@, password: %@, service: %@", username, password, service)
}
}
Expected Results:
The code should compile.
Actual Results:
>> let password = credentials[kSecSharedPassword] as? String
Type 'Unmanaged<AnyObject>!' does not conform to protocol 'NSCopying'
Version:
Xcode Version 6.0 (6A280e), iOS 8 SDK, beta 5
Notes:
Configuration:
iPhone 5s Verizon
Attachments:
Comments
Please note: Reports posted here will not necessarily be seen by Apple. All problems should be submitted at bugreport.apple.com before they are posted here. Please only post information for Radars that you have filed yourself, and please do not include Apple confidential information in your posts. Thank you!
This issue has been verified as resolved and can be closed.