Provisioning Profile propojuje certifikáty vývojáře, identifikátor aplikace a seznam povolených zařízení pro podepisování kódu aplikací pro iOS. Podle údajů z Apple Developer Documentation, 2026 je profil nezbytný pro jakékoli spuštění aplikace na fyzickém zařízení — bez něj Xcode nebude moci nainstalovat build na iPhone nebo iPad. V článku rozebereme strukturu, typy a proces vytváření profilů.
Hlavní body
Provisioning Profile je digitální konfigurační soubor ve formátu .mobileprovision (pro iOS) nebo .provisionprofile (pro macOS), který Apple používá ke kontrole instalace a spouštění aplikací na zařízeních. Profil obsahuje metadata podepisování kódu, bez nichž nelze aplikaci spustit na fyzickém iPhone, iPadu nebo Apple Watch — simulátor profil nevyžaduje, protože kód není podepisován pro spuštění na skutečném procesoru.
Profil se vydává přes Apple Developer Portal a má dobu platnosti — obvykle jeden rok pro profily Development a Distribution. Podle politiky Apple je profil automaticky vázán na certifikát Apple Developer Program, pod nímž byl podepsán: pokud je certifikát odvolán nebo vyprší, profil přestane fungovat.
Každý profil obsahuje jedinečný UUID, který Xcode používá k identifikaci profilu v klíčence. Xcode při sestavování automaticky vybere vhodný profil, ale vývojář může výběr změnit v nastavení Signing & Capabilities. Na jednom zařízení lze nainstalovat neomezený počet profilů — systém správy zařízení Apple (MDM) to využívá pro firemní distribuci aplikací.
Podepisování kódu je hlavním důvodem existence profilů. Apple vyžaduje, aby každá aplikace spouštěná na zařízení s iOS byla podepsána certifikátem vydaným společností Apple. Provisioning Profile funguje jako spojovací článek: potvrzuje, že vývojář má právo spouštět aplikaci na tomto zařízení. Podle Apple Security Guide (2025) mechanismus profilů zabraňuje instalaci škodlivého softwaru na zařízení uživatelů i v případě kompromitace vývojářova certifikátu.
Profil také určuje, které systémové služby jsou pro aplikaci dostupné. Pokud aplikace používá Push notifikace, Apple Push Notification service (APNs) vyžaduje správné entitlements v profilu. Bez nich nebudou serverové notifikace doručeny na zařízení. Obdobné pravidlo platí pro iCloud, App Groups, Wallet, HealthKit a další frameworky Apple.
Vývojáři si často pletou Provisioning Profile a Apple Certificate. Certifikát je digitální dokument potvrzující identitu (kdo podepisuje), zatímco profil je konfigurace (která aplikace, na kterých zařízeních, s jakými právy). Jeden certifikát lze použít ve více profilech a jeden profil je vázán přesně na jeden certifikát. Apple doporučuje vytvořit samostatný profil pro každou aplikaci a každý scénář — Development, Ad Hoc, App Store.
Proces podepisování aplikace se skládá z několika kroků prováděných postupně. Xcode vezme binární soubor aplikace (App Bundle), podepíše jej soukromým klíčem vývojáře, vloží do něj Provisioning Profile a odešle na zařízení. Zařízení ověří podpis veřejným klíčem Apple, porovná UUID profilu se seznamem důvěryhodných profilů v systému a spustí aplikaci pouze v případě úspěchu všech kontrol.
Když uživatel stáhne aplikaci z App Store, je mechanismus jiný. App Store Connect aplikaci znovu podepíše vlastním Distribution certifikátem Apple a nahradí vývojářský profil profilem Store. To znamená, že aplikace publikovaná přes App Store je technicky podepsána společností Apple, nikoli vývojářem — i když původní podpis vývojáře je ověřován ve fázi nahrávání buildu do App Store Connect.
Pro distribuci Ad Hoc profil registruje konkrétní UDID zařízení, na kterých je spuštění povoleno. Bezplatný účet Apple Developer Program omezuje testování na 100 zařízení ročně. Enterprise profily (pro interní distribuci v organizaci) nemají omezení počtu zařízení, ale vyžadují aktivní předplatné Apple Developer Enterprise Program v ceně 299 dolarů ročně.
Doba platnosti Provisioning Profile je jeden rok od okamžiku vytvoření. 30 dní před vypršením začne Apple odesílat vývojáři push notifikace přes Xcode a Developer Portal. Pokud profil vyprší, aplikace na zařízení nadále funguje (pokud je již nainstalována), ale nový build s tímto profilem nebude možné nainstalovat. Xcode při pokusu o sestavení s prošlým profilem vydá chybu podepisování kódu s kódem -402620394. Apple doporučuje nastavit automatické obnovování profilů přes Xcode Accounts Preferences — pak Xcode aktualizuje profil 24 hodin před vypršením.
Apple nabízí čtyři hlavní typy Provisioning Profile, z nichž každý je určen pro konkrétní fázi životního cyklu aplikace. Development profil umožňuje spouštět aplikaci na fyzických zařízeních přidaných do Apple Developer Portal a používá se ve fázi vývoje a QA testování. Pro vytvoření Development profilu stačí bezplatný vývojářský účet Apple.
Ad Hoc profil je určen k distribuci aplikace omezenému okruhu testerů bez použití App Store. Profil registruje až 100 zařízení podle UDID a aplikaci lze nainstalovat přímo přes iTunes, Apple Configurator nebo řešení MDM. Ad Hoc buildy mají dobu platnosti 12 měsíců a nevyžadují projít recenzí Apple.
App Store profil se používá výhradně k publikaci aplikace do App Store a neobsahuje seznam zařízení — distribuci po schválení buildu řídí sama Apple. Při nahrávání archivu do App Store Connect Xcode automaticky použije App Store profil, pokud je v systému nainstalován. Enterprise profil je určen pro organizace s Apple Developer Enterprise Program a umožňuje distribuci aplikací v rámci společnosti bez omezení počtu zařízení a bez recenze Apple.
| Typ profilu | Účel | Zařízení | Cena předplatného |
|---|---|---|---|
| Development | Vývoj a testování | Až 100 UDID | Zdarma / 99 dolarů ročně |
| Ad Hoc | Distribuce testerům | Až 100 UDID | 99 dolarů ročně |
| App Store | Publikace do App Store | Libovolné (přes Apple) | 99 dolarů ročně |
| Enterprise | Interní distribuce | Neomezené | 299 dolarů ročně |
Provisioning Profile je soubor ve formátu DER podepsaný společností Apple, jehož obsah lze prohlížet přes příkazový řádek. Security framework systému macOS umožňuje dekódovat .mobileprovision do čitelného XML plist. Uvnitř profilu se nachází: UUID profilu, App ID (předpona týmu + Bundle Identifier), seznam certifikátů, seznam povolených zařízení (pouze pro Development a Ad Hoc), entitlements a doba platnosti.
App ID je jedinečný identifikátor aplikace tvořený Team ID (10 znaků, přiděluje je Apple) a Bundle Identifier (například com.example.myapp). App ID může být explicit (přesná shoda s Bundle Identifier) nebo wildcard (šablona *.example.com pro více aplikací). Apple nedoporučuje používat wildcard pro aplikace využívající Push notifikace nebo iCloud — tyto služby vyžadují explicitní App ID.
Entitlements je blok XML uvnitř profilu, který určuje přístupová práva aplikace k systémovým prostředkům. Typické entitlements zahrnují: aps-environment (Push notifikace), com.apple.developer.icloud-services (iCloud), com.apple.security.application-groups (App Groups pro Widget a Share Extension). Apple automaticky přidává entitlements do profilu na základě povolených Capabilities v Xcode. Jakákoli neshoda mezi entitlements v profilu a požadovanými v kódu vede k chybě podepisování.
Vytvoření profilu je možné dvěma způsoby: přes webové rozhraní Apple Developer Portal nebo automaticky přes Xcode. U typického projektu Xcode spravuje profily automaticky, když je zapnutá možnost Automatically manage signing. Xcode vytvoří certifikát, profil a App ID během několika sekund a synchronizuje se s Apple Developer Portal. Pro CI/CD pipeline je však nutná ruční správa.
Pro ruční vytvoření profilu v Apple Developer Portal je třeba: přejít do sekce Certificates, Identifiers & Profiles, vybrat Profiles a kliknout na „+". Poté vybrat typ profilu (Development, Ad Hoc, App Store nebo Enterprise), vybrat App ID ze seznamu registrovaných, vybrat vývojářský certifikát a (pro Development a Ad Hoc) vybrat zařízení. Po vytvoření se profil stáhne ve formátu .mobileprovision a nainstaluje dvojitým kliknutím v Xcode.
Servery CI/CD vyžadují zvláštní přístup: profil a certifikát musí být uloženy v zabezpečeném repozitáři (například v tajných klíčích GitHub Actions). Při sestavování se profil načte na agenta, umístí do složky ~/Library/MobileDevice/Provisioning Profiles a certifikát se importuje do klíčenky. Fastlane — oblíbený nástroj pro automatizaci podepisování — nabízí příkaz match, který synchronizuje profily a certifikáty mezi vývojáři přes šifrovaný git repozitář.
Pro diagnostiku problémů s podepisováním kódu lze dekódovat .mobileprovision a zkontrolovat jeho obsah. Níže uvedený příkaz extrahuje XML plist z profilu a uloží jej do čitelného formátu:
# Dekódování .mobileprovision do XML
security cms -D -i "path/to/embedded.mobileprovision" \
-o "profile.plist"
# Kontrola doby platnosti profilu
plist -convert xml1 profile.plist -o -
grep -A 1 "ExpirationDate" profile.plist
Nástroj Security ze sady macOS Command Line Tools dekóduje CMS podepsaný soubor profilu. Přepínač -D znamená dekódování, -i vstupní soubor. Po dekódování nástroj plist převede binární plist na XML a grep extrahuje datum vypršení. Tato metoda je užitečná v CI/CD pro kontrolu, že profil nevypršel před sestavením release buildu.
Nejčastější chybou je „No matching provisioning profiles found" při sestavování v Xcode. Vzniká, když Xcode nemůže najít profil odpovídající konfiguraci sestavení: Bundle Identifier neodpovídá App ID v profilu, certifikát není nainstalován v klíčence nebo profil vypršel. Řešení — zkontrolovat nastavení Signing & Capabilities v target a v případě potřeby přepnout na Automatically manage signing.
Chyba „Provisioning profile doesn't include the selected device" se objevuje při pokusu spustit Development nebo Ad Hoc build na zařízení, jehož UDID nebyl přidán do profilu. Apple Developer Portal umožňuje přidat zařízení do stávajícího profilu — poté je třeba profil znovu stáhnout a nainstalovat. Xcode při automatické správě podepisování přidá připojené zařízení do profilu automaticky.
Problém s entitlements se projevuje chybou „The executable was signed with invalid entitlements" při nahrávání do App Store Connect. Příčinou je neshoda mezi entitlements v profilu a souborem .entitlements projektu. Apple vyžaduje, aby sada práv v profilu byla nadmnožinou práv požadovaných aplikací. Řešení — zkontrolovat Capabilities v target Xcode a ujistit se, že všechny povolené služby mají odpovídající entitlements v profilu. Fastlane obsahuje příkaz produce, který synchronizuje App ID a profily s aktuálními entitlements.
Časté dotazy
Ano, pokud App ID v profilu používá wildcard identifikátor ve tvaru com.example.*. Wildcard profily však nepodporují Push notifikace, iCloud, Game Center a App Groups. Apple doporučuje vytvořit samostatný explicit profil pro každou aplikaci, která používá rozšířené Capabilities.
Aplikace stažená přes App Store používá Store profil Apple, který nezávisí na vývojářském profilu. Uživatelé budou aplikaci nadále stahovat a spouštět. Vypršený profil brání pouze nahrání nového buildu do App Store Connect — Apple vyžaduje, aby Distribution profil byl platný v okamžiku odeslání.
Profil lze zkopírovat do složky ~/Library/MobileDevice/Provisioning Profiles na novém počítači. Profil je však vázán na certifikát, jehož soukromý klíč je v klíčence. Je také nutné exportovat certifikát se soukromým klíčem přes Keychain Access a importovat jej na novém zařízení.
Počet profilů na počítači není omezen. Profily se ukládají do složky ~/Library/MobileDevice/Provisioning Profiles a číslují se podle UUID. Xcode automaticky vybere vhodný profil podle App ID a typu sestavení. Pro zjednodušení správy se doporučuje odstraňovat nepoužívané profily přes Xcode Accounts Preferences.
Signing Certificate potvrzuje identitu vývojáře — je to kryptografický klíč vydaný společností Apple. Provisioning Profile je konfigurační soubor, který určuje, která aplikace (App ID) může být spuštěna pod jakým certifikátem a na kterých zařízeních. Profil se vždy odkazuje na konkrétní certifikát, ale nenahrazuje jej.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také