Перейти к содержимому

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

  • автор:

Как подписать приложение 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 для более глубокого понимания процесса, ссылки ниже.

How to code sign iOS apps and publish to the App Store like a pro?

Codemagic

This article was orginally published in here and written by Shashikant Jagtap. Check Codemagic blog for more topics on CI/CD for mobile, Flutter and mobile app development.

Unless the device is Jailbroken, all the apps that run on iOS devices need to be signed by trusted developers who have a valid certificate from Apple. In this post, we will explore how to code sign iOS apps and publish to the App Store.

Why code sign iOS apps?

Code signing makes the user feel safe whilst using the app, providing the app has been developed by trusted developers. Every developer or organisation who wants to develop iOS apps needs a certificate from Apple to make apps. Code signing ensures that nothing has been changed since the developer signed the code, meaning there is no chance of an attacker changing the code when it has been written by the developer. In summary, code signing makes the apps secure for users. However, there are some limitations as well. Code signing does not protect users against attacks from dynamic content, e.g. when the app is loading data from various third-party sources.

What is required to code sign apps?

There are various things we need to code sign our iOS apps. We will briefly address each one.

CSR (Certificate Signing Request)

This is the very first step in code signing iOS apps. The developer needs to create a Certificate signing request (CSR) from their local machine, with some basic details confirming the developer’s identity. The CSR needs to be sent to the Certificate Authority (CA), which is Apple for the iOS platform. Apple then confirms the developer’s identity and issues a certificate to the developer. Anyone can create a CSR from their local macOS machine using the Keychain:

  • Choose Keychain Access > Certificate Assistant > Request a Certificate from a Certificate Authority.
  • Fill in your details (email, name, country, etc.). Simply follow all the instructions on screen.
  • Select the option Save to disk.
  • Specify a filename and click Save.
  • Click Continue and the Certificate Assistant generates a CSR and saves the file to your computer.

At the end of this process, you will have a CSR on your local machine.

Certificate

In order to get the certificate from Apple, we need to have a developer membership with Apple. You can enrol in the development programme using this link. Apple will charge a fee of approx. $99/year for the developer membership. You can get different types of certificates too, e.g. development, distribution, enterprise. Once you get the Apple developer membership, you will be able to access the developer portal, from which you can create a certificate for iOS development.

The process is very simple and straightforward. You can find the step by step guide here to create a certificate. As a developer, you can create a certificate for development or distribution. The development certificate is used to develop apps internally, which are deployed on internal devices. However, distribution certificates are used to release apps to the App Store that can run on any device. iOS development certificates are usually associated with private keys. You can export the certificate from keychain to the Personal Information Exchange a.k.a. the P12 format to store both the certificate and private key together. You can find the entire process of exporting the certificate mentioned in this post here.

Provisioning profiles

The provisioning profile is a combination of the Team ID, Bundle ID, App ID, Device ID and Entitlements. Provisioning profiles define the rule for running the app inside the device. Its role is to confirm:

  • a specific app with an App ID
  • that an app with that app ID can run on certain devices included in the provisioning profile. Development provisioning profiles have the list of devices included, whilst distribution provisioning profiles do not.
  • that the app should only have those entitlements defined in the provisioning profile.
  • that the app can only run trust based on the certificate embedded in the provisioning profile.

The process for creating a provisioning profile can be found here.

Provisioning profiles can also be created for development as well as distribution certificates. Once the provisioning profile has been created, we are able to sign the iOS apps.

Apple has very comprehensive documentation on the entire code signing process here. Whilst code signing an iOS app, all components, including bundles, resources, frameworks, tools, scripts, libraries, plugins, Info.plist files, assets and all other codes, need to be code signed along with the individual components of the apps.

Xcode code signing

Xcode uses the codesign command line tool to sign the app once it’s built. We can use the codesign tool to sign the app without Xcode as well. The codesign tool is used to create and verify the code signature. Xcode uses automated code signing to code sign iOS apps, but we can also use customised signing for better control. Apple announced automated code signing in Xcode 8; we have the new setting in the General tab of the build target to enable automatic code signing. We simply need to let Xcode know our development team and Xcode will handle all code signing tasks, such as certificates, provisioning profiles, etc., automatically.

In the process of manual signing, we have to explicitly specify the code signing identity and provisioning profile in the build setting.

Как подписывать iOS приложения Apple Enterprise сертификатом?

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

Преимущество учетной записи Apple Enterprise — Вы можете безопасно размещать свои приложения и распространять их вне AppStore.

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

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