ios中KeyChain用途(整理)
阿新 • • 發佈:2019-01-27
一、在應用間利用KeyChain共享資料
我們可以把KeyChain理解為一個Dictionary,所有資料都以key-value的形式儲存,可以對這個Dictionary進行add、update、get、delete這四個操作。對於每一個應用來說,KeyChain都有兩個訪問區,私有區和公共區。私有區是一個sandbox,本程式儲存的任何資料都對其他程式不可見。而要想在將儲存的內容放在公共區,需要先宣告公共區的名稱,官方文件管這個名稱叫“keychain access group”,宣告的方法是新建一個plist檔案,名字隨便起,內容如下:“yourAppID.com.yourCompany.whatever”就是你要起的公共區名稱,除了whatever欄位可以隨便定之外,其他的都必須如實填寫。這個檔案的路徑要配置在 Project->build setting->Code Signing Entitlements裡,否則公共區無效,配置好後,須用你正式的證書籤名編譯才可通過,否則xcode會彈框告訴你code signing有問題。所以,蘋果限制了你只能同公司的產品共享KeyChain資料,別的公司訪問不了你公司產品的KeyChain。
二、儲存私密資訊
(一)KeychainItemWrapper
下載地址:http://download.csdn.net/detail/u011439689/6877641
KeychainItemWrapper是apple官方例子“GenericKeychain”裡一個訪問keychain常用操作的封裝類,在官網上下載了GenericKeychain專案後,只需要把“KeychainItemWrapper.h”和“KeychainItemWrapper.m”拷貝到我們專案,並匯入Security.framework 。KeychainItemWrapper的用法: /** 初始化一個儲存使用者帳號的KeychainItemWrapper */ KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"Account Number" accessGroup:@"YOUR_APP_ID_HERE.com.yourcompany.AppIdentifier"];
//儲存帳號 [wrapper setObject:@"<帳號>" forKey:(id)kSecAttrAccount]; //儲存密碼 [wrapper setObject:@"<帳號密碼>" forKey:(id)kSecValueData]; //從keychain裡取出帳號密碼 NSString *password = [wrapper objectForKey:(id)kSecValueData]; //清空設定 [wrapper resetKeychainItem]; 其中方法“- (void)setObject:(id)inObject forKey:(id)key;”裡引數“forKey”的值應該是Security.framework 裡標頭檔案“SecItem.h”裡定義好的key,用其他字串做key程式會崩潰!
(二)SFHFKeychainUtils 提供了在 iOS keychain中安全的儲存密碼的工具