不同App共享KeyChain資料
1、新建兩個工程,TestWriteKeyChain和TestReadKeyChain; (新增Security.framework庫,讀取keychain要用到).然後新增蘋果官方的KeychainItemWrapper.h和KeychainItemWrapper.m檔案用於訪問keychain。
2、更改兩個工程的.plist檔案的Bundle identifier分別為 com.companyname.app.TestWriteKeyChain和 com.companyname.app.TestReadKeyChain;
3、更改兩個工程的Entitlements。在兩個工程的Entitlements的Keychain Access Groups 新增上面兩個Bundle identifier;如下圖:
5、在TestWriteKeyChain工程中的
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 函式中新增下面的程式碼:
KeychainItemWrapper *keyChain = [[KeychainItemWrapperalloc] initWithIdentifier:@"_test_write_keychain_"accessGroup:nil];//注意accessGroup為nil,
//第一次讀取,因為之前沒設定,keychaindata應該為nil
id keychaindata = [keyChain objectForKey:(id)kSecAttrAccount];
NSLog(@"first keychaindata :%@, %@, %d",keychaindata, [keychaindataclass], [(NSString *)keychaindatalength]);
//向keychain寫入相應資料,這裡我們寫一個字串@"testwritekeychain"
[keyChain setObject:@"testwritekeychain" forKey:(id)kSecAttrAccount];
//第二次讀取,因為之前沒設定,keychaindata應該為@"testwritekeychain"
keychaindata = [keyChain objectForKey:(id)kSecAttrAccount];
NSLog(@"second keychaindata :%@, %@, %d",keychaindata, [keychaindata class], [(NSString *)keychaindata length]);
執行TestWriteKeyChain後,在TestReadKeyChain中的- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 函式中新增下面的程式碼:
KeychainItemWrapper *keyChain = [[KeychainItemWrapperalloc] initWithIdentifier:@"_test_write_keychain_"accessGroup:nil];
id keychaindata = [keyChain objectForKey:(id)kSecAttrAccount];
NSLog(@"first keychaindata :%@, %@, %d", keychaindata, [keychaindata class], [(NSString *)keychaindata length]);
應該也能讀取到@"testwritekeychain"。