|
@@ -540,6 +540,7 @@ public class Keychain {
|
|
#endif
|
|
#endif
|
|
|
|
|
|
#if os(iOS)
|
|
#if os(iOS)
|
|
|
|
+ @available(iOS, introduced=8.0)
|
|
private func setSharedPassword(password: String?, account: String, completion: (error: NSError?) -> () = { e -> () in }) {
|
|
private func setSharedPassword(password: String?, account: String, completion: (error: NSError?) -> () = { e -> () in }) {
|
|
if let domain = server.host {
|
|
if let domain = server.host {
|
|
SecAddSharedWebCredential(domain, account, password) { error -> () in
|
|
SecAddSharedWebCredential(domain, account, password) { error -> () in
|
|
@@ -585,6 +586,7 @@ public class Keychain {
|
|
#endif
|
|
#endif
|
|
|
|
|
|
#if os(iOS)
|
|
#if os(iOS)
|
|
|
|
+ @available(iOS, introduced=8.0)
|
|
private class func requestSharedWebCredential(domain domain: String?, account: String?, completion: (credentials: [[String: String]], error: NSError?) -> ()) {
|
|
private class func requestSharedWebCredential(domain domain: String?, account: String?, completion: (credentials: [[String: String]], error: NSError?) -> ()) {
|
|
SecRequestSharedWebCredential(domain, account) { (credentials, error) -> () in
|
|
SecRequestSharedWebCredential(domain, account) { (credentials, error) -> () in
|
|
var remoteError: NSError?
|
|
var remoteError: NSError?
|
|
@@ -799,8 +801,10 @@ extension Options {
|
|
}
|
|
}
|
|
|
|
|
|
#if os(iOS)
|
|
#if os(iOS)
|
|
- if authenticationPrompt != nil {
|
|
|
|
- query[kSecUseOperationPrompt as String] = authenticationPrompt
|
|
|
|
|
|
+ if #available(iOS 8.0, *) {
|
|
|
|
+ if authenticationPrompt != nil {
|
|
|
|
+ query[kSecUseOperationPrompt as String] = authenticationPrompt
|
|
|
|
+ }
|
|
}
|
|
}
|
|
#endif
|
|
#endif
|
|
|
|
|
|
@@ -827,7 +831,7 @@ extension Options {
|
|
}
|
|
}
|
|
|
|
|
|
if let policy = authenticationPolicy {
|
|
if let policy = authenticationPolicy {
|
|
- if #available(OSX 10.10, *) {
|
|
|
|
|
|
+ if #available(OSX 10.10, iOS 8.0, *) {
|
|
var error: Unmanaged<CFError>?
|
|
var error: Unmanaged<CFError>?
|
|
guard let accessControl = SecAccessControlCreateWithFlags(kCFAllocatorDefault, accessibility.rawValue, SecAccessControlCreateFlags(rawValue: policy.rawValue), &error) else {
|
|
guard let accessControl = SecAccessControlCreateWithFlags(kCFAllocatorDefault, accessibility.rawValue, SecAccessControlCreateFlags(rawValue: policy.rawValue), &error) else {
|
|
if let error = error?.takeUnretainedValue() {
|
|
if let error = error?.takeUnretainedValue() {
|
|
@@ -1161,7 +1165,7 @@ extension AuthenticationType : RawRepresentable, CustomStringConvertible {
|
|
extension Accessibility : RawRepresentable, CustomStringConvertible {
|
|
extension Accessibility : RawRepresentable, CustomStringConvertible {
|
|
|
|
|
|
public init?(rawValue: String) {
|
|
public init?(rawValue: String) {
|
|
- guard #available(OSX 10.10, *) else {
|
|
|
|
|
|
+ guard #available(OSX 10.10, iOS 8.0, *) else {
|
|
return nil
|
|
return nil
|
|
}
|
|
}
|
|
switch rawValue {
|
|
switch rawValue {
|
|
@@ -1193,7 +1197,7 @@ extension Accessibility : RawRepresentable, CustomStringConvertible {
|
|
case Always:
|
|
case Always:
|
|
return kSecAttrAccessibleAlways as String
|
|
return kSecAttrAccessibleAlways as String
|
|
case WhenPasscodeSetThisDeviceOnly:
|
|
case WhenPasscodeSetThisDeviceOnly:
|
|
- if #available(OSX 10.10, *) {
|
|
|
|
|
|
+ if #available(OSX 10.10, iOS 8.0, *) {
|
|
return kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly as String
|
|
return kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly as String
|
|
} else {
|
|
} else {
|
|
fatalError("Unavailable 'Touch ID integration' on OS X versions prior to 10.10.")
|
|
fatalError("Unavailable 'Touch ID integration' on OS X versions prior to 10.10.")
|
|
@@ -1230,7 +1234,7 @@ extension Accessibility : RawRepresentable, CustomStringConvertible {
|
|
extension AuthenticationPolicy : RawRepresentable, CustomStringConvertible {
|
|
extension AuthenticationPolicy : RawRepresentable, CustomStringConvertible {
|
|
|
|
|
|
public init?(rawValue: Int) {
|
|
public init?(rawValue: Int) {
|
|
- guard #available(OSX 10.10, *) else {
|
|
|
|
|
|
+ guard #available(OSX 10.10, iOS 8.0, *) else {
|
|
return nil
|
|
return nil
|
|
}
|
|
}
|
|
let flags = SecAccessControlCreateFlags.UserPresence
|
|
let flags = SecAccessControlCreateFlags.UserPresence
|
|
@@ -1246,7 +1250,7 @@ extension AuthenticationPolicy : RawRepresentable, CustomStringConvertible {
|
|
public var rawValue: Int {
|
|
public var rawValue: Int {
|
|
switch self {
|
|
switch self {
|
|
case UserPresence:
|
|
case UserPresence:
|
|
- if #available(OSX 10.10, *) {
|
|
|
|
|
|
+ if #available(OSX 10.10, iOS 8.0, *) {
|
|
return SecAccessControlCreateFlags.UserPresence.rawValue
|
|
return SecAccessControlCreateFlags.UserPresence.rawValue
|
|
} else {
|
|
} else {
|
|
fatalError("Unavailable 'Touch ID integration' on OS X versions prior to 10.10.")
|
|
fatalError("Unavailable 'Touch ID integration' on OS X versions prior to 10.10.")
|