iOS. Приемы программирования Нахавандипур Вандад

}

А теперь начинается самое интересное. Нужно рассчитывать SHA1-хеши всех этих файлов. Учтите, что теперь при каждом изменении файлов (например, вы нашли ошибку в файле pass.json и исправили ее) потребуется также пересчитывать SHA1-хеш и записывать новое значение этого хеша в файле manifest.json. Чтобы рассчитать значение SHA1-хеша для любого файла в операционной системе OS X, просто выполните следующие шаги.

1. Откройте окно терминала и перейдите в каталог, где находится целевой файл (для этого используется команда cd).

2. Выполните в окне терминала команду openssl. В качестве ее первого аргумента сообщите sha1, в качестве второго — имя файла.

Например, в каталоге с моим проектом есть подкаталог pass. В этот каталог я поместил мой файл pass.json, полупустой файл manifest.json, а также все изображения для талона (фоновое изображение, логотип и т. д.). Теперь в окне терминала я рассчитаю значения SHA1-хешей для всех этих файлов и запишу полученные значения в файл описания. Итак, в первой строке следующего листинга идет команда openssl, а все остальные строки — это значения хешей, полученные в качестве вывода:

openssl sha1 *.png *.json

SHA1([email protected])= e2aaf36f4037b2a4008240dc2d13652aad6a15bb

SHA1(background.png)= b21a92dedb89f8b731adabc299b054907de2347d

SHA1([email protected])= 6abab0f77fd89f1a213940fd5c36792b4cc6b264

SHA1(icon.png)= ed698ab24c5bd7f0e7496b2897ec054bbd4 26747

SHA1([email protected])= 90381c84cfea22136c951ddb3b368ade71f49eef

SHA1(logo.png)= c3bd8c5533b6c9f500bbadbdd957b9eac8a6bfe9

SHA1([email protected])= 1a56a5564dec5e8742ad65dc47aa9bd64c39222f

SHA1(thumbnail.png)= 58883d22196eb73f33ea556a4b7ea735f90a6213

SHA1([email protected])= 0903df90165ef1a8909a15b4f652132c273 68560

SHA1(manifest.json)= 894f795b991681de8b12101afb8c2984bf8d0f65

SHA1(pass.json)= c5acddbab742f488867c34882c55ca14efff0de9

Мы рассчитали SHA1-хеши всех файлов, в том числе хеш manifest.json. Однако SHA1-хеш файла manifest.json нам не понадобится, так как он содержит хеши всех остальных файлов, а своего собственного хеша не имеет. Поэтому мы просто игнорируем хеш файла manifest.json.

Итак, теперь требуется заполнить файл manifest.json значениями SHA1 всех остальных файлов — эти хеши мы только что рассчитали:

{

«background.png»: «b21a92dedb89f8b731adabc299b054907de2347d»,

«[email protected]»: «6abab0f77fd89f1a213940fd5c36792b4cc6b264»,

«[email protected]»: «e2aaf36f4037b2a4008240dc2d13652aad6a15bb»,

«icon.png»: «ed698ab24c5bd7f0e7496b2897ec054bbd4 26747»,

«[email protected]»: «90381c84cfea22136c951ddb3b368ade71f49eef»,

«logo.png»: «c3bd8c5533b6c9f500bbadbdd957b9eac8a6bfe9»,

«[email protected]»: «1a56a5564dec5e8742ad65dc47aa9bd64c39222f»,

«pass.json»: «c5acddbab742f488867c34882c55ca14efff0de9»,

«thumbnail.png»: «58883d22196eb73f33ea556a4b7ea735f90a6213»,

«[email protected]»: «0903df90165ef1a8909a15b4f652132c273 68560»

}

Пока все понятно. Переходим к следующему этапу: нам нужно снабдить талон цифровой подписью.

См. также

Раздел 19.1.

19.5. Цифровое подписывание талонов

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

Вы подготовили каталог pass с файлом описания и файлом pass.json, а также все изображения. Теперь вы хотите снабдить цифровой подписью каталог с талоном и его содержимое. Это требуется для создания файла талона, готового к распространению.

Решение

Для подписывания талонов используйте OpenSSL.

Обсуждение

Каждый талон требуется подписывать с помощью сертификата, созданного в разделе 19.1. Для подписывания талонов мы вновь будем использовать команду openssl в окне терминала. Перед тем как читать дальше, убедитесь в том, что создали каталог pass и поместили в него файлы pass.json, manifest.json и все изображения. Этот каталог не обязательно должен называться pass. Тем не менее, чтобы было удобнее читать этот раздел и оставшиеся разделы этой главы, лучше не импровизировать и назвать этот каталог с файлами именно pass.

Некоторые читатели могли запутаться в том, куда относятся некоторые ключи и для чего нужны те или иные сертификаты. Надеюсь, в этом разделе ситуация прояснится. Когда вы запрашиваете новый сертификат на портале инициализации iOS, в связке ключей на вашем компьютере создается закрытый ключ, а также файл запроса на подпись сертификата (CSR). Сертификат будет сгенерирован Apple. Когда вы скачаете файл сертификата, он будет иметь расширение. cer. Это просто сертификат! Когда вы импортируете его в связку ключей, результирующий файл будет иметь расширение. p12. В этом файле будут содержаться и сертификат, и закрытый ключ к нему.

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

1. Откройте на Mac программу для доступа к связке ключей (Keychain Access).

2. В левой верхней части окна в области Keychains (Связки ключей) убедитесь, что вы выбрали связку ключей для входа в систему (Login Keychain).

3. В области Category (Категория) слева выберите My Certificates (Мои сертификаты).

4. Найдите ваш сертификат для идентификатора типа талона в правой части экрана и щелкните на нем правой кнопкой мыши.

5. Теперь выберите функцию Export (Экспортировать) (рис. 19.14) и завершите экспорт вашего файла на диск в виде файла. p12. Не сохраняйте сертификат в каталоге pass. Сертификат должен находиться вне этого каталога.

Рис. 19.14. Экспорт сертификата идентификатора типа талона из программы Keychain Access

6. После того как вы попытаетесь экспортировать свой сертификат, система запросит у вас два пароля: пароль, который требуется задать для сертификата, и пароль вашей учетной записи пользователя в OS X — это должен быть пользователь, владеющий доступом к связке ключей. Первый пароль, сопровождающий сертификат, гарантирует, что без этого пароля сертификат нельзя будет импортировать на произвольную машину. Второй пароль удостоверяет, что человек, импортирующий сертификат из связки ключей, действительно имеет на это право. Например, если вы отойдете от компьютера, оставив его незаблокированным, а ваш приятель попытается экспортировать сертификат из вашей связки ключей, для этого ему придется указать пароль вашей учетной записи. В любом случае рекомендуется гарантировать, что у разных учетных записей в одной системе разные пароли. Например, если вы с братом работаете на одном и том же Mac, то ваш пароль должен быть уникальным именно для вашей учетной записи. Если пароль у вас будет одинаковым, это поставит под сомнение всю систему безопасности вашего компьютера.

Убедитесь, что не сохраняете сертификат в каталоге pass. Нельзя рассылать сертификат вместе с талоном.

Итак, вы экспортировали сертификат. У вас должен был получиться файл, который, возможно, называется Certificates.p12. Теперь нужно разделить этот файл на сертификат как таковой и закрытый ключ. Однако если вы подписываете талон с помощью OpenSSL, то вам приходится передавать сертификат и закрытый ключ по отдельности. Чтобы получить из файла Certificates.p12 закрытый ключ и сертификат (этот файл мы только что экспортировали из программы Keychain Access), выполните следующее.

1. Откройте окно терминала, если еще не сделали этого.

2. Перейдите в каталог, в котором вы сохранили экспортированный сертификат (файл. p12).

3. Чтобы получить сертификат, введите в окне терминала следующую команду:

openssl pkcs12 — in «Certificates.p12» — clcerts — nokeys \

— out «exported-certificate»

После того как вы введете эту команду, система сразу же потребует у вас присвоить экспортированному сертификату пароль. В этом примере я задаю пароль 123, но вы придумайте пароль получше.

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

openssl pkcs12 — in «NAME OF YOUR.P12 CERTIFICATE FILE» \

— nocerts — out «NAME OF THE OUTPUT KEY»

Я назвал экспортированный закрытый ключ exported-key, но вы можете назвать его и иначе, если желаете:

openssl pkcs12 — in «Certificates.p12» — nocerts — out «exported-key»

От вас вновь потребуется ввести пароли для ключа. Для моего ключа я указал пароль 1234, чтобы его можно было легко запомнить. Такой же пароль я задал для сертификата. Но если вы работаете в организации, где безопасности уделяется должное внимание, такой пароль вам, разумеется, не подойдет. Выберите пароль, который кажется вам осмысленным. Для максимальной защиты необходимо гарантировать, что все пароли для экспортируемых вами сертификатов/ключей являются уникальными.

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

1. Если вы еще не сделали этого, поместите все файлы, относящиеся к талону (pass.json, manifest.json и все соответствующие изображения), в каталог pass. Вы можете назвать этот каталог как хотите, но в рамках этого раздела рекомендую давать создаваемым каталогам такие же названия, какие даю я. Так нам будет проще ориентироваться, в каком каталоге мы находимся и что делаем в окне терминала.

2. Воспользуйтесь командой cd, чтобы перейти из текущего рабочего каталога в каталог pass, где находятся все интересующие нас файлы талона.

3. Выполните команду rm — f.DS_Store, чтобы убедиться, что в каталоге pass отсутствуют ненужные скрытые системные файлы OS X. Вы также должны проверить, перечислены ли все файлы из этого каталога в файле manifest.json, где наряду с самими файлами должны находиться и их SHA1-хеши. Если в этот каталог просочатся какие-то другие файлы (как перечисленные в файле описания, так и не указанные там), то талон получится недействительным. Его не удастся прочитать в приложении Passbook ни на устройстве с iOS, ни на симуляторе.

4. Выполните в окне терминала следующую команду, чтобы сгенерировать в каталоге pass файл signature:

openssl smime — binary — sign — signer «PATH TO YOUR EXPORTED CERTIFICATE» \

— inkey «PATH TO YOUR EXPORTED PRIVATE KEY» — in manifest.json \

— out signature — outform DER

Эта команда должна выполняться в каталоге pass, где находятся все ваши ресурсы, связанные с талоном. Экспортированный сертификат и закрытый ключ — это тот сертификат и тот ключ, которые были извлечены из сертификата, экспортированного из связки ключей. Не указывайте в этой команде сертификат в том виде, в каком он был экспортирован из связки ключей. Ранее мы уже рассмотрели, как извлекать реальный сертификат и закрытый ключ из файла. p12, экспортированного из связки ключей. Можете перечитать этот фрагмент раздела, чтобы проверить, все ли вы делаете правильно.

На последнем этапе система запросит у вас пароль к закрытому ключу. Помните его? Вы задавали этот пароль, когда извлекали закрытый ключ из сертификата, экспортированного из связки ключей. Теперь эта команда создаст файл signature в каталоге pass. Почти все готово. Остается заархивировать подготовленный каталог в виде файла с расширением. pkpass. Для этого выполните следующие шаги.

1. Откройте окно терминала и с помощью команды cd перейдите в каталог pass.

2. Чтобы запаковать ваш каталог pass в файл pass.pkpass, выполните в текущем каталоге следующую команду:

zip — r pass.pkpass. -x '.DS_Store'

В результате все файлы талона будут упакованы в архив pass.pkpass. Вновь необходимо убедиться в том, что в готовом архиве не будет файла. DS_Store.

См. также

Разделы 19.1 и 19.4.

19.6. Распространение талонов по электронной почте

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

Требуется рассылать талоны с цифровой подписью клиентам по электронной почте.

Решение

Посылайте талоны по электронной почте в виде прикрепленных файлов.

Обсуждение

Талон, который вы подписали и упаковали в разделе 19.5, готов к распространению. Один из простейших способов распространения талонов — по электронной почте. Выполните следующие шаги, чтобы рассылать ваши талоны с помощью приложения Mail.app из операционной системы OS X.

1. Откройте приложение Mail.app в операционной системе OS X. В меню File (Файл) выберите пункт New Message (Новое сообщение).

2. Введите адрес электронной почты того клиента, которому хотите послать талон.

3. Введите заголовок электронного сообщения.

4. Введите текст электронного сообщения. После этого просто перетащите файл pass.pkpass, подготовленный в разделе 19.5, в конец вашего электронного сообщения (рис. 19.15).

Рис. 19.15. Распространение талонов с цифровой подписью с помощью приложения Mail.app операционной системы OS X

5. Отправьте электронное письмо.

В операционной системе OS X Mavericks у пользователей появилась возможность просматривать талоны прямо в приложении Mail.app. Поскольку программа Passbook интегрирована с облаком iCloud, теперь вы можете нажать на сенсорном экране на талон, прикрепленный к электронному письму, и отправить его прямо на ваше устройство (устройства) с iOS. Для этого на мобильном устройстве должна быть установлена программа Passbook, а также активизирована связь с iCloud — это делается в соответствующем разделе настроек (рис. 19.16).

Рис. 19.16. В операционной системе OS X Mavericks талоны отображаются прямо в приложении Mail.app

Теперь, работая с сенсорным экраном, пользователь может нажать пальцем на талон, прикрепленный к письму. В результате откроется приложение Passbook, в интерфейсе которого талон отобразится, и пользователь сможет добавить его в Passbook.

См. также

Раздел 19.7.

19.7. Распространение талонов с помощью веб-сервисов

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

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

Решение

На своих веб-страницах создавайте гиперссылки на талоны. pkpass. Когда пользователь будет просматривать веб-страницы на устройстве, он может просто нажать на сенсорном экране заинтересовавшую его ссылку. Когда он это сделает, браузер Safari обнаружит, что ссылка указывает на файл. pkpass, и передаст этот файл в Passbook. В результате талон будет отображаться на сайте, а пользователи смогут добавлять талоны в приложения Passbook.

Обсуждение

Браузер Safari в операционной системе iOS не может непосредственно обрабатывать загрузку файлов талонов в формате. pkpass. Чтобы реализовать такую возможность, необходимо создавать веб-страницы и включать в них гиперссылки, указывающие на файлы. pkpass. Простой код на языке HTML, доставляющий пользователю файл pass.pkpass, приведен далее:

<html>

<header>

<h2>Passbook Site</h2>

</header>

<body>

<a href="http://localhost:8888/pass.pkpass">Download your pass here</a>

</body>

</html>

Ссылка указана здесь как localhost, так как в моей операционной системе OS X установлен и работает веб-сервер Apache. Вместо localhost вам понадобится дать такую ссылку, которая будет корректна в вашей среде разработки.

Теперь, когда пользователь откроет ссылку на своем устройстве в браузере Safari, он увидит примерно такую картинку, как на рис. 19.17.

Рис. 19.17. Просмотр сайта в браузере Safari на симуляторе iOS

Когда пользователь нажмет на ссылку, перед ним на экране откроется знакомый графический интерфейс Passbook. Пользователь сможет добавить полученный талон в Passbook.

См. также

Раздел 19.6.

19.8. Настройка возможности доступа к талонам в приложениях, работающих на устройстве с операционной системой iOS

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

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

Решение

Создайте соответствующий профиль инициализации для вашего приложения. Он должен быть связан с ID приложения. Это приложение должно обладать доступом на работу с талонами.

Обсуждение

Необходимо подписывать приложения соответствующим профилем инициализации, который создан на том же портале, что и ID типа талона. Это требуется для того, чтобы вы могли считывать собственные талоны из приложения Passbook, установленного на пользовательском устройстве. Процесс проиллюстрирован на рис. 19.18.

Рис. 19.18. Процесс обеспечения доступа к талонам в приложении для iOS на устройстве с iOS

Итак, начнем! Предполагается, что на данном этапе у вас уже есть сертификат на разработку/распространение. Создадим идентификатор App ID для идентификатора типа талона (Pass Type ID), подготовленного нами в разделе 19.1. После этого займемся созданием соответствующего профиля инициализации для App ID. Сделайте вот что.

1. Перейдите в центр разработки для iOS (iOS Dev Center) в вашем браузере и зайдите на этот сайт под своим именем, если еще не сделали этого.

2. Перейдите в раздел Certificates, Identifiers & Profiles (Сертификаты, идентификаторы, профили).

3. Далее перейдите в раздел Identifiers (Идентификаторы), а затем в раздел App ID (Идентификатор приложения) и там нажмите экранную кнопку с символом +.

4. В поле Description (Описание) опишите ID вашего приложения. Эти сведения должны быть информативными для вас, вашей команды и организации.

5. В качестве значения Bundle Seed ID (Префикс идентификатора) укажите Use Team ID (Использовать ID команды).

6. В разделе Bundle Identifier (Идентификатор пакета) (суффикс App ID) укажите идентификатор пакета, записанный в стиле обратного доменного имени. В моем случае при работе с талоном, имеющим ID pass.pixolity.testingpasskit, идентификатор пакета App ID будет записываться как com.pixolity.testingpasskit.

7. Убедитесь, что установлен флажок Explicit App ID (Явный идентификатор приложения), и полностью введите в стиле обратного доменного имени идентификатор пакета приложения, который вы хотите создать. Я задал здесь значение com.pixolity.ios.cookbook.testingpasses, а мой идентификатор типа талона (Pass Type ID) ранее был задан как pass.pixolity.ios.cookbook.testingpasses. Идентификатор типа талона может и не совпадать с идентификатором пакета, но если такое совпадение соблюдается, то в будущем вам будет гораздо проще находить нужный идентификатор типа талона, если уже известен идентификатор приложения.

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";

NSString *PassSerialNumber = @"p69f2J";

NSString *DepartureKey = @"departure";

NSString *DeparturePlatformKey = @"departurePlatform";

NSString *Arrival = @"arrival";

NSString *ArrivalPlatform = @"arrivalPlatform";

@implementation AppDelegate

— (void) displayPassInformation:(PKPass *)paramPass{

if (paramPass == nil){

Страницы: «« ... 7374757677787980 »»

Читать бесплатно другие книги:

Рассмотрены основы информатики и описаны современные аппаратные средства персонального компьютера. С...
Молодые парни из экстремистской организации «Русский трибунал» объявили партизанскую войну «предател...
Покончив с несчастливым браком, Грейс решила, что больше никогда не доверится мужчине и не поставит ...
Лиз Сазерленд только мечтала о том, чтобы черная полоса ее жизни когда-нибудь сменилась белой. Пробл...
В старину ставили храмы на полях сражений в память о героях и мучениках, отдавших за Родину жизнь. Н...
В учебном пособии представлены вариативные авторские методики воспитания и развития волевых качеств ...