Пожалуйста, внимательно изучите примечания из раздела 8.6. На данном этапе вы уже должны знать, что группа доступа, упоминаемая во всех приведенных примерах, у каждого разработчика будет называться по-своему. Обычно это командный идентификатор, генерируемый на портале Apple для разработки под iOS для каждого разработчика и обеспечивающий доступ к коду для его команды. Необходимо изменить это значение в ваших примерах и убедиться, что оно совпадает именно с вашим командным идентификатором.

Ранее был приведен код приложения, сохраняющего значения в связке ключей, расположенной в облаке iCloud. Теперь остается написать приложение, считывающее эти данные:

#import «AppDelegate.h»

#import 

@implementation AppDelegate

— (BOOL) application:(UIApplication *)application

didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{

NSString *key = @"Full Name";

/* Это не ID пакета того приложения, которое записывало информацию

в связку ключей в iCloud. Это и не ID пакета данного приложения.

Идентификатор пакета данного приложения — com.pixolity.ios.cookbook.SecondSecurityApp*/

NSString *service = @"com.pixolity.ios.cookbook.SecurityApp";

NSString *accessGroup = @"F3FU372W5M.*";

NSDictionary *queryDictionary = @{

(__bridge id)kSecClass: (__bridge id)kSecClassGenericPassword,

(__bridge id)kSecAttrService: service,

(__bridge id)kSecAttrAccessGroup: accessGroup,

(__bridge id)kSecAttrAccount: key,

(__bridge id)kSecReturnData: (__bridge id)kCFBooleanTrue,

(__bridge id)kSecAttrSynchronizable: (__bridge id)kCFBooleanTrue

};

CFDataRef data = NULL;

OSStatus found =

SecItemCopyMatching((__bridge CFDictionaryRef)queryDictionary,

(CFTypeRef *)&data);

if (found == errSecSuccess){

NSString *value = [[NSString alloc]

initWithData:(__bridge_transfer NSData *)data

encoding: NSUTF8StringEncoding];

NSLog(@"Value = %@", value);

} else {

NSLog(@"Failed to read the value with error = %ld", (long)found);

}

self.window = [[UIWindow alloc]

initWithFrame: [[UIScreen mainScreen] bounds]];

self.window.backgroundColor = [UIColor whiteColor];

[self.window makeKeyAndVisible];

return YES;

}

Необходимо отметить еще несколько деталей, связанных с работой со связкой ключей в iCloud.

• В такой связке ключей можно хранить только пароли.

• Связка ключей iCloud работает где угодно — это означает, что она появляется сразу на нескольких устройствах, принадлежащих одному пользователю iCloud. Если вы запишете элемент в связку ключей iCloud, он будет синхронизирован на всех устройствах этого пользователя. Аналогично если вы удалите элемент, то он удалится со всех устройств пользователя, связанных с iCloud. Поэтому в данном случае нужно проявлять особую осторожность.

Также следует отметить, что все остальные приемы, изученные нами в этой главе (например, обновление имеющегося элемента связки ключей — см. раздел 8.4), работают и со связкой ключей, расположенной в iCloud.

<p>См. также</p>

Разделы 8.0 и 8.6.

<p>8.8. Безопасное хранение файлов в песочнице приложения</p><p>Постановка задачи</p>
Перейти на страницу:

Все книги серии Бестселлеры O'Reilly

Похожие книги