Az Info.plist egy XML konfigurációs fájl iOS és macOS alkalmazásokhoz, amely metaadatokat, engedélyeket és indítási beállításokat tartalmaz. A rendszer az alkalmazáskód inicializálása előtt dolgozza fel. A Apple Developer, 2025 szerint megfelelően konfigurált Info.plist nélkül az alkalmazás nem megy át az App Store felülvizsgálatán. Info.plist határozza meg a bundle azonosítót, a build verziót, a kért engedélyeket és a támogatott képernyőtájolásokat.
Főbb pontok
Az Info.plist egy XML formátumú fájl dict gyökérelemmel, amely kulcs-érték párokat tartalmaz property list formájában. Az alkalmazás bundle-jén belül található, és a rendszer minden indításkor beolvassa a kód végrehajtása előtt. A plist formátum támogatja a karakterláncokat, számokat, tömböket, szótárakat, dátumokat és logikai értékeket, lehetővé téve összetett konfigurációk leírását.
Az Apple az Info.plist-et használja az alkalmazás identitásának, képességeinek és követelményeinek meghatározására. Egyes kulcsok módosítása a bundle újraépítését igényli, mert befolyásolják az App Store által a build feltöltésekor ellenőrzött metaadatokat. Például a CFBundleVersion vagy CFBundleIdentifier megváltoztatása publikálás után megzavarhatja az alkalmazás frissítési folyamatát, mivel az App Store Connect ezeket az értékeket használja a verziók azonosítására.
Az alapvető kulcsok automatikusan létrejönnek a projekt Xcode-ban történő létrehozásakor, de a legtöbb beállítást manuálisan adják hozzá az alkalmazás funkcionalitásának fejlődésével. Az Xcode grafikus Info.plist szerkesztőt biztosít legördülő listákkal a szabványos kulcsokhoz, ami csökkenti az elírások kockázatát. Az olyan összetett konfigurációkhoz azonban, mint a Scene Manifest vagy a Background Modes, ajánlott a forrás XML közvetlen szerkesztése.
Egyes Info.plist kulcsok kötelezőek az App Store-ban történő publikáláshoz. Hiányuk a build elutasításához vezet az érvényesítési szakaszban. Az Apple automatikusan ellenőrzi ezeket a kulcsokat az archívum Xcode Organizer vagy Transporter segítségével történő feltöltésekor. A fejlesztőnek meg kell győződnie arról, hogy minden kötelező mező helyesen van kitöltve a felülvizsgálatra küldés előtt.
A CFBundleIdentifier kulcs az alkalmazás egyedi azonosítóját állítja be fordított domain jelölésben (com.cegnév.alkalmazás). Kódaláíráshoz, Push értesítésekhez, CloudKit-hez, App Groups-hoz és sok más Apple szolgáltatáshoz használják. Az azonosító publikálás utáni megváltoztatását az App Store új alkalmazásként kezeli, és a meglévő felhasználók nem kapnak frissítést. Ezért az azonosítónak változatlannak kell maradnia az alkalmazás teljes életciklusa során.
<key>CFBundleIdentifier</key>
<string>com.itsectr.myapp</string>
A CFBundleShortVersionString (megjelenített verzió) és CFBundleVersion (build szám) kulcsokat az App Store Connect és a rendszer használja a frissítések kezeléséhez. A verzió major.minor.patch formátumban van megadva. A build számnak növekednie kell minden App Store Connect-be feltöltött builddel, még akkor is, ha az alkalmazás verziója nem változik. Az Apple a CFBundleVersion segítségével határozza meg, hogy a build új vagy egy már feltöltött másolata-e. Ha a build szám megegyezik egy korábban feltöltöttével, ITMS-90161 hiba jelenik meg.
<key>CFBundleShortVersionString</key>
<string>1.2.0</string>
<key>CFBundleVersion</key>
<string>42</string>
A UISupportedInterfaceOrientations kulcsok határozzák meg az iPhone támogatott képernyőtájolásait. Az iPadhez külön UISupportedInterfaceOrientations~ipad kulcsot használnak eszköz utótaggal. Minden tájolást egy karakterlánc határoz meg: UIInterfaceOrientationPortrait, UIInterfaceOrientationLandscapeLeft, UIInterfaceOrientationLandscapeRight, UIInterfaceOrientationPortraitUpsideDown. Ha az alkalmazás csak álló tájolást támogat, az App Store elutasítja a buildet, kivéve ha csak iPhone-ra készült és csak álló tájolás van megadva iPadhez.
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
</array>
Az iOS 10-től kezdve az Apple minden kért engedély leírását megköveteli az NS (NeXTStep) előtagú kulcsokon keresztül. A leírás a rendszer párbeszédablakában jelenik meg a felhasználó számára a privát API-khoz való első hozzáférés kérésekor. A megfelelő NS kulcs hiánya egy engedélyt igénylő API meghívásakor az alkalmazás azonnali megszakadásához vezet egy kivétellel, amely csak a crash naplókban rögzítődik.
| Kulcs | Cél |
|---|---|
| NSCameraUsageDescription | Hozzáférés a kamerához fotó és videó készítéséhez |
| NSPhotoLibraryUsageDescription | Hozzáférés a fotókönyvtárhoz |
| NSLocationWhenInUseUsageDescription | Helymeghatározás aktív használat során |
| NSMicrophoneUsageDescription | Hozzáférés a mikrofonhoz hangfelvételhez |
| NSContactsUsageDescription | Hozzáférés az eszköz névjegyeihez |
Minden adatvédelmi kulcsnak tartalmaznia kell a felhasználó számára érthető leírást a kérés okáról. Az üres vagy sablon szövegek, mint „Az alkalmazás működéséhez” vagy „Szükséges hozzáférés”, az App Store általi elutasításhoz vezetnek. A leírásnak meg kell magyaráznia a konkrét funkciót: „A kamera hozzáférés a QR-kódok beolvasásához és profilképek készítéséhez szükséges”. Javasolt a leírások lokalizált verzióinak használata InfoPlist.strings fájlokon keresztül minden támogatott nyelvhez.
A szükséges NS kulcs hiánya egy privát adatokhoz hozzáférő API meghívásakor az alkalmazás összeomlását okozza. A rendszer kivétellel megszakítja a folyamatot, ami csak az Xcode vagy Firebase Crashlytics crash jelentéseinek naplóiban látható. A felhasználó csak az alkalmazás hirtelen bezárását látja magyarázat nélkül. Ezért mielőtt új, kamerát, mikrofont vagy helymeghatározást használó funkciót ad hozzá, először adja hozzá a megfelelő adatvédelmi kulcsot az Info.plist-ben, majd implementálja az API hívást.
A CFBundleURLTypes kulcs regisztrálja az egyéni URL sémákat a mélyhivatkozásokhoz az alkalmazásban. Ez lehetővé teszi az alkalmazás megnyitását böngészőből, e-mailből vagy más alkalmazásokból az myapp://profile/123 formájú hivatkozásokon keresztül. Minden séma egyedileg azonosítja az alkalmazást: ha két alkalmazás ugyanazt a sémát regisztrálja, a rendszer választási párbeszédablakot jelenít meg a felhasználónak.
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>com.itsectr.myapp</string>
<key>CFBundleURLSchemes</key>
<array>
<string>myapp</string>
</array>
</dict>
</array>
Az Universal Links támogatásához a com.apple.developer.associated-domains kulcs szükséges az Entitlements fájlban, nem az Info.plist-ben. Az Universal Links csak akkor működik, ha van egy konfigurált apple-app-site-association fájl a szerveren, amely összeköti a domaint az alkalmazással. Az egyéni URL sémákkal ellentétben az Universal Links nem jelenít meg megerősítő párbeszédablakot és nem ütközik más alkalmazásokkal, mivel HTTPS hivatkozásokat használnak egyéni sémák helyett. Azonban érvényes SSL tanúsítvánnyal rendelkező domaint igényelnek.
Az egyéni sémák ütközhetnek a szabványos iOS sémákkal. Javasolt legalább 4 karakter hosszúságú sémák használata az ütközések minimalizálása érdekében. Például az „fb” séma túl rövid és konfliktusokat okozhat. Jobb a fordított jelölés használata: myapp:// az app:// helyett. Azt is érdemes megjegyezni, hogy ha az alkalmazást törlik, de egy másik alkalmazás regisztrálta ugyanazt a sémát, a felhasználó váratlan viselkedést tapasztalhat egy hivatkozásra kattintva.
A UIBackgroundModes kulcs deklarálja az alkalmazás háttérbeli képességeit. Minden módhoz megfelelő leírás szükséges az Info.plist-ben és megerősítés az Xcode projekt capabilities részében. A mód megadása nélkül a rendszer kényszerítetten megszakíthatja a háttérfeladatot 30 másodperc után vagy erőforrások hiányában.
<key>UIBackgroundModes</key>
<array>
<string>fetch</string>
<string>remote-notification</string>
<string>location</string>
<string>processing</string>
</array>
A UIApplicationSupportsMultipleScenes kulcs engedélyezi a multitasking támogatást iPad és Mac Catalyst eszközökön. E kulcs nélkül az alkalmazás nem használhatja a SwiftUI ScenePhase-t vagy a UIKit UISceneDelegate-et több ablak kezelésére. iPadOS-en a felhasználók több ablakot nyithatnak meg ugyanabból az alkalmazásból, húzhatnak tartalmat közöttük, és használhatják a Split View-t. Ha az alkalmazás nem támogatja a többablakos módot, a kulcs false értékre állítása kikapcsolja a megfelelő funkciót.
A LSRequiresIPhoneOS kulcs megtiltja az alkalmazás telepítését iPadre. Olyan iPhone-only alkalmazásokhoz használják, amelyek nem támogatják az iPad interfészt vagy nem lettek adaptálva nagy képernyőre. Az Apple azonban nem ajánlja e kulcs szükségtelen használatát, mivel a felhasználók elvárják, hogy az alkalmazások minden iOS és iPadOS eszközön működjenek. Ha az alkalmazás mégis iPhone-ra korlátozódik, győződjön meg róla, hogy ez a követelmény technikailag indokolt és szerepel az App Store leírásában.
A UIViewControllerBasedStatusBarAppearance kulcs vezérli az állapotsor stílusát. NO értékre állítva az állapotsor stílusa globálisan az Info.plist UIStatusBarStyle kulcsa által van meghatározva. YES értéknél (alapértelmezett iOS 7 óta) minden ViewController kezelheti saját állapotsorát a preferredStatusBarStyle felülírásával. Modern alkalmazásokhoz ajánlott YES-en hagyni, hogy különböző állapotsor legyen a különböző képernyőkön, például világos sötét háttéren és sötét világos háttéren.
A UIApplicationExitsOnSuspend kulcs arra kényszeríti az alkalmazást, hogy teljesen bezáródjon a háttérmódba lépéskor a felfüggesztés helyett. Ritkán használják, csak magas biztonsági követelményekkel rendelkező alkalmazásoknál: banki alkalmazások vagy bizalmas adatokkal dolgozó alkalmazások. Ebben az esetben a felhasználó elveszíti a gyors visszatérés lehetőségét, és minden indítás tiszta állapotból történik. Az App Store kérheti a kulcs használatának indoklását a felülvizsgálat során.
A NSAppTransportSecurity kulcs kezeli az alkalmazás hálózati kapcsolatait. Az iOS 9-től kezdve az App Transport Security (ATS) alapértelmezés szerint blokkolja az összes HTTP kapcsolatot, HTTPS-t követelve. Bizonyos domainek HTTP kéréseinek ideiglenes engedélyezéséhez az NSExceptionDomains szótár használható az NSAppTransportSecurity-en belül. Fejlesztéshez az ATS teljes kikapcsolása megengedett az NSAllowsArbitraryLoads = true segítségével, de az Apple indoklást kér, és nem engedi át az ilyen buildeket alapos ok nélkül. A termelési buildben az ATS-nek engedélyezve kell lennie minden, felhasználói adatokkal dolgozó domainre.
Gyakran ismételt kérdések
Az Info.plist fájl a projekt mappájában található, amelynek neve megegyezik az alkalmazás nevével. Az Xcode-ban a projekt navigátorában jelenik meg a Supporting Files csoporton belül kék könyv ikonnal. Megtalálható a projekt Spotlight keresésével is.
Igen, az Info.plist bármely szövegszerkesztőben vagy az Xcode grafikus felületén keresztül szerkeszthető. A manuális szerkesztés teljes ellenőrzést biztosít a tartalom felett, de figyelmet igényel az XML szintaxisra: minden nyitó <key> direktívának rendelkeznie kell egy megfelelő </key>-vel, és az adattípusoknak meg kell felelniük az Apple elvárásainak.
SwiftUI projektekben az Info.plist azonos módon működik, mint UIKit projektekben. Ezenkívül szükség lehet a UIApplicationSceneManifest kulcsra a Scene Configuration beállításához, ha a projekt nem az App protokollt használja a jelenetek kezelésére. A SwiftUI App protocol automatikusan generálja a jelenet konfigurációt, de testreszabáshoz a kulcsok manuális hozzáadása szükséges.
Nyissa meg az Info.plist-et az Xcode-ban, kattintson a pluszra, és adja meg a kulcs nevét. Egyéni kulcsokhoz használja a cég előtagját az Apple rendszerkulcsaival való ütközések elkerülése érdekében, például ITSCustomKey a CustomKey helyett. Az érték típusa (String, Number, Array, Dictionary) a várt adatformátumtól függően választható ki.
Tipikus okok: adatvédelmi kulcsok hiánya a kért engedélyekhez, helytelen CFBundleIdentifier, verzióeltérés az Info.plist és az App Store Connect között, üres NS kulcs értékek. Ellenőrizze az összes NS kulcsot a használt API-khoz, és győződjön meg arról, hogy minden leírás értelmes magyarázatot tartalmaz az alkalmazás lokalizációs nyelvén.
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is