Чтение онлайн

на главную - закладки

Жанры

iOS. Приемы программирования

Нахавандипур Вандад

Шрифт:

(__bridge id)kSecAttrAccount: key

};

OSStatus foundExisting =

SecItemCopyMatching((__bridge CFDictionaryRef)query, NULL);

if (foundExisting == errSecSuccess){

OSStatus deleted = SecItemDelete((__bridge CFDictionaryRef)query);

if (deleted == errSecSuccess){

NSLog(@"Successfully deleted the item");

} else {

NSLog(@"Failed to delete the item.");

}

} else {

NSLog(@"Did not find the existing value.");

}

self.window = [[UIWindow alloc]

initWithFrame: [[UIScreen mainScreen] bounds]];

self.window.backgroundColor = [UIColor whiteColor];

[self.window makeKeyAndVisible];

return YES;

}

После

запуска этой программы (предполагается, что вы выполнили все инструкции из раздела 8.2) вы должны увидеть на консоли NSLog, соответствующий успешному удалению. В противном случае вы в любой момент можете считать значение функции SecItemDelete и узнать, почему возникла проблема.

См. также

Раздел 8.2.

8.6. Совместное использование данных из связки ключей в нескольких приложениях

Постановка задачи

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

Решение

Сохраняя данные вашей связки ключей, укажите ключ kSecAttrAccessGroup в словаре, передаваемом функции SecItemAdd. Значением этого ключа должна быть группа доступа, которую вы найдете в разделе Entitlements (Разрешения) вашего профиля инициализации. Об этом мы говорили во введении к данной главе.

Обсуждение

Несколько приложений с одного и того же портала разработки могут совместно использовать область связки ключей. Чтобы не усложнять этот пример, в данном разделе рассмотрим взаимодействие всего двух приложений, но описанные методы применимы для любого количества программ.

Чтобы два приложения могли совместно использовать область связки ключей, должны выполняться следующие требования.

1. Оба приложения должны быть подписаны с помощью профиля инициализации, взятого с одного и того же портала для разработки под iOS.

2. Оба приложения должны иметь в своем профиле инициализации один и тот же групповой идентификатор (Group ID). Обычно это идентификатор команды (Team ID), выбираемый Apple. Рекомендую не менять этот групповой идентификатор при создании собственных профилей инициализации.

3. Первое приложение, сохраняющее значение в связке ключей, должно задавать для сохраняемого элемента связки ключей

атрибут kSecAttrAccessGroup. Эта группа доступа должна совпадать с той, которая указана в вашем профиле инициализации. Прочитайте во введении к этой главе, как извлекать это значение из ваших профилей инициализации.

4. Значение, сохраненное в связке ключей, должно быть сохранено с таким атрибутом kSecAttrService, значение которого известно обоим взаимодействующим приложениям. Обычно это идентификатор пакета того приложения, которое сохранило значение в связке ключей. Если вы сами написали оба приложения, то знаете этот идентификатор пакета. Таким образом, в другом вашем приложении можете считать это значение, предоставив идентификатор пакета первого приложения вышеупомянутому ключу.

5. Оба приложения должны обладать идентификацией подписи кода. Это файл настроек. plist, содержимое которого в точности совпадает с информацией из секции Entitlements (Разрешения) вашего профиля инициализации. Затем потребуется указать путь к этому файлу в разделе Code Signing Entitlements (Разрешения для подписи кода) в настройках сборки. Вскоре мы обсудим этот вопрос подробнее.

6. Хотя приложение и подписано профилями инициализации, в которых указаны разрешения (подробнее об этом говорится во введении к данной главе), вам все равно потребуется явно сообщить Xcode об этих разрешениях. Вся информация о разрешениях — это обычный файл. plist, содержимое которого очень напоминает тот файл разрешений, вывод которого я продемонстрировал во введении к этой главе.

<plist version="1.0">

<dict>

<key>application-identifier</key>

<string>F3FU372W5M.com.pixolity.ios.cookbook.SecondSecurityApp</string>

<key>com.apple.developer.default-data-protection</key>

<string>NSFileProtectionComplete</string>

<key>get-task-allow</key>

<true/>

<key>keychain-access-groups</key>

<array>

<string>F3FU372W5M.*</string>

</array>

</dict>

</plist>

Обратите внимание на ключ keychain-access-groups. Значение этого ключа указывает группу связки ключей, к которой имеет доступ данное приложение, а именно: F3FU372W5M.*. Вам потребуется найти в разделе «Разрешения» свою группу доступа к связке ключей и использовать ее в примерах кода в данном разделе. Мы напишем два приложения. Первое будет заносить в связку ключей информацию, касающуюся группы доступа к связке ключей, а второе будет считывать эту информацию. Приложения будут иметь разные идентификаторы пакетов и, в принципе, будут двумя совершенно разными программами. Однако они смогут совместно использовать определенную область в связке ключей.

Поделиться:
Популярные книги

Тишина

Бондарев Юрий Васильевич
Проза:
современная проза
8.40
рейтинг книги
Тишина

Сержант. Назад в СССР. Книга 4

Гаусс Максим
4. Второй шанс
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Сержант. Назад в СССР. Книга 4

Гримуар темного лорда V

Грехов Тимофей
5. Гримуар темного лорда
Фантастика:
попаданцы
аниме
фэнтези
5.50
рейтинг книги
Гримуар темного лорда V

Неизвестная война. Тайная история США

Бушков Александр Александрович
Научно-образовательная:
история
5.50
рейтинг книги
Неизвестная война. Тайная история США

Демон Власти

Ильин Михаил Ильич
Документальная литература:
публицистика
6.25
рейтинг книги
Демон Власти

Любовь и магия (сборник)

Гаврилова Анна Сергеевна
Колдовские миры
Фантастика:
фэнтези
мистика
8.38
рейтинг книги
Любовь и магия (сборник)

Том 9. По экватору. Таинственный незнакомец

Твен Марк
Проза:
классическая проза
6.25
рейтинг книги
Том 9. По экватору. Таинственный незнакомец

"Кроваво-Красная" Армия. По чьей вине?

Бешанов Владимир Васильевич
Научно-образовательная:
история
6.67
рейтинг книги
Кроваво-Красная Армия. По чьей вине?

О природе вещей

Старинная литература:
античная литература
5.00
рейтинг книги
О природе вещей

Минни шопоголик

Кинселла Софи
6. Шопоголик
Юмор:
юмористическая проза
8.81
рейтинг книги
Минни шопоголик

Загадка Катилины

Сейлор Стивен
3. Roma sub Rosa
Проза:
историческая проза
5.00
рейтинг книги
Загадка Катилины

Секс в кино и литературе

Бейлькин Михаил Меерович
Научно-образовательная:
психология
6.00
рейтинг книги
Секс в кино и литературе

Лейтенант. Назад в СССР. Книга 8. Часть 1

Гаусс Максим
8. Второй шанс
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Лейтенант. Назад в СССР. Книга 8. Часть 1

Вихрь

Уилсон Роберт Чарльз
3. Спин
Фантастика:
научная фантастика
7.33
рейтинг книги
Вихрь