1. 程式人生 > >不同App共享KeyChain資料

不同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 = [[KeychainItemWrapperallocinitWithIdentifier:@"_test_write_keychain_"accessGroup:nil];

    id keychaindata = [keyChain objectForKey:(id)kSecAttrAccount];

NSLog(@"first keychaindata :%@, %@, %d"keychaindata, [keychaindata class], [(NSString *)keychaindata length]);


應該也能讀取到@"testwritekeychain"。