Provisioning Profile wiąże certyfikaty dewelopera, identyfikator aplikacji i listę dozwolonych urządzeń do podpisywania kodu aplikacji iOS. Według danych Apple Developer Documentation, 2026, profil jest niezbędny do każdego uruchomienia aplikacji na fizycznym urządzeniu — bez niego Xcode nie będzie w stanie zainstalować buildu na iPhonie lub iPadzie. W artykule omówimy strukturę, typy i proces tworzenia profili.
Najważniejsze
Provisioning Profile to cyfrowy plik konfiguracyjny w formacie .mobileprovision (dla iOS) lub .provisionprofile (dla macOS), którego Apple używa do kontroli instalowania i uruchamiania aplikacji na urządzeniach. Profil zawiera metadane podpisywania kodu, bez których nie można uruchomić aplikacji na fizycznym iPhone, iPad lub Apple Watch — symulator nie wymaga profilu, ponieważ kod nie jest podpisywany do działania na prawdziwym procesorze.
Profil jest wydawany przez Apple Developer Portal i ma okres ważności — zwykle jeden rok dla profili Development i Distribution. Zgodnie z polityką Apple profil jest automatycznie powiązany z certyfikatem Apple Developer Program, pod którym został podpisany: jeśli certyfikat zostanie odwołany lub wygaśnie, profil przestaje działać.
Każdy profil zawiera unikalny UUID, którego Xcode używa do identyfikacji profilu w pęku kluczy. Xcode automatycznie wybiera odpowiedni profil podczas budowania, ale deweloper może zmienić wybór w ustawieniach Signing & Capabilities. Na jednym urządzeniu można zainstalować nieograniczoną liczbę profili — system zarządzania urządzeniami Apple (MDM) wykorzystuje to do korporacyjnej dystrybucji aplikacji.
Podpisywanie kodu to główny powód istnienia profili. Apple wymaga, aby każda aplikacja uruchamiana na urządzeniu z iOS była podpisana certyfikatem wydanym przez Apple. Provisioning Profile jest ogniwem łączącym: potwierdza, że deweloper ma prawo uruchamiać aplikację na danym urządzeniu. Według Apple Security Guide (2025) mechanizm profili zapobiega instalowaniu złośliwego oprogramowania na urządzeniach użytkowników nawet w przypadku kompromitacji certyfikatu dewelopera.
Profil określa również, które usługi systemowe są dostępne dla aplikacji. Jeśli aplikacja korzysta z powiadomień Push, Apple Push Notification service (APNs) wymaga poprawnych entitlements w profilu. Bez tego powiadomienia serwerowe nie zostaną dostarczone na urządzenie. Podobna zasada obowiązuje dla iCloud, App Groups, Wallet, HealthKit i innych frameworków Apple.
Deweloperzy często mylą Provisioning Profile z Apple Certificate. Certyfikat to dokument cyfrowy potwierdzający tożsamość (kto podpisuje), a profil to konfiguracja (jaka aplikacja, na jakich urządzeniach, z jakimi uprawnieniami). Jeden certyfikat może być używany w kilku profilach, a jeden profil jest powiązany z dokładnie jednym certyfikatem. Apple zaleca tworzenie osobnego profilu dla każdej aplikacji i każdego scenariusza — Development, Ad Hoc, App Store.
Proces podpisywania aplikacji składa się z kilku kroków wykonywanych sekwencyjnie. Xcode pobiera plik binarny aplikacji (App Bundle), podpisuje go prywatnym kluczem dewelopera, osadza w nim Provisioning Profile i wysyła na urządzenie. Urządzenie sprawdza podpis publicznym kluczem Apple, porównuje UUID profilu z listą zaufanych profili w systemie i uruchamia aplikację tylko wtedy, gdy wszystkie kontrole zakończą się sukcesem.
Kiedy użytkownik pobiera aplikację z App Store, mechanizm jest inny. App Store Connect ponownie podpisuje aplikację własnym certyfikatem Distribution firmy Apple, zastępując profil dewelopera profilem Store. Oznacza to, że aplikacja opublikowana przez App Store jest technicznie podpisana przez Apple, a nie przez dewelopera — chociaż pierwotny podpis dewelopera jest sprawdzany na etapie przesyłania buildu do App Store Connect.
W przypadku dystrybucji Ad Hoc profil rejestruje konkretne UDID urządzeń, na których dozwolone jest uruchamianie. Bezpłatne konto Apple Developer Program ogranicza 100 urządzeń rocznie do testowania. Profile Enterprise (do dystrybucji wewnętrznej w organizacji) nie mają ograniczenia liczby urządzeń, ale wymagają aktywnej subskrypcji Apple Developer Enterprise Program kosztującej $299 rocznie.
Okres ważności Provisioning Profile wynosi jeden rok od momentu utworzenia. Na 30 dni przed wygaśnięciem Apple zaczyna wysyłać deweloperowi powiadomienia push przez Xcode i Developer Portal. Jeśli profil wygaśnie, aplikacja na urządzeniu nadal działa (jeśli została już zainstalowana), ale nowego buildu z tym profilem nie da się zainstalować. Xcode podczas próby budowania z wygasłym profilem zwraca błąd podpisywania kodu o kodzie -402620394. Apple zaleca skonfigurowanie automatycznego odnawiania profili przez Xcode Accounts Preferences — wtedy Xcode aktualizuje profil 24 godziny przed wygaśnięciem.
Apple udostępnia cztery główne typy Provisioning Profile, z których każdy jest przeznaczony do konkretnego etapu cyklu życia aplikacji. Development profil pozwala uruchamiać aplikację na fizycznych urządzeniach dodanych do Apple Developer Portal i jest używany na etapie rozwoju i testów QA. Do utworzenia profilu Development wystarczy bezpłatne konto deweloperskie Apple.
Ad Hoc profil jest przeznaczony do dystrybucji aplikacji wśród ograniczonego grona testerów bez korzystania z App Store. Profil rejestruje do 100 urządzeń według UDID, a aplikację można zainstalować bezpośrednio przez iTunes, Apple Configurator lub rozwiązania MDM. Ad Hoc buildy mają okres ważności 12 miesięcy i nie wymagają przejścia review Apple.
App Store profil jest używany wyłącznie do publikowania aplikacji w App Store i nie zawiera listy urządzeń — Apple sama zarządza dystrybucją po zatwierdzeniu buildu. Podczas przesyłania archiwum do App Store Connect Xcode automatycznie używa profilu App Store, jeśli jest zainstalowany w systemie. Enterprise profil jest przeznaczony dla organizacji z Apple Developer Enterprise Program i umożliwia dystrybucję aplikacji w firmie bez ograniczenia liczby urządzeń i bez review Apple.
| Typ profilu | Cel | Urządzenia | Koszt subskrypcji |
|---|---|---|---|
| Development | Rozwój i testowanie | Do 100 UDID | Bezpłatnie / $99 rocznie |
| Ad Hoc | Dystrybucja dla testerów | Do 100 UDID | $99 rocznie |
| App Store | Publikacja w App Store | Dowolne (przez Apple) | $99 rocznie |
| Enterprise | Dystrybucja wewnętrzna | Nieograniczone | $299 rocznie |
Provisioning Profile to plik w formacie DER podpisany przez Apple, którego zawartość można przeglądać za pomocą wiersza poleceń. Security framework systemu macOS umożliwia zdekodowanie .mobileprovision do czytelnego pliku XML plist. Wewnątrz profilu znajdują się: UUID profilu, App ID (prefiks zespołu + Bundle Identifier), lista certyfikatów, lista dozwolonych urządzeń (tylko dla Development i Ad Hoc), entitlements i okres ważności.
App ID to unikalny identyfikator aplikacji składający się z Team ID (10 znaków, nadawany przez Apple) i Bundle Identifier (na przykład com.example.myapp). App ID może być explicit (dokładne dopasowanie do Bundle Identifier) lub wildcard (wzorzec *.example.com dla wielu aplikacji). Apple nie zaleca używania wildcard dla aplikacji korzystających z powiadomień Push lub iCloud — te usługi wymagają jawnego App ID.
Entitlements to blok XML w profilu, który określa prawa dostępu aplikacji do zasobów systemowych. Typowe entitlements obejmują: aps-environment (powiadomienia Push), com.apple.developer.icloud-services (iCloud), com.apple.security.application-groups (App Groups dla Widget i Share Extension). Apple automatycznie dodaje entitlements do profilu na podstawie włączonych Capabilities w Xcode. Wszelka niezgodność między entitlements w profilu a wymaganymi w kodzie prowadzi do błędu podpisywania.
Tworzenie profilu jest możliwe na dwa sposoby: przez interfejs internetowy Apple Developer Portal lub automatycznie przez Xcode. W typowym projekcie Xcode zarządza profilami automatycznie, gdy włączona jest opcja Automatically manage signing. Xcode tworzy certyfikat, profil i App ID w kilka sekund, synchronizując się z Apple Developer Portal. Jednak w przypadku potoków CI/CD wymagane jest ręczne zarządzanie.
Do ręcznego utworzenia profilu w Apple Developer Portal należy: przejść do sekcji Certificates, Identifiers & Profiles, wybrać Profiles i kliknąć „+". Następnie wybrać typ profilu (Development, Ad Hoc, App Store lub Enterprise), wybrać App ID z listy zarejestrowanych, wybrać certyfikat dewelopera i (dla Development i Ad Hoc) wybrać urządzenia. Po utworzeniu profil jest pobierany w formacie .mobileprovision i instalowany dwuklikiem w Xcode.
Serwery CI/CD wymagają szczególnego podejścia: profil i certyfikat powinny być przechowywane w zabezpieczonym repozytorium (na przykład w sekretach GitHub Actions). Podczas budowania profil jest ładowany na agenta, umieszczany w folderze ~/Library/MobileDevice/Provisioning Profiles, a certyfikat jest importowany do pęku kluczy. Fastlane — popularne narzędzie do automatyzacji podpisywania — udostępnia polecenie match, które synchronizuje profile i certyfikaty między deweloperami przez zaszyfrowane repozytorium git.
Do diagnozowania problemów z podpisywaniem kodu można zdekodować .mobileprovision i sprawdzić jego zawartość. Poniższe polecenie wyodrębnia plik XML plist z profilu i zapisuje go w czytelnym formacie:
# Dekodowanie .mobileprovision do XML
security cms -D -i "path/to/embedded.mobileprovision" \
-o "profile.plist"
# Sprawdzanie okresu ważności profilu
plist -convert xml1 profile.plist -o -
grep -A 1 "ExpirationDate" profile.plist
Security narzędzie z pakietu macOS Command Line Tools dekoduje podpisany plik CMS profilu. Flaga -D oznacza dekodowanie, -i — plik wejściowy. Po dekodowaniu narzędzie plist konwertuje binarny plist do XML, a grep wyodrębnia datę wygaśnięcia. Ta metoda jest przydatna w CI/CD do sprawdzania, czy profil nie jest przeterminowany przed budowaniem wersji wydawniczej.
Najczęstszy błąd to „No matching provisioning profiles found" podczas budowania w Xcode. Pojawia się, gdy Xcode nie może znaleźć profilu pasującego do konfiguracji budowania: Bundle Identifier nie pasuje do App ID w profilu, certyfikat nie jest zainstalowany w pęku kluczy lub profil wygasł. Rozwiązanie — sprawdzić ustawienia Signing & Capabilities w target i w razie potrzeby przełączyć się na Automatically manage signing.
Błąd „Provisioning profile doesn't include the selected device" pojawia się przy próbie uruchomienia buildu Development lub Ad Hoc na urządzeniu, którego UDID nie został dodany do profilu. Apple Developer Portal umożliwia dodanie urządzenia do istniejącego profilu — po tym profil należy ponownie pobrać i zainstalować. Xcode przy automatycznym zarządzaniu podpisem dodaje podłączone urządzenie do profilu automatycznie.
Problem z entitlements objawia się błędem „The executable was signed with invalid entitlements" przy przesyłaniu do App Store Connect. Przyczyną jest niezgodność entitlements w profilu z plikiem .entitlements projektu. Apple wymaga, aby zestaw uprawnień w profilu był nadzbiorem uprawnień żądanych przez aplikację. Rozwiązanie — sprawdzić Capabilities w target Xcode i upewnić się, że wszystkie włączone usługi mają odpowiednie entitlements w profilu. Fastlane zawiera polecenie produce, które synchronizuje App ID i profile z aktualnymi entitlements.
Najczęściej zadawane pytania
Tak, jeśli App ID w profilu używa identyfikatora wildcard w postaci com.example.*. Jednak profile wildcard nie obsługują powiadomień Push, iCloud, Game Center i App Groups. Apple zaleca tworzenie osobnego profilu explicit dla każdej aplikacji korzystającej z rozszerzonych Capabilities.
Aplikacja pobrana przez App Store korzysta z profilu Store firmy Apple, który nie zależy od profilu dewelopera. Użytkownicy nadal będą mogli pobierać i uruchamiać aplikację. Wygasły profil uniemożliwia jedynie przesłanie nowego buildu do App Store Connect — Apple wymaga, aby Distribution profil był ważny w momencie wysyłki.
Profil można skopiować do folderu ~/Library/MobileDevice/Provisioning Profiles na nowym komputerze. Jednak profil jest powiązany z certyfikatem, którego prywatny klucz znajduje się w pęku kluczy. Należy również wyeksportować certyfikat z kluczem prywatnym przez Keychain Access i zaimportować go na nowym urządzeniu.
Nie ma ograniczeń liczby profili na komputerze. Profile są przechowywane w folderze ~/Library/MobileDevice/Provisioning Profiles i numerowane według UUID. Xcode automatycznie wybiera odpowiedni profil na podstawie App ID i typu budowania. Dla uproszczenia zarządzania zaleca się usuwanie nieużywanych profili przez Xcode Accounts Preferences.
Signing Certificate potwierdza tożsamość dewelopera — to klucz kryptograficzny wydany przez Apple. Provisioning Profile to plik konfiguracyjny, który wskazuje, jaka aplikacja (App ID) pod jakim certyfikatem i na jakich urządzeniach może być uruchamiana. Profil zawsze odwołuje się do konkretnego certyfikatu, ale go nie zastępuje.
Podsumowanie
Opracujemy aplikację mobilną pod klucz
IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.
Przeczytaj również