Как подписать приложение ios своим сертификатом
Перейти к содержимому

Как подписать приложение ios своим сертификатом

  • автор:

iOS Code Signing & Provisioning in a Nutshell

Sebastian Boldt

I am developing Apps for more than 3 years now and 1 thing that still annoys me is Code Signing and Provisioning in iOS. What are Signing Identities? Why do I need to create Provisioning Profiles and care about such things as a developer? If you don’t have any good answers for those questions and really don’t want to read through the Apple Docs, this hopefully is the article that exposes the whole process for you and for me as a reference in less than 5 Minutes.

I am sure many of you can learn things fast just by reading through a text but what I really like, is to get things explained in a visual way with boxes and arrows. So the biggest Problem for me is that there is no chart or graphic that cherry-picked all the relevant parts and shows how everything works together in an easy to understand way. This is the reason why I will try to create one at the end of this Post. Let’s get started.

First, let us collect the major terms, you will stumble upon when trying to find any related stuff to Provisioning and Code Signing on the Internet.

  • Xcode
  • Member Center
  • Keychain
  • Signing Identity
  • Private & Public Key
  • Provisioning Profile
  • App ID

Xcode & Member Center

If you are an iOS Developer you will usually use Xcode to create and manage your app and resources and upload them to the Appstore. This is all you need to know about Xcode to follow along this Post. if you want to read more about it click here: Xcode

After you registered for the Apple Developer Program you will be able to login to the Member Center. This is the place where you can create Provisioning Profiles, App IDs, Certificates etc.. Parts of the Member Center are directly connected with Xcode. For instance, you can see and create your Signing Identities or download and refresh Provisioning Profiles in your Xcode Settings.

Signing Identity, Public & Private Key, Keychain Application

One thing we need to clear up is the term Signing. Signing your app allows iOS to identify who signed your app and to verify that your app hasn’t been modified since you signed it. The Signing Identity consists of a public-private key pair that Apple creates for you. Think about the public-key as a lock-only mechanism, so you need to know the private key to unwrap, unlock or decode data again.

Where do the public and private key-pair come from and how do you request a certificate containing them? All this magic happens when you create a Certificate Signing Request (CSR) through the Keychain Access Application. If you do so, the Keychain Application will create a private key and a certSigningRequest file which you’ll then upload to Apple. Apple will proof the request and issue a certificate for you. The Certificate will contain the public key that can be downloaded to your system. After you downloaded it you need to put it into your Keychain Access Application by double clicking it. It is used by cryptographic functions to generate a unique signature for your application, which is basically your Code Signing Identity.

The certificate will also be available through the Member Center, but it will only contain the public key, so keep that private key safe.

An intermediate certificate is also required to be in your keychain to ensure that your developer or distribution certificate is issued by another certificate authority. I know that sounds a little bit confusing, but this is how it works. It is installed automatically when setting Xcode up the first time, so basically you don't need to care about it that much because it is configured automatically.

Provisioning Profile & App ID

As we know, Apple likes to keep things secure, so it is not possible to install an App on any iOS Device out there using only the certificate. This is where Provisioning Profiles comes in. A Provisioning Profile must be installed on each device your application code should run on. Each Development Provisioning Profile will contain a set of iPhone Development Certificates, Unique Device Identifiers and an App ID. An App ID is a two-part string used to identify one or more apps from a single development team.

Devices specified in the Development Provisioning Profile can be used for testing only by those individuals whose Development Certificates are included in the profile. A single device can contain multiple provisioning profiles. The difference between Development and Distribution Profiles is that Distribution Profiles don’t specify any Device IDs. If you want to release an App which should be limited to a number of registered devices, you need to use an Ad-Hoc profile for that.

Chart

Here is the Chart I came up with. If you discover some things I missed or explained the wrong way, please let me know. As is said, this is the first time I really tried to wrap my head around the innards of Provisioning and Code Signing. I know that there is a lot more to talk about but I think this a good start for everything around this topic. I will try to keep this post up to date and fix everything wrong as fast as I can.

  1. Xcode will be installed and the Intermediate Certificate will be pushed into the Keychain
  2. Certificate Signing Request (CSR) will be created.
  3. Private Key will be generated along the CSR creation and stored in the Keychain
  4. CSR will be uploaded to the Member Center
  5. Apple will proof everything and issue the Certificate
  6. Certificate will be downloaded to your Computer
  7. The Certificate will be pushed into the Keychain and paired with the private key to form the Code Signing Identity
  8. The Provisioning Profile will be created using a Certificate, App ID and Device Identifiers and downloaded by Xcode
  9. Xcode will sign the App and push Provisioning Profiles onto the Device
  10. iOS will proof if everything is correctly configured.That means that the Provisioning Profile should include the Certificate you used to sign the App, your Device UDID and the correct App ID.
  11. Your App should be running now!

If the article has helped you and you want me to continue writing similar articles, you are welcome to support me with a small donation

Как подписать приложение ios своим сертификатом

Как работает данный метод?

Разработчик Apple на то и разработчик, что он делает приложения. И ему нужно как-то тестировать эти приложения до того, как он выложит их в AppStore. Вот разработчик и подписывает приложения, чтобы протестировать их на своем устройстве.

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

Разрушая мифы iOS Provisioning, часть 2: управление сертификатами и профилями.

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

  • создать App ID
  • сгенерировать development and App Store сертификаты
  • создать development и distribution provisioning профили
  • создать схему (назовем ее App Store) в Xcode проекте
  • настроить сертификаты и профили в схеме

Многие задачи выполняются в разделе Provisioning в личном кабинете разработчика на сайте Apple Developer. Provisioning

Если у вас уже есть оплаченный аккаунт, откройте Apple Developer website, выберете “Account” -> “Certificates, Identifiers & Profiles.”

Создание App IDs

App ID это уникальный идентификатор для регистрации вашего приложения. Первым делом, давайте создадим его. App IDs

Шаги для регистрации на сайте apple разрабочика:

  1. Выберите “App IDs” под вкладкой “Identifiers”
  2. Нажмите “+” вверху списка
  3. Введите имя для App ID (используйте название приложения или название + дополнительное имя)
  4. Выберите “Explicit App ID” и введите ваш Bundle ID в текстовое поле
  5. Под “App Services” раздела, выберите сервисы нужные для вашего приложения (их можно будет отредактировать позже)
  6. Нажимаем “Continue”
  7. Если все хорошо — выбираем “Register”

Это все. Bundle ID зарегистрирован и можно генерировать профили на основе этого ID. Если в будущем вы измените Bundle ID, придется также удалить App ID (если он не будет использоваться) и пересоздать новый App ID.

Так, а в чем тогда разница между App ID и Bundle ID? В общем App ID это уникальный идентификатор приложения в экосистеме App Store, не может быть двух приложений там с одинаковыми App ID. Bunlde ID это идентификатор учетной записи разработчика (используется обратная доменная запись — com.mysite.appname).

Создание сертификатов

Я расскажу вам как создавать сертификат для App Store (другие сертификаты созадаются аналогично). Сертификат можно использовать для разработки и распространения всех ваших приложений.

Первое — нужно создать Certificate Signing Request (CSR) в личном кабинете разработчика, для этого:

  1. на вашем Mac откройте Keychain Access (находится тут — /Applications/Utilities).
  2. далее в Keychain Access > Certificate Assistant > Request a Certificate From a Certificate Authority.
  3. в окне введите ваш email и имя, затем выберите “Save to disk” в опции “Request is”.
  4. жмите Contunue и сохраните файл на компьютере Mac. Certificate Signing Request

Теперь у на есть CSR, и мы готовы сгенерировать рабочий сертификат, для этого заходим в личный кабинет и:

  1. идем в раздел Certificates, Identifiers & Profiles > Certificates > All
  2. нажимаем “+” чтобы создать новый сертификат
  3. выбираем “iOS App Development” для создания development сертификата для отладки на зарегистрированных устройствах
  4. Continue
  5. дальше будут инструкции как сгенерировать CSR (мы уже это сделали!)
  6. загрузите запрос CSR (инструкции прилагаются)
  7. жмем на Download для загрузки сгенерированного сертификата, после этого двойным кликом мышки добавляем его в Keychain Access certificate

Для проверки что сертификат установлен в системе, зайдите в Keychain Access > Login Keychain > Certificate, вы должны увидеть публичный и приватные ключи с префиксом “iPhone Developer” (это значит что сертификат для подписки ios приложений, у сертификатов для Mac приложений будет — “Mac development”).

“App Store and Ad Hoc” сертификаты создаются аналогично (разница в п.3 только), сертификат действителен один год, по окончании срока его нужно удалить и создать новый, при этом все связанные provisioning профили аннулируются и их также придется повторно сгенерировать.

Регистрация устройств

Тестовые устройства для отладки приложений регистрируются в помощью UDID — уникального идентификатора. Он включается в provisioning профили (создадим на следующем шаге), при добавлении/удалении нового устройства нужно повторно сгенерировать provisioning профиль. Поэтому мы сделаем этот шаг первым.

UDID устройства можно найти в iTunes или в Xcode (подключите устройство к Mac запустите Xcode, найдите в Window > Devices > ваше устройство и скопируйте UDID строку в разделе “Identifier”), это уникальный идентификатор вашего физического устройства.

Для регистрации UDID:

  1. идем в Certificates, Identifiers & Profiles > Devices > All (личный кабинет разработчика)
  2. жмем “+” для добавления нового устройства
  3. вводим имя, мы рекомендуем формат для этого “Имя/Тип устройства/Добавлен или Изменен/Дата”, удобно для больший команд
  4. вводим UDID
  5. нажимаем “Contunue” UDID

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

Создание профилей

Provisionig профиль это ключевой момент для подписи приложения. Он определяет какие устройства имеют право запускать подписанное приложение, указывает на сертификат для подписи приложения, а также какие сервисы будут доступны для приложения на этом устройстве (iCloud, APNs и т.д).

Создать provision профиль довольно просто в личном кабинете разработчика, для этого:

  1. идем в Certificates, Identifiers & Profiles > Provisioning Profiles > All и видим список созданных профилей
  2. жмем “+” для добавления нового профиля
  3. выбираем из списка “iOS App Development” и жмем на Continue
  4. далее выберите App ID (созданный ранее) и опять Continue
  5. на этом экране вам предлагают выбрать сертификат для подписи профиля, указываем только что созданный сертификат, и жмем Contunue (можно выбрать несколько сертфикатов для профиля, каждый из них может подписать приложение)
  6. на экране “Select Devices” укажите устройства, на которых вы будете запускать приложение
  7. экран “Generate” предлагает дать профилю читаемое имя, в MartianCraft мы обычно используем формат: [App Name]: [Profile Type] Profile (например “MartianApp: Development Profile”), жмем по привычке Continue
  8. итак на последнем экране (вы тоже не любите неуместное употребление “крайний”?) можно загрузить созданный профиль. После загрузки перетащите его на иконку Xcode в доке (быстрый способ добавить файл в

Для создания App Store профиля повторяем весь процесс, но на шаге 3 выбираем “App Store”, это профиль для распространия приложений в AppStore, и поэтому в него нельзя добавить устройства.

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

Provisioning profile details

Процесс обновления профиля простой: идем в Certificates, Identifiers & Profiles in the provisioning portal > Provisioning Profiles > All, находим нужный профиль и жмем Edit для изменений App ID, настроек сертификата или списка устройств.

Работа с схемами и сертификатами в Xcode

Наконец-то у нас есть все для подписи iOS приложения, мы соберем все вместе внутри Xcode и свяжем сертификат и provisioning профиль в особую схему.

По умолчанию, XCode автоматически создает две схемы: Debug и Release. Воспользуемся ими, для Debug схемы мы будем использовать Development профиль и сертификат, для Release — AppStore профиль и сертификат. Открываем “General” вкладку и ищем там “targets” (помним что для этого используем сертификаты добавленные в Keychain и Provisioning profiles это папка в XCode см. выше).

Снимаем галочку “Automatically manage signing”, так как мы будем подписывать “самостоятельно”. После этого появятся две секции: “Signing (Debug)” и “Signing (Release).” Manual signing

В Signing (Debug) > Provisioning Profile выставляем Development профиль, а в Signing (Release) — AppStore профиль.

Это все что нужно сделать для работы с профилями в “ручном” режиме. Мне кажется не так уж и сложно 🙂 Теперь можно и поработать.

Частые ошибки и как их исправить

Provisioning Profile doesn’t match bundle ID Это значит что provisioning профиль был сгенерирован с неправильным App ID/Bundle ID и профиль содержит Bundle ID от другого проекта.

Code Signing Entitlements file do not match those specified in your provisioning profile Локальные права не соответствуют профилю (посмотрите Capabilites вкладку). При добавлении сервисов типа iCloud, Keychain они должны быть зарегистрированы в профиле.

No Matching Provisioning Profiles Found случается когда сертификату не имеет связанных профилей для подписи приложений. Проверьте что профиль импортирован в Xcode (можно вручную открыть папку:

/Library/MobileDevice/Provisioning Profiles), посл этого в личном кабинете убедитесь, что профиль использует необходимый сертификат, в случае необходимости обновите профиль.

Более подробно ошибки описаны на сайте для разработчиков Apple Developer.

Сборка и подпись приложения

С нашими настройками удобно создавать сборки приложения и запускать на зарегистрированных устройствах. Для выпуска приложения под AppStore следует выбрать “Generic iOS Device”, затем Product > Archive, будет создан архив, подписанный профилем-сертификатом “AppStore Provisioning”.

Отправка приложения происходит в Xcode Organizer (Window > Organizer), выбирайте архив для отправки в AppStore и следуйте инструкциям в окне. Не забываем выбрать “Use local signing assets” при выборе команды разработчиков.

Выводы

В этих двух статьях мы рассмотрели все этапы provisioning процесса, для новичков это может показаться непростым делом, к счастью это нужно делать только раз в год и для старта нового проекта. Все коснулись всех базовых моментов provisioning и сборки приложения, если еще остались вопросы, у Apple есть несколько видео с прошлых WWDCC для более глубокого понимания процесса, ссылки ниже.

Выкладываем приложение в App Store. Даже если вы не разработчик

Ранее писали про этап подготовки к релизу. Сейчас расскажем про публикацию приложения в AppStore. Пошаговый гайд будет полезен новичкам, которые до этого не сталкивались с полицией нравов из Купертино.

Для того чтобы выложить приложение в App Store, потребуется оплаченный аккаунт разработчика, среда разработки XCode и исходный код вашего приложения. Разобьем процесс на четыре этапа:

  1. Настройка аккаунта
  2. Оформление приложения для магазина
  3. Настройка проекта, сборка и выгрузка
  4. Отправка на ревью

Настройка аккаунта

Все приложения перед выгрузкой в App Store должны быть подписаны сертификатом разработчика. Это нужно, чтобы пользователи App Store были уверены, что скачивают конкретное приложение от конкретного разработчика, а не подделку от чужого имени. Процедура подписывания (code signing) приложения позволяет операционной системе узнать, кто является разработчиком. И удостовериться в том, что приложение не было изменено с момента сборки. Точнее, с того момента, как разработчик его подписал. В этой процедуре участвуют три объекта: сертификат разработчика, AppID и Provisioning profile.

Сертификат

Сертификат представляет собой пару ключей асимметричного шифрования: приватный и публичный. В процессе сборки XCode формирует цифровую подпись для сборки на основании данных приватного ключа. Проверить подпись можно с помощью публичного ключа, который доступен и для Apple, который этот сертификат выдала.

Одного сертификата достаточно для выкладки неограниченного количества приложений.

Чтобы создать сертификат, нужно:

  • Перейти на developer.apple.com, перейти в раздел «сертификаты», нажать на плюсик

  • Выбрать тип сертификата Production — App Store and Ad Hoc
  • Следуя приведенным инструкциям сформировать Certificate request и загрузить его на портал

Сохраните сгенерированный сертификат на компьютер, откройте его (дважды кликнув). Сертификат будет помещен в системное хранилище и доступен для XCode.

AppID

Это уникальный строковый идентификатор приложения среди всех приложений. Он нужен для однозначной идентификации во всех системах: iTunes Connect, App Store и пр. Он состоит из двух частей: TeamID и BundleID. TeamID — идентификатор разработчика, выдается Apple на этапе регистрации аккаунта разработчика и не меняется. BundleID задается разработчиком при регистрации приложения в аккаунте.

  • Перейдите в раздел AppIDs (ссылка), нажмите на плюсик справа вверху
  • Заполните поле App ID Description — условное наименование приложения для разработчика, не видимое в App Store, например TestApplication
  • Заполните поле Explicit App ID — тот самый BundleID, например ru.myStartup.testApplication
  • В разделе App Services подключите те сервисы, которые понадобились в процессе разработки приложения. Если вы не понимаете, о чем речь — оставьте как есть.

Provisioning profile

Это профиль, который однозначно связывает AppID и сертификат разработчика (публичный ключ сертификата). В случае development provisioning profile он также содержит UDID всех устройств, на которых возможен запуск приложения.

  • Перейдите в раздел iOS Provisioning Profiles (ссылка), нажмите на плюсик справа вверху
  • Тип профайла — App Store
  • Затем необходимо указать AppID, для которого создается профайл — укажите раннее созданный AppID
  • Следующий шаг — выбор сертификата. Отметьте галочкой сертификат, который мы создали ранее
  • Последним шагом необходимо дать наименование профайлу, например, TestApplicationStoreProfile

Сохраните сгенерированный профайл на компьютер, откройте его, дважды кликнув. Теперь сертификат доступен для XCode.

Оформление приложения для магазина

Теперь нужно добавить приложение в iTunes Connect.
Переходим на https://itunesconnect.apple.com в раздел MyApps. Чтобы добавить приложение, нажмите плюсик слева вверху:

Заполняем открывшуюся форму:

  • Указываем платформу — iOS
  • Наименование приложения, будет отображаться в App Store. До 30 знаков.
  • Основной язык приложения
  • Выберите из выпадающего списка AppID приложения
    *SKU — уникальный идентификатор для финансовых отчетов и аналитики. Можно сделать таким же как BundleID выше

Если все заполнено правильно, попадаем на страницу приложения.

На вкладке слева «Pricing and Availability» заполняем информацию о стоимости приложения в сторе. На вкладке слева с номером версии заполняем маркетинговую информацию:

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

О том, как подготовить маркетинговую информацию, мы рассказывали в предыдущей статье.

Также есть секция для того, чтобы можно было указать конкретную сборку, которую отправлять на ревью, а затем и в стор. Выбор недоступен до тех пор, пока мы не загрузили в iTunes Connect ни одной сборки приложения. Мы вернемся к этой секции позже:

Чтобы сохранить внесенные изменения, используйте кнопку Save наверху:

Настройка проекта, сборка и выгрузка

Откройте проект вашего приложения в XCode, перейдите к настройкам проекта. Необходимо, чтобы Bundle Identifier совпадал с BundleID, который вы указали при создании AppID. Также необходимо отключить функцию автоматического управления подписыванием в XCode. В выпадающем списке Provisioning Profile выберите тот, который недавно создали.

Обратите внимание: без всех необходимых иконок (в том числе иконка для магазина со стороной 1024 точки) сборка приложения не пройдет автоматическую проверку в iTunes Connect.

Теперь проект можно собрать и отправить в iTunes Connect. Для этого нужно нажать меню Product — Archive. По итогу сборки будет показано окно органайзера XCode, нажмите там кнопку «Upload To App Store»:

Открывается окно настроек выгрузки в App Store. Подробнее про bitcode, symbols stripping. Оставляем настройки без изменений.

На следующем шаге нужно выбрать provisioning profile из выпадающего списка подходящих:

Затем XCode подготовит архив для выгрузки в iTunes Connect. На этом экране обратите внимание на те параметры, что мы установили. Нажмите Upload.

В зависимости от скорости соединения нужно будет подождать некоторое время. Если все в порядке, XCode сообщит об успешном завершении выгрузки в iTunes Connect. Можно переходить к последнему этапу.

Отправка на ревью

В iTunes Connect на вкладке Activity можно увидеть отправленную сборку. Для проектов на Swift автоматическая проверка сборки занимает примерно полчаса. До тех пор сборка будет со статусом Processing:

После окончания проверки сборка доступна для выбора на странице информации о версии приложения:

После этого у приложения в iTunes Connect появится иконка. Сохраните изменения. Теперь можно отправить сборку на ревью.

Готово! Вы сделали все, что могли. Ждите ответа в течение нескольких дней. Не забудьте, что с 23 по 27 декабря iTunes Connect на каникулах. Разработчики не смогут обновлять и добавлять новые приложения в App Store и изменять ценники. Все остальные функции iTunes Connect будут доступны.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *