- Что собой представляет лицензирование mfi
- Почему рекомендуют покупать mfi-сертифицированные аксессуары
- Что мы будем разбирать?
- Что нам понадобится?
- Apple, боль и сертификаты
- Intermediate certificates
- Архивные сертификаты по общим критериям для ios
- Вкратце об itunes connect
- Идентификаторы (identifiers)
- Как узнать, сертифицирован ли аксессуар по программе mfi
- Кратко о главном
- Ориентировка по разделам
- Профили (provisioning profiles)
- Профили типа «development»
- Профили типа «distribution»
- Резюмируем
- Сертификаты (certificates)
- Сертификаты fips 140-2
- Сертификаты fips 140-3
- Сертификаты типа «development»
- Сертификаты типа «production»
- Терминология
- Устройства (devices)
- Выводы
Что собой представляет лицензирование mfi
Еще в далеком 2005 году яблочная корпорация официально разрешила подключать к своей технике аксессуары сторонних производителей. Вместе с этим Apple внедрила программу сертификации под названием MFi, что расшифровывается как Made For iPhone/iPod/iPad (изготовлено для i-устройства).
Идея заключается в том, что при условии успешной сертификации производители получают возможность работать с компанией в качестве авторизованных партнеров. Аpple от своего имени гарантирует, что MFI-сертифицированные аксессуары будут корректно работать с техникой и не будут отвергнуты операционкой iOS.
Подать заявку на сайт могут любые юридические лица, в том числе фирмы-производители, государственные учреждения и образовательные организации. Дело в том, что Apple предлагает участие в программе не только производителям, но и разработчикам совместимых продуктов, которые проектируют электронное оборудование, но сами его не выпускают.
Нужно отметить, что разрешение по программе MFI требуется только для аксессуаров, которые используют одну из лицензируемых технологий цифрового подключения к устройствам Apple. Компания приводит перечень таких технологий и компонентов.
Технологии: AirPlay audio | Компоненты: Authentication coprocessors |
Это могут быть зарядные кабели, повербанки, переходники, наушники, динамики, игровые контроллеры, а также совместимые с товарами Apple игрушки, медицинские приборы, принтеры, бытовая техника, элементы умного дома, печатные платы, автомобильные устройства, накопители информации, GPS-трекеры.
Не нужно искать маркировку MFI на товарах, которые используют только стандартные профили Bluetooth или аналоговое подключение — сертификация для них не предусмотрена. Также не сертифицируют неэлектронные компоненты и аксессуары с очень низким электропотреблением. В перечень таких товаров входят обычные чехлы для смартфонов (без встроенной батареи), аналоговые игровые приставки, стилусы, некоторые умные часы.
Соискатели яблочной лицензии должны предоставить техническую документацию и образцы продукции для проведения лабораторного тестирования, а также подтвердить соблюдение высоких стандартов производства.
Участники программы признаются, что все эти испытания «чрезвычайно требовательны и многочисленны». В сертификационных центрах проверяется совместимость устройств и возможность корректного управления, тестируется скорость передачи данных, замеряются токи и текущий нагрев, определяется безопасность комплектующих для человека и общая долговечность.
Когда «таможня дает добро», производителю предоставляется право пропечатать на упаковке своего изделия значок о прохождении сертификации MFI. Параллельно с этим он получает доступ к использованию фирменного разъема Lightning с идентифицирующим чипом, а также к корпоративным протоколам передачи данных и различным видам технической поддержки Apple. Лицензиата вносят в специальный реестр участников программы сертификации.
По факту маркировку MFI можно рассматривать как некий общепринятый знак качества, поэтому многие фирмы стремятся его оформить.
Мало просто доказать, что, например, Lightning-кабель достаточно качественный. Сторонние производители должны платить роялти за использование запатентованных решений. По слухам, за каждое использование яблочного восьмиконтактного разъема Lightning следует отчислять Apple по 4 доллара. Естественно, это сказывается на итоговой цене изделия.
Почему рекомендуют покупать mfi-сертифицированные аксессуары
Ситуация такова: оригинальный метровый кабель Lightning стоит 1820 рублей. Он хороший, но не вечный. Его придется когда-то менять. И вот тут, желая немного сэкономить, важно не нарваться на откровенную подделку, которая в лучшем случае не будет нормально работать с вашим устройством, а в худшем — может вывести его из строя.
Если говорить о кабелях, то из-за некачественного разъема довольно часто гнездо в устройствах iOS получает механические повреждения или даже оплавляется. Иногда несертифицированные кабели слишком сильно перегреваются, а из-за переламывания слабой изоляции случаются замыкания. Хорошо, если некачественные аксессуары погибнут быстро, не успев навредить вашему айфону.
Компания Apple в специальной инструкции «Выявление поддельных и несертифицированных аксессуаров с разъемом lightning» информирует пользователей о риске применения несертифицированных и поддельных аксессуаров. Там же приводятся различные критерии определения контрафакта и наглядные сравнительные фотографии.
Иногда пользователи яблочных девайсов сталкиваются с ситуацией, когда подключенный кабель не подает признаков жизни. На экране может появиться характерное сообщение о том, что данный аксессуар не поддерживается (впрочем, сообщение о некорректной работе периодически ошибочно высвечивается даже при использовании оригинального кабеля Lightning).
Это хорошо. Значит, производитель подделки не стал заморачиваться даже с обходом чипа аутентификации и устройство сразу опознало опасное подключение. Похожая картина может случиться, если поддельный кабель сначала работал (аутентификацию обошли), но был «окирпичен» после обновления системы.
Что мы будем разбирать?
Мы разберем процесс управления вашим приложением в Apple Developer Center от его создания до публикации в магазине App Store. Мы будем говорить только о базовых вещах, таких, как разработка, тестирование и публикация, а также обсудим APNs (Push Notifications).
Отмечу тот факт, что далее я буду описывать принцип работы девцентра по состоянию на 31 марта 2021 года, поэтому если вы читаете эту статью позднее — все уже могло измениться.
Что нам понадобится?
Собственно, для работы нам нужно следующее:
Apple, боль и сертификаты
Знакомьтесь, Боб — матёрый ios разработчик, Алиса — не менее матёрая тестировщица. Дело было вечером дело было в пятницу. Боб дофиксил багу, вроде бы протестил на своих девайсах. Затем Боб запускает уже отточенные до автоматизма команды:
git checkout develop
git merge bug_fix_#999
git checkout master && git merge develop --no-ff ....
git push ....
На пуш на сервере срабатывает jenkins/teamcity/travis, который запускает билд. В это же самое время наш Боб пишет Алисе, что скоро пойдет домой, и хочет, чтобы аппа ушла сегодня в app store на апрув, дабы выиграть лишние пару дней, так как на носу выходные, если, конечно, приложение пройдет ручное тестирование Алисы.
Приложение Боба довольно обычное: пару сотен компилируемых класс файлов, еще с десяток cocoapods зависимостей ну и кучка сторибордов — Боб ценит своё время и время коллег поэтому не пишет UI в коде. Боб знает, что его приложение с чистого старта на сервере собирается за 4 минуты для develop версии, которое идет на тест Алисе, и столько же или чуть больше для production версии. Боб также знает, что ему нужно около 10 минут, чтобы дождаться окончания полной сборки и затем сообщить Алисе, что она может приступать к тестированию. Боб человек ответственный, поэтому по истечении 10 минут после пуша проверяет статус билда, так как знает, что сервер — это отдельный параллельный мир со своими правилами, законами и странностями.
Пятница, вечер, Боба отделяет от долгожданных выходных только 10 минут, после которых передаст эстафету Алисе. Боб вбивает в сафари bobcompany.ci/dashboard, где видит красную лампочку напротив своего приложения, глаза Боба потускнели, разочарованию не было предела. Боб жмет на show more, где его встречает ошибка:
Code Sign error: No codesigning identities found: No codesigning identities (i.e. certificate and private key pairs) that match the provisioning profile specified in your build settings (“com.company.bob”) were found.
Тут нервы Боба совсем сдают:

*Кратко об ошибке, она проявляется, когда мы пытаемся подписать приложение несуществующим сертификатом, под несуществующим понимается или он не установлен на машине, или он устарел и mobileprovision заведен на более свежую версию сертификата того же аккаунта для того же бандла.
И самое обидное, что эта ошибка только для production версии билда, который запускается вторым после develop версии, причем, сначала xcode компилирует зависимости (cocoapods) и уже только после проверяет валидность подписи, то есть только когда собирает основное приложение. Поэтому ошибка проявляется примерно во второй половине процесса сборки, из-за чего первые 6-7 минут потрачены в пустую, от чего Боб расстроен еще больше.
Наш разработчик Боб не первый раз сталкивается с этой проблемой, ведь он работает в большой компании, где несколько команд ios разработчиков, где нормальная практика для разработки использовать один Apple аккаунт на несколько человек. Да, Боб знает про Xcode плагин https://github.com/neonichu/FixCode, но ведь не заставлять же его насильно всем ставить, разработчики нежные создания, не все любят, когда их заставляют что-то делать против их воли, Боб сам такой.
Бобу всё это настолько надоело, что он уже забыл, что собирался домой 10 минут назад, вместо этого Боб заказывает пиццу, расчехляет макбук, который уже успел упаковать, наливает кофе, просит админов дать доступ до сервера, коннектится туда по ssh и начинает выяснять, в чем же, именно, проблема и как её можно решить.
Ну окей. Первым делом Боб проверяет какие сертификаты, вообще, есть на машине:
security find-identity -v login.keychain
Что выдает
1) 40948A3CA3527F580B9ECB2131DE6B1938FB3D7C "iPhone Developer: Mike ... (KSDA3C3QF2)"
2) 0279CB81AEAD8CE015282DD1FA76CE520A815C4D "iPhone Developer: Bob .. (4WT74HLM2M)"
3) 79A2544B1A63C3F9D3DA3FFAB199FEAADB7EC306 "iPhone Developer: Alica ... (VJ53F2J4EK)"
....
24 valid identities found
Так, как минимум, в keychain, который используется по дэфолту на сервере, есть 24 сертификата. Боб знает, что каждый mobileprovision файл создается на какой-то один конкретный сертификат. Нужно выяснить на какой сертификат создан mobileprovision файл для которого упал билд и понять, что же произошло с сертификатом. Нужно, вообще, понять как mobileprovision файл связан с сертификатом. Боб знает, что develop версия приложения собралась, поэтому на сервере точно есть этот сертификат и сейчас нужно понять как он соотносится с mobileprovision файлом. Для этого Бобу нужно найти mobileprovision файл и данные о сертификате, чтобы начать искать какие-то соответствия между ними.
Ищем mobileprovision файл по его бандлу (если ваш бандл wildcard, то можно искать по любым другим признакам):
cd ~/Library/MobileDevice/Provisioning Profiles
find . -name "*.mobileprovision" -type f -exec grep -H -n -a {} -e "com.company.bob" ;
Отлично, мы нашли наш файл:
./f98a06f3-21c2-4de0-975f-5df74197c731.mobileprovision:30: <string>4HUHB9J47M.com.company.bob</string>
В файле есть префикс 4HUHB9J47M у бандла. Из ранее полученного списка сертификатов ничто с этим значением не совпадает. Поэтому Бобу приходится идти в developer.apple.com и искать на какой же аккаунт создан этот mobileprovision файл. Методом тыка он выясняет, что это сертификат Майка:
2) 40948A3CA3527F580B9ECB2131DE6B1938FB3D7C "iPhone Developer: Mike .. (KSDA3C3QF2)"
Отлично, теперь у нас есть с чем работать. Боб у нас не криптоаналитик или секурити ресерчер, но он хороший гуглер, поэтому он с легкостью нашел способ как получить необходимую информацию из сертификата.
Вытаскиваем данные в .pem файл:
security find-certificate -p -c "iPhone Developer: Mike .. (KSDA3C3QF2)" > cert.pem
В файле получаем следующее:
-----BEGIN CERTIFICATE-----
MIIFnjCCBIagAwIBAgIIN8GwnYhLQ/kwDQYJKoZIhvcNAQELBQAwgZYxCzAJBgNV
BAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDCNBcHBsZSBXb3Js
ZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBwbGUgV29ybGR3
aWRlIERldmVsb3BlciBSZWxhdGlvbnMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkw
...
....
.....
lD ocFo6 mab/Ph6mTJOZkZu hnqhzbTD9Q9dXKWkeXAwTqaESNfnhnuOdfCX3vu
YAz0Hb46G9fkLa5lHjVydbtms685C uz9Ss4GNRfji1cz5KyblAQAAsqQBUiCwnb
z34=
-----END CERTIFICATE-----
Как оказалось, с этого файла можно считать информацию о сертификате, попробуем получить наиболее интересную для нас:
openssl x509 -noout -fingerprint -in cert.pem
Выдает нам:
SHA1 Fingerprint=40:94:8A:3C:A3:52:7F:58:0B:9E:CB:21:31:DE:6B:19:38:FB:3D:7C
Если убрать двоеточия, то получим 40948A3CA3527F580B9ECB2131DE6B1938FB3D7C, это как раз sha1 сертификата Майка, который мы можем увидеть в UI в Keychain:

Мы также можем получить срок действия сертификата, если нужно написать валидатор истёкших сертификатов:
openssl x509 -noout -startdate -in cert.pem // Feb 27 07:13:41 2021 GMT
openssl x509 -noout -enddate -in cert.pem // Feb 26 07:13:41 2021 GMT
Это же мы видим и в keychain:

В общем с сертификатом всё ясно. «Как же его привязать к нашему mobileprovision файлу?» — думает любопытный Боб. Давайте сначала посмотрим на mobileprovision файл поближе:

security cms -D -i f98a06f3-21c2-4de0-975f-5df74197c731.mobileprovision
Вывод нам дает интересную информацию для поля data, а именно:
<data>
MIIFnjCCBIagAwIBAgIIN8GwnYhLQ/kwDQYJKoZIhvcNAQELBQAwgZYxCzAJBgNV
BAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDCNBcHBsZSBXb3Js
ZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1
...
...
YAz0Hb46G9fkLa5lHjVydbtms685C uz9Ss4GNRfji1cz5KyblAQAAsqQBUiCwnb
z34=
</data>
Где-то это Боб уже видел, похоже на содержание ранее полученного .pem файла:
-----BEGIN CERTIFICATE-----
MIIFnjCCBIagAwIBAgIIN8GwnYhLQ/kwDQYJKoZIhvcNAQELBQAwgZYxCzAJBgNV
BAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDCNBcHBsZSBXb3Js
ZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBwbGUgV29ybGR3
aWRlIERldmVsb3BlciBSZWxhdGlvbnMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkw
...
....
.....
lD ocFo6 mab/Ph6mTJOZkZu hnqhzbTD9Q9dXKWkeXAwTqaESNfnhnuOdfCX3vu
YAz0Hb46G9fkLa5lHjVydbtms685C uz9Ss4GNRfji1cz5KyblAQAAsqQBUiCwnb
z34=
-----END CERTIFICATE-----

Тут Боб понял, вот она зацепка mobileprovision файла на сертификат.
Итого, нам нужно взять наш mobileprovision файл, вытащить из него значение для поля data, затем пробежать по всем валидным сертификатам и сравнить с данными из их .pem представления. Боб тут же накидал небольшой скрипт, который передал коллегам из бэкенда, чтобы они его запускали перед каждой сборкой ios проектов. Скрипт запускается достаточно просто:
ruby cert_checker.rb f98a06f3-21c2-4de0-975f-5df74197c731.mobileprovision
Теперь разработчики могут быстро получить фидбэк от сервера, если с сертификатами что-то не так. Да и вообще впустую не запускать сборку до решения проблемы.
Intermediate certificates
Некоторое время назад Apple внесла изменения в логику работы девцентра и своей системы сертификации, после чего на большинстве компьютеров пропала возможность делать сборки приложений, несмотря на наличие активных дев- и прод-сертификатов и актуальных профилей.
«Worldwide Developer Relations Certificate Authority»
. Он устанавливается автоматически с новыми версиями Xcode, но те, у кого Xcode уже был установлен ранее, просто должны были установить этот сертификат вручную, скачав его по прямой ссылке из секции Intermediate Certificates в девцентре Apple, после чего проблемы со сборками исчезали. Больше никакой смысловой нагрузки этот сертификат не несет.
Архивные сертификаты по общим критериям для ios
Перечисленные ниже предыдущие версии iOS прошли проверку по общим критериям. Они помещены в архив NIAP в соответствии с политикой NIAP:
Операционная система/дата сертификации | Идентификатор схемы/документы | Название/профили защиты |
|---|---|---|
Операционная система: iOS 12 Дата сертификации: 14.03.2021 | Идентификатор схемы: 10937 Документы: Задание по безопасности Руководство | Название: iPhone с iOS 12 Профили защиты: основная защита мобильных устройств, модуль для клиента VPN, расширенный пакет для клиента беспроводной локальной сети, расширенный пакет для агента MDM |
Операционная система: iOS 11 Дата сертификации: 17.07.2021 | Идентификатор схемы: 10851 Документы: Задание по безопасности Руководство | Название: Apple iOS 11 Профили защиты: основная защита мобильных устройств, расширенный пакет для клиента беспроводной локальной сети, расширенный пакет для агента MDM |
Операционная система: iOS 10 Дата сертификации: 27.07.2021 | Идентификатор схемы: 10782 Документы: Задание по безопасности, Руководство | Название: iOS 10.2 на устройствах iPhone и iPad Профили защиты: основная защита мобильных устройств, расширенный пакет для клиента беспроводной локальной сети, расширенный пакет для агента MDM |
Операционная система: iOS 10 Дата сертификации: 27.07.2021 | Идентификатор схемы: 10792 Документы: Задание по безопасности, Руководство | Название: клиент VPN в iOS 10.2 на iPhone и iPad Профили защиты: профиль защиты клиента VPN |
Операционная система: iOS 9 Дата сертификации: 14.10.2021 | Идентификатор схемы: 10725 Документы: Задание по безопасности, Руководство | Название: iOS 9.3.2 с агентом MDM Профили защиты: основная защита мобильных устройств, расширенный пакет для агента MDM |
Операционная система: iOS 9 Дата сертификации: 13.10.2021 | Идентификатор схемы: 10714 Документы: Задание по безопасности, Руководство | Название: клиент VPN ОС на iPhone и iPad Профили защиты: профиль защиты клиента VPN |
Операционная система: iOS 9 Дата сертификации: 28.01.2021 | Идентификатор схемы: 10695 Документы: Задание по безопасности, Руководство | Название: iOS 9 Профили защиты: основная защита мобильных устройств |
Вкратце об itunes connect
Этот сервис предоставляет вам возможность управлять внутренним и внешним тестированием в TestFlight, а также выкладывать приложение в App Store. Рассмотрение этого процесса выходит за рамки данной статьи, упомяну лишь тот факт, что для корректной работы этому сервису необходимы сборки, созданные на базе профиля типа
Distribution — App Store
(для iOS либо tvOS). Другие типы профилей здесь не поддерживаются.
Идентификаторы (identifiers)
Данный раздел обеспечивает управление идентификаторами. Для вашего приложения в минимальном исполнении понадобится App ID, управление которыми доступно в одноименном подразделе.
В буквальном переводе «App ID» означает «идентификатор приложения», что полностью отражает его суть. Любое ваше приложение, которое вы хотите отлаживать на устройстве Apple, тестировать через TestFlight и/или публиковать в магазин App Store, должно обладать собственным уникальным именем, по которому его можно однозначно идентифицировать среди тысяч других приложений. При добавлении нового App ID вам будет предложено ввести несколько элементов:
- App ID Description. Имя вашего приложения. К примеру, если ваше приложение называется Mail Printer, то прямо так его и записываем в это текстовое поле.
- App ID Prefix. Префикс вашего приложения, он выдается вам автоматически и будет общим для конкретной команды Apple Team, где подключена и активна Apple Developer Program.
- App ID Suffix. Здесь нам понадобится выбрать Explicit App ID, чтобы указать бандл (bundle) приложения. Это идентификатор, обычно имеющий вид com.mycompany.myappname, где mycompany — имя вашей компании или вашего домена. Например, com.homecompany.MailPrinter. Обращаю ваше внимание, что точно такой же бандл должен быть выставлен в настройках таргета (Target) вашего приложения в Xcode (секция настроек General, поле Bundle Identifier).
- App Services. Здесь вам нужно отметить те сервисы, которые вы планируете использовать в вашем приложении. По умолчанию там отмечены только Game Center и In-App Purchase, их использование обязательно, удалить их нельзя. Остальные сервисы подключайте по мере необходимости.
После создания App ID вы можете использовать его для генерации любых типов профилей, об этом чуть позже.
Как узнать, сертифицирован ли аксессуар по программе mfi
Китайские производители несертифицированных аксессуаров научились подделывать сигнал чипа аутентификации: их продукция может кое-как заряжать i-устройства и даже нормально синхронизироваться с ними без каких-либо оповещений об ошибке. Более того, есть примеры, когда относительно дешевый кабель (без значка MFi на упаковке) выдавал рабочие показатели, близкие к оригиналу от Apple. Но в общей массе товаров для iOS это, скорее, исключение.
Чтобы определить лицензированную продукцию, в первую очередь стоит рассмотреть упаковку, где должна быть пропечатана маркировка MFi.
Отметим, что знак сертификации аксессуаров от сторонних производителей в 2021 году был обновлен: изменили порядок надписей и удалили изображения девайсов.
Естественно, нашлось немало желающих бесплатно приобщиться к замечательной программе — пираты ставят знаки сертификации без каких-либо тестирований и соглашений. Но это легко проверить. Компания Apple ведет в PDF-формате полный список всех партнеров, которые получили лицензию MFi, и ежеквартально обновляет его.
На официальном сайте есть специальный сервис, в котором можно проверить на наличие сертификации MFi конкретного производителя и изделие. Поиск осуществляется по бренду, модели и универсальному коду товара.
Также можно ориентироваться на цену изделия. Реальность такова, что любой сертифицированный по MFi кабель Lightning не может стоить менее 5 долларов, так как 4 из них уходит на счета Apple в виде роялти по лицензионному соглашению.
Кратко о главном
В Apple Developer Center с незапамятных времен применяется довольно мудреная система сертификации ваших приложений на каждом из ключевых этапов — разработка, тестирование и публикация.
Зачастую при первом погружении в эту систему у начинающих (и не только) разработчиков возникают серьезные проблемы с пониманием того, как функционирует Apple Developer Center (будем называть его «девцентр» для простоты). В результате, мне в процессе профессиональной деятельности не раз приходилось наблюдать на новых местах работы огромные свалки из профилей и сертификатов в девцентре, в результате чего приходилось приступать к «разбору завалов».
При этом, в сети довольно не такой большой выбор материалов на эту тему. Конечно, в официальной документации Apple все хорошо структурировано и очень подробно описано, но зачастую просто не хватает времени на изучение такого количества материала.
Как правило, хочется быстро понять, что именно и в каком порядке нужно сделать для корректной работы приложения на этапах разработки, тестирования и при публикации его в магазин App Store. В русском же сообществе подобных материалов, собранных в одном месте и в удобном доступе, я не видел вовсе, поэтому и решил написать эту статью. Для всех интересующихся — добро пожаловать под кат.
Ориентировка по разделам
В девцентре для полноценной работы с вашими приложениями нам понадобятся только два пункта:
Профили (provisioning profiles)
Дословно название этого раздела переводится как «Профили обеспечения». Чуть более развернуто я бы описал понятие «профиль» как «Специальный файл, обеспечивающий доступ к некоторой функциональности в конкретной сборке вашего приложения». В данном разделе девцентра вы можете управлять вашими профилями, обеспечивая себе возможность выпускать сборки приложения для различных целей, то есть «профилировать» его. По сути, профиль является результатом объединения двух (иногда трех) компонентов:
На выходе как раз и получаем профиль для выпуска сборок с определенными целями. Давайте рассмотрим разновидности профилей.
Профили типа «development»
Это профиль для разработки, то есть его основное назначение — отладка вашего приложения на конкретных устройствах через Xcode с прямым подключением устройства проводом к вашему Mac. Дев-профили представлены двумя видами:
Профили типа «distribution»
Эти профили используются для выпуска сборок вашего приложения для различных целей. Продакшн-профили представлены четырьмя видами:
- App Store. Используется для тестирования (как внутреннего, так и внешнего) в TestFlight, а также для выпуска приложения в App Store.
- tvOS App Store. Аналогично предыдущему, только для tvOS.
- Ad Hoc. Требует указания перечня разрешенных устройств из раздела Devices.
Используется, если вы хотите выпустить сборку, которую можно будет поставить в режиме «Production», но только на некоторых устройствах. Реальная ситуация, когда это может понадобится, например, следующая. Вы разрабатываете приложение, а в процессе работы заказчик попросил у вас «дать ему пощупать приложение» на своем Apple-устройстве. В iTunes Connect для активации внешнего тестирования вы еще выходить не готовы, но просьбу заказчика нужно выполнять — вот тут как раз и пригодится Ad Hoc-профиль, сгенерированный на базе прод-сертификата App Store & Ad Hoc Production Certificate. Важный момент: в моем случае часто возникали проблемы при экспорте сборок подобным способом, если в Xcode не был также установлен и Development-сертификат. Ошибки были разного рода, от невозможности подписать сборку до абсурдного «App ID is not available», хотя это фактически не так (замена на другой бандл ничего не давала). Поэтому, по моему предположению, для удачного экспорта Ad Hoc-сборок необходимо, чтобы, помимо Ad Hoc-профиля, был также установлен и дев-сертификат с соответствующим профилем. - tvOS Ad Hoc. Аналогично предыдущему, только для tvOS.
Резюмируем
По сути, при получении доступа к девцентру с активной Apple Developer Program ваш алгоритм действий должен сводиться к следующему:
Сертификаты (certificates)
Этот раздел дает доступ к управлению сертификатами, которыми обладает ваша учетная запись Apple ID. Каждый из этапов, которые вы будете проходить, будь то разработка, тестирование или публикация, включая все значимые составляющие экосистемы Apple вроде Push Notifications, требует обязательного наличия актуального (действующего, Active) сертификата.
Теперь разберем типы сертификатов.
Сертификаты fips 140-2
В следующей таблице показаны криптографические модули, которые в настоящее время проходят тестирование и прошли лабораторное тестирование на соответствие стандарту FIPS 140-2.
Даты | Сертификаты/документы | Информация о модуле |
|---|---|---|
Дата выпуска операционной системы: 2021 Даты проверок: 23.03.2021 | Сертификаты: 3856 Документы: Сертификат Политика безопасности Рекомендации для лица, ответственного за СКЗИ | Название: модуль Apple Corecrypto User версии 10.0 для устройств с процессорами ARM Операционная система: iOS 13 Тип: программное обеспечение Уровень безопасности: 1 |
Дата выпуска операционной системы: 2021 Даты проверок: 23.03.2021 | Сертификаты: 3855 Документы: Сертификат Политика безопасности Рекомендации для лица, ответственного за СКЗИ | Название: модуль Apple Corecrypto Kernel версии 10.0 для устройств с процессорами ARM Операционная система: iOS 13 Тип: программное обеспечение Уровень безопасности: 1 |
Дата выпуска операционной системы: 2021 Даты проверок: 05.02.2021 | Сертификаты: 3811 Документы: Сертификат Политика безопасности Рекомендации для лица, ответственного за СКЗИ | Название: криптографический модуль безопасного хранилища ключей Apple версии 10.0 Операционная система: sepOS, распространяемая с iOS 13 Тип: аппаратное обеспечение Уровень безопасности: 2 |
Дата выпуска операционной системы: 2021 Даты проверок: 23.04.2021 | Сертификаты: 3438 Документы: Сертификат Политика безопасности Рекомендации для лица, ответственного за СКЗИ | Название: модуль Apple Corecrypto Kernel версии 9.0 для устройств с процессорами ARM Операционная система: iOS 12 Тип: программное обеспечение Уровень безопасности: 1 |
Дата выпуска операционной системы: 2021 Даты проверок: 11.04.2021 | Сертификаты: 3433 Документы: Сертификат Политика безопасности Рекомендации для лица, ответственного за СКЗИ | Название: модуль Apple Corecrypto User версии 9.0 для устройств с процессорами ARM Операционная система: iOS 12 Тип: программное обеспечение Уровень безопасности: 1 |
Дата выпуска операционной системы: 2021 Даты проверок: 10.09.2021 | Сертификаты: 3523 Документы: Сертификат Политика безопасности Рекомендации для лица, ответственного за СКЗИ | Название: криптографический модуль безопасного хранилища ключей Apple версии 9.0 Операционная система: sepOS, распространяемая с iOS 12 Тип: аппаратное обеспечение Уровень безопасности: 2 |
Дата выпуска операционной системы: 2021 Даты проверок: 09.03.2021, 22.05.2021, 06.07.2021 | Сертификаты: 3148 Документы: Сертификат Политика безопасности Рекомендации для лица, ответственного за СКЗИ | Название: модуль Apple Corecrypto User версии 8.0 для устройств с процессорами ARM Операционная система: iOS 11 Тип: программное обеспечение Уровень безопасности: 1 |
Дата выпуска операционной системы: 2021 Даты проверок: 09.03.2021, 17.05.2021, 03.07.2021 | Сертификаты: 3147 Документы: Сертификат Политика безопасности Рекомендации для лица, ответственного за СКЗИ | Название: модуль Apple Corecrypto Kernel версии 8.0 для устройств с процессорами ARM Операционная система: iOS 11 Тип: программное обеспечение Уровень безопасности: 1 |
Дата выпуска операционной системы: 2021 Даты проверок: 10.09.2021 | Сертификаты: 3223 Документы: Сертификат Политика безопасности Рекомендации для лица, ответственного за СКЗИ | Название: криптографический модуль безопасного хранилища ключей Apple версии 1.0 Операционная система: sepOS, распространяемая с iOS 11 Тип: аппаратное обеспечение Уровень безопасности: 2 |
Дата выпуска операционной системы: 2021 Даты проверок: 01.02.2021 | Сертификаты: 2828 Документы: Сертификат Политика безопасности Рекомендации для лица, ответственного за СКЗИ | Название: модуль Apple Corecrypto Kernel версии 7.0 для iOS Операционная система: iOS 10 Тип: программное обеспечение Уровень безопасности: 1 |
Дата выпуска операционной системы: 2021 Даты проверок: 01.02.2021 | Сертификаты: 2827 Документы: Сертификат Политика безопасности Рекомендации для лица, ответственного за СКЗИ | Название: модуль Apple Corecrypto Kernel версии 7.0 для iOS Операционная система: iOS 10 Тип: программное обеспечение Уровень безопасности: 1 |
Сертификаты fips 140-3
Текущий статус
Пространство пользователя, пространство ядра и безопасное хранилище ключей iOS 14 (2020 г.) прошли лабораторное тестирование и были рекомендованы лабораторией для проверки по программе CMVP. Они перечислены в списке проверяемых модулей.
Пространство пользователя, пространство ядра и безопасное хранилище ключей iOS 15 (2021 г.) проходят лабораторное тестирование. Они находятся в списке компонентов, переданных на тестирование.
Даты | Сертификаты/документы | Информация о модуле |
|---|---|---|
Дата выпуска операционной системы: 2021 Даты проверок: — | Сертификаты: сертификаты пока не получены Документы: Сертификат Политика безопасности Рекомендации для лица, ответственного за СКЗИ | Название: модуль Apple Corecrypto версии 12 Операционная система: iOS 15 Среда: чип Apple, пользователь, программное обеспечение Тип: программное обеспечение Уровень общей безопасности: 1 |
Дата выпуска операционной системы: 2021 Даты проверок: — | Сертификаты: сертификаты пока не получены Документы: Сертификат Политика безопасности Рекомендации для лица, ответственного за СКЗИ | Название: модуль Apple Corecrypto версии 12 Операционная система: iOS 15 Среда: чип Apple, ядро, программное обеспечение Тип: программное обеспечение Уровень общей безопасности: 1 |
Дата выпуска операционной системы: 2021 Даты проверок: — | Сертификаты: сертификаты пока не получены Документы: Сертификат Политика безопасности Рекомендации для лица, ответственного за СКЗИ | Название: модуль Apple Corecrypto версии 12 Операционная система: sepOS, распространяемая с iOS 15 Среда: чип Apple, безопасное хранилище ключей, аппаратное обеспечение Тип: аппаратное обеспечение (A9-A14) Уровень общей безопасности: 2 |
Дата выпуска операционной системы: 2021 Даты проверок: — | Сертификаты: сертификаты пока не получены Документы: Сертификат Политика безопасности Рекомендации для лица, ответственного за СКЗИ | Название: модуль Apple Corecrypto версии 12 Операционная система: sepOS, распространяемая с iOS 15 Среда: чип Apple, безопасное хранилище ключей, аппаратное обеспечение Тип: аппаратное обеспечение (A13, A14, A15) Уровень общей безопасности: 2 Уровень физической безопасности: 3 |
Дата выпуска операционной системы: 2020 Даты проверок: — | Сертификаты: сертификаты пока не получены Документы: Сертификат Политика безопасности Рекомендации для лица, ответственного за СКЗИ | Название: модуль Apple Corecrypto версии 11.1 Операционная система: iOS 14 Среда: чип Apple, пользователь, программное обеспечение Тип: программное обеспечение Уровень общей безопасности: 1 |
Дата выпуска операционной системы: 2020 Даты проверок: — | Сертификаты: сертификаты пока не получены Документы: Сертификат Политика безопасности Рекомендации для лица, ответственного за СКЗИ | Название: модуль Apple Corecrypto версии 11.1 Операционная система: iOS 14 Среда: чип Apple, ядро, программное обеспечение Тип: программное обеспечение Уровень общей безопасности: 1 |
Дата выпуска операционной системы: 2020 Даты проверок: — | Сертификаты: сертификаты пока не получены Документы: Сертификат Политика безопасности Рекомендации для лица, ответственного за СКЗИ | Название: модуль Apple Corecrypto версии 11.1 Операционная система: sepOS, распространяемая с iOS 14 Среда: чип Apple, безопасное хранилище ключей, аппаратное обеспечение Тип: аппаратное обеспечение (A9-A14) Уровень общей безопасности: 2 |
Дата выпуска операционной системы: 2020 Даты проверок: — | Сертификаты: сертификаты пока не получены Документы: Сертификат Политика безопасности Рекомендации для лица, ответственного за СКЗИ | Название: модуль Apple Corecrypto версии 11.1 Операционная система: sepOS, распространяемая с iOS 14 Среда: чип Apple, безопасное хранилище ключей, аппаратное обеспечение Тип: аппаратное обеспечение (A13-A14) Уровень общей безопасности: 2 Уровень физической безопасности: 3 |
Сертификаты типа «development»
В первую очередь, нужно знать, что девелоперский сертификат всегда привязывается
к одной конкретной машине
. Поэтому для отладки на вашем Mac вам понадобится доступ к этому сертификату. Тут есть варианты. Например, если, вы устроились на работу iOS-программистом, и в ваши задачи входит отладка на устройствах (как правило, так и есть), то есть два пути решения (какой из них выбирать — зависит от вас и условий работы в вашей компании):
Сертификаты типа «production»
Для начала на всякий случай поясню, что сборкой iOS-приложения называют *.ipa-файл, архив, выпускаемый с соблюдением правил сертификации Apple через команду Project — Archive в Xcode.
Теперь о сертификации. Прод-сертификаты обеспечивают функционирование различных подсистем приложения в «боевых» условиях, то есть в магазине App Store, а также на устройствах, где выполняется внутреннее и внешнее тестирование приложения через TestFlight.
Здесь, по аналогии с Development-сертификацией, есть тип App Store & Ad Hoc Production, а также тип APNs Production, использующийся веб-сервером для рассылки push-уведомлений. Если вы планируете выпустить приложение, поддерживающее работу с пушами, то вам понадобятся оба сертификата, как App Store &
Ad Hoc (на основе которого вы сделаете сборку и отправите приложение в iTunes Connect), так и APNs Production (его вы отдадите серверу, а тот воспользуется им для получения прав на рассылку пушей). В довесок к уже упомянутым подсистемам есть еще несколько других, обеспечивающих доступ к Wallet, Apple Watch и так далее, но их обзор выходит за рамки данной статьи.
Очень часто возникает вопрос о том, в чем же разница между App Store и тем самым Ad Hoc. Ранее они были представлены разными сертификатами, с некоторого времени Apple объединила их в единое целое, за что им большое спасибо. Чуть подробнее об этих разновидностях:
- Выпуск сборок типа App Store. Обеспечивает возможность тестировать приложение в TestFlight, как в режиме внутреннего, так и в режиме внешнего тестирования. Также дает возможность опубликовать приложение в App Store.
- Выпуск сборок типа Ad Hoc. Термин «Ad Hoc» можно перевести как «специальный», «для конкретной цели». Такой тип сертификации обеспечивает возможность запускать ваше приложение (включая все нужные подсистемы типа APNs) в боевых условиях, но только на конкретных девайсах, и без участия Xcode в процессе запуска. Другими словами, Ad Hoc необходим, если вы захотите поставить ваше приложение на стороннее устройство, не имея к нему прямого доступа (то есть не подсоединяя его проводом к вашему Mac, так как в этом случае вам бы хватило Development-сертификата), но при этом и не выкладывая приложение в iTunes Connect. Такой сертификат используется при создании специального Ad Hoc-профиля, о котором пойдет речь чуть позже.
Еще один частый вопрос: чем отличаются сборки, собранные на паре Development Certificate Development Profile, и сборки, созданные через связку Distribution Certificate Ad Hoc Profile? Ведь и там, и там нужно указывать перечень разрешенных для установки устройств, и то, и то можно устанавливать через iTunes.
В чем же различие? На деле, разница в том, что дев-сборка будет запускаться «в отладочном режиме», то есть, например, APNs ей будут доступны только в режиме «sandbox». Продакшн-сборка будет обладать «боевыми» правами, с доступом во все подсистемы Apple вроде «настоящих» APNs, iCloud и так далее.
Терминология
Давайте подробно разберем понятия, лежащие в основе функционирования девцентра Apple.
Устройства (devices)
В этом разделе размещено управление всеми устройствами Apple, которые вы можете использовать в рамках вашей Apple Developer Program. Есть ограничение, максимум 100 зарегистрированных девайсов одного типа (iPhone, iPad и так далее) на одну учетную запись в год, обычно этого более чем достаточно.
Выводы
1. Является ли маркировка MFi стопроцентным признаком сертифицированного аксессуара? Не обязательно, но вероятность купить надежный продукт сильно возрастает.
2. Если нет уведомления о некорректной работе аксессуара, значит ли это, что он точно лицензирован? Нет, защиту идентифицирующим чипом иногда обходят.
3. А можно ли вообще точно определить факт сертификации? Да, можно — в поисковом сервисе на сайте Apple.
4. Существуют ли качественные несертифицированные аксессуары? Да, их немного, но они есть.
