CocoaPods trunk is moving to be read-only. Read more on the blog, there are 19 months to go.

KeyClip 1.4.0

KeyClip 1.4.0

TestsTested
LangLanguage SwiftSwift
License MIT
ReleasedLast Release Nov 2016
SwiftSwift Version 3.0.1
SPMSupports SPM

Maintained by Shinichiro Aska.



KeyClip 1.4.0

  • By
  • aska

Build Status

KeyClip is yet another Keychain library written in Swift.

Features

Usage

String

KeyClip.save("access_token", string: "********") // -> Bool

let token = KeyClip.load("access_token") as String?

KeyClip.delete("access_token") // Remove the data

KeyClip.clear() // Remove all the data

KeyClip.exists("access_token") // -> Bool

NSDictionary

Must be compatible to NSJSONSerialization.

Valid JSON elements are Dictionary, Array, String, Number, Boolean and null.

KeyClip.save("account", dictionary: ["name": "aska", "token": "******"]) // -> Bool

let dictionary = KeyClip.load("account") as NSDictionary?

NSData

KeyClip.save("data", data: NSData()) // -> Bool

let data = KeyClip.load("data") as NSData?

Your Class

KeyClip.save("account", dictionary: account.dictionaryValue)

let account = KeyClip.load("account") { (dictionary) -> Account in
    return Account(dictionary)
}

class Account {
    let name: String
    let password: String

    init(_ dictionary: NSDictionary) {
        self.name = dictionary["name"] as String
        self.password = dictionary["password"] as String
    }

    var dictionaryValue: [String: String] {
        return ["name": name, "password": password]
    }
}

Error Handling

Return value

let success = KeyClip.save("password", string: "********")
if !success {
    // Show Alert "Saving password to keychain failed"
}

Clojure

KeyClip.save("password", string: "********") { error in
    let status = error.code // OSStatus
    // Show Alert "Saving failed \(error.localizedDescription)(\(error.code))"
}

Debug print

KeyClip.printError(true)

Settings

let clip = KeyClip.Builder()

    // kSecAttrService
    .service(NSBundle.mainBundle().bundleIdentifier) // default

    // kSecAttrAccessible
    .accessible(kSecAttrAccessibleAfterFirstUnlock) // default

    // kSecAttrAccessGroup
    .accessGroup("XXXX23F3DC53.com.example.share") // default is nil

    .build()

Note to accessGroup

⚠️ iOS Simulator's keychain implementation does not support kSecAttrAccessGroup. (always "test")

⚠️ kSecAttrAccessGroup must match the App Identifier prefix. https://developer.apple.com/library/mac/documentation/Security/Reference/keychainservices/index.html

How to check the App Identifier

Entitlement.plist's keychain-access-groups or App Identifier.

KeyClip.defaultAccessGroup() // -> String (eg. XXXX23F3DC53.*)

Requirements

  • iOS 8.0+ / Mac OS X 10.10+
  • Xcode 8

License

KeyClip is released under the MIT license. See LICENSE for details.