Home

Awesome

#SwiftKeychain Carthage compatible

Abstract

Swift wrapper for working with the Keychain API implemented with Protocol Oriented Programming.

You create an implementation of the <code>KeychainGenericPasswordType</code> protocol that encapsulates the data that you want to store in the <code>Keychain</code>. Most of the implementation is done for you by using default protocol implementations, such as setting the default service name and access mode (<code>kSecAttrAccessibleWhenUnlocked</code>).

Then you call the <code>KeychainItemType</code> methods to save, remove or fetch the item from the provided as argument <code>KeychainServiceType</code> protocol implementation.

SwiftKeychain Protocols

Let's say we want to store the access token and username for an Instagram account in the Keychain:

struct InstagramAccount: KeychainGenericPasswordType {
    
    let accountName: String
    let token: String
    var data = [String: AnyObject]()
    
    var dataToStore: [String: AnyObject] {
        return ["token": token]
    }
    
    var accessToken: String? {
        return data["token"] as? String
    }
    
    init(name: String, accessToken: String = "") {
        accountName = name
        token = accessToken
    }
}

In <code>var dataToStore: [String: AnyObject]</code> you return the Dictionary that you want to be saved in the Keychain and when you fetch the item from the Keychain its data will be populated in your <code>var data: [String: AnyObject]</code> property.

Save Item

let newAccount = InstagramAccount(name: "John", accessToken: "123456")

do {
    
    try newAccount.saveInKeychain()

} catch {
    
    print(error)
}

Note: The provided implementation of the <code>KeychainServiceType</code> protocol will replace the item if it already exists in the Keychain database.

Remove Item

let account = InstagramAccount(name: "John")

do {
    
    try account.removeFromKeychain()

} catch {
    
    print(error)
}

Fetch Item

var account = InstagramAccount(name: "John")

do {
    
    try account.fetchFromKeychain()
    
    if let token = account.accessToken {

        print("name: \(account.accountName), token: \(token)")
    }

} catch {

    print(error)
}

Installation

SwiftKeychain requires Swift 2.0 and Xcode 7 and supports iOS, OSX, watchOS and tvOS.

Manually

Copy the <code>Keychain/Keychain.swift</code> file to your project.

Carthage

Add the following line to your Cartfile

github "yankodimitrov/SwiftKeychain" "master"

CocoaPods

Add the following line to your Podfile

pod “SwiftKeychain”

License

SwiftKeychain is released under the MIT license. See the LICENSE.txt file for more info.