Steps to create iOS Developer and Distribution Certificates with and without a Mac
Regardless of what framework or language you use for iOS development, whether Swift or React Native or any other, there is a one common question: “How to create iOS Distribution Certificates or Developer Certificates?”
Sometimes, this question is even asked for purposes other than development such as for jailbreaking, but we will not be divulging into those as it is a controversial and even legally problematic area, so we will stick to iOS certificate generation for mobile app development.
In this post, we will list and explain the steps to create iOS certificates from the Apple Developer Portal with two different options: using a Mac and using an online platform.
First, the basics. Why you need a certificate issued by Apple is to ensure that
- You are an approved Apple developer enrolled to the Apple Developer Program
- You are the owner of a specific code signed by your unique and secret code signing certificate
- You are the owner of a specific code signed by your unique and secret code signing certificate
Let’s now go over the steps to generate certificates for iPhone, iPad and Apple Watch apps.
There are different types of certificates and they have different purposes, but their creation method is exactly the same for iOS apps.
Steps to Create iOS Certificates
1. Enroll in the Apple Developer Program:
The first step to create an iOS certificate is of course, to have an Apple Developer account. For this, you are required to enroll in the Apple Developer Program (or the Apple Developer Enterprise Program if you are a large enterprise with at least 100 employees and plan to distribute in-house apps). Enrollment is just like purchasing a product from the Apple Online Store.
The annual fee for the Apple Developer Program is $99 (or the equivalent local currency) and the annual fee for the Apple Developer Enterprise Program is $299 (or the equivalent local currency).
For your certificates to be valid, you are required to renew your membership every year and regenerate your certificates once they expire one year after their creation date.
Once you enroll, you will have access to the Apple Developer Portal. We will come back to the portal after a quick detour to create a signing request.
2. Generate a Certificate Signing Request (CSR):
Even though Keychain Access application on Mac is commonly used for this purpose, you can use any certificate management tool to create a certificate signing request.
1. Launch the “Keychain Access” app from the Launchpad or Spotlight.
1. Launch the “Keychain Access” app from the Launchpad or Spotlight.
2. From the top menu, select Keychain Access -> Certificate Assistant -> Request a Certificate from a Certificate Authority
3. Fill in the first two fields User Email Address and Common Name. Leave the CA Email Address field blank and select the Saved to disk option below.
4. Press continue and then save the generated certSigningRequest file on your computer. You can now use this CSR file for the next step.
We will come back to the Keychain Access app later to complete the certificate generation.
If you don’t have access to a Mac or if you don’t want to store your certificates locally, you create a CSR online as follows:
Especially if you are using a cross-platform framework such as Ionic or React Native to develop your apps, you may have limited access to a Mac. Or if you are an enterprise user, you may want to store the certificate centrally instead of a local Mac.
In such cases, you can use an online platform like Appcircle to create CSRs for iOS certificates.
1. Log in to the Appcircle dashboard at https://my.appcircle.io
2. Select Signing Identities -> iOS Certificates from the left menu
3. Press Add New and then select Generate signing request
4. Fill in the fields and press save
5. Once the CSR is created, press the download button from the actions on the right end of the row. You can now use this CSR file for the next step.
We will come back to the Appcircle Signing Identities module later to complete the certificate generation. You will not require a Mac at any step, and you can generate iOS certificates on Windows.
3. Generate a Certificate from the Apple Developer Portal
You now have an Apple Developer Account and a Certificate Signing Request. Below are the steps to generate a certificate. Please note that the design of the Apple Developer Portal was renewed recently, and this guide is up to date with the new portal as of 2020.
1. Login to the Apple Developer Portal at https://developer.apple.com
2. Select Certificates, IDs & Profiles -> Certificates from the left menu
3. Press the Plus (+) button next to the Certificates heading.
4. You can select one of the following certificate types that is relevant for iOS apps, depending on your use case:
- Apple Development
- Apple Distribution (only for the Developer Program)
- iOS App Development
- iOS Distribution (only for the Developer Program)
- In-House and Ad Hoc (only for the Enterprise Program)
5. Press continue after selecting a certificate type. If you are unsure which certificate type to select, you can select iOS App Development for running your app on your registered iOS devices for development purposes.
6. In the next screen, upload your CSR file generated in the previous step and press continue.
7. Your certificate is now generated and ready for download. Just press the download button on the top right.
4. Installing the Certificate
The cer file generated in the previous step cannot be used for codesigning alone. It must be installed back to the source from which the CSR was created to generate a private/public key pair.
If you have access to a Mac, you can install the created iOS certificate locally as follows:
On the same Mac where the uploaded CSR comes from, just double click on the file to install it. You can now use this certificate for code signing within that Mac.
If you don’t have access to a Mac or if you don’t want to store your certificates locally, you can install the created iOS certificate online as follows:
On the same Appcircle account where the uploaded the CSR comes from, just locate the CSR and press the upload button from the actions on the right end of the row. Then select the cer file and the certificate will be installed.
Voila! You now have a certificate that is not dependent on any local Mac, accessible anywhere.
What You Need To Enroll
If you are an individual or sole proprietor/single person business, get started by signing in with your Apple ID with two-factor authentication turned on. You’ll need to provide basic personal information, including your legal name and address.
Enrolling as an Organization
If you’re enrolling your organization, you’ll need an Apple ID with two-factor authentication turned on, as well as the following to get started:
A D-U-N-S ® Number
Your organization must have a D-U-N-S Number so that we can verify your organization’s identity and legal entity status. These unique nine-digit numbers are assigned by Dun & Bradstreet and are widely used as standard business identifiers. You can check to see if your organization already has a D-U-N-S Number and request one if necessary. They are free in most jurisdictions. Learn more
Legal Entity Status
Your organization must be a legal entity so that it can enter into contracts with Apple. We do not accept DBAs, fictitious businesses, trade names, or branches.
Legal Binding Authority
As the person enrolling your organization in the Apple Developer Program, you must have the legal authority to bind your organization to legal agreements. You must be the organization’s owner/founder, executive team member, senior project lead, or an employee with legal authority granted to you by a senior employee.
A Website
Your organization’s website must be publicly available and the domain name must be associated with your organization.
Как получить подпись для приложений iOS?
Чтобы создать подпись для приложений iOS, вам необходимо получить сертификат, идентификатор приложения и профиль обеспечения. Чтобы создавать сертификаты, идентификаторы приложений и профили обеспечения, вам необходимо зарегистрироваться в Программе разработчика Apple iOS или Программе разработчика Apple iOS Enterprise, если вы еще не зарегистрированы.
Чтобы зарегистрироваться как частное лицо или компания, перейдите на портал iOS Developer Program . Нажмите Enroll и следуйте инструкциям. Если у вас нет Apple ID, вам будет предложено создать его.
После регистрации, вам необходимо выполнить следующие шаги:
Создание сертификата распространения
Чтобы опубликовать приложение в App Store или распространить его на ограниченное количество устройств, необходимо подписать код с помощью профиля обеспечения распространения. Чтобы создать профиль обеспечения распространения, вам необходим сертификат распространения, подписанный Apple.
Вы можете создать сертификат распространения в iOS Dev Center.
Создание сертификата *p12 для пользователей Mac
1. Откройте приложение “Keychain Access” (в папке “Программы / Утилиты”).
2. Если вы еще не добавили сертификат в связку ключей, выберите “File” — «Import». Затем перейдите к файлу сертификата (файл .cer), который вы получили от Apple.
3. Выберите категорию “Keys” в “Keychain Access”.
4. Выберите закрытый ключ, связанный с вашим сертификатом разработки iPhone. Закрытый ключ определяется разработчиком iPhone: публичный сертификат, который в паре с ним.
5. Командой щелкните сертификат iPhone Developer и выберите «Export» iPhone Developer: Name».
6. Сохраните хранилище ключей в формате файла обмена личной информацией (*p12).
7. Вам будет предложено создать пароль, который будет использоваться при использовании хранилища ключей для подписи приложений или при передаче ключа и сертификата в этом хранилище ключей в другое хранилище ключей.
Создание сертификата *p12 для пользователей Windows
1. Загрузите и установите OpenSSL
2. Преобразуйте файл сертификата разработчика, полученный от Apple, в файл сертификата PEM. Для этого выполните следующую инструкцию командной строки из каталога bin OpenSSL :
openssl x509 -in developer_identity.cer -inform DER -out developer_identity.pem -outform PEM
3. Если вы используете закрытый ключ из цепочки для ключей на компьютере Mac, преобразуйте его в ключ PEM:
openssl pkcs12 -nocerts -in mykey.p12 -out mykey.pem
4. Теперь вы можете создать действительный файл *P12 на основе ключа и версии PEM сертификата разработчика iPhone:
openssl pkcs12 -export -inkey mykey.key -in developer_identity.pem -out iphone_dev.p12
Для тестирования или распространения приложения iOS вамм потребуется Профиль обеспечения.
Кратко о главном
В Apple Developer Center с незапамятных времен применяется довольно мудреная система сертификации ваших приложений на каждом из ключевых этапов — разработка, тестирование и публикация.
Зачастую при первом погружении в эту систему у начинающих (и не только) разработчиков возникают серьезные проблемы с пониманием того, как функционирует Apple Developer Center (будем называть его «девцентр» для простоты). В результате, мне в процессе профессиональной деятельности не раз приходилось наблюдать на новых местах работы огромные свалки из профилей и сертификатов в девцентре, в результате чего приходилось приступать к «разбору завалов».
При этом, в сети довольно не такой большой выбор материалов на эту тему. Конечно, в официальной документации Apple все хорошо структурировано и очень подробно описано, но зачастую просто не хватает времени на изучение такого количества материала. Как правило, хочется быстро понять, что именно и в каком порядке нужно сделать для корректной работы приложения на этапах разработки, тестирования и при публикации его в магазин App Store. В русском же сообществе подобных материалов, собранных в одном месте и в удобном доступе, я не видел вовсе, поэтому и решил написать эту статью. Для всех интересующихся — добро пожаловать под кат.
Что мы будем разбирать?
Мы разберем процесс управления вашим приложением в Apple Developer Center от его создания до публикации в магазине App Store. Мы будем говорить только о базовых вещах, таких, как разработка, тестирование и публикация, а также обсудим APNs (Push Notifications).
Отмечу тот факт, что далее я буду описывать принцип работы девцентра по состоянию на 31 марта 2016 года, поэтому если вы читаете эту статью позднее — все уже могло измениться.
Что нам понадобится?
Собственно, для работы нам нужно следующее:
- Рабочий Mac, либо PC с виртуальной машиной и установленной на ней Mac OS.
- Действующий Apple ID. Его всегда можно бесплатно зарегистрировать на официальном сайте компании Apple.
- На вашем Apple ID (либо у одной из компаний, которая добавила ваш Apple ID в свою команду) должна быть активирована так называемая Apple Developer Program — оплачиваемая раз в год «подписка», дающая вам доступ к Apple Developer Center и возможность публиковать ваши приложения в App Store. На текущий момент стоимость в пересчете на год невелика и составляет в районе $99 за год пользования.
- И, конечно же, навыки разработки под iOS.
Ориентировка по разделам
В девцентре для полноценной работы с вашими приложениями нам понадобятся только два пункта:
- Certificates, Identifiers & Profiles. Раздел обеспечивает управление всей системой сертификации ваших приложений. Работу именно с этим разделом мы и будем разбирать в данной статье.
- iTunes Connect. Дает доступ к внутреннему и внешнему тестированию через TestFlight, а также к управлению публикацией ваших приложений в App Store.
Терминология
Давайте подробно разберем понятия, лежащие в основе функционирования девцентра Apple.
Сертификаты (Certificates)
Этот раздел дает доступ к управлению сертификатами, которыми обладает ваша учетная запись Apple ID. Каждый из этапов, которые вы будете проходить, будь то разработка, тестирование или публикация, включая все значимые составляющие экосистемы Apple вроде Push Notifications, требует обязательного наличия актуального (действующего, Active) сертификата. Говоря проще, ваше приложение не сможет даже чихнуть, не имея на то разрешения из Apple Developer Center. Чуть подробнее о подразделах:
- Pending. Запрошенные вами сертификаты, находящиеся в процессе обработки от Apple. Для дев (Development) и прод (Production) сертификатов конкретно в моем случае этот подраздел чаще всего пустует.
- Development. Дев-сертификаты, обеспечивающие возможность отладки вашего приложения на конкретных девайсах (одном либо нескольких) через Xcode, а также создание дев-сборок «в отладочном режиме». Более подробно поговорим о них чуть ниже.
- Production. Прод-сертификаты, обеспечивающие работоспособность приложения при тестировании в TestFlight и при публикации в магазине App Store.
Сертификаты типа «Development»
В первую очередь, нужно знать, что девелоперский сертификат всегда привязывается к одной конкретной машине. Поэтому для отладки на вашем Mac вам понадобится доступ к этому сертификату. Тут есть варианты. Например, если, вы устроились на работу iOS-программистом, и в ваши задачи входит отладка на устройствах (как правило, так и есть), то есть два пути решения (какой из них выбирать — зависит от вас и условий работы в вашей компании):
- Создать отдельный дев-сертификат конкретно для вашего Mac, скачать и установить его. Плюс понадобится сгенерировать и установить на свой Mac девелоперский профиль на основе этого сертификата, но об этом позже.
- Либо экспортировать с машины, на которую заведен сертификат, файл *.p12/*.pfx (это можно сделать в связке ключей Apple). Такой файл защищается паролем при экспорте, и, зная этот пароль, информацию о сертификате можно будет импортировать на любом другом Mac. В этом случае отпадает необходимость создавать для каждого Mac отдельные Development-сертификаты и отдельные Development-профили. Небольшая оговорка: профиль хоть и должен быть сгенерирован для той машины, на которую выпущен экспортируемый сертификат, но в этот профиль понадобится добавить UDID вашего устройства прежде, чем выдавать профиль вам для установки, иначе ничего работать не будет.
Наличие дев-сертификата означает, что, скачав его и установив двойным кликом в Связку Ключей (Apple Keychain), вы сможете запускать ваше приложение напрямую через Xcode в режиме отладки на устройстве, подключив это устройство проводом к вашему Mac. Перечень разрешенных конкретных устройств Apple нужно будет обязательно указать при генерации девелоперского профиля, но об этом позже. Также, вы сможете собрать и экспортировать сборку с дев-профилем, но стоит учесть, что в этом случае ваше приложение не будет иметь доступа к продакшн-возможностям (APNs будет только в режиме sandbox, например).
Сертификаты типа «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-профиля, о котором пойдет речь чуть позже.
Intermediate Certificates
Некоторое время назад Apple внесла изменения в логику работы девцентра и своей системы сертификации, после чего на большинстве компьютеров пропала возможность делать сборки приложений, несмотря на наличие активных дев- и прод-сертификатов и актуальных профилей. Причина этого была в том, что Apple добавила дополнительное требование, чтобы на вашем Mac в связке ключей был установлен специальный сертификат под названием «Worldwide Developer Relations Certificate Authority». Он устанавливается автоматически с новыми версиями Xcode, но те, у кого Xcode уже был установлен ранее, просто должны были установить этот сертификат вручную, скачав его по прямой ссылке из секции Intermediate Certificates в девцентре Apple, после чего проблемы со сборками исчезали. Больше никакой смысловой нагрузки этот сертификат не несет.
Идентификаторы (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, их использование обязательно, удалить их нельзя. Остальные сервисы подключайте по мере необходимости.
Устройства (Devices)
В этом разделе размещено управление всеми устройствами Apple, которые вы можете использовать в рамках вашей Apple Developer Program. Есть ограничение, максимум 100 зарегистрированных девайсов одного типа (iPhone, iPad и так далее) на одну учетную запись в год, обычно этого более чем достаточно. При необходимости отладки на устройстве или выпуска Ad Hoc-сборки просто добавляйте сюда UDID нужных вам девайсов и используйте их при генерации профилей.
Профили (Provisioning Profiles)
Дословно название этого раздела переводится как «Профили обеспечения». Чуть более развернуто я бы описал понятие «профиль» как «Специальный файл, обеспечивающий доступ к некоторой функциональности в конкретной сборке вашего приложения». В данном разделе девцентра вы можете управлять вашими профилями, обеспечивая себе возможность выпускать сборки приложения для различных целей, то есть «профилировать» его. По сути, профиль является результатом объединения двух (иногда трех) компонентов:
- Активного сертификата определенного типа (раздел Certificates). С помощью сертификата профиль подтверждает, что ваше приложение имеет право на выполнение определенной группы действий.
- App ID (раздел Identities). Определяет конкретное приложение, для которого выпускается профиль.
- В некоторых случаях, еще нужен список зарегистрированных устройств (раздел Devices). Определяет перечень устройств, на которые разрешено устанавливать вашу сборку. Используется только с некоторыми типами профилей.
Профили типа «Development»
Это профиль для разработки, то есть его основное назначение — отладка вашего приложения на конкретных устройствах через Xcode с прямым подключением устройства проводом к вашему Mac. Дев-профили представлены двумя видами:
- iOS App Development. Требует указания перечня разрешенных устройств из раздела Devices.
Используется для отладки iOS-приложений. - tvOS App Development. Аналогично, только используется для tvOS-приложений.
Профили типа «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.
Вкратце об iTunes Connect
Этот сервис предоставляет вам возможность управлять внутренним и внешним тестированием в TestFlight, а также выкладывать приложение в App Store. Рассмотрение этого процесса выходит за рамки данной статьи, упомяну лишь тот факт, что для корректной работы этому сервису необходимы сборки, созданные на базе профиля типа Distribution — App Store (для iOS либо tvOS). Другие типы профилей здесь не поддерживаются.
Резюмируем
По сути, при получении доступа к девцентру с активной Apple Developer Program ваш алгоритм действий должен сводиться к следующему: