{"id":1962,"url":"https://github.com/kishikawakatsumi/UICKeyChainStore","last_synced_at":"2025-08-02T05:33:14.836Z","repository":{"id":1885794,"uuid":"2811626","full_name":"kishikawakatsumi/UICKeyChainStore","owner":"kishikawakatsumi","description":"UICKeyChainStore is a simple wrapper for Keychain on iOS, watchOS, tvOS and macOS. Makes using Keychain APIs as easy as NSUserDefaults.","archived":false,"fork":false,"pushed_at":"2023-10-14T19:59:29.000Z","size":369,"stargazers_count":3097,"open_issues_count":23,"forks_count":380,"subscribers_count":92,"default_branch":"master","last_synced_at":"2025-07-17T07:39:14.529Z","etag":null,"topics":["keychain","security","touch-id"],"latest_commit_sha":null,"homepage":"http://kishikawakatsumi.com","language":"Objective-C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kishikawakatsumi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2011-11-20T00:35:49.000Z","updated_at":"2025-07-16T04:19:11.000Z","dependencies_parsed_at":"2023-10-20T22:15:07.667Z","dependency_job_id":null,"html_url":"https://github.com/kishikawakatsumi/UICKeyChainStore","commit_stats":{"total_commits":237,"total_committers":28,"mean_commits":8.464285714285714,"dds":"0.25316455696202533","last_synced_commit":"db869212bc69b6198a62efe03e2f5fc8e19c6b65"},"previous_names":[],"tags_count":22,"template":false,"template_full_name":null,"purl":"pkg:github/kishikawakatsumi/UICKeyChainStore","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kishikawakatsumi%2FUICKeyChainStore","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kishikawakatsumi%2FUICKeyChainStore/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kishikawakatsumi%2FUICKeyChainStore/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kishikawakatsumi%2FUICKeyChainStore/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kishikawakatsumi","download_url":"https://codeload.github.com/kishikawakatsumi/UICKeyChainStore/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kishikawakatsumi%2FUICKeyChainStore/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266743408,"owners_count":23977320,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-23T02:00:09.312Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["keychain","security","touch-id"],"created_at":"2024-01-05T20:15:59.999Z","updated_at":"2025-08-02T05:33:14.494Z","avatar_url":"https://github.com/kishikawakatsumi.png","language":"Objective-C","funding_links":[],"categories":["Security","Objective-C","Objective-C  Stars 1000以内排名整理","Database, ORM, Cache","OOM-Leaks-Crash","Keychain"],"sub_categories":["Keychain","Other free courses","Data Persistence"],"readme":"# UICKeyChainStore\n[![CI Status](http://img.shields.io/travis/kishikawakatsumi/UICKeyChainStore.svg?style=flat)](https://travis-ci.org/kishikawakatsumi/UICKeyChainStore)\n[![Coverage Status](https://img.shields.io/coveralls/kishikawakatsumi/UICKeyChainStore.svg?style=flat)](https://coveralls.io/r/kishikawakatsumi/UICKeyChainStore?branch=master)\n[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)\n[![Version](https://img.shields.io/cocoapods/v/UICKeyChainStore.svg?style=flat)](http://cocoadocs.org/docsets/UICKeyChainStore)\n[![License](https://img.shields.io/cocoapods/l/UICKeyChainStore.svg?style=flat)](http://cocoadocs.org/docsets/UICKeyChainStore)\n[![Platform](https://img.shields.io/cocoapods/p/UICKeyChainStore.svg?style=flat)](http://cocoadocs.org/docsets/UICKeyChainStore)\n\nUICKeyChainStore is a simple wrapper for Keychain that works on iOS and OS X. Makes using Keychain APIs as easy as NSUserDefaults.\n\n## Looking for the library written in Swift?\n\nTry [KeychainAccess](https://github.com/kishikawakatsumi/KeychainAccess).  \n[KeychainAccess](https://github.com/kishikawakatsumi/KeychainAccess) is next generation of UICKeyChainStore.\n\n## Transitioning from 1.x to 2.0\n\n**`synchronize` method is deprecated. Calling this method is no longer required (Just ignored).**\n\n## Features\n\n- Simple interface\n- Support access group\n- [Support accessibility](#accessibility)\n- [Support iCloud sharing](#icloud_sharing)\n- **[Support TouchID and Keychain integration (iOS 8+)](#touch_id_integration)**\n- **[Support Shared Web Credentials (iOS 8+)](#shared_web_credentials)**\n- Works on both iOS \u0026 OS X\n- Supported watchOS 2\n\n## Usage\n\n### Basics\n\n#### Saving Application Password\n\n```objective-c\nUICKeyChainStore *keychain = [UICKeyChainStore keyChainStoreWithService:@\"com.example.github-token\"];\nkeychain[@\"kishikawakatsumi\"] = @\"01234567-89ab-cdef-0123-456789abcdef\";\n```\n\n#### Saving Internet Password\n\n```objective-c\nUICKeyChainStore *keychain = [UICKeyChainStore keyChainStoreWithServer:[NSURL URLWithString:@\"https://github.com\"]\n                                                          protocolType:UICKeyChainStoreProtocolTypeHTTPS];\nkeychain[@\"kishikawakatsumi\"] = @\"01234567-89ab-cdef-0123-456789abcdef\";\n```\n\n### Instantiation\n\n#### Create Keychain for Application Password\n\n```objective-c\nUICKeyChainStore *keychain = [UICKeyChainStore keyChainStoreWithService:@\"com.example.github-token\"];\n```\n\n```objective-c\nUICKeyChainStore *keychain = [UICKeyChainStore keyChainStoreWithService:@\"kishikawakatsumi.git\"\n                                                            accessGroup:@\"12ABCD3E4F.shared\"];\n```\n\n#### Create Keychain for Internet Password\n\n```objective-c\nUICKeyChainStore *keychain = [UICKeyChainStore keyChainStoreWithServer:[NSURL URLWithString:@\"https://github.com\"]\n                                                          protocolType:UICKeyChainStoreProtocolTypeHTTPS];\n```\n\n```objective-c\nUICKeyChainStore *keychain = [UICKeyChainStore keyChainStoreWithServer:[NSURL URLWithString:@\"https://github.com\"]\n                                                          protocolType:UICKeyChainStoreProtocolTypeHTTPS\n                                                    authenticationType:UICKeyChainStoreAuthenticationTypeHTMLForm];\n```\n\n### Adding an item\n\n#### subscripting\n\n```objective-c\nkeychain[@\"kishikawakatsumi\"] = @\"01234567-89ab-cdef-0123-456789abcdef\"\n```\n\n#### set method\n\n```objective-c\n[keychain setString:@\"01234567-89ab-cdef-0123-456789abcdef\" forKey:@\"kishikawakatsumi\"];\n```\n\n#### error handling\n\n```objective-c\nif (![keychain setString:@\"01234567-89ab-cdef-0123-456789abcdef\" forKey:@\"kishikawakatsumi\"]) {\n    // error has occurred\n}\n```\n\n```objective-c\nNSError *error;\n[keychain setString:@\"01234567-89ab-cdef-0123-456789abcdef\" forKey:@\"kishikawakatsumi\" error:\u0026error];\nif (error) {\n    NSLog(@\"%@\", error.localizedDescription);\n}\n```\n\n### Obtaining an item\n\n#### subscripting (automatically converts to string)\n\n```objective-c\nNSString *token = keychain[@\"kishikawakatsumi\"]\n```\n\n#### get methods\n\n##### as String\n\n```objective-c\nNSString *token = [keychain stringForKey:@\"kishikawakatsumi\"];\n```\n\n##### as NSData\n\n```objective-c\nNSData *data = [keychain dataForKey:@\"kishikawakatsumi\"];\n```\n\n#### error handling\n\n**First, get the `failable` (value or error) object**\n\n```objective-c\nNSError *error;\nNSString *token = [keychain stringForKey:@\"\" error:\u0026error];\nif (error) {\n    NSLog(@\"%@\", error.localizedDescription);\n}\n```\n\n### Removing an item\n\n#### subscripting\n\n```objective-c\nkeychain[@\"kishikawakatsumi\"] = nil\n```\n\n#### remove method\n\n```objective-c\n[keychain removeItemForKey:@\"kishikawakatsumi\"];\n```\n\n#### error handling\n\n```objective-c\nif (![keychain removeItemForKey:@\"kishikawakatsumi\"]) {\n    // error has occurred\n}\n```\n\n```objective-c\nNSError *error;\n[keychain removeItemForKey:@\"kishikawakatsumi\" error:\u0026error];\nif (error) {\n    NSLog(@\"%@\", error.localizedDescription);\n}\n```\n\n### Label and Comment\n\n```objective-c\nUICKeyChainStore *keychain = [UICKeyChainStore keyChainStoreWithServer:[NSURL URLWithString:@\"https://github.com\"]\n                                                          protocolType:UICKeyChainStoreProtocolTypeHTTPS];\n[keychain setString:@\"01234567-89ab-cdef-0123-456789abcdef\"\n             forKey:@\"kishikawakatsumi\"\n              label:@\"github.com (kishikawakatsumi)\"\n            comment:@\"github access token\"];\n```\n\n### Configuration (Accessibility, Sharing, iCould Sync)\n\n#### \u003ca name=\"accessibility\"\u003e Accessibility\n\n##### Default accessibility matches background application (=kSecAttrAccessibleAfterFirstUnlock)\n\n```objective-c\nUICKeyChainStore *keychain = [UICKeyChainStore keyChainStoreWithService:@\"com.example.github-token\"];\n```\n\n##### For background application\n\n###### Creating instance\n\n```objective-c\nUICKeyChainStore *keychain = [UICKeyChainStore keyChainStoreWithService:@\"com.example.github-token\"];\nkeychain.accessibility = UICKeyChainStoreAccessibilityAfterFirstUnlock;\n\nkeychain[@\"kishikawakatsumi\"] = @\"01234567-89ab-cdef-0123-456789abcdef\"\n```\n\n##### For foreground application\n\n###### Creating instance\n\n```objective-c\nUICKeyChainStore *keychain = [UICKeyChainStore keyChainStoreWithService:@\"com.example.github-token\"];\nkeychain.accessibility = UICKeyChainStoreAccessibilityWhenUnlocked;\n\nkeychain[@\"kishikawakatsumi\"] = @\"01234567-89ab-cdef-0123-456789abcdef\"\n```\n\n#### Sharing Keychain items\n\n```objective-c\nUICKeyChainStore *keychain = [UICKeyChainStore keyChainStoreWithService:@\"kishikawakatsumi.git\"\n                                                            accessGroup:@\"12ABCD3E4F.shared\"];\n```\n\n#### \u003ca name=\"icloud_sharing\"\u003e Synchronizing Keychain items with iCloud\n\n###### Creating instance\n\n```objective-c\nUICKeyChainStore *keychain = [UICKeyChainStore keyChainStoreWithService:@\"com.example.github-token\"];\nkeychain.synchronizable = YES;\n\nkeychain[@\"kishikawakatsumi\"] = @\"01234567-89ab-cdef-0123-456789abcdef\"\n```\n\n### \u003ca name=\"touch_id_integration\"\u003e Touch ID integration\n\n**Any Operation that require authentication must be run in the background thread.**  \n**If you run in the main thread, UI thread will lock for the system to try to display the authentication dialog.**\n\n#### Adding a Touch ID protected item\n\nIf you want to store the Touch ID protected Keychain item, specify `accessibility` and `authenticationPolicy` attributes.  \n\n```objective-c\nUICKeyChainStore *keychain = [UICKeyChainStore keyChainStoreWithService:@\"com.example.github-token\"];\n\ndispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{\n    [keychain setAccessibility:UICKeyChainStoreAccessibilityWhenPasscodeSetThisDeviceOnly\n          authenticationPolicy:UICKeyChainStoreAuthenticationPolicyUserPresence];\n\n    keychain[@\"kishikawakatsumi\"] = @\"01234567-89ab-cdef-0123-456789abcdef\"\n});\n```\n\n#### Updating a Touch ID protected item\n\nThe same way as when adding.  \n\n**Do not run in the main thread if there is a possibility that the item you are trying to add already exists, and protected.**\n**Because updating protected items requires authentication.**\n\nAdditionally, you want to show custom authentication prompt message when updating, specify an `authenticationPrompt` attribute.\nIf the item not protected, the `authenticationPrompt` parameter just be ignored.\n\n```objective-c\nUICKeyChainStore *keychain = [UICKeyChainStore keyChainStoreWithService:@\"com.example.github-token\"];\n\ndispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{\n    [keychain setAccessibility:UICKeyChainStoreAccessibilityWhenPasscodeSetThisDeviceOnly\n          authenticationPolicy:UICKeyChainStoreAuthenticationPolicyUserPresence];\n    keychain.authenticationPrompt = @\"Authenticate to update your access token\";\n\n    keychain[@\"kishikawakatsumi\"] = @\"01234567-89ab-cdef-0123-456789abcdef\"\n});\n```\n\n#### Obtaining a Touch ID protected item\n\nThe same way as when you get a normal item. It will be displayed automatically Touch ID or passcode authentication If the item you try to get is protected.  \nIf you want to show custom authentication prompt message, specify an `authenticationPrompt` attribute.\nIf the item not protected, the `authenticationPrompt` parameter just be ignored.\n\n```objective-c\nUICKeyChainStore *keychain = [UICKeyChainStore keyChainStoreWithService:@\"com.example.github-token\"];\n\ndispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{\n    [keychain setAccessibility:UICKeyChainStoreAccessibilityWhenPasscodeSetThisDeviceOnly\n          authenticationPolicy:UICKeyChainStoreAuthenticationPolicyUserPresence];\n    keychain.authenticationPrompt = @\"Authenticate to update your access token\";\n\n    NSString *token = keychain[@\"kishikawakatsumi\"];\n});\n```\n\n#### Removing a Touch ID protected item\n\nThe same way as when you remove a normal item.\nThere is no way to show Touch ID or passcode authentication when removing Keychain items.\n\n```objective-c\nUICKeyChainStore *keychain = [UICKeyChainStore keyChainStoreWithService:@\"com.example.github-token\"];\n\nkeychain[@\"kishikawakatsumi\"] = nil;\n```\n\n### \u003ca name=\"shared_web_credentials\"\u003e Shared Web Credentials\n\n\u003e Shared web credentials is a programming interface that enables native iOS apps to share credentials with their website counterparts. For example, a user may log in to a website in Safari, entering a user name and password, and save those credentials using the iCloud Keychain. Later, the user may run a native app from the same developer, and instead of the app requiring the user to reenter a user name and password, shared web credentials gives it access to the credentials that were entered earlier in Safari. The user can also create new accounts, update passwords, or delete her account from within the app. These changes are then saved and used by Safari.  \n\u003chttps://developer.apple.com/library/ios/documentation/Security/Reference/SharedWebCredentialsRef/\u003e\n\n```objective-c\nUICKeyChainStore *keychain = [UICKeyChainStore keyChainStoreWithServer:[NSURL URLWithString:@\"https://kishikawakatsumi.com\"]\nprotocolType:UICKeyChainStoreProtocolTypeHTTPS];\nNSString *username = @\"kishikawakatsumi@mac.com\";\nNSString *password = keychain[username];\nif (password) {\n    // If found password in the Keychain,\n    // then log into the server\n} else {\n    // If not found password in the Keychain,\n    // try to read from Shared Web Credentials\n    [keychain sharedPasswordForAccount:username completion:^(NSString *password, NSError *error) {\n        if (password) {\n            // If found password in the Shared Web Credentials,\n            // then log into the server\n            // and save the password to the Keychain\n\n            keychain[username] = password\n        } else {\n            // If not found password either in the Keychain also Shared Web Credentials,\n            // prompt for username and password\n\n            // Log into server\n\n            // If the login is successful,\n            // save the credentials to both the Keychain and the Shared Web Credentials.\n\n            keychain[username] = password\n            [keychain setSharedPassword:password forAccount:username completion:nil];\n        }\n    }];\n}\n```\n\n#### Request all associated domain's credentials\n\n```objective-c\n[UICKeyChainStore requestSharedWebCredentialWithCompletion:^(NSArray *credentials, NSError *error) {\n\n}];\n```\n\n#### Generate strong random password\n\nGenerate strong random password that is in the same format used by Safari autofill (xxx-xxx-xxx-xxx).  \n\n```objective-c\nNSString *password = [UICKeyChainStore generatePassword];\nNSLog(@\"%@\", password); // =\u003e Nhu-GKm-s3n-pMx\n```\n\n#### How to set up Shared Web Credentials\n\n\u003e 1. Add a com.apple.developer.associated-domains entitlement to your app. This entitlement must include all the domains with which you want to share credentials.\n\n\u003e 2. Add an apple-app-site-association file to your website. This file must include application identifiers for all the apps with which the site wants to share credentials, and it must be properly signed.\n\n\u003e 3. When the app is installed, the system downloads and verifies the site association file for each of its associated domains. If the verification is successful, the app is associated with the domain.\n\n**More details:**  \n\u003chttps://developer.apple.com/library/ios/documentation/Security/Reference/SharedWebCredentialsRef/\u003e\n\n### Debugging\n\n#### Display all stored items if print keychain object\n\n```objective-c\nUICKeyChainStore *keychain = [UICKeyChainStore keyChainStoreWithServer:[NSURL URLWithString:@\"https://github.com\"]\n                                                          protocolType:UICKeyChainStoreProtocolTypeHTTPS];\nNSLog(@\"%@\", keychain);\n```\n\n```\n=\u003e\n(\n{\n    accessibility = ak;\n    authenticationType = dflt;\n    class = InternetPassword;\n    key = kishikawakatsumi;\n    protocol = htps;\n    server = \"github.com\";\n    synchronizable = 0;\n    value = \"01234567-89ab-cdef-0123-456789abcdef\";\n}    {\n    accessibility = ck;\n    authenticationType = dflt;\n    class = InternetPassword;\n    key = hirohamada;\n    protocol = htps;\n    server = \"github.com\";\n    synchronizable = 1;\n    value = \"11111111-89ab-cdef-1111-456789abcdef\";\n}    {\n    accessibility = ak;\n    authenticationType = dflt;\n    class = InternetPassword;\n    key = honeylemon;\n    protocol = htps;\n    server = \"github.com\";\n    synchronizable = 0;\n    value = \"22222222-89ab-cdef-2222-456789abcdef\";\n})\n```\n\n#### Obtaining all stored keys\n\n```objective-c\nUICKeyChainStore *keychain = [UICKeyChainStore keyChainStoreWithServer:[NSURL URLWithString:@\"https://github.com\"]\n                                                          protocolType:UICKeyChainStoreProtocolTypeHTTPS];\n\nNSArray *keys = keychain.allKeys;\nfor (NSString *key in keys) {\n    NSLog(@\"key: %@\", key);\n}\n```\n\n```\n=\u003e\nkey: kishikawakatsumi\nkey: hirohamada\nkey: honeylemon\n```\n\n#### Obtaining all stored items\n\n```objective-c\nUICKeyChainStore *keychain = [UICKeyChainStore keyChainStoreWithServer:[NSURL URLWithString:@\"https://github.com\"]\n                                                          protocolType:UICKeyChainStoreProtocolTypeHTTPS];\n\nNSArray *items = keychain.allItems;\nfor (NSString *item in items) {\n    NSLog(@\"item: %@\", item);\n}\n```\n\n```\n=\u003e\n\nitem: {\n    accessibility = ak;\n    authenticationType = dflt;\n    class = InternetPassword;\n    key = kishikawakatsumi;\n    protocol = htps;\n    server = \"github.com\";\n    synchronizable = 0;\n    value = \"01234567-89ab-cdef-0123-456789abcdef\";\n}\nitem: {\n    accessibility = ck;\n    authenticationType = dflt;\n    class = InternetPassword;\n    key = hirohamada;\n    protocol = htps;\n    server = \"github.com\";\n    synchronizable = 1;\n    value = \"11111111-89ab-cdef-1111-456789abcdef\";\n}\nitem: {\n    accessibility = ak;\n    authenticationType = dflt;\n    class = InternetPassword;\n    key = honeylemon;\n    protocol = htps;\n    server = \"github.com\";\n    synchronizable = 0;\n    value = \"22222222-89ab-cdef-2222-456789abcdef\";\n}\n```\n\n### Convenient class methods\n\nAdd items using default service name (=bundle identifer).\n\n```objective-c\n[UICKeyChainStore setString:@\"01234567-89ab-cdef-0123-456789abcdef\" forKey:@\"kishikawakatsumi\"];\n```\n\nOr specify the service name.\n\n```objective-c\n[UICKeyChainStore setString:@\"01234567-89ab-cdef-0123-456789abcdef\"\n                     forKey:@\"kishikawakatsumi\"\n                    service:@\"com.example.github-token\"];\n```\n\n---\nRemove items.\n\n```objective-c\n[UICKeyChainStore removeItemForKey:@\"kishikawakatsumi\" service:@\"com.example.github-token\"];\n```\n\nTo set nil value also works remove item for the key.\n\n```objective-c\n[UICKeyChainStore setString:nil forKey:@\"kishikawakatsumi\" service:@\"com.example.github-token\"];\n```\n\n## Requirements\n\niOS 4.3 or later\nOS X 10.7 or later\n\n## Installation\n\n### Swift Package Manager\n\nUICKeyChainStore is now available through [Swift Package Manager](https://github.com/apple/swift-package-manager/).\n\n#### Xcode\n\nSelect `File \u003e Swift Packages \u003e Add Package Dependency...`\n\nType `https://github.com/kishikawakatsumi/UICKeyChainStore` then check the target that appears.\n\n#### CLI\n\nCreate `Package.swift` file and define the dependency like this\n\n```swift\n// swift-tools-version:5.0\nimport PackageDescription\n\nlet package = Package(\n    name: \"MyLibrary\",\n    products: [\n        .library(name: \"MyLibrary\", targets: [\"MyLibrary\"]),\n    ],\n    dependencies: [\n        .package(url: \"https://github.com/kishikawakatsumi/UICKeyChainStore.git\", from: \"2.1.2\"),\n    ],\n    targets: [\n        .target(name: \"MyLibrary\", dependencies: [\"UICKeyChainStore\"]),\n    ]\n)\n```\n\nThen, type\n\n```shell\n$ swift build\n```\n\n### CocoaPods\n\nUICKeyChainStore is available through [CocoaPods](http://cocoapods.org). To install\nit, simply add the following line to your Podfile:\n\n`pod 'UICKeyChainStore'`\n\n##### For watchOS 2\n\n```ruby\nuse_frameworks!\n\ntarget 'EampleApp' do\n  pod 'UICKeyChainStore'\nend\n\ntarget 'EampleApp WatchKit Extension' do\n  platform :watchos, '2.0'\n  pod 'UICKeyChainStore'\nend\n```\n\n### Carthage\n\nUICKeyChainStore is available through [Carthage](https://github.com/Carthage/Carthage). To install\nit, simply add the following line to your Cartfile:\n\n`github \"kishikawakatsumi/UICKeyChainStore\"`\n\n### To manually add to your project\n\n1. Add `Security.framework` to your target.\n2. Copy files in Lib (`UICKeyChainStore.h` and `UICKeyChainStore.m`) to your project.\n\n## Author\n\nkishikawa katsumi, kishikawakatsumi@mac.com\n\n## License\n\n[Apache]: http://www.apache.org/licenses/LICENSE-2.0\n[MIT]: http://www.opensource.org/licenses/mit-license.php\n[GPL]: http://www.gnu.org/licenses/gpl.html\n[BSD]: http://opensource.org/licenses/bsd-license.php\n\nUICKeyChainStore is available under the [MIT license][MIT]. See the LICENSE file for more info.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkishikawakatsumi%2FUICKeyChainStore","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkishikawakatsumi%2FUICKeyChainStore","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkishikawakatsumi%2FUICKeyChainStore/lists"}