Skip to content

KeyClip is yet another Keychain library written in Swift.

License

Notifications You must be signed in to change notification settings

matthewtsmith/KeyClip

 
 

Repository files navigation

KeyClip

Build Status Carthage compatible

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

Installation

Carthage

Add the following line to your Cartfile

github "s-aska/KeyClip"

CocoaPods

Add the following line to your Podfile

use_frameworks!
pod 'KeyClip'

License

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

About

KeyClip is yet another Keychain library written in Swift.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Swift 93.1%
  • Ruby 3.8%
  • Makefile 2.2%
  • Shell 0.9%