encyklopedia.space

Info.plist

Info.plist (ang. information property list) jest plikiem w formacie XML zawierającym metadane opisujące aplikację lub pakiet w systemach operacyjnych Apple, takich jak macOS, iOS, watchOS czy tvOS. Plik ten jest nieodłącznym elementem struktury aplikacji tworzonych w środowisku Xcode i służy systemowi operacyjnemu do prawidłowego rozpoznania, uruchomienia oraz zarządzania aplikacją.

Budowa i składnia

Info.plist jest zapisem w postaci słownika (dictionary) opisanym w języku XML. Każda para klucz‑wartość definiuje określone właściwości aplikacji, np. identyfikator pakietu, wersję, wymagania systemowe czy uprawnienia. Przykładowa struktura pliku może wyglądać następująco:

<?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>CFBundleIdentifier</key>
    <string>com.przyklad.aplikacja</string>
    <key>CFBundleVersion</key>
    <string>1.0</string>
    <key>CFBundleName</key>
    <string>PrzykladAplikacja</string>
    <key>UIRequiredDeviceCapabilities</key>
    <array>
        <string>armv7</string>
    </array>
</dict>
</plist>

Klucz CFBundleIdentifier (link do CFBundleIdentifier) jest unikalnym identyfikatorem pakietu, używanym m.in. w App Store oraz przy powiadomieniach push.

Najważniejsze klucze

  • CFBundleName – nazwa wyświetlana aplikacji.
  • CFBundleDisplayName – nazwa widoczna na ekranie głównym urządzenia.
  • CFBundleVersion – numer wersji wewnętrznej (ang. build number).
  • CFBundleShortVersionString – wersja publiczna, widoczna dla użytkowników.
  • CFBundleIdentifier – unikalny identyfikator pakietu.
  • UIRequiredDeviceCapabilities – lista wymagań sprzętowych (np. arm64).
  • LSApplicationQueriesSchemes – schematy URL, które aplikacja może wywołać.
  • NSPhotoLibraryUsageDescription i inne klucze NS…UsageDescription – opis uprawnień wymaganych od użytkownika.

Historia

Pierwsze wersje Info.plist pojawiły się w 2000 roku wraz z systemem Mac OS 9, gdzie służyły głównie do przechowywania informacji o aplikacjach w formacie Property List. Z wprowadzeniem iPhone OS w 2007 roku plik ten stał się kluczowym elementem procesu weryfikacji aplikacji w App Store. Od 2010 roku Apple zaleca używanie formatu binarnego .plist, który jest bardziej efektywny pod względem rozmiaru i prędkości odczytu.

Tworzenie i edycja

W Xcode plik Info.plist jest domyślnie generowany przy tworzeniu nowego projektu. Programiści mogą go edytować ręcznie w edytorze tekstu lub używać wbudowanego edytora Property List, który prezentuje dane w formie tabelarycznej. Istnieją także narzędzia wiersza poleceń, takie jak plutil, umożliwiające konwersję między formatami XML i binary.

Zastosowanie w praktyce

Plik Info.plist wpływa na wiele aspektów działania aplikacji:

  • Określenie minimalnej wersji systemu (MinimumOSVersion).
  • Definicja orientacji ekranu (UIInterfaceOrientation).
  • Włączenie funkcji takich jak obsługa multitouch, Bluetooth Low Energy czy ARKit poprzez odpowiednie klucze.
  • Rejestrowanie obsługi języków i lokalizacji (CFBundleLocalizations).

Bezpieczeństwo i prywatność

Od iOS 7 Apple wprowadziło obowiązek podawania szczegółowych opisów uprawnień w Info.plist. Brak wymaganych kluczy może skutkować odrzuceniem aplikacji w procesie recenzji lub wyświetleniem komunikatu ostrzegawczego użytkownikowi.

Porównanie z innymi formatami

Podobnie jak pliki .json czy .yaml, .plist służą do przechowywania struktur danych. Ich główną zaletą w ekosystemie Apple jest natywna obsługa przez klasy NSDictionary i NSArray w językach Objective‑C oraz Swift. Dzięki temu programiści mogą w prosty sposób odczytywać i modyfikować zawartość plików Info.plist bez konieczności dodatkowych bibliotek.

Przykładowe scenariusze

  1. Dodanie obsługi trybu ciemnego w iOS 13 wymaga wpisu UIUserInterfaceStyle w Info.plist.
  2. Wdrażanie funkcji Apple Pay polega na dodaniu klucza ApplePaySupportedNetworks oraz opisów uprawnień.
  3. Ustawienie aplikacji jako Universal (działającej na iPhone i iPad) wymaga zdefiniowania listy obsługiwanych rozdzielczości ekranu w UIDeviceFamily.

Patrz także