# Certyfikat dewelopera iOS: provisioning profile i Expo

> Certyfikat potwierdza, kto podpisuje aplikację, a provisioning profile mówi, jaka to aplikacja i na jakich iPhone'ach działa. Z Expo EAS tworzy i odnawia oba.

Oryginalna strona: [Certyfikat dewelopera iOS: provisioning profile i Expo](https://devoria.fr/pl/blog/certyfikat-dewelopera-ios-provisioning-profile-expo)
Autor: [Mehdi Azizi](https://devoria.fr/pl/mehdi-azizi)
Publikacja: 2026-11-04
Ostatnia aktualizacja treści: 2026-11-04


Certyfikat dewelopera iOS potwierdza, kto podpisał twoją aplikację. Provisioning profile (profil aprowizacyjny) łączy ten certyfikat z konkretną aplikacją i określa, gdzie może ona działać. **Z Expo prawie nigdy nie musisz tworzyć ich ręcznie: EAS je generuje, przechowuje i odnawia, kiedy uruchamiasz build.**

Mimo to warto rozumieć, do czego służy każdy plik. W dniu, w którym build nie chce się zainstalować albo wysyłka się blokuje, ta wiedza oszczędza ci cały dzień. Ten poradnik omawia cztery elementy, ich czas ważności, limity Apple i typowe błędy, z rozwiązaniem dla każdego.

Publikuję swoje aplikacje iOS przez Expo i EAS, w tym Solys i TradaZen. Cała ścieżka jest w artykule [publikacja aplikacji iOS bez Maca](https://devoria.fr/pl/blog/publikacja-aplikacji-ios-bez-maca-expo-eas). Tutaj zaglądamy pod maskę podpisywania.

## Dlaczego Apple wymaga podpisu

Aplikacja iOS musi być podpisana, żeby dało się ją zainstalować na iPhonie albo wysłać do App Store Connect. Podpis gwarantuje, że aplikacja pochodzi od dewelopera znanego Apple i że nikt jej od tego czasu nie zmodyfikował.

W przypadku App Store jest jeden uspokajający szczegół. Według [noty technicznej Apple TN3161](https://developer.apple.com/documentation/technotes/tn3161-inside-code-signing-certificates) App Store sprawdza, czy twój certyfikat dystrybucyjny jest ważny w momencie wysyłki, a potem ponownie podpisuje aplikację, która od tej chwili nie zależy już od daty wygaśnięcia twojego certyfikatu. **Twoje certyfikaty muszą więc być ważne w momencie wysyłki, a nie przez cały czas życia aplikacji.**

## Cztery elementy, które musisz znać

[Dokumentacja Expo o danych uwierzytelniających](https://docs.expo.dev/app-signing/app-credentials/) wymienia trzy dla iOS: certyfikat dystrybucyjny, profile i klucz powiadomień push. Dodaję do tego identyfikator aplikacji, bez którego żaden profil nie istnieje.

### Certyfikat dystrybucyjny

To twój podpis dewelopera. [Pomoc Apple dotycząca certyfikatów](https://developer.apple.com/help/account/certificates/certificates-overview) rozróżnia dwie rodziny:

- **Apple Development** służy do uruchamiania aplikacji na twoich urządzeniach w trakcie tworzenia. Należy do jednej osoby.
- **Apple Distribution** służy do dystrybucji na wyznaczone urządzenia testowe albo do wysyłki do App Store Connect. Należy do zespołu i tylko właściciel konta lub admin może go utworzyć.

Certyfikat dystrybucyjny nie dotyczy żadnej konkretnej aplikacji: ten sam podpisuje wszystkie twoje aplikacje. Idzie w parze z kluczem prywatnym i to właśnie on pozwala podpisywać. Według TN3161 certyfikat Apple jest zwykle ważny rok od utworzenia.

### Identyfikator aplikacji (App ID)

App ID identyfikuje twoją aplikację w profilu. Odpowiada twojemu identyfikatorowi bundle, na przykład `com.example.myapp` (przykład fikcyjny). Według [pomocy Apple](https://developer.apple.com/help/account/identifiers/register-an-app-id) zawiera też listę dozwolonych funkcji (capabilities): powiadomienia push, App Groups, Sign in with Apple…

W Expo to pole `ios.bundleIdentifier` w twojej konfiguracji. **Wybierz go raz na zawsze**: musi być identyczny wszędzie, zarówno w konfiguracji, jak i w App Store Connect. App ID nie wygasa. A według [dokumentacji Expo o funkcjach iOS](https://docs.expo.dev/build-reference/ios-capabilities/) EAS synchronizuje jego funkcje z twoją konfiguracją przy każdym buildzie.

### Profil aprowizacyjny

Profil spina to wszystko razem. Zawiera App ID, certyfikat i, zależnie od typu, listę dozwolonych urządzeń. Interesują cię trzy typy:

- **Development**: twoja testowa aplikacja na zarejestrowanych urządzeniach.
- **Ad hoc**: build, który da się zainstalować na konkretnej liście urządzeń, każde identyfikowane przez UDID. To „dystrybucja wewnętrzna” (internal distribution) w EAS.
- **App Store**: dla App Store Connect i TestFlight. Nie zawiera żadnej listy urządzeń, wyjaśnia [nota TN3125](https://developer.apple.com/documentation/technotes/tn3125-inside-code-signing-provisioning-profiles).

Każdy profil ma datę wygaśnięcia: według Apple zwykle nie dłużej niż rok, według Expo 12 miesięcy.

### Klucz powiadomień push (APNs)

Klucz APNs pozwala twojemu serwerowi albo serwerowi Expo wysyłać powiadomienia do twojej aplikacji. To plik .p8, który można pobrać tylko raz: [Apple go nie przechowuje](https://developer.apple.com/help/account/keys/create-a-private-key) na twoim koncie. Jeden klucz obsługuje wszystkie twoje aplikacje i [nigdy nie wygasa](https://developer.apple.com/support/expiration/).

## Tabela podsumowująca

| Element                  | Do czego służy                  | Ważność        | Kto nim zarządza z Expo |
| ------------------------ | ------------------------------- | -------------- | ----------------------- |
| Certyfikat dystrybucyjny | Podpisywanie buildów            | Zwykle rok     | EAS, po zalogowaniu     |
| App ID                   | Identyfikacja aplikacji         | Nie wygasa     | Ty, potem EAS           |
| Profil App Store         | Wysyłka do Apple                | Do 12 miesięcy | EAS                     |
| Profil ad hoc            | Instalacja na twoich iPhone'ach | Do 12 miesięcy | EAS i twoje urządzenia  |
| Klucz push APNs          | Wysyłanie powiadomień           | Nie wygasa     | EAS albo ty             |
| Profil darmowego konta   | Testy przez Xcode               | 7 dni          | Xcode, nie EAS          |

„Ty, potem EAS”: ty wybierasz identyfikator bundle, EAS zajmuje się funkcjami. „EAS i twoje urządzenia”: ty rejestrujesz każdego testowego iPhone'a, EAS tworzy profil. Ostatni wiersz dotyczy darmowego konta Apple: według [pomocy Apple o kontach](https://developer.apple.com/help/account/basics/about-your-developer-account) jego profile wygasają 7 dni po utworzeniu.

## Limity Apple, które musisz znać

- **Certyfikaty dystrybucyjne**: bardzo mało na konto. Pomoc Apple mówi o jednym na typ dystrybucji i na zespół, tabela Expo o limicie 2. Zapamiętaj zasadę: **nie twórz nowego certyfikatu przy każdym buildzie ani na każdym komputerze.**
- **Klucze APNs**: maksymalnie 2 na konto, według Expo.
- **Profile**: bez limitu, według Expo.
- **Urządzenia**: do 100 na rodzinę produktów i na rok członkostwa, według [pomocy Apple o urządzeniach](https://developer.apple.com/help/account/devices/devices-overview). Wyłączenie urządzenia nie zwalnia miejsca. Licznik wraca do 100 na początku kolejnego roku członkostwa, jeśli usuniesz urządzenia.

## Co EAS robi za ciebie

Według [strony Expo o zarządzanych danych uwierzytelniających](https://docs.expo.dev/app-signing/managed-credentials/) przy pierwszym buildzie iOS dostajesz propozycję wygenerowania tego, czego brakuje. Logujesz się na konto Apple Developer, EAS tworzy certyfikat dystrybucyjny, profil i klucz push, a potem przechowuje je na swoich serwerach. Kolejne buildy używają ich ponownie.

Trzy przydatne rzeczy:

- **Twoje hasło Apple zostaje na twoim komputerze.** [Strona Expo o bezpieczeństwie](https://docs.expo.dev/app-signing/security/) wyjaśnia, że nie jest wysyłane na ich serwery, a przechowywane dane uwierzytelniające są szyfrowane.
- **`eas credentials` pokazuje wszystko**: certyfikat, profile, klucz push. Ta komenda pozwala też je zastąpić albo usunąć.
- **Usunięcie w EAS nie usuwa niczego u Apple.** Żeby zwolnić miejsce, musisz unieważnić (revoke) element w portalu Apple.

Możesz też zachować pełną kontrolę dzięki lokalnym danym uwierzytelniającym: plik `credentials.json` wskazuje na twój certyfikat (.p12) i profil (.mobileprovision). Expo zaleca dodanie tych plików do `.gitignore`. To ta sama zasada co przy [kluczach API w aplikacji Expo](https://devoria.fr/pl/blog/klucz-api-aplikacja-expo-co-chronic): sekret nigdy nie trafia do repozytorium.

## Typowe błędy i jak je naprawić

### Wygasły profil

Build ad hoc zawiera w sobie swój profil: kiedy profil wygaśnie, aplikacja przestaje się otwierać na twoich testowych iPhone'ach. W App Store natomiast, jak potwierdza Expo, wygaśnięcie nie ma żadnego wpływu na aplikację na produkcji. **Rozwiązanie: uruchom nowy build.** EAS wygeneruje nowy profil, albo zrobisz to sam przez `eas credentials`. Potem zainstaluj nowy build na urządzeniach.

Nie myl tego z TestFlight: build w TestFlight wygasa po 90 dniach, niezależnie od certyfikatu. Szczegóły znajdziesz w artykule [TestFlight do testowania aplikacji na iPhone'a](https://devoria.fr/pl/blog/testflight-testowanie-aplikacji-iphone).

### Wygasły lub unieważniony certyfikat

Apple mówi jasno: jeśli twoje członkostwo jest ważne, aplikacje już obecne w App Store nie są naruszone. Nie możesz jednak wysłać buildu podpisanego tym certyfikatem. Build wysłany, ale jeszcze nie zgłoszony do recenzji, może dostać status Invalid Binary, jeśli jego certyfikat został unieważniony. A [profile zawierające unieważniony certyfikat stają się nieważne](https://developer.apple.com/help/account/certificates/revoke-a-certificate).

**Rozwiązanie: utwórz nowy certyfikat przez `eas credentials` albo przy następnym buildzie**, a potem pozwól EAS odtworzyć profile. I nigdy nie unieważniaj odruchowo certyfikatu, który działa.

### Urządzenia nie ma w profilu ad hoc

Link instalacyjny działa u ciebie, ale nie na iPhonie testera. Przyczyna: [dokumentacja Expo o dystrybucji wewnętrznej](https://docs.expo.dev/build/internal-distribution/) wyjaśnia, że aplikację mogą zainstalować tylko urządzenia obecne w profilu w momencie buildu.

Rozwiązanie:

1. Zarejestruj urządzenie przez `eas device:create`.
2. Uruchom ponownie build w trybie interaktywnym, zalogowany na konto Apple, żeby EAS zaktualizował profil. Albo podpisz istniejący build ponownie przez `eas build:resign`, bez kompilowania wszystkiego od nowa.
3. W CI tryb nieinteraktywny używa istniejącego profilu bez aktualizacji jego listy. Dodaj opcję `--refresh-ad-hoc-provisioning-profile`.

Na nowym albo świeżo odnowionym koncie Apple może potrzebować od 24 do 72 godzin na przetworzenie nowego urządzenia. Pierwszy build, który je zawiera, może więc się nie udać: poczekaj i spróbuj ponownie.

### Osiągnięty limit certyfikatów

Apple odmawia utworzenia nowego certyfikatu dystrybucyjnego. Często gdzieś wiszą stare certyfikaty: utworzone przez Xcode na innym Macu albo przez inną usługę buildów. **Użyj istniejącego certyfikatu, jeśli masz jego plik .p12. W przeciwnym razie unieważnij ten, który nie jest już używany** w portalu Apple. Unieważnienie nie wpływa na twoje opublikowane aplikacje, ale unieważnia profile, które go zawierały.

### „Provisioning profile doesn't include signing certificate”

Ten komunikat Xcode oznacza, że profil nie zawiera certyfikatu, którego klucz prywatny jest na twoim komputerze. Typowa przyczyna: mieszanie automatycznego podpisywania w Xcode z danymi uwierzytelniającymi EAS. **Wybierz jedno źródło prawdy**: buildy EAS z zarządzanymi danymi uwierzytelniającymi albo lokalne dane uwierzytelniające, ale nie jedno i drugie.

### Powiadomienia przestały działać po unieważnieniu klucza

Jeśli unieważnisz klucz APNs, Expo ostrzega, że wszystkie aplikacje, które go używają, przestaną otrzymywać powiadomienia. Utwórz nowy klucz i wyślij go przez `eas credentials`. Tokeny Expo Push twoich użytkowników się nie zmieniają.

### Dodana funkcja, nieważny profil

Włączenie usługi takiej jak powiadomienia push czy App Groups [unieważnia profil](https://developer.apple.com/help/account/provisioning-profiles/edit-download-or-delete-profiles): trzeba go wygenerować ponownie. W EAS synchronizacja funkcji odbywa się przy każdym buildzie. Jeśli profil nadal jest odrzucany, `eas credentials` pozwala wygenerować nowy.

## Co dalej po podpisaniu

Podpisany build to tylko jeden etap. Strona aplikacji, zrzuty ekranu, prywatność i wysyłka do recenzji są zebrane w artykule [publikacja aplikacji w App Store](https://devoria.fr/pl/expertise/publikacja-aplikacji-w-app-store). Jeśli nie masz jeszcze członkostwa, zacznij od [konta dewelopera Apple](https://devoria.fr/pl/blog/konto-deweloperskie-apple-cena). A żeby zrozumieć, dlaczego polecam Expo początkującym, przeczytaj [React Native i Expo do aplikacji mobilnej](https://devoria.fr/pl/expertise/aplikacja-mobilna-react-native-expo).

## Jeśli przygotowujesz swoją pierwszą publikację

Przed pierwszą wysyłką zrób [darmową diagnozę](https://devoria.fr/pl/diagnostic): powie ci, co naprawdę blokuje twój projekt, i wyśle ci moją checklistę chroniącą przed odrzuceniem przez Apple.

Żeby zbudować aplikację, podpiąć subskrypcje i opublikować ją bez walki z podpisywaniem, [iOS & Android Kit](https://devoria.fr/pl/kits/ios) prowadzi cię przez ścieżkę w czterech krokach z kodem startowym moich aplikacji, we własnym tempie.

## Najczęściej zadawane pytania

### Czym jest provisioning profile?

To plik, który pozwala twojej aplikacji działać na urządzeniu albo trafić do Apple. Łączy identyfikator aplikacji, certyfikat i, zależnie od typu, listę urządzeń. Profil App Store nie zawiera żadnych urządzeń, profil ad hoc wymienia kilka.

### Czy certyfikat dewelopera iOS jest darmowy?

Nie ma osobnej ceny: certyfikat dystrybucyjny jest wliczony w Apple Developer Program, który kosztuje 99 $ rocznie. Z darmowym kontem Apple Xcode pozwala testować na maksymalnie 3 urządzeniach, ale profile wygasają po 7 dniach, a publikacja jest niemożliwa.

### Jak długo ważny jest certyfikat dystrybucyjny Apple?

Według Apple zwykle rok od utworzenia. Profile aprowizacyjne też są ważne maksymalnie 12 miesięcy. Klucz powiadomień push natomiast nigdy nie wygasa.

### Co się stanie, jeśli mój certyfikat dystrybucyjny wygaśnie?

Nic dla twoich aplikacji już obecnych w App Store, dopóki twoje członkostwo jest ważne. Po prostu nie możesz już wysłać nowego buildu podpisanego tym certyfikatem. Z EAS nowy certyfikat tworzy się przy następnym buildzie albo przez `eas credentials`.

### Czy do utworzenia certyfikatu iOS potrzebny jest Mac?

Nie, jeśli korzystasz z EAS. Logujesz się na konto Apple z wiersza poleceń, a EAS generuje certyfikat i profil, zarówno na Windowsie, jak i na Linuksie. Bez EAS klasyczna metoda wymaga Xcode albo Pęku kluczy (Keychain Access) na Macu.

### Ile urządzeń może zawierać profil ad hoc?

Twoje konto może zarejestrować do 100 iPhone'ów na rok członkostwa i tyle samo dla każdej innej rodziny urządzeń. Wyłączone urządzenie nadal się liczy. Żeby testować z większą liczbą osób, użyj TestFlight.


## Twój projekt

[Review Kit](https://devoria.fr/pl/kits/app-review): Moja checklista do App Store Review, poprawione odrzucenia od Apple, checklista do Google Play i trzy skille Claude Code. 219 zł.

[iOS & Android Kit](https://devoria.fr/pl/kits/ios): Stwórz swoją aplikację na iPhone'a i Androida z Claude Code: kod startowy moich aplikacji, droga aż do sklepów i wszystkie kity. 439 zł.

[Diagnoza: co dzieli cię od twojej aplikacji na iPhone'a](https://devoria.fr/pl/diagnostic): 7 pytań, 60 sekund: wiesz, co naprawdę blokuje publikację twojej aplikacji na iPhone'a, masz plan w 4 krokach i kit dopasowany do ciebie.
