Latest 1.4.0
Homepage https://github.com/s-aska/KeyClip
License MIT
Platforms ios 8.0, osx 10.10, requires ARC
Authors

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

:warning: iOS Simulator’s keychain implementation does not support kSecAttrAccessGroup. (always "test")

warning: 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.

Latest podspec

{
    "name": "KeyClip",
    "version": "1.4.0",
    "summary": "KeyClip is yet another Keychain library written in Swift.",
    "description": "KeyClip is yet another Keychain library written in Swift.nFeaturesn  - Simple interfacen  - Multi Types ( String / NSDictionary / NSData )n  - Error Handlingn  - Settings ( kSecAttrAccessGroup / kSecAttrService / kSecAttrAccessible )n  - Works on both iOS & OS X",
    "homepage": "https://github.com/s-aska/KeyClip",
    "license": "MIT",
    "authors": {
        "aska": "[email protected]"
    },
    "source": {
        "git": "https://github.com/s-aska/KeyClip.git",
        "tag": "1.4.0"
    },
    "platforms": {
        "ios": "8.0",
        "osx": "10.10"
    },
    "requires_arc": true,
    "source_files": "KeyClip/*.swift",
    "pushed_with_swift_version": "3.0.1"
}

Pin It on Pinterest

Share This