Всё что нужно знать. Коротко. Понятно.
Когда спрашивают про ключи подписи приложений, то явно или не явно имеется в ввиду закрытый криптографический ключ. Различные проблемы и недопонимания данной темы появились из-за того что существуют различные форматы контейнеров, в которых и хранится данный ключ.
Если вы делаете ваше webview приложение для IOS на Xcode, под макбуком, то многие вещи для вас остаются «за кадром» — вы просто нажимаете кнопку и ваша среда автоматически делает различные запросы к вашему аккаунту и прочее.
Но, как быть, если вы решили сделать сборку на REact Native, или просите кого-то обновить приложение? Данный вопрос мы и рассмотрим.
Забегая вперед сажу сразу — для подписи приложений на react native нужно сделать файл .P12.
Данный файл будет содержать закрытый ключ и сертификат!
Все трудности и проблемы связаны с недопониманием что это такое! Ведь сам по себе портал Apple Developer не выдаёт никаких файлов формата P12, а для его получения приходитcя генерировать несколько различных файлов, которые то и дело приходится загружать то на поhтал aplle developer, то обратно на программу связка ключей в вашем MAC OS
Форматы контейнеров для хранения ключа.
Сам по себе закрытый ключ подписи, который вы сгенерируете никак не защищён, имея его на руках, вы можете подписать им всё что угодно.
Поэтому, что бы защитить его, он помещается в контейнер. Данные контейнеры бывают разные. Сейчас везде куда ни плюнь
PKCS12
Из этого вытекает первое правило — для доступа к ключу разработчика — нужен пароль от контейнера (хранилища ключа)!
Нет пароля? Попробуйте стандартный — 11111, android. Не подошёл — забейте. Вы потеряли возможность загрузить обновление вашего приложения.
Когда вы делаете приложение в Android Studio, то там можно сразу же сгенерировать закрытый ключ подписи, который автоматически поместится в контейнер JKS. Удивительно, но для этого не нужен аккаунт разработчика. В действительности закрытый ключ подписи это просто секретный шифр, который можно создать программой keytool.
Первая проблема, с которой вы столкнётесь — подписать IOS приложение можно только сертификатом, который выдаст APPSTORE!
Из этого следует одно важное правило — у вас должен быть оплаченный аккаунт разработчика apple developer
Для того чтобы получить сертификат для подписи нужно сделать запрос в центр сертификации. CSR
To manually generate a Certificate, you need a Certificate Signing Request (CSR) file from your Mac.
Так прям и написано на сайте apple developer.
Обычно это делается через mac OS из программы связка ключей
Когда в программе связка ключей вы генерируете CSR файл, то в него помещается ОТКРЫТЫЙ КЛЮЧ и некоторые данные.
Закрытый ключ по прежнему остаётся на вашем MAC OS.
Далее вы на портале apple developer создаёте сертификат подписи.
Второе важное правило — этот сертификат подписи не содержит закрытый ключ!
Это значит что, если вы не сделали P12 на вашем макбуке, то всё ещё не сможете подписать IOS приложение на REACT Native. Так как для подписи нужен закрытый ключ, которого нет в том файле, который выдаёт портал apple developer при загрузке на него CSR файла и генерации сертификата!
Проверьте данный факт сами. Зайдите на портад apple developer и скачайте сгенерированный сертификат. Этот сертификат выдаётся после CSR запроса. Точнее после загрузки на этот портал CRS файла. И не содержит приветного ключа.
Убедится в этом можно открыв данный фыйл в чудесной программе https://keystore-explorer.org/downloads.html
В ней вы воочию убедитесь в содержимом данного файла.
Что делать?
Всё очень просто. Ваш приватный ключ остался где-то в СВЯЗКЕ КЛЮЧЕЙ на вашем MAC OS. Просто перетащите туда файл, который вы скачали с apple developer (сертификат) и сгенерируйте файл P12
Напоследок убедитесь в том, чо ваш чудесный P12 контейнер содержит как ключи, так и сам сертификат, выданный apple порталом для разработчиков.
Откройте полученныйПЭ12 в чудесной программе KeyStore Explorer
Теперь-то вы можете подписать ваше приложение
Время прочтения
4 мин
Просмотры 7.2K
В экосистеме Apple сейчас так устроено, что для выпуска приложений iOS/macOS требуется получение сертификата, затем подпись кода и нотаризация подписи. Согласно документации, подпись кода гарантирует пользователям, что приложение получено из известного источника и не изменялось. Для получения и использования сертификатов требуется участие в программе Apple Developer Program.
Такая система удобна с точки зрения безопасности закрытой экосистемы Apple, но создаёт некоторые трудности для разработчиков.
Однако любые трудности на то и существуют, чтобы их преодолевать.
Подпись и нотаризация
В большинстве случаев для запроса и установки цифровых сертификатов используется Xcode.
Если посмотреть на реально используемые программные модули, то система подписи кода Apple довольно сложная: официальные инструменты codesign
поддерживают ряд продвинутых функций, в том числе подпись пакетов с вложенной структурой, подпись DMG, инсталляторов .pkg и др. Нативная процедура подписи не полностью задокументирована, а опубликованный исходный код не полностью соответствует актуальным версиям инструментов.
Нужно заметить, что Apple имеет право в любой момент отозвать сертификат любого разработчика — и его софт перестанет работать на компьютерах или смартфонах. Например, такое однажды случилось с разработчиком программы Downie для скачивания видео с YouTube (на скриншотах вверху и внизу).
Apple крайне неохотно публикует исходники своих инструментов в репозитории Apple-FOSS. Например, около десяти лет назад опубликована часть кода SecurityFramework, но с тех пор обновления не произошло, репозиторий очень устарел. И там отсутствует код для нотаризации подписей через notarytool
.
Кроме того, инструмент подписи кода Apple зависит от нативных библиотек Cocoa/OSX, таких как CoreFoundation, с которыми по факту опенсорсные инструменты работать не могут.
Поэтому создать современный аналог нативного codesign
— крайне сложная задача, не говоря уже о нотаризации. Но нашлись разработчики, которые справились с ней.
Подпись приложений Apple на компьютерах Linux
Во-первых, есть малоизвестный инструмент ldid от Джея Фримана. Этот разработчик под ником saurik известен джейлбрейками iOS и проектом Сydia — альтернативным каталогом программного обеспечения для iOS. Очевидно, что «освобождённым» приложениям из этого каталога для установки на iPhone не требуется нотаризация подписи в компании Apple, а сам Джей Фриман не очень одобряет саму идею подписи программ, хотя был вынужден разработать такой инструмент для собственных нужд.
Так или иначе, но есть ldid
и его форки и документация для ldid.
Для подписи приложений iOS под Linux также существует опенсорсная программа isign. Например, она может подойти в некоторых нестандартных ситуациях:
- Необычные подписи (скажем, компания хочет выпускать сертификаты с использованием аппаратного модуля безопасности).
- Распространение приложений iOS/macOS через сторонние каталоги. Это актуально в современных условиях, когда у некоторых компаний нет возможности публикации своих приложений в App Store.
- Массовая публикация приложений в App Store под разными названиями для новых версий.
Apple Codesign
Недавно был разработан инструмент apple-codesign — полная реализация подписи приложений Apple на чистом Rust. Эта программа не имеет никаких внешних зависимостей и не требует для работы никаких проприетарных модулей. Она поддерживает все продвинутые функции нативных инструментов codesign
и notarytool
, включая подпись бинарников Mach-O, каталогов .app, архивов XAR, инсталляторов .pkg, дисковых образов DMG и др.
Как пишет разработчик, в последней версии его программа избавилась от инструмента Transporter для нотаризации. Это нативное Java-приложение Apple работало под macOS, Linux и Windows, связываясь c серверами Apple в процессе нотаризации подписи. Однако на конференции WWDC 2022 компания Apple представила программные интерфейсы Notary API, которые осуществляют процедуру чисто через API, принимая вызовы из любой программы. Во вспомогательном инструменте командной строки rcodesign
всё взаимодействие с Notary API и заверение подписи производится одной командой в консоли:
rcodesign notary-submit
Таким образом, с помощью крейта apple-codesign теперь можно подписывать и заверять программы iOS/maсOS с любых компьютеров под Linux, Windows, macOS, BSD и пр. В принципе, с некоторыми затруднениями такое было возможно и раньше, но теперь этот барьер официально пал.
Последняя версия Apple Codesign 0.17.0 вышла 8 августа 2022 года.
Зачем нужны сторонние инструменты
Есть много разных причин для автоматической подписи приложений iOS/macOS под Linux и другими ОС. Чаще всего это нужно для конвейеров непрерывной интеграции (CI/CD) с автоматизацией сборки, как делают сервисы типа Fastlane.
Сейчас автоматизация сборки под Mac требует некоторых манипуляций с VM или покупки/взятия в аренду настоящего Mac. Если появляется возможность организовать CI просто под Linux, это кардинально упрощает инфраструктуру всей среды разработки. Правда, тесты и валидацию всё равно желательно проводить на настоящем железе Apple, но конкретно для подписи программ теперь не нужен компьютер Apple. Достаточно маленького контейнера под Linux. Это можно делать на тех же компьютерах, что и подпись кода для всех остальных платформ. Такой подход кажется более логичным, безопасным и удобным в долгосрочной поддержке.
Подробнее о сертификатах подписи кода на сайте GlobalSign
How do I sign the .ipa file with a provisioning profile after I generate an IPA like the following with a different provision profile? I would like to sign the IPA with an ad-hoc provisioning profile for beta testing, and then re-sign the exact IPA with an app submission provisioning profile for the app store.
/usr/bin/xcrun -sdk iphoneos PackageApplication -v "${RELEASE_BUILDDIR}/${APPLICATION_NAME}.app" -o "${BUILD_HISTORY_DIR}/${APPLICATION_NAME}.ipa" --sign "${DEVELOPER_NAME}" --embed "${PROVISONING_PROFILE}"
Mogsdad
44k21 gold badges151 silver badges272 bronze badges
asked Mar 1, 2011 at 21:55
1
It’s really easy to do from the command line. I had a gist of a script for doing this. It has now been incorporated into the ipa_sign script in https://github.com/RichardBronosky/ota-tools which I use daily. If you have any questions about using these tools, don’t hesitate to ask.
The heart of it is this:
CODESIGN_ALLOCATE=`xcrun --find codesign_allocate`; export CODESIGN_ALLOCATE
IPA="/path/to/file.ipa"
PROVISION="/path/to/file.mobileprovision"
CERTIFICATE="Name of certificate: To sign with" # must be in keychain
# unzip the ipa
unzip -q "$IPA"
# remove the signature
rm -rf Payload/*.app/_CodeSignature
# replace the provision
cp "$PROVISION" Payload/*.app/embedded.mobileprovision
# sign with the new certificate (--resource-rules has been deprecated OS X Yosemite (10.10), it can safely be removed)
/usr/bin/codesign -f -s "$CERTIFICATE" Payload/*.app
# zip it back up
zip -qr resigned.ipa Payload
Your new signed app is called resigned.ipa
answered Jun 5, 2012 at 22:25
Bruno BronoskyBruno Bronosky
64.3k12 gold badges158 silver badges143 bronze badges
28
Check iResign for an easy tool on how to do this!
[edit] after some fudling around, I found a solution to keychain-aware resigning. You can check it out at https://gist.github.com/Weptun/5406993
CupawnTae
14k3 gold badges28 silver badges60 bronze badges
answered Jan 2, 2012 at 13:40
BlitzBlitz
5,4613 gold badges34 silver badges53 bronze badges
3
Kind of old question, but with the latest XCode, codesign
is easy:
$ codesign -s my_certificate example.ipa
$ codesign -vv example.ipa
example.ipa: valid on disk
example.ipa: satisfies its Designated Requirement
answered May 7, 2013 at 19:15
BryanHBryanH
5,7463 gold badges36 silver badges47 bronze badges
3
Fastlane’s sigh provides a fairly robust solution for resigning IPAs.
From their README:
Resign
If you generated your
ipa
file but want to apply a different code signing onto the ipa file, you can usesigh resign
:
fastlane sigh resign
sigh
will find the ipa file and the provisioning profile for you if they are located in the current folder.You can pass more information using the command line:
fastlane sigh resign ./path/app.ipa --signing_identity "iPhone Distribution: Felix Krause" -p "my.mobileprovision"
It will even handle provisioning profiles for nested applications (eg. if you have watchkit apps)
answered Aug 28, 2017 at 18:00
mattliumattliu
80515 silver badges28 bronze badges
0
The answers posted here all didn’t quite work for me. They mainly skipped signing embedded frameworks (or including the entitlements).
Here’s what’s worked for me (it assumes that one ipa file exists is in the current directory):
PROVISION="/path/to/file.mobileprovision"
CERTIFICATE="Name of certificate: To sign with" # must be in the keychain
unzip -q *.ipa
rm -rf Payload/*.app/_CodeSignature/
# Replace embedded provisioning profile
cp "$PROVISION" Payload/*.app/embedded.mobileprovision
# Extract entitlements from app
codesign -d --entitlements :entitlements.plist Payload/*.app/
# Re-sign embedded frameworks
codesign -f -s "$CERTIFICATE" --entitlements entitlements.plist Payload/*.app/Frameworks/*
# Re-sign the app (with entitlements)
codesign -f -s "$CERTIFICATE" --entitlements entitlements.plist Payload/*.app/
zip -qr resigned.ipa Payload
# Cleanup
rm entitlements.plist
rm -r Payload/
answered May 17, 2018 at 13:16
simonseyersimonseyer
6201 gold badge7 silver badges13 bronze badges
4
I’ve updated Bryan’s code for my Sierra iMac:
# this version was tested OK vith macOs Sierra 10.12.5 (16F73) on oct 0th, 2017
# original ipa file must be store in current working directory
IPA="ipa-filename.ipa"
PROVISION="path-to.mobileprovision"
CERTIFICATE="hexadecimal-certificate-identifier" # must be in keychain
# identifier maybe retrieved by running: security find-identity -v -p codesigning
# unzip the ipa
unzip -q "$IPA"
# remove the signature
rm -rf Payload/*.app/_CodeSignature
# replace the provision
cp "$PROVISION" Payload/*.app/embedded.mobileprovision
# generate entitlements for current app
cd Payload/
codesign -d --entitlements - *.app > entitlements.plist
cd ..
mv Payload/entitlements.plist entitlements.plist
# sign with the new certificate and entitlements
/usr/bin/codesign -f -s "$CERTIFICATE" '--entitlements' 'entitlements.plist' Payload/*.app
# zip it back up
zip -qr resigned.ipa Payload
answered Oct 11, 2017 at 8:05
3
- Unzip the .ipa file by changing its extension with .zip
- Go to Payload. You will find .app file
- Right click the .app file and click Show package contents
- Delete the
_CodeSigned
folder - Replace the
embedded.mobileprovision
file with the new provision profile - Go to KeyChain Access and make sure the certificate associated with the provisional profile is present
-
Execute the below mentioned command:
/usr/bin/codesign -f -s "iPhone Distribution: Certificate Name" --resource-rules "Payload/Application.app/ResourceRules.plist" "Payload/Application.app"
-
Now zip the Payload folder again and change the .zip extension with .ipa
Hope this helpful.
For reference follow below mentioned link:
http://www.modelmetrics.com/tomgersic/codesign-re-signing-an-ipa-between-apple-accounts/
dsh
11.9k3 gold badges33 silver badges51 bronze badges
answered Sep 11, 2015 at 8:01
How do I sign the .ipa file with a provisioning profile after I generate an IPA like the following with a different provision profile? I would like to sign the IPA with an ad-hoc provisioning profile for beta testing, and then re-sign the exact IPA with an app submission provisioning profile for the app store.
/usr/bin/xcrun -sdk iphoneos PackageApplication -v "${RELEASE_BUILDDIR}/${APPLICATION_NAME}.app" -o "${BUILD_HISTORY_DIR}/${APPLICATION_NAME}.ipa" --sign "${DEVELOPER_NAME}" --embed "${PROVISONING_PROFILE}"
Mogsdad
44k21 gold badges151 silver badges272 bronze badges
asked Mar 1, 2011 at 21:55
1
It’s really easy to do from the command line. I had a gist of a script for doing this. It has now been incorporated into the ipa_sign script in https://github.com/RichardBronosky/ota-tools which I use daily. If you have any questions about using these tools, don’t hesitate to ask.
The heart of it is this:
CODESIGN_ALLOCATE=`xcrun --find codesign_allocate`; export CODESIGN_ALLOCATE
IPA="/path/to/file.ipa"
PROVISION="/path/to/file.mobileprovision"
CERTIFICATE="Name of certificate: To sign with" # must be in keychain
# unzip the ipa
unzip -q "$IPA"
# remove the signature
rm -rf Payload/*.app/_CodeSignature
# replace the provision
cp "$PROVISION" Payload/*.app/embedded.mobileprovision
# sign with the new certificate (--resource-rules has been deprecated OS X Yosemite (10.10), it can safely be removed)
/usr/bin/codesign -f -s "$CERTIFICATE" Payload/*.app
# zip it back up
zip -qr resigned.ipa Payload
Your new signed app is called resigned.ipa
answered Jun 5, 2012 at 22:25
Bruno BronoskyBruno Bronosky
64.3k12 gold badges158 silver badges143 bronze badges
28
Check iResign for an easy tool on how to do this!
[edit] after some fudling around, I found a solution to keychain-aware resigning. You can check it out at https://gist.github.com/Weptun/5406993
CupawnTae
14k3 gold badges28 silver badges60 bronze badges
answered Jan 2, 2012 at 13:40
BlitzBlitz
5,4613 gold badges34 silver badges53 bronze badges
3
Kind of old question, but with the latest XCode, codesign
is easy:
$ codesign -s my_certificate example.ipa
$ codesign -vv example.ipa
example.ipa: valid on disk
example.ipa: satisfies its Designated Requirement
answered May 7, 2013 at 19:15
BryanHBryanH
5,7463 gold badges36 silver badges47 bronze badges
3
Fastlane’s sigh provides a fairly robust solution for resigning IPAs.
From their README:
Resign
If you generated your
ipa
file but want to apply a different code signing onto the ipa file, you can usesigh resign
:
fastlane sigh resign
sigh
will find the ipa file and the provisioning profile for you if they are located in the current folder.You can pass more information using the command line:
fastlane sigh resign ./path/app.ipa --signing_identity "iPhone Distribution: Felix Krause" -p "my.mobileprovision"
It will even handle provisioning profiles for nested applications (eg. if you have watchkit apps)
answered Aug 28, 2017 at 18:00
mattliumattliu
80515 silver badges28 bronze badges
0
The answers posted here all didn’t quite work for me. They mainly skipped signing embedded frameworks (or including the entitlements).
Here’s what’s worked for me (it assumes that one ipa file exists is in the current directory):
PROVISION="/path/to/file.mobileprovision"
CERTIFICATE="Name of certificate: To sign with" # must be in the keychain
unzip -q *.ipa
rm -rf Payload/*.app/_CodeSignature/
# Replace embedded provisioning profile
cp "$PROVISION" Payload/*.app/embedded.mobileprovision
# Extract entitlements from app
codesign -d --entitlements :entitlements.plist Payload/*.app/
# Re-sign embedded frameworks
codesign -f -s "$CERTIFICATE" --entitlements entitlements.plist Payload/*.app/Frameworks/*
# Re-sign the app (with entitlements)
codesign -f -s "$CERTIFICATE" --entitlements entitlements.plist Payload/*.app/
zip -qr resigned.ipa Payload
# Cleanup
rm entitlements.plist
rm -r Payload/
answered May 17, 2018 at 13:16
simonseyersimonseyer
6201 gold badge7 silver badges13 bronze badges
4
I’ve updated Bryan’s code for my Sierra iMac:
# this version was tested OK vith macOs Sierra 10.12.5 (16F73) on oct 0th, 2017
# original ipa file must be store in current working directory
IPA="ipa-filename.ipa"
PROVISION="path-to.mobileprovision"
CERTIFICATE="hexadecimal-certificate-identifier" # must be in keychain
# identifier maybe retrieved by running: security find-identity -v -p codesigning
# unzip the ipa
unzip -q "$IPA"
# remove the signature
rm -rf Payload/*.app/_CodeSignature
# replace the provision
cp "$PROVISION" Payload/*.app/embedded.mobileprovision
# generate entitlements for current app
cd Payload/
codesign -d --entitlements - *.app > entitlements.plist
cd ..
mv Payload/entitlements.plist entitlements.plist
# sign with the new certificate and entitlements
/usr/bin/codesign -f -s "$CERTIFICATE" '--entitlements' 'entitlements.plist' Payload/*.app
# zip it back up
zip -qr resigned.ipa Payload
answered Oct 11, 2017 at 8:05
3
- Unzip the .ipa file by changing its extension with .zip
- Go to Payload. You will find .app file
- Right click the .app file and click Show package contents
- Delete the
_CodeSigned
folder - Replace the
embedded.mobileprovision
file with the new provision profile - Go to KeyChain Access and make sure the certificate associated with the provisional profile is present
-
Execute the below mentioned command:
/usr/bin/codesign -f -s "iPhone Distribution: Certificate Name" --resource-rules "Payload/Application.app/ResourceRules.plist" "Payload/Application.app"
-
Now zip the Payload folder again and change the .zip extension with .ipa
Hope this helpful.
For reference follow below mentioned link:
http://www.modelmetrics.com/tomgersic/codesign-re-signing-an-ipa-between-apple-accounts/
dsh
11.9k3 gold badges33 silver badges51 bronze badges
answered Sep 11, 2015 at 8:01
Сертификат Apple
С сертификатом разработчика Apple можно подписать и установить бесплатно практически любые платные и модифицированные приложения, даже удаленные из App Store. Без Jailbreak, на любой версии iOS, iPadOS и tvOS.
Стоимость сертификата: 699 599 рублей
Дешевле, чем всего одно достойное приложение.
Регистрация UDID и выпуск сертификата — мгновенно.
Для чего нужен сертификат?
Существуют тысячи приложений для вашего устройства, но многие из них стоят немалых денег, некоторые удалены из App Store, есть приложения с расширенным функционалом, которые ставятся только на «джейл», а есть и вовсе приложения для установки Jailbreak.
Сертификат разработчика позволяет подписать и установить такие приложения бесплатно и без взлома ОС.
Поддерживаются iPhone, iPad, iPod, Apple TV
Часто применяется для установки:
Отличие от «личного» сертификата:
Спецпредложение Закажите сертификат у нас и установите любое приложение с этой страницы без компьютера и jailbreak.
Как это работает?
Подпись сертификатом и установка приложений довольно проста. На первую настройку уходит около 20 минут, а на подпись одного приложения — не более минуты.
Настройте компьютер
После заказа вы получите от нас сертификаты, мобильный профиль и ссылку на инструкцию по установке.
Скачайте и подпишите приложения
В программе для подписи выберите наш сертификат и профиль, подпишите ими скачанное приложение или игру.
Приложения скачиваются не из App Store, а из различных «АппТрекеров». Таких ресурсов довольно много
Установите подписанное приложение
Любым доступным способом в MacOS или Windows: через iTunes (Apple Configurator), iTools, iFunBox и подобные, а также через облачные сервисы (через Safari), вроде diawi.com
Подпись возможна только в MacOS. Для того, чтобы подписывать приложения в Windows — необходимо установить виртуальное окружение.
Подробная инструкция по установке и другая важная информация находится в разделе помощи
Если вы не хотите ставить сертификаты, но необходимо установить какое‑либо приложение, мы можем подписать его для вас
Закажите сертификат сейчас
Выпуск сертификата и регистрация — мгновенно Только у нас! *
Регистрация UDID включена в стоимость. После оформления заказа UDID вашего устройства мгновенно будет зарегистрирован в Apple Developer Program, на электронную почту будут отправлены файлы сертификатов, мобильный профиль, инструкция по установке и подписи приложений. Мы гарантируем возврат полной суммы в случае ошибок регистрации и невозможности их устранения в течение 24 часов.
Регистрация UDID производится приблизительно на один год со дня оформления заказа. Сертификат действителен на протяжении всего срока регистрации, если не отзывается компанией Apple раньше окончания срока. Подробные правила и сроки регистрации указаны в разделе «Помощь».
* Среди аналогичных сервисов в России услуга автоматической регистрации UDID и выдачи сертификатов разработчика доступна только у нас.
Потому что мы лучшие
Мгновенная автоматическая регистрация 24/7, множество способов оплаты, профессиональная поддержка, SSL‑защита данных, удобный интерфейс, тысячи довольных клиентов. И это не всё.
Чтобы создать подпись для приложений 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 вамм потребуется Профиль обеспечения.
Русские Блоги
Несколько сертификатов, связанных с iOS-разработчиками
введение
Что касается разработки сертификатов, идентификаторов и профилей обеспечения, я считаю, что студенты, которые занимаются разработкой iOS, не брошены. Для разработчика iOS Xiaobai, наполовину вешалки (такой как я) или ветеран, есть более или менее или были следующие неизвестные, сомнения, сомнения и даже путаница:
- Что такое идентификатор приложения? В чем разница между явным идентификатором / идентификатором приложения? Что такое идентификатор группы приложений?
- Что такое сертификат? Как подать заявку? Какая польза?
- Что такое пара ключей (открытый ключ / закрытый ключ)? Какая польза? Как это связано с сертификатом?
- Что такое подпись? Как подписать (CodeSign)? Как проверить (Подтвердить)?
- Что такое (команда) профилирования? Какая польза?
- Как настроить Xcode для использования реальной машины iOS для разработки и отладки?
- Как несколько компьютеров имеют общую учетную запись или сертификат разработчика?
- Что мне делать, если я столкнулся с проблемой конфигурации сертификата?
В этой статье будет систематически сочетаться шампуры вокруг связанных понятий.
Напиши спереди
1. Предположим, вы использовали устройство Apple (iMac / iPad / iPhone) иЗарегистрироватьсяПередан Apple ID (учетная запись Apple).
2. Предположим, вы или ваша команда разработчиков присоединились к Программе разработчиков Apple (зарегистрируйтесь в Программе разработчиков iOS, чтобы статьmember) УжеЗарегистрироватьсяУчетная запись разработчика (Apple Developer Account).
- Только если у вас есть учетная запись разработчика, вы можете подать заявку на сертификаты разработки / выпуска и соответствующие файлы авторизации конфигурации, а затем разрабатывать и отлаживать приложения на реальном устройстве iOS или публиковать их в App Store.
- Существует два типа учетных записей разработчиков: индивидуальные и компания / организация. Если нет особого объяснения, нижеприведенное основано на обычной индивидуальной учетной записи разработчика (Индивидуальная) за 99 долларов США в год.
.App ID(bundle identifier)
- Явный идентификатор приложения: уникальный идентификатор приложения, используемый для однозначной идентификации приложения. Например, идентификатор приложения «com.apple.garageband» используется для идентификации приложения, идентификатор пакета которого — «com.apple.garageband».
- Подстановочный идентификатор приложения: идентификатор приложения, содержащий подстановочные знаки, используемый для идентификации группы приложений. Например, «*» (фактически префикс идентификатора приложения) означает все приложения, а «com.apple. *» Может означать все приложения, чей идентификатор пакета начинается с «com.apple» (Apple).
два.Оборудование (Device)
- Apps signed by you or your team run only on designated development devices.
- Apps run only on the test devices you specify.
триСертификат развития (Certificates)
1. Понятие сертификата
сертификатКвалификация или полномочия, выданные нотариальной конторой или органом по сертификацииполномочияЭто тот, который показывает (или помогает определить) делосертификат, Хвост сертификата или ваучера обычно маркируетсяОфициальная печать。
Каждый китаец может потребовать более 70 документов с 15 видами идентификации за свою жизнь. Есть 30-40 «обязательных» сертификатов. Разверните эти документы в хронологическом порядке, то есть жизни небесного народа.Входная карточкаРазрешение на землю, натурализация с подтверждением регистрации домохозяйства, удостоверение личности с удостоверением личности, законный брак с свидетельством о браке и, наконец,Свидетельство о смертиВыйти
2. Концепция цифровых сертификатов
- Цифровой сертификат — это файл с цифровой подписью центра сертификации, который содержит информацию о владельце открытого ключа и открытом ключе. Самый простой сертификат содержит открытый ключ, имя и цифровую подпись от центра сертификации.
- Еще одной важной особенностью цифровых сертификатов является своевременность: действует только в течение определенного периода времени.
- Дважды щелкните в [Keychain-System]CNNIC ROOT, В раскрывающемся списке [Доверие] | [При использовании этого сертификата] выберите [Никогда не доверяйте].
3. iOS (разработка) сертификат
- Сертификат разработки используется для разработки и отладки приложений: Adevelopment certificate identifies you, as a team member, in a development provisioning profile that allows apps signed by you to launchon devices.
- Производство в основном используется для распространения приложений (выполняющих разные роли в зависимости от типа сертификата): Adistribution certificate identifies your team or organization in a distribution provisioning profile and allows you to submityour app to the store. Only a team agent or an admin can create a distribution certificate.
4. Корневой сертификат iOS (разработка), сертификат
Итак, кто выдал сертификат разработки iOS? Или из какого CA мы подали заявку на сертификат для разработки и отладки приложения XCode?
iOS и Mac OS X (при установке Xcode) будут установлены автоматическиAppleWWDRCA.cerЭто промежуточный сертификат (Intermediate Certificates),Это фактически сертификат iOS (разработка), т. Е.Корневой сертификат(Apple Root Certificate)。
AppleWWDRCA (Apple Root CA) похож на регистрацию и управление регистрацией домохозяйств органами общественной безопасности, сертификат AppleWWDRCA.cer to iOS (разработка) похож на сертификат регистрации домохозяйства для идентификационной карты.
Если помощник по сертификату Key Keychain Access для Mac не установил сертификат при подаче заявки на него, сначала загрузите и установите его (для подписи необходимо, чтобы в вашей цепочке для ключей были установлены и удостоверение подписи, и промежуточный сертификат).
5.Подать заявку на сертификат (CSR: запрос на подпись сертификата)
- Keep a secure backup of your public-private key pair. If the private key is lost, you’ll have to create an entirely new identity to sign code.
- Worse, if someone else has your private key, that person may be able to impersonateyou.
четыреПрофиль поставки (Provisioning Profiles)
1. Концепция профиля обеспечения
- Во-первых, вам нужно указать его идентификатор приложения и убедиться, что идентификатор пакета соответствует ему;
- Во-вторых, для подписи требуется закрытый ключ, соответствующий сертификату, который используется для определения того, что приложение является законным, безопасным и полным;
- Затем, если это отладка реальной машины, необходимо подтвердить, авторизовано ли это устройство для запуска приложения.
2. Состав профиля обеспечения
Ниже приведен типичный файл конфигурации поставки * .mobileprovisionАнализ состава:
(1)Name: Имя файла мобильного предложения.
(2)UUID: Настоящее имя файла mobileprovision.
(3)TeamName: Имя учетной записи Apple ID.
(5)AppIDName:explicit/wildcard App ID name(ApplicationIdentifierPrefix)。
(6)ApplicationIdentifierPrefix: Префикс полного идентификатора приложения (TeamIdentifier. *).
(7)DeveloperCertificates: Содержит все сертификаты <data> <array>, которые можно использовать для подписи приложения с помощью файла конфигурации.
Сертификат основан на кодировке Base64 и соответствует формату PEM (PrivacyEnhanced Mail, RFC 1848), который может быть обработан с использованием OpenSSL (opensslx509 -text -in file.pem).
Извлеките содержимое из <data> </ data> из DeveloperCertificates в файл cert.cer (cert.perm):
Скопируйте содержимое между <data> </ data> здесь
Щелкните правой кнопкой мыши QuickLook на Mac, чтобы просмотреть cert.cer (cert.perm), щелкните правой кнопкой мыши Получить информацию в Keychain Access, чтобы просмотреть соответствующий сертификат ios_development.cer, нормальная ситуация (спаривание открытого и закрытого ключей KeyPair) должна совпадать, в Windows недостаточно информации (WWDRCA.cer), Сертификат не может быть проверен.
Если вы подпишете с помощью сертификата, которого нет в этом списке, приложение выдаст код ошибки, независимо от того, действителен ли сертификат.
keychain-access-groups: $ (AppIdentifierPrefix), см.Code Signing Entitlements(*.entitlements)。
Каждое приложение имеет приложение, которое можно использовать для безопасного хранения информации, такой как пароли, аутентификация и т. Д.keychainКак правило, ваши собственные программы могут получить доступ только к вашей собственной цепочке для ключей. Посредством некоторых настроек при подписании приложений вы также можете использовать цепочку для ключей для обеспечения возможности обмена информацией между различными приложениями по одной и той же визе разработчика (то есть с одним и тем же семенем пакета). Например, если у вас есть учетная запись разработчика и разработаны два разных приложения A и B, вы можете поделиться содержимым этой цепочки для ключей, указав общую группу доступа для группы доступа цепочки для ключей A и B.
application-identifier: Полное имя с префиксом, например, $ (AppIdentifierPrefix) com.apple.garageband.
com.apple.security.application-groups: Идентификатор группы приложений (group. Com.apple), см.Code Signing Entitlements(*.entitlements)。
com.apple.developer.team-identifier: То же, что и идентификатор команды.
(9)ProvisionedDevices: UDID <массив> устройства разработки, авторизованного этим мобильным поставщиком.
Provisioning ProfileНастроен на[XcodeTarget | Параметры сборки | Подписание кода | Профиль обеспечения], а затем выберите Идентификацию из профиля «. » (то есть сертификаты, включенные в Профиль обеспечения) в раскрывающемся списке Идентификация подписи кода.
5Файл конфигурации поставки группы разработки.Team Provisioning Profiles)
1. Концепция Team Provisioning Profile
Каждая учетная запись разработчика Apple соответствует уникальномуTeam ID,Новая функция Team Provisioning Profile была добавлена в предварительную версию Xcode 3.2.3.
При добавлении учетной записи Apple Developer в Xcode она будет подключена к фону Apple Member CenterАвтоматически генерируетсяiOS Team Provisioning Profile(Managed by Xcode)。
Team Provisioning Profile содержит iOS Team Provisioning Profile: * сгенерированный для Xcode iOS Wildcard App ID (*) (соответствует всем приложениям), все сертификаты разработки и устройства в учетной записи могут использовать его для отладки на всех устройствах, зарегистрированных в этой команде Все приложения (независимо от идентификатора пакета). В то же время он также создаст соответствующий профиль обеспечения группы iOS для идентификаторов подстановочных знаков / явных приложений, созданных самими разработчиками.
2. Время создания / обновления профиля TeamProvisioning
- Add an Apple ID account to Xcode
- Fix issue «No Provisioning Profiles with a valid signing identity» in Xcode
- Assign Your App to a Team in Xcode project settings of General|Identity
- Register new device on the apple development website or Xcode detected new device connected
шесть.App Group (ID)
1. Концепция группы приложений
В дополнение к выпуску OS X v10.10 и switf для WWDC14, iOS 8.0 также стала более открытой. Когда дело доходит до открытости, конечно, расширение приложений (App Extension) A. Как следует из названия, расширение приложения позволяет разработчикам расширять пользовательские функции и контент приложения, позволяя пользователям использовать эту функцию при использовании других приложений, тем самым обеспечивая совместное использование функций и ресурсов между различными приложениями. Расширение можно понимать как шустрый и легкий аватар.
Расширение и его Содержащее приложение имеют свои собственные песочницы. Хотя расширения встроены в Содержащее приложение в виде плагинов, они являются независимыми двоичными пакетами и не могут получить доступ к песочницам друг друга. Чтобы обеспечить совместное использование приложения и расширенных данных, Apple представила новую концепцию в iOS 8-App Group, которая в основном используется для обмена данными в приложениях из одной и той же группы, специально идентифицируемых идентификатором группы приложений. Область общих ресурсов — App Group Container.
Идентификатор группы приложений совпадает с идентификатором приложения, как правило, не более 255 символов ASCII. Пользователи могут редактировать назначение группы приложений явных идентификаторов приложений на веб-сайте, вы можете удалить (удалить) зарегистрированную группу приложений (ID).
2. Настройка группы приложений
- Идентификаторы приложений, помещенные в одну и ту же группу приложений, должны быть уникальными (явный, а не подстановочный знак)
- Идентификатор приложения расширения с указанием идентификатора приложения в качестве префикса / семени
семь.Сертификат и подпись(Certificate& Signature)
1.Code Signing Identity
- Если открытый ключ WWDRCA можно использовать для успешной расшифровки сертификата и получения открытого ключа (открытый ключ) и сводки содержимого (подпись), это доказывает, что этот сертификат действительно выпущен AppleWWDRCA, то есть источник сертификата является доверенным;
- Затем используйте алгоритм хеширования для расчета дайджеста по самому сертификату. Если он соответствует дайджесту, полученному на предыдущем шаге, это доказывает, что сертификат не был подделан, то есть сертификат завершен.
2.Code Signing
Каждый сертификат (фактически открытый ключ) соответствуетЗакрытый ключБудет использоваться для оцифровки контента (исполняемый код, ресурсы, такие как изображения и файлы перьев, не подписаны)подпись(CodeSign) — использовать алгоритм хеширования для генерации контентарезюме(digest)。
Xcode требует авторизации при подписи с закрытым ключом, соответствующим указанному сертификату.После выбора [Всегда разрешать] окно подтверждения авторизации больше не будет появляться при использовании закрытого ключа для подписи в будущем.
3.Verify Code Signature with Certificate
- Если открытый ключ сертификата может успешно расшифровать сводку содержимого (подпись) приложения (исполняемый код), это доказывает, что это приложение действительно выпущено сертифицированным разработчиком, то есть источнику доверяют;
- Затем используйте алгоритм хеширования для вычисления дайджеста для самого приложения (исполняемого кода). Если он соответствует дайджесту, полученному на предыдущем шаге, это доказывает, что приложение (исполняемый код) не было подделано, то есть содержимое завершено.
- Проверено соответствие CodeSign на основе профиля обеспечения;
- Проверить надежность и целостность приложения на основе сертификата;
- При запуске идентификатор устройства (UUID) реального устройства должен быть в профиле обеспеченияProvisionedDevicesсписок авторизации.
восемь.На нескольких машинахОбщийСчет развития / сертификат
1. Xcode export account (* .developerprofile) илиФайл PKCS12 (* .p12)
- Выберите адрес электронной почты, соответствующий учетной записи, в списке идентификаторов Apple ID и нажмите ☸ | Экспорт учетных записей после + -в экспорт *, который содержит информацию об идентификаторе учетной записи / подписи кода / профилях обеспечения.developerprofileФайл (экспорт профиля разработчика) используется для разработки Xcode на других компьютерах (импорт учетной записи).
- Выберите запись «Signing Identity», которую вы хотите экспортировать, нажмите «+ + at | Export» в нижней части столбца, вы должны ввести пароль и вам необходимо авторизовать ключ экспорта «privateKey» из цепочки для ключей для экспортаCertificates.p12。
/ Library / MobileDevice / Provisioning Profiles], где реальное имя профиля обеспечения равно $ (UUID) .mobileprovision, например, «2488109f-ff65-442e-9774-fd50bd6bc827.mobileprovision», где <key> Name </ key> — это родовое имя описания, видимое в Xcode
2. Брелок Доступ к экспортуPKCS12Файл (*.p12)
Выберите сертификат для экспорта или его закрытый ключ в разделе «Связка ключей» | «Сертификаты», щелкните правой кнопкой мыши «Экспорт» или «Экспорт» в меню «Файл» | «Экспорт элементов».Certificates.p12——PKCS12 file holds the private key and certificate。
Дважды щелкните файл Certificates.p12 (введите пароль, если у вас есть пароль) на других компьютерах Mac, чтобы установить общий сертификат. После получения общего сертификата зарегистрируйте устройство iOS для отладки под именем учетной записи разработчика на веб-сайте разработчика и загрузите файл профиля обеспечения отладочного устройства iOS, авторизованного соответствующим сертификатом, перед разработкой и отладкой на реальном устройстве iOS. ,
IX.Распространенные ошибки в конфигурации сертификата
1.no such provisioning profile was found
Xcode Target | Genera | Identity Team предлагает «В настройках сборки указан профиль обеспечения с UUID« xxx », однако, такой профиль обеспечения не найден».
Xcode Target | BuildSettings | Code Signing | Текущий настроенный профиль обеспечения для указанного UDID не существует локально, и вам необходимо изменить профиль обеспечения в это время. При необходимости перейдите на веб-сайт, чтобы загрузить или восстановить профиль обеспечения или исправить проблему непосредственно в Xcode (может быть автоматически создан iOS Team ProvisioningProfile)!
2.No identities from profile
Параметры сборки | Профиль обеспечения CodeSigning, после выбора локально установленного профиля обеспечения, в раскрывающемся меню «Идентификация подписи кода» появляется выпадающий списокNo identities from profile “…”or No identities from keychain.
Сертификаты разработчика в профиле обеспечения указанного UDID конфигурации XCode не существуют в локальном KeyChain (No identities are available) Или несовместимый (закрытый ключ в KeyPair отсутствует), вам нужно перейти на веб-сайт, чтобы проверить правильность конфигурации App ID-Certificate-Device в ProvisioningProfile. Если это общая учетная запись (* .developerprofile) или общий сертификат (* .p12), предоставленный кем-то другим, обязательно экспортируйте закрытый ключ в соответствующую пару ключей. При необходимости исправьте это непосредственно в проблеме Исправления XCode (это может автоматически генерировать iOS Team ProvisioningProfile).
3.Code Signing Entitlements file do not match profile
«Invalid application-identifier Entitlement» or «Code Signing Entitlements file do not match those specified in your provisioning profile.(0xE8008016).»
(1)Проверьте, соответствует ли значение ключа «Группы доступа цепочки для ключей» в файле * .entitlements, указанном в соответствующей версии (Debug), элементу Entitlements в ProvisioningProfile (последний обычно является префиксом / семенем первого).
(2) Вы также можетеПрава соответствующей версии (Debug) в профиле обеспечения параметров сборки | подписи кода оставлены пустыми.
4. Ответ конфигурации XCode иногда не столь своевременен, вы можете обновить, сбросить соответствующий переключатель элемента конфигурации (если есть) или перезапустить XCode, чтобы попробовать.
Кратко о главном
В 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 ваш алгоритм действий должен сводиться к следующему:
Как подписать приложение?
Подпишите свое приложение для выпуска в Google Play
- В строке меню нажмите «Сборка»> «Создать подписанный пакет / APK».
- В диалоговом окне «Создать подписанный пакет или APK-файл» выберите «Пакет приложений для Android» или «APK» и нажмите «Далее».
- Под полем Путь к хранилищу ключей нажмите Создать.
Как работает Apple App Signing?
Подпись кода вашего приложения гарантирует пользователям, что оно получено из известного источника и не изменялось с момента последней подписи. Прежде чем ваше приложение сможет интегрировать службы приложений, быть установленным на устройстве или отправлено в App Store, оно должно быть подписано с помощью сертификат, выданный Apple.
Как подписать ipas на iOS?
Ручная подпись файла IPA
- Создайте сертификат распространения (файл p12) на портале разработчика iOS. …
- Создайте идентификатор приложения на портале разработчика iOS. …
- Создайте профиль обеспечения распространения в App Store на портале разработчика, связанный с идентификатором приложения и сертификатом распространения, созданным ранее.
Как подписать приложение в Xcode?
Xcode 8
- Перейдите в «Редактор проектов», щелкнув имя или свой проект в «Навигаторе проекта».
- Выберите раздел «Общие».
- Выберите команду, связанную с вашим сертификатом подписи, из раскрывающегося списка «Команда» в разделе «Подписание».
Как подписать неподписанное приложение?
Как подписать приложение для Android
- Создайте закрытый ключ с помощью keytool. …
- Скомпилируйте приложение в режиме выпуска, чтобы получить неподписанный APK. …
- Убедитесь, что ваш APK подписан. …
- Выровняйте окончательный пакет APK с помощью zipalign. $
Как подписать приложение с помощью ключа загрузки?
Настроить подписку Play App
- Шаг 1. Создайте ключ загрузки. …
- Шаг 2: Подготовьте релиз. …
- Шаг 3. Зарегистрируйте ключ подписи приложения у поставщиков API. …
- Шаг 1. Настройте подписку на приложение Play. …
- Шаг 2. Отправьте копию исходного ключа в Google и создайте ключ загрузки. …
- Шаг 3. Создайте ключ загрузки (необязательно и рекомендуется)
Что означает подписание приложения?
Подписание приложения гарантирует что одно приложение не может получить доступ к любому другому приложению, кроме как черезопределил IPC. Когда приложение (файл APK) устанавливается на устройство Android, диспетчер пакетов проверяет, правильно ли подписан APK с помощью сертификата, включенного в этот APK.
Как включить приложения для разработчиков на Iphone?
Нажмите «Настройки»> «Общие»> «Профили» или «Профили и управление устройством». Под «Корпоративное приложение» заголовок, вы видите профиль разработчика. Коснитесь имени профиля разработчика под заголовком Enterprise App, чтобы установить доверие для этого разработчика. Затем вы увидите приглашение подтвердить свой выбор.
Что такое подписывание кода Apple?
Подпись кода технология безопасности macOS, которую вы используете для подтверждения того, что приложение было создано вами. После того, как приложение подписано, система может обнаружить любое изменение в приложении — независимо от того, внесено ли это изменение случайно или с помощью вредоносного кода.
Что такое подпись IPA в iPhone?
ipa (пакет iOS App Store) находится файл архива приложения iOS в котором хранится приложение для iOS. Каждый . Файл ipa содержит двоичный файл и может быть установлен только на устройстве MacOS на базе iOS или ARM.
Как установить файл IPA на свой iPhone?
Как пользователи устанавливают. Файл IPA на их iPhone
- Шаг 1. Попросите их загрузить файл .IPA. …
- Шаг 2. Пусть они откроют iTunes. …
- Шаг 3. Попросите их подключить телефон, на который они хотят установить приложение. …
- Шаг 4: попросите их перетащить файл .IPA в список своего iPhone в iTunes.
Разработчик отлаживает и устанавливает приложение в процессе подписи мобильного телефона
- Компьютер Mac генерирует открытый ключ M и закрытый ключ M
- Открытый ключ M передается на сервер Apple, а закрытый ключ A сервера Apple шифрует открытый ключ M для генерации сертификата и возвращает его в xcode.
- XCode загружает профиль и другие файлы описания, шифрует приложение с помощью открытого ключа M для генерации подписи приложения, а затем упаковывает подпись приложения с сертификатом и файлом профиля в ipa.
- Мобильный телефон расшифровывает дважды, мобильный телефон дешифрует сертификат с открытым ключом A в системе мобильного телефона, чтобы получить открытый ключ M, а затем сравнивает файл описания профиля, чтобы проверить разрешения, чтобы увидеть, является ли он законным, а затем использует открытый ключ M для расшифровки подписи приложения.
-
Открытый ключ A в мобильном телефоне соответствует закрытому ключу A сервера Apple
Процесс выглядит следующим образом:Снимок экрана 2018-05-11 в 5.55.27.png
Две команды, связанные с шифрованием и повторной подписью
- Зашифрованный файл Base64:
base64 test.txt -o new.txt
- расшифровка base64:
base64 new.txt -o abc.txt -D
- openssl генерирует закрытый ключ:
openssl genrsa -out private.pem 512
- Сгенерируйте открытый ключ из закрытого ключа:
openssl rsa -in private.pem -out public.pem -pubout
- Посмотрите обычный текст rsa:
openssl rsa -in private.pem -text -out private.text
- Просмотр информации о расшифровке csr:
openssl asn1parse -i -in CertificateSigningRequest.certSigningRequest
- Просмотр информации профиля:
/ Users / mac / Library / MobileDevice / Provisioning Профили затем безопасность cms -D -i e871987c-b4c5-4658-8338-f6e4cabaff8e.mobileprovision
- Просмотр информации о подписи: разархивируйте пакет ipa и откройте его, введите Payload и просмотрите информацию о подписи .app
codesign -vv -d QQMusic.app
- Посмотреть все сертификаты:
security find-identity -v -p codesigning
- Просмотр зашифрованной информации исполняемого файла macho: .app отображает содержимое пакета и находит исполняемый файл с тем же именем
otool -l QQMusic | grep crypt
Получил следующий результат:
cryptoff 16384
cryptsize 50085888
cryptid 0
cryptoff 16384
cryptsize 55115776
cryptid 0
Криптид обеих архитектур равен 0, ни одна из них не зашифрована
Один из трех методов подписи
- Новый код проекта SignignDemo, выбор сертификата и отладка реальной машины
- Введите содержимое пакета, потому что бесплатный сертификат не может повторно подписать плагин, поэтому удалите папку PlugIns, в Watch есть плагины, также удалите
- Повторно подпишите фреймворк в Frameworks, некоторые пакеты игнорируют этот шаг без Frameworks:
Войдите в папку Frameworks, а затем перепишите один за другим
security find-identity -v -p коды подписи // Просмотреть все сертификаты
codesign -fs "Разработчик iPhone: [email protected] (Q4M32A5HU5)" QYUniversalFramework.framework // выберите тот же сертификат, что и для проекта codesignDemo
- Дайте разрешения на выполнение исполняемого файла:
chmod +x iQiYiPhoneVideo
- CodesignDemo.app в разделе «Продукты» в проекте codesignDemo отображает содержимое пакета, находит файл embedded.mobileprovision в содержимом пакета и копирует его в содержимое пакета iQiyi.app, которое необходимо отправить в отставку.
- Скопируйте идентификатор комплекта проекта codesignDemo в идентификатор комплекта Info.plist в содержимом пакета iQiyi.app
- Найдите внедренный файл.mobileprovision на пятом шаге, а затем
security cms -D -i embedded.mobileprovision
поверни<key>Entitlements</key>
А потом поставить<key>Entitlements</key>
Ниже:
<dict>
<key>keychain-access-groups</key>
<array>
<string>9D3898Q5N5.*</string>
</array>
<key>get-task-allow</key>
<true/>
<key>application-identifier</key>
<string>9D3898Q5N5.www.demo.com.codesignDemo</string>
<key>com.apple.developer.team-identifier</key>
<string>9D3898Q5N5</string>
</dict>
Используйте Xcode для генерации plist-файла PropertyList.plist, затем откройте как -> Исходный код, скопируйте <dict> прямо сейчас и получите следующее:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<!--
PropertyList.plist
codesignDemo
Created by mac on 2018/5/14.
Copyright (c) 2018 мерин. Все права защищены.
-->
<plist version="1.0">
<dict>
<key>keychain-access-groups</key>
<array>
<string>9D3898Q5N5.*</string>
</array>
<key>get-task-allow</key>
<true/>
<key>application-identifier</key>
<string>9D3898Q5N5.www.demo.com.codesignDemo</string>
<key>com.apple.developer.team-identifier</key>
<string>9D3898Q5N5</string>
</dict>
</plist>
- Поместите файл plist, полученный на шаге 7, и .app в папку new и заново подпишите
➜ new ls
PropertyList.plist iQiYiPhoneVideo.app
➜ security find-identity -v -p codesigning
1) C5FF31245563ADB609BEAC77D10B9C96F0EB586A "iPhone Developer: [email protected] (Q4M32A5HU5)"
1 valid identities found
Ign codesign -fs "Разработчик iPhone: [email protected] (Q4M32A5HU5)" --no-strict --entitlements = PropertyList.plist iQiYiPhoneVideo.app // Подать в отставку с сертификатом инженерных кодовignignDemo
iQiYiPhoneVideo.app: replacing existing signature
- Установить на телефон
упакован как ipa:zip -ry newAiqiyi.ipa new
Упакуйте новую папку как newAiqiyi.ipa
Установка: команда XCode + Shift + 2, чтобы войти в управление устройством, выберите знак +, чтобы найти newAiqiyi.ipa прямо сейчас
Четыре вторых метода подписи Xcode отставка
- Новый код проекта SignignDemo, выбор сертификата и отладка реальной машины
- Замените iQiYiPhoneVideo.app на CodeSignDemo.app из продуктов проекта CossignDemo, чтобы заменить iQiYiPhoneVideo.app, и переименуйте iQiYiPhoneVideo.app в codesignDemo.app.
- Введите содержимое замененного пакета codesignDemo.app и удалите папку PlugIns и папку Watch
- Повторная подпись Повторная подпись платформы в Frameworks, некоторые пакеты игнорируют этот шаг без Frameworks
- Идентификатор Bundle Info.plist в измененном пакете codesignDemo.app заменяется идентификатором Bundle проекта codesignDemo.
- Дайте исполняемые права доступа к исполняемым файлам: chmod + x iQiYiPhoneVideo
- Запустите проект CodeSignDemo
Пять третий метод переподписывания сценария переподписания
-
Создайте новый проект cosignAutoDemo, выберите сертификат и отладку реальной машины, а также создайте новые папки APP и Temp в корневом каталоге проекта:
Снимок экрана 2018-05-14 1.07.08.png
-
xcode->Build Phases->+New Run Script Phase
-
Код оболочки в Run Script выглядит следующим образом:
# $ {SRCROOT} Это каталог, в котором находится файл проекта
TEMP_PATH="${SRCROOT}/Temp"
# Ресурсная папка
ASSETS_PATH="${SRCROOT}/APP"
#ipaPackage path
TARGET_IPA_PATH="${ASSETS_PATH}/*.ipa"
# Новая временная папка
rm -rf "${SRCROOT}/Temp"
mkdir -p "${SRCROOT}/Temp"
#----------------------------------------
# 1. Разархивируйте IPA в Temp
unzip -oqq "$TARGET_IPA_PATH" -d "$TEMP_PATH"
# Получить несжатый путь временного приложения
TEMP_APP_PATH=$(set -- "$TEMP_PATH/Payload/"*.app;echo "$1")
# echo "Путь: $ TEMP_APP_PATH"
#----------------------------------------
# 2. Скопируйте разархивированный .app в проект
# BUILT_PRODUCTS_DIR Путь пакета APP, созданного проектом
# TARGET_NAME имя цели
TARGET_APP_PATH="$BUILT_PRODUCTS_DIR/$TARGET_NAME.app"
echo "путь к приложению: $ TARGET_APP_PATH"
rm -rf "$TARGET_APP_PATH"
mkdir -p "$TARGET_APP_PATH"
cp -rf "$TEMP_APP_PATH/" "$TARGET_APP_PATH"
#----------------------------------------
# 3. Удалить расширение и WatchAPP. Персональный сертификат не может быть подписан Расширение
rm -rf "$TARGET_APP_PATH/PlugIns"
rm -rf "$TARGET_APP_PATH/Watch"
#----------------------------------------
# 4. Обновите файл info.plist CFBundleIdentifier
# Set: "Set: KEY Value" "Путь к целевому файлу"
/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier $PRODUCT_BUNDLE_IDENTIFIER" "$TARGET_APP_PATH/Info.plist"
#----------------------------------------
# 5. Дайте разрешение на выполнение файлов MachO
# Получить путь к файлу MachO
APP_BINARY=`plutil -convert xml1 -o - $TARGET_APP_PATH/Info.plist|grep -A1 Exec|tail -n1|cut -f2 -d>|cut -f1 -d<`
# разрешение на выполнение
chmod +x "$TARGET_APP_PATH/$APP_BINARY"
#----------------------------------------
# 6. Уйти в отставку сторонних FrameWorks
TARGET_APP_FRAMEWORKS_PATH="$TARGET_APP_PATH/Frameworks"
if [ -d "$TARGET_APP_FRAMEWORKS_PATH" ];
then
for FRAMEWORK in "$TARGET_APP_FRAMEWORKS_PATH/"*
do
#Подпись
/usr/bin/codesign --force --sign "$EXPANDED_CODE_SIGN_IDENTITY" "$FRAMEWORK"
done
fi
- Поместите пакет ipa в папку APP, а затем запустите
Вы также можете сохранить скрипт как файл xcodeCodesign.sh, а затем записать путь к файлу xcodeCodesign.sh в коде оболочки Run Script, и, наконец, chmod + x xcodeCodesign.sh, вы можете запустить
Шесть из четвертого метода подписиMonkeyDevResignature
- MonkeyDevмонтаж
- Новый проект MonkeyApp monkeyDemo
- Поместите пакет ipa в TargetApp в папку monkeyDemo, а затем запустите
Повторная подпись вручную, из-за различных деталей, таких как сертификаты, подпись легко пропустить, лучше всего использовать сценарий повторной подписи Xcode и MonkeyDev.