Сертификаты, профили и entitlements: как устроена подпись сборки?
Суть
Чтобы iOS запустила приложение, бинарь должен быть подписан, а подпись — разрешена профилем. Подпись собирается из трёх частей, и почти все ошибки «не ставится» и «не подписывается» — это несовпадение между ними.
- Сертификат + приватный ключ (signing identity) — «кто подписал».
Apple Developmentдля отладки на устройствах,Apple Distributionдля TestFlight, App Store и Ad Hoc. Приватный ключ живёт в связке ключей того, кто создал запрос на сертификат; без ключа сертификат бесполезен. - Provisioning profile — «что и где разрешено»: App ID (bundle id), список сертификатов, которыми можно подписывать, для development и ad hoc — UDID устройств, и разрешённые entitlements. Профиль подписан Apple и встраивается в
.appкакembedded.mobileprovision. - Entitlements — «какие права просит приложение»: push (
aps-environment), App Groups, Keychain sharing, Associated Domains, iCloud, HealthKit. Это plist, который подписывается вместе с кодом. Каждый ключ должен быть разрешён профилем, иначе установка или вызов API провалится.
Продолжение ответа с кодом и уточняющими вопросами интервьюера — в приложении DevPrep.
Полный ответ — в DevPrep