Вандад Нахавандипур - iOS. Приемы программирования
8. В разделе App Services (Сервисы приложения) на этой странице нужно обязательно установить флажок Passbook. Так вы откроете в вашем приложении доступ к книге талонов Passbook.
9. Когда сделаете это, нажмите кнопку Continue (Продолжить). На следующем экране, который откроется перед вами (рис. 19.19), вы увидите все значения, которые ввели на предыдущей странице. Просмотрите их еще раз внимательно и, если вас все устроит, нажмите кнопку Submit (Отправить).
Рис. 19.19. Обзор нового идентификатора приложения (App ID) перед интеграцией его с Passbook
10. Теперь, когда вы активизировали использование талонов для данного App ID, создадим профиль инициализации. Перейдите в подраздел Provisioning Profiles (Профили инициализации) раздела iOS Provisioning Profile (Профиль инициализации iOS).
11. Мы собираемся создать профиль инициализации для разработки, а не Ad Hoc (Специальная сборка). Поэтому в подразделе Provisioning (Инициализация) раздела Development (Разработка) нажмите кнопку +.
12. Откроется следующий экран. На нем выберите элемент iOS App Development (Разработка приложения для iOS) и нажмите кнопку Continue (Продолжить).
13. Теперь вам будет предложено выбрать идентификатор приложения (App ID) для вашего профиля. Выберите идентификатор приложения, созданный вами раньше в этом разделе книги, и нажмите кнопку Continue (Продолжить) (рис. 19.20).
Рис. 19.20. Выбор правильного идентификатора приложения для нового профиля инициализации, создаваемого для целей разработки
14. Теперь вы увидите список доступных сертификатов для разработки, которые есть у вас на портале. Выберите один или несколько сертификатов, с которыми хотите ассоциировать ваш профиль. Обычно принято ассоциировать профиль всего с одним сертификатом, но на портале, где трудится много программистов, у каждого из которых есть свой сертификат разработки, бывает необходимо создать такой профиль, который ассоциирован сразу с несколькими сертификатами. Сделав выбор, нажмите кнопку Continue (Продолжить).
15. Далее вы увидите список зарегистрированных устройств. Выберите из него те устройства, которые будут включены в ваш профиль. Сделав это, нажмите кнопку Continue (Продолжить).
16. На следующем экране система запросит у вас указать имя профиля. Дайте ему информативное имя, а затем нажмите кнопку Generate (Сгенерировать).
17. Когда ваш профиль будет сгенерирован, нажмите кнопку Download (Скачать), чтобы загрузить его на ваше устройство (рис. 19.21). После того как загрузка завершится, перетащите этот профиль в iTunes, чтобы установить его на вашем устройстве.
Рис. 19.21. Профиль Passbook готов к скачиванию
Существует несколько способов установки профиля инициализации в операционной системе OS X. Самый лучший и быстрый способ — просто перетащить профиль в iTunes. Профиль также можно установить, воспользовавшись Xcode. Какой бы способ вы ни выбрали, ни в коем случае не делайте двойного щелчка на профиле в ходе его установки. В случае двойного щелчка профиль установится на диске под совершенно невразумительным названием, и позже вам будет очень сложно найти нужный профиль среди множества других. Чтобы не засорять диск, пользуйтесь iTunes или Xcode для установки профилей инициализации. Все профили инициализации, установленные у вас на диске, можно просмотреть в файле ~/Library/MobileDevice/Provisioning Profiles/.
18. Теперь откройте ваш проект в Xcode. На вкладке Build Settings (Настройки сборки) выберите только что созданный профиль инициализации для отладочных сборок (Debug-only). То же самое можно сделать и для специальных сборок (Ad Hoc), но в схеме Release (Релиз) на вкладке Build Settings (Настройки сборки).
19. В Xcode рядом с вкладкой Build Settings (Настройки сборки) выберите Capabilities (Возможности), найдите там элемент Passbook и переведите его виртуальный переключатель в положение On (Включено) (рис. 19.22).
Рис. 19.22. Активизация Passbook в Xcode
20. Как только вы переведете переключатель для Passbook в положение On (Включено), Xcode свяжется с центром разработки и выберет оттуда все доступные для вас идентификаторы типа талона. В списке (рис. 19.23) выберите тот идентификатор типа талона, который вы создали ранее в этом разделе.
Рис. 19.23. Выбор корректного идентификатора типа талона в Xcode.
Вот мы и закончили настройку фреймворка Pass Kit! Осталось написать приложение, которое будет иметь доступ к талонам, расположенным на устройстве. Это приложение будет описано в разделе 19.9.
См. также
Разделы 19.6 и 19.7.
19.9. Взаимодействие с Passbook с помощью программирования
Постановка задачи
Требуется возможность программно взаимодействовать с талонами, установленными на пользовательском устройстве.
Решение
Включите в проект PassKit.framework и воспользуйтесь библиотекой PKPassLibrary, чтобы найти интересующие вас талоны. Талоны относятся к типу PKPass. Используя этот класс, вы сможете получать информацию о талонах.
Обсуждение
Для чтения этого раздела необходимо внимательно проработать раздел 19.8 и подготовить в Xcode проект для iOS, обладающий корректным профилем инициализации. Это нужно для доступа к вашим талонам, расположенным в пользовательской библиотеке Passbook.
Apple предоставила для iOS-разработчиков фреймворк PassKit.framework. Этот фреймворк позволяет взаимодействовать с талонами, которые пользователь установил на своем устройстве (устройствах). Чтобы можно было использовать этот фреймворк с применением новейшего компилятора LLVM, вам всего лишь потребуется импортировать в проект соответствующий обобщающий заголовок, вот так:
#import «AppDelegate.h»
#import <PassKit/PassKit.h>
<# Остаток вашего кода находится здесь #>
Далее потребуется объявить закрытое свойство типа PKPassLibrary в файле реализации делегата нашего приложения. Вышеупомянутый класс из фреймворка PassKit.framework позволяет взаимодействовать с талонами, добавленными на устройство. Для считывания значений, таких как номер платформы, с которой отправляется поезд, и город отправления, вам также нужно знать ключи из файла pass.json, который вы создали в разделе 19.2. Итак, объявим и эти ключи, тоже в файле реализации делегата приложения:
#import «AppDelegate.h»
#import <PassKit/PassKit.h>
@interface AppDelegate ()
@property (nonatomic, strong) PKPassLibrary *passLibrary;
@end
NSString *PassIdentifier = @"pass.pixolity.testingpasskit";
NSString *PassSerialNumber = @"p69f2J";
NSString *DepartureKey = @"departure";
NSString *DeparturePlatformKey = @"departurePlatform";
NSString *Arrival = @"arrival";
NSString *ArrivalPlatform = @"arrivalPlatform";
@implementation AppDelegate
<# Остаток вашего кода находится здесь #>
Великолепно! Написав этот код, вы теоретически получаете возможность доступа к библиотеке Passbook, расположенной на устройстве. Но погодите: а что делать, если на устройстве не установлена эта библиотека? Сначала нужно проверить, имеется ли библиотека Passbook на устройстве. Для этого используется метод класса isPassLibraryAvailable, относящийся к классу PKPassLibrary.
Далее нужно инстанцировать свойство passLibrary типа PKPassLibrary, а потом воспользоваться относящимся к библиотеке талонов методом экземпляра passWithPassTypeIdentifier: serialNumber:, чтобы найти искомый талон. Вот теперь понятно, почему среди различных ключей, относящихся к талону, мы, в частности, определяли идентификатор талона и его серийный номер. Вышеупомянутый метод вернет объект типа PKPass, который будет соответствовать вашему талону. Имея объект талона, вы можете считывать значения его ключей различными способами.
Ключи, задаваемые по умолчанию, в частности название организации и серийный номер, отображаются на свойства. Apple делает это за вас в классе PKPass. Однако если вы хотите получить доступ к значениям внутри primaryFields или в других подобных местах, то потребуется воспользоваться методом экземпляра localizedValueForFieldKey:, относящимся к классу PKPass. Мы сообщаем этому методу наши ключи, чтобы получить значения, ассоциированные с этими ключами. Далее показан небольшой фрагмент кода, позволяющий узнать информацию из талона, созданного в разделе 19.2: начальную и конечную точки маршрута, а также соответствующие железнодорожные платформы.
Код взят из файла реализации делегата нашего приложения.
#import «AppDelegate.h»
#import <PassKit/PassKit.h>
@interface AppDelegate ()
@property (nonatomic, strong) PKPassLibrary *passLibrary;
@end
NSString *PassIdentifier = @"pass.pixolity.testingpasskit";