Entitlements w programowaniu dla iOS: co to jest, jakie są rodzaje i jak je skonfigurować

Autor: IT Sectr Opublikowano: 2026-05-18 Czas czytania: 8 min

Entitlements to cyfrowe prawa i uprawnienia nadawane aplikacji na etapie podpisywania kodu, które określają dostęp do chronionych funkcji systemu operacyjnego Apple. W przeciwieństwie do uprawnień użytkownika, Entitlements są sprawdzane przez system przy uruchomieniu aplikacji i nie mogą być zmienione przez użytkownika. Według Apple Developer Documentation (2025), poprawna konfiguracja Entitlements jest obowiązkowa do korzystania z iCloud, powiadomień Push i App Groups. Entitlements są kluczowym elementem modelu bezpieczeństwa iOS i macOS.

Najważniejsze

  • Entitlements — cyfrowe uprawnienia wbudowane w podpis aplikacji, określające dostęp do chronionych funkcji iOS i macOS.
  • Różnica od Permissions — Entitlements są sprawdzane przez system przy uruchomieniu i nie są pytane użytkownika; uprawnienia są pytane w czasie wykonania przez systemowe dialogi.
  • Capabilities — Xcode grupuje Entitlements w Capabilities: Push Notifications, iCloud, App Groups, In-App Purchase i inne.
  • Entitlements File — (.entitlements) — plik XML w projekcie Xcode zawierający listę uprawnień w formacie klucz-wartość, podpisywany przez Apple.
  • Bezpieczeństwo — entitlements są sprawdzane na etapie code signing; fałszowanie entitlements w zainstalowanej aplikacji łamie podpis cyfrowy i blokuje uruchomienie.

Czym są Entitlements?

Entitlements (w tłumaczeniu z angielskiego — „uprawnienia") to para klucz-wartość, która jest dołączana do podpisu kodu aplikacji na etapie budowania i określa, do jakich funkcji systemowych i danych aplikacja ma dostęp. Entitlements są wbudowane w model bezpieczeństwa Apple od czasu pojawienia się iOS SDK i są obowiązkowe dla wszystkich aplikacji dystrybuowanych przez App Store.

Koncepcja Entitlements różni się od tradycyjnych uprawnień (permissions) w Androidzie. O ile uprawnienia Androida są pytane od użytkownika w momencie pierwszego użycia funkcji, Entitlements w iOS są sprawdzane przez system przy uruchomieniu aplikacji na podstawie podpisu cyfrowego. Użytkownik nie może cofnąć ani zmienić entitlement — to uprawnienie jest przyznawane developerowi przez App Store Connect i przypisywane w profilu podpisu.

Każdy entitlement ma ściśle określone przeznaczenie i format. Na przykład com.apple.security.application-groups pozwala na dostęp do wspólnego kontenera dla zestawu aplikacji jednego developera, a aps-environment włącza obsługę powiadomień Push. Apple ręcznie recenzuje wnioski o entitlements w procesie App Review, co zapobiega nadużywaniu uprawnień.

Rodzaje Entitlements w iOS

Entitlements są klasyfikowane według przeznaczenia funkcjonalnego na kilka kategorii. Usługi systemowe — iCloud, Push Notifications, Siri. Bezpieczeństwo i dane — Keychain Access Groups, App Groups, Data Protection. Sieć i łączność — Multipath TCP, VPN, Hotspot Configuration. Możliwości sprzętowe — Camera, Microphone, Bluetooth (poprzez powiązane capabilities).

Capabilities i serwisowe Entitlements

Xcode grupuje powiązane entitlements w Capabilities — wysokopoziomowe przełączniki na zakładce Signing & Capabilities. Włączenie Capability automatycznie dodaje niezbędne entitlements do pliku .entitlements. Na przykład włączenie Capability Push Notifications dodaje entitlement aps-environment z wartością development lub production, a włączenie iCloud dodaje zestaw entitlements dla CloudKit i Key-Value storage.

Niektóre capabilities wymagają dodatkowej konfiguracji na portalu Apple Developer. Na przykład dla App Groups należy zarejestrować identyfikator grupy na portalu, po czym staje się on dostępny do wyboru w Xcode. Dla Push Notifications wymagane jest wygenerowanie klucza APNs lub certyfikatu. Bez tych wstępnych kroków entitlement nie będzie działać nawet przy poprawnym pliku .entitlements.

App Groups i Keychain Access

Entitlement com.apple.security.application-groups pozwala kilku aplikacjom jednego developera na wspólny kontener w systemie plików. Jest to używane do współdzielenia danych między główną aplikacją a rozszerzeniami (Widget, Watch App, Share Extension). Wszystkie aplikacje z jednej grupy mogą odczytywać i zapisywać pliki w wspólnym katalogu /Library/Group Containers/.

Keychain Access Groups (klucz keychain-access-groups) — kolejny ważny entitlement, pozwalający aplikacjom z jednej grupy na wspólny dostęp do elementów Keychain. Jest to kluczowe dla implementacji jednolitego uwierzytelniania: użytkownik loguje się w jednej aplikacji i automatycznie uzyskuje dostęp do tego samego konta w innej aplikacji bez ponownego wprowadzania hasła.

Jak skonfigurować Entitlements

Konfiguracja Entitlements odbywa się w Xcode na zakładce Signing & Capabilities w ustawieniach targetu. Developer wybiera potrzebne Capabilities z listy, a Xcode automatycznie tworzy lub aktualizuje plik .entitlements. Ten plik jest przechowywany w projekcie w formacie XML o strukturze plist i zawiera wszystkie klucze entitlements dla danego targetu.

objective-c
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
  "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.security.application-groups</key>
    <array>
        <string>group.com.example.shared</string>
    </array>
    <key>aps-environment</key>
    <string>development</string>
    <key>keychain-access-groups</key>
    <array>
        <string>$(AppIdentifierPrefix)com.example.keychain</string>
    </array>
</dict>
</plist>

Przy ręcznym tworzeniu pliku entitlement ważne jest przestrzeganie formatu kluczy i prefiksów. Entitlements Apple używają odwrotnego stylu domenowego (com.apple.*). Niestandardowe entitlements do własnych celów również są możliwe, ale muszą być zarejestrowane na portalu developerskim. Xcode zapewnia autouzupełnianie dla wszystkich standardowych kluczy entitlements.

Do debugowania Entitlements użyj polecenia codesign w terminalu macOS. Polecenie codesign -d --entitlements :- <ścieżka_do_aplikacji> wyświetla wszystkie entitlements, którymi podpisano aplikację. Jest to przydatne do diagnozowania problemów: jeśli entitlement nie występuje w wynikach, aplikacja nie uzyska dostępu do odpowiedniej funkcji niezależnie od ustawień w Xcode.

Ręczne tworzenie pliku entitlement

Chociaż Xcode generuje plik entitlement automatycznie przy włączaniu Capabilities, doświadczeni developerzy często tworzą lub edytują go ręcznie w celu precyzyjnego dostrojenia. Plik ma rozszerzenie .entitlements i format plist (XML). Można w nim dodawać niestandardowe klucze entitlement, które nie są dostępne w interfejsie Xcode, lub łączyć entitlements z różnych capabilities w jednym pliku.

Przy ręcznym edytowaniu ważne jest dbanie o poprawność składniową XML. Błąd w strukturze plist spowoduje, że entitlements nie zostaną zastosowane przy podpisywaniu. Xcode sprawdza plik .entitlements na etapie kompilacji i wyświetla błąd przy nieprawidłowym formacie. Dla złożonych projektów z wieloma targetami i rozszerzeniami zaleca się przechowywanie wspólnych kluczy entitlement w osobnych plikach i importowanie ich przez Build Settings.

cpp
// cli: sprawdzanie entitlements zainstalowanej aplikacji
codesign -d --entitlements :- /Applications/Safari.app

// Przykładowe wyjście zawiera listę aktywnych entitlements
<dict>
    <key>com.apple.security.ts.apple-wifi</key>
    <true/>
    <key>com.apple.security.network.client</key>
    <true/>
</dict>

Entitlements a bezpieczeństwo aplikacji

Entitlements odgrywają kluczową rolę w modelu bezpieczeństwa Apple. Ponieważ entitlements są częścią podpisu cyfrowego aplikacji, ich fałszowanie jest niemożliwe bez ponownego podpisania kodu. Apple sprawdza entitlements na kilku poziomach: przy budowaniu Xcode podpisuje entitlements wraz z plikiem wykonywalnym, przy instalacji system sprawdza integralność podpisu, a przy uruchomieniu — ponownie weryfikuje entitlements.

Jednym z ważnych wymogów bezpieczeństwa jest zasada minimalnego entitlement. Developer powinien włączać tylko te entitlements, które są rzeczywiście używane w aplikacji. Zbędne entitlements zwiększają powierzchnię ataku i mogą spowodować odrzucenie aplikacji podczas App Review. Apple wyraźnie sprawdza zgodność entitlements z funkcjonalnością aplikacji.

Niektóre entitlements są uważane za wrażliwe (sensitive) i wymagają dodatkowej zgody Apple. Należą do nich: com.apple.developer.healthkit (HealthKit), com.apple.developer.passkit (Wallet), com.apple.developer.authentication-services.authentication (Sign in with Apple) oraz com.apple.developer.nfc.readersession.formats (NFC). Aby uzyskać te entitlements, należy uzasadnić ich potrzebę w procesie App Review.

Przy pracy z entitlements ważne jest uwzględnienie różnic między iOS a macOS. Aplikacje desktopowe macOS (Sandboxed) mają szerszy zestaw entitlements w porównaniu z iOS. Na przykład entitlement com.apple.security.temporary-exception.* pozwala tymczasowo ominąć sandbox dla określonych operacji — w iOS takie entitlements w ogóle nie występują.

Entitlements a Provisioning Profile

Entitlements są ściśle powiązane z profilami podpisu (Provisioning Profiles). Profil podpisu to plik, który łączy certyfikat developera, listę dozwolonych urządzeń i zestaw entitlements dla konkretnej aplikacji. Przy instalacji aplikacji system porównuje entitlements w kodzie z entitlements w profilu podpisu. Jeśli entitlement występuje w kodzie, ale brak go w profilu, aplikacja nie uzyska dostępu do odpowiedniej funkcji.

Do diagnozowania problemów z entitlements w pierwszej kolejności sprawdzaj profil podpisu. Xcode automatycznie generuje profile na podstawie wybranych capability na portalu Apple Developer. Jeśli capability została dodana w Xcode, ale nie jest aktywna na portalu, aplikacja będzie zawieszać się z błędem podpisu przy próbie użycia chronionej funkcji.

Najczęściej używane Entitlements

Omówmy najczęściej używane entitlements w programowaniu iOS. aps-environment (Push Notifications) — obowiązkowy do wysyłania powiadomień push. com.apple.developer.ubiquity-container-identifiers (iCloud) — do synchronizacji danych przez CloudKit. com.apple.security.application-groups — do współdzielenia danych między aplikacjami i rozszerzeniami. com.apple.developer.associated-domains — dla Universal Links i Handoff.

Dla każdego z tych entitlements istnieje ścisła procedura konfiguracji. Push Notifications wymagają wygenerowania klucza APNs na portalu Apple Developer i włączenia capability w Xcode. Następnie entitlement jest automatycznie dodawany do pliku .entitlements. iCloud wymaga skonfigurowania kontenera na portalu i wybrania go w Xcode z listy rozwijanej.

Associated Domains — entitlement, który łączy aplikację z domeną internetową. Jest używany dla Universal Links (głębokie linki otwierające się bezpośrednio w aplikacji) i Handoff (kontynuacja pracy na innym urządzeniu Apple). Wartość entitlement zawiera tablicę ciągów w formacie applinks:example.com. Działanie wymaga umieszczenia pliku apple-app-site-association na serwerze.

Tabela popularnych entitlements i ich przeznaczenia:

Entitlement KeyPrzeznaczenieWymaga recenzji
aps-environmentPowiadomienia PushNie
com.apple.developer.ubiquity-*Synchronizacja iCloudNie
application-groupsWspólny kontener aplikacjiNie
com.apple.developer.healthkitDane HealthKitTak
com.apple.developer.nfc.*Odczyt tagów NFCTak
associated-domainsUniversal LinksNie

Często zadawane pytania

Czym różnią się Entitlements od Permissions w iOS?

Entitlements — to statyczne uprawnienia wbudowane w podpis aplikacji i sprawdzane przez system przy uruchomieniu. Permissions — to dynamiczne uprawnienia pytane od użytkownika w czasie wykonania (kamera, geolokalizacja).

Jak sprawdzić Entitlements zainstalowanej aplikacji?

Użyj polecenia codesign -d --entitlements w terminalu macOS. Dla aplikacji z App Store entitlement jest sprawdzany przez narzędzie ProvisionQL lub przez Xcode Organizer.

Czy można zmienić Entitlements po publikacji?

Zmiana entitlements wymaga nowej kompilacji i ponownego podpisania aplikacji. Jeśli entitlement wymaga zgody Apple, konieczne będzie ponowne przejście App Review. Bez ponownego podpisania zmiana entitlements jest niemożliwa.

Czym jest Entitlements File w Xcode?

Plik .entitlements — dokument XML w formacie plist przechowywany w projekcie Xcode. Zawiera listę wszystkich entitlements aplikacji w strukturalnej formie i jest podpisywany wraz z plikiem wykonywalnym.

Czym są Capabilities w Xcode?

Capabilities — wysokopoziomowe przełączniki na zakładce Signing & Capabilities w Xcode. Włączenie capability automatycznie dodaje odpowiednie entitlements do pliku .entitlements i konfiguruje profil podpisu.

Podsumowanie

  • Entitlements — cyfrowe uprawnienia aplikacji do korzystania z chronionych funkcji systemowych iOS i macOS, wbudowane w podpis kodu.
  • Różnica od uprawnień — entitlements są sprawdzane przez system przy uruchomieniu na podstawie podpisu, nie są pytane od użytkownika i nie mogą być cofnięte.
  • Capabilities — grupowania entitlements w Xcode dla Push Notifications, iCloud, App Groups, In-App Purchase i innych funkcji.
  • Sprawdzanie — przez polecenie codesign w terminalu macOS do diagnozowania zainstalowanych uprawnień aplikacji.
  • Wrażliwe entitlements — HealthKit, NFC, PassKit wymagają dodatkowej zgody Apple przez App Review.
  • Zasada minimalnych uprawnień — włączaj tylko niezbędne entitlements, aby zmniejszyć powierzchnię ataku i pomyślnie przejść recenzję.
  • Bezpieczeństwo — entitlements są chronione podpisem cyfrowym; fałszowanie jest niemożliwe bez ponownego podpisania całej aplikacji.

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.

Omów projekt

Przeczytaj również