Explorar o código

Add Synchronizable item

Evgenii Neumerzhitckii %!s(int64=9) %!d(string=hai) anos
pai
achega
bca0df2740

+ 7 - 6
KeychainSwift/KeychainSwift.swift

@@ -88,11 +88,11 @@ public class KeychainSwift {
       KeychainSwiftConstants.klass       : kSecClassGenericPassword,
       KeychainSwiftConstants.attrAccount : prefixedKey,
       KeychainSwiftConstants.valueData   : value,
-      KeychainSwiftConstants.accessible  : accessible //,
-//      KeychainSwiftConstants.attrSynchronizable: false
+      KeychainSwiftConstants.accessible  : accessible
     ]
       
     query = addAccessGroupWhenPresent(query)
+    query = addSynchronizableIfRequired(query)
     lastQueryParameters = query
     
     lastResultCode = SecItemAdd(query as CFDictionaryRef, nil)
@@ -154,11 +154,11 @@ public class KeychainSwift {
       KeychainSwiftConstants.klass       : kSecClassGenericPassword,
       KeychainSwiftConstants.attrAccount : prefixedKey,
       KeychainSwiftConstants.returnData  : kCFBooleanTrue,
-      KeychainSwiftConstants.matchLimit  : kSecMatchLimitOne //,
-//      KeychainSwiftConstants.attrSynchronizable: kSecAttrSynchronizableAny
+      KeychainSwiftConstants.matchLimit  : kSecMatchLimitOne
     ]
     
     query = addAccessGroupWhenPresent(query)
+    query = addSynchronizableIfRequired(query)
     lastQueryParameters = query
     
     var result: AnyObject?
@@ -200,11 +200,11 @@ public class KeychainSwift {
 
     var query: [String: NSObject] = [
       KeychainSwiftConstants.klass       : kSecClassGenericPassword,
-      KeychainSwiftConstants.attrAccount : prefixedKey //,
-//      KeychainSwiftConstants.attrSynchronizable: kSecAttrSynchronizableAny
+      KeychainSwiftConstants.attrAccount : prefixedKey
     ]
     
     query = addAccessGroupWhenPresent(query)
+    query = addSynchronizableIfRequired(query)
     lastQueryParameters = query
     
     lastResultCode = SecItemDelete(query as CFDictionaryRef)
@@ -222,6 +222,7 @@ public class KeychainSwift {
   public func clear() -> Bool {
     var query: [String: NSObject] = [ kSecClass as String : kSecClassGenericPassword ]
     query = addAccessGroupWhenPresent(query)
+    query = addSynchronizableIfRequired(query)
     lastQueryParameters = query
     
     lastResultCode = SecItemDelete(query as CFDictionaryRef)

+ 38 - 3
KeychainSwiftTests/SynchronizableTests.swift

@@ -11,12 +11,12 @@ class SynchronizableTests: XCTestCase {
     obj = KeychainSwift()
     obj.clear()
     obj.lastQueryParameters = nil
-    obj.synchronizable = true
+    obj.synchronizable = false
   }
   
-  // MARK: - Add access group
+  // MARK: - addSynchronizableIfRequired
   
-  func testAddAccessGroup() {
+  func testAddSynchronizableGroup() {
     let items: [String: NSObject] = [
       "one": "two"
     ]
@@ -28,4 +28,39 @@ class SynchronizableTests: XCTestCase {
     XCTAssertEqual("two", result["one"])
     XCTAssertEqual(kSecAttrSynchronizableAny, result["sync"])
   }
+  
+  func testAddSynchronizableGroup_nil() {
+    let items: [String: NSObject] = [
+      "one": "two"
+    ]
+    
+    let result = obj.addSynchronizableIfRequired(items)
+    
+    XCTAssertEqual(1, result.count)
+    XCTAssertEqual("two", result["one"])
+  }
+  
+  func testSet() {
+    obj.synchronizable = true
+    obj.set("hello :)", forKey: "key 1")
+    XCTAssertEqual(kSecAttrSynchronizableAny, obj.lastQueryParameters?["sync"])
+  }
+  
+  func testGet() {
+    obj.synchronizable = true
+    obj.get("key 1")
+    XCTAssertEqual(kSecAttrSynchronizableAny, obj.lastQueryParameters?["sync"])
+  }
+
+  func testDelete() {
+    obj.synchronizable = true
+    obj.delete("key 1")
+    XCTAssertEqual(kSecAttrSynchronizableAny, obj.lastQueryParameters?["sync"])
+  }
+  
+  func testClear() {
+    obj.synchronizable = true
+    obj.clear()
+    XCTAssertEqual(kSecAttrSynchronizableAny, obj.lastQueryParameters?["sync"])
+  }
 }