TegKeychain.swift 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import UIKit
  2. import Security
  3. public class TegKeychain {
  4. public class func set(key: String, value: String) -> Bool {
  5. if let data = value.dataUsingEncoding(NSUTF8StringEncoding) {
  6. return set(key, value: data)
  7. }
  8. return false
  9. }
  10. public class func set(key: String, value: NSData) -> Bool {
  11. let query = [
  12. TegKeychainConstants.klass : TegKeychainConstants.classGenericPassword,
  13. TegKeychainConstants.attrAccount : key,
  14. TegKeychainConstants.valueData : value ]
  15. SecItemDelete(query as CFDictionaryRef)
  16. let status: OSStatus = SecItemAdd(query as CFDictionaryRef, nil)
  17. return status == noErr
  18. }
  19. public class func get(key: String) -> String? {
  20. if let data = getData(key),
  21. let currentString = NSString(data: data, encoding: NSUTF8StringEncoding) as? String {
  22. return currentString
  23. }
  24. return nil
  25. }
  26. public class func getData(key: String) -> NSData? {
  27. let query = [
  28. TegKeychainConstants.klass : kSecClassGenericPassword,
  29. TegKeychainConstants.attrAccount : key,
  30. TegKeychainConstants.returnData : kCFBooleanTrue,
  31. TegKeychainConstants.matchLimit : kSecMatchLimitOne ]
  32. var result: AnyObject?
  33. let status = withUnsafeMutablePointer(&result) {
  34. SecItemCopyMatching(query, UnsafeMutablePointer($0))
  35. }
  36. if status == noErr { return result as? NSData }
  37. return nil
  38. }
  39. public class func delete(key: String) -> Bool {
  40. let query = [
  41. TegKeychainConstants.klass : kSecClassGenericPassword,
  42. TegKeychainConstants.attrAccount : key ]
  43. let status: OSStatus = SecItemDelete(query as CFDictionaryRef)
  44. return status == noErr
  45. }
  46. public class func clear() -> Bool {
  47. let query = [ kSecClass as String : kSecClassGenericPassword ]
  48. let status: OSStatus = SecItemDelete(query as CFDictionaryRef)
  49. return status == noErr
  50. }
  51. }