@@ -30,36 +30,14 @@ public class KeychainHandler {
30
30
public static let shared = KeychainHandler ( )
31
31
32
32
fileprivate func data( for key: String , additionalQuery: [ String : AnyObject ] ? ) -> Data ? {
33
- var query : [ String : AnyObject ] = [
34
- kSecClass as String : kSecClassGenericPassword as NSString ,
35
- kSecMatchLimit as String : kSecMatchLimitOne,
36
- kSecReturnData as String : kCFBooleanTrue,
37
- kSecAttrService as String : ( serviceIdentifier ?? " " ) as AnyObject ,
38
- kSecAttrAccount as String : key as AnyObject
39
- ]
40
- if let accessGroupName = self . accessGroupName {
41
- query [ kSecAttrAccessGroup as String ] = accessGroupName as AnyObject
42
- }
43
- // Set additional query values when given.
44
- if let additionalQuery = additionalQuery {
45
- additionalQuery. forEach { key, value in query [ key] = value }
46
- }
33
+ var query = self . query ( for: key, additionalQuery: additionalQuery)
34
+ query [ kSecMatchLimit as String ] = kSecMatchLimitOne
35
+ query [ kSecReturnData as String ] = kCFBooleanTrue
47
36
return self . secItemCopy ( query) . data as? Data
48
37
}
49
38
50
39
fileprivate func set( _ data: Data ? , for key: String , additionalQuery: [ String : AnyObject ] ? ) -> Bool {
51
- var query : [ String : AnyObject ] = [
52
- kSecClass as String : ( kSecClassGenericPassword as NSString ) ,
53
- kSecAttrAccount as String : key as AnyObject ,
54
- kSecAttrService as String : ( serviceIdentifier ?? " " ) as AnyObject
55
- ]
56
- if let accessGroupName = self . accessGroupName {
57
- query [ kSecAttrAccessGroup as String ] = accessGroupName as AnyObject
58
- }
59
- // Set additional query values when given.
60
- if let additionalQuery = additionalQuery {
61
- additionalQuery. forEach { key, value in query [ key] = value }
62
- }
40
+ var query = self . query ( for: key, additionalQuery: additionalQuery)
63
41
if let data = data {
64
42
query [ kSecValueData as String ] = data as AnyObject
65
43
return self . secItemAdd ( query) == noErr
@@ -83,6 +61,24 @@ public class KeychainHandler {
83
61
return try JSONDecoder ( ) . decode ( T . self, from: data)
84
62
}
85
63
64
+ private func query( for key: String , additionalQuery: [ String : AnyObject ] ? ) -> [ String : AnyObject ] {
65
+ var query : [ String : AnyObject ] = [
66
+ kSecClass as String : ( kSecClassGenericPassword as NSString ) ,
67
+ kSecAttrAccount as String : key as AnyObject
68
+ ]
69
+ if let service = self . serviceIdentifier {
70
+ query [ kSecAttrService as String ] = service as AnyObject
71
+ }
72
+ if let accessGroupName = self . accessGroupName {
73
+ query [ kSecAttrAccessGroup as String ] = accessGroupName as AnyObject
74
+ }
75
+ // Set additional query values when given.
76
+ if let additionalQuery = additionalQuery {
77
+ additionalQuery. forEach { key, value in query [ key] = value }
78
+ }
79
+ return query
80
+ }
81
+
86
82
private func secItemCopy( _ query: [ String : AnyObject ] ) -> ( status: OSStatus , data: AnyObject ? ) {
87
83
var result : AnyObject ?
88
84
let status : OSStatus = withUnsafeMutablePointer ( to: & result) {
0 commit comments