Info.plist är en XML-konfigurationsfil för iOS- och macOS-appar som innehåller metadata, behörigheter och startinställningar. Den bearbetas av systemet innan appkoden initieras. Enligt Apple Developer, 2025 klarar inte en app utan korrekt konfigurerad Info.plist granskningen av App Store. Info.plist bestämmer paketidentifieraren, byggversionen, begärda behörigheter och skärmorienteringar som stöds.
Huvudpunkter
Info.plist är en fil i XML-format med ett rotelement dict som innehåller nyckel-värde-par i form av en property list. Den finns inuti appens paket och läses av systemet vid varje start innan koden exekveras. Plist-formatet stöder strängar, tal, arrayer, ordböcker, datum och booleska värden, vilket möjliggör beskrivning av komplexa konfigurationer.
Apple använder Info.plist för att definiera appens identitet, dess möjligheter och krav. Ändring av vissa nycklar kräver ombyggnad av paketet eftersom de påverkar metadata som App Store kontrollerar vid uppladdning av en build. Om du till exempel ändrar CFBundleVersion eller CFBundleIdentifier efter publicering kan det störa appens uppdateringsprocess eftersom App Store Connect använder dessa värden för att identifiera versioner.
Grundläggande nycklar skapas automatiskt när du skapar ett projekt i Xcode, men de flesta inställningar läggs till manuellt allt eftersom appens funktionalitet utvecklas. Xcode tillhandahåller en grafisk redigerare för Info.plist med rullgardinslistor för standardnycklar, vilket minskar risken för skrivfel. För komplexa konfigurationer som Scene Manifest eller Background Modes rekommenderas dock direkt redigering av käll-XML:en.
Vissa Info.plist-nycklar är obligatoriska för publicering i App Store. Deras frånvaro leder till att bygget avvisas i valideringssteget. Apple kontrollerar automatiskt dessa nycklar när arkivet laddas upp via Xcode Organizer eller Transporter. Utvecklaren måste se till att alla obligatoriska fält är korrekt ifyllda innan de skickas för granskning.
Nyckeln CFBundleIdentifier anger en unik identifierare för appen i omvänd domännotation (com.företag.app). Den används för kodsignering, Push-notiser, CloudKit, App Groups och många andra Apple-tjänster. Ändring av identifieraren efter publicering uppfattas av App Store som en ny app, och befintliga användare får ingen uppdatering. Därför måste identifieraren förbli oförändrad under appens hela livscykel.
<key>CFBundleIdentifier</key>
<string>com.itsectr.myapp</string>
Nycklarna CFBundleShortVersionString (visad version) och CFBundleVersion (byggnummer) används av App Store Connect och systemet för att hantera uppdateringar. Versionen anges i formatet major.minor.patch. Byggnumret måste öka med varje build som laddas upp till App Store Connect, även om appversionen inte ändras. Apple använder CFBundleVersion för att fastställa om bygget är nytt eller en dubblett av ett redan uppladdat. Om byggnumret matchar ett tidigare uppladdat visas felet ITMS-90161.
<key>CFBundleShortVersionString</key>
<string>1.2.0</string>
<key>CFBundleVersion</key>
<string>42</string>
Nycklarna UISupportedInterfaceOrientations anger vilka skärmorienteringar som stöds för iPhone. För iPad används en separat nyckel UISupportedInterfaceOrientations~ipad med enhetssuffix. Varje orientering anges som en sträng: UIInterfaceOrientationPortrait, UIInterfaceOrientationLandscapeLeft, UIInterfaceOrientationLandscapeRight, UIInterfaceOrientationPortraitUpsideDown. Om appen endast stöder porträttorientering kommer App Store att avvisa bygget om det inte är endast för iPhone och endast porträtt anges för iPad.
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
</array>
Från och med iOS 10 kräver Apple en beskrivning av varje begärd behörighet via nycklar med prefixet NS (NeXTStep). Beskrivningen visas för användaren i systemdialogen vid den första begäran om åtkomst till privata API:er. Avsaknaden av motsvarande NS-nyckel vid anrop av ett API som kräver behörighet leder till omedelbar avslutning av appen med ett undantag som endast registreras i crash-loggar.
| Nyckel | Ändamål |
|---|---|
| NSCameraUsageDescription | Åtkomst till kamera för foto och video |
| NSPhotoLibraryUsageDescription | Åtkomst till fotobibliotek |
| NSLocationWhenInUseUsageDescription | Geolokalisering vid aktiv användning |
| NSMicrophoneUsageDescription | Åtkomst till mikrofon för ljudinspelning |
| NSContactsUsageDescription | Åtkomst till enhetens kontakter |
Varje sekretessnyckel måste innehålla en för användaren begriplig beskrivning av orsaken till begäran. Tomma eller malltexter som „För appens funktion” eller „Åtkomst krävs” leder till avvisning i App Store. Beskrivningen bör förklara den specifika funktionaliteten: „Åtkomst till kamera behövs för att skanna QR-koder och skapa profilbilder”. Det rekommenderas att använda lokaliserade versioner av beskrivningar via InfoPlist.strings-filer för varje språk som stöds.
Avsaknaden av den nödvändiga NS-nyckeln vid anrop av ett API med åtkomst till privata data orsakar en krasch av appen. Systemet avslutar processen med ett undantag, vilket endast är synligt i loggar för crash-rapporter från Xcode eller Firebase Crashlytics. Användaren ser bara plötslig stängning av appen utan någon förklaring. Därför, innan du lägger till ny funktionalitet som använder kamera, mikrofon eller geolokalisering, måste du först lägga till motsvarande sekretessnyckel i Info.plist och sedan implementera API-anropet.
Nyckeln CFBundleURLTypes registrerar anpassade URL-scheman för djupa länkar i appen. Detta gör det möjligt att öppna appen från webbläsaren, e-post eller andra appar via länkar av formen minapp://profil/123. Varje schema identifierar appen unikt: om två appar registrerar samma schema visar systemet en dialog där användaren kan välja.
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>com.itsectr.myapp</string>
<key>CFBundleURLSchemes</key>
<array>
<string>myapp</string>
</array>
</dict>
</array>
För att stödja Universal Links krävs nyckeln com.apple.developer.associated-domains i Entitlements-filen, inte i Info.plist. Universal Links fungerar endast om det finns en konfigurerad apple-app-site-association-fil på servern som kopplar domänen till appen. Till skillnad från anpassade URL-scheman visar Universal Links ingen bekräftelsedialog och kolliderar inte med andra appar eftersom de använder HTTPS-länkar istället för anpassade scheman. De kräver dock en domän med ett giltigt SSL-certifikat.
Anpassade scheman kan kollidera med standard scheman i iOS. Det rekommenderas att använda scheman som är minst 4 tecken långa för att minimera kollisioner med andra appar. Till exempel är schemat „fb” för kort och kan orsaka konflikter. Det är bättre att använda omvänd notation: minapp:// istället för app://. Man bör också komma ihåg att om appen tas bort men en annan app har registrerat samma schema kan användaren uppleva oväntat beteende när de navigerar via en länk.
Nyckeln UIBackgroundModes deklarerar appens bakgrundsmöjligheter. Varje läge kräver en motsvarande beskrivning i Info.plist och bekräftelse i Xcode-projektets capabilities. Utan angivelse av läge kan systemet tvinga fram avslutning av bakgrundsaktiviteten efter 30 sekunder eller vid resursbrist.
<key>UIBackgroundModes</key>
<array>
<string>fetch</string>
<string>remote-notification</string>
<string>location</string>
<string>processing</string>
</array>
Nyckeln UIApplicationSupportsMultipleScenes aktiverar multitasking-stöd på iPad och Mac Catalyst. Utan denna nyckel kan appen inte använda SwiftUI ScenePhase eller UIKit UISceneDelegate för att hantera flera fönster. På iPadOS kan användare öppna flera fönster av samma app, dra innehåll mellan dem och använda Split View. Om appen inte stöder flerfönsterläge inaktiverar inställning av denna nyckel till false motsvarande funktionalitet.
Nyckeln LSRequiresIPhoneOS förbjuder installation av appen på iPad. Används för iPhone-only-appar som inte stöder iPad-gränssnittet eller inte har anpassats för stor skärm. Apple rekommenderar dock inte att använda denna nyckel i onödan eftersom användare förväntar sig att appar fungerar på alla enheter med iOS och iPadOS. Om appen ändå är begränsad till iPhone, se till att detta krav är tekniskt motiverat och anges i App Store-beskrivningen.
Nyckeln UIViewControllerBasedStatusBarAppearance styr statusfältets stil. Om den är inställd på NO ställs statusfältets stil globalt in via nyckeln UIStatusBarStyle i Info.plist. Om YES (standard sedan iOS 7) kan varje ViewController hantera sin egen statusfält genom att åsidosätta preferredStatusBarStyle. För moderna appar rekommenderas att lämna YES för att ha olika statusfält på olika skärmar, till exempel ljust på mörk bakgrund och mörkt på ljus bakgrund.
Nyckeln UIApplicationExitsOnSuspend tvingar appen att avslutas helt när den går till bakgrundsläge istället för att pausas. Används sällan, endast för appar med höga säkerhetskrav: bankappar eller appar för arbete med konfidentiell data. I detta fall förlorar användaren möjligheten att snabbt återvända till appen och varje start sker från ett rent tillstånd. App Store kan begära motivering för användning av denna nyckel vid granskning.
Nyckeln NSAppTransportSecurity hanterar appens nätverksanslutningar. Från och med iOS 9 blockerar App Transport Security (ATS) som standard alla HTTP-anslutningar och kräver HTTPS. För att tillfälligt tillåta HTTP-förfrågningar till specifika domäner används ordboken NSExceptionDomains inuti NSAppTransportSecurity. För utveckling är det tillåtet att helt inaktivera ATS via NSAllowsArbitraryLoads = true, men Apple kräver motivering och släpper inte igenom sådana byggen utan goda skäl. I produktionsbygget måste ATS vara aktiverat för alla domäner som interagerar med användardata.
Vanliga frågor
Filen Info.plist finns i projektmappen med samma namn som appen. I Xcode visas den i projektnavigatorn i gruppen Supporting Files med en ikon av en blå bok. Den kan också hittas via Spotlight-sökning i projektet.
Ja, Info.plist kan redigeras i vilken textredigerare som helst eller via Xcodes grafiska gränssnitt. Manuell redigering ger full kontroll över innehållet men kräver uppmärksamhet på XML-syntax: varje öppnande <key>-direktiv måste ha ett motsvarande </key> och datatyperna måste överensstämma med Apples förväntningar.
I SwiftUI-projekt fungerar Info.plist identiskt som i UIKit-projekt. Dessutom kan nyckeln UIApplicationSceneManifest krävas för att konfigurera Scene Configuration om projektet inte använder App-protokollet för att hantera scener. SwiftUI App-protokollet genererar automatiskt scenkonfigurationen, men för anpassning krävs manuell tilläggning av nycklar.
Öppna Info.plist i Xcode, klicka på plus och ange namnet på nyckeln. För anpassade nycklar, använd företagets prefix för att undvika konflikter med Apples systemnycklar, till exempel ITSCustomKey istället för CustomKey. Värdetypen (String, Number, Array, Dictionary) väljs beroende på förväntat dataformat.
Typiska orsaker: saknade sekretessnycklar för begärda behörigheter, felaktig CFBundleIdentifier, versionsskillnad mellan Info.plist och App Store Connect, tomma värden för NS-nycklar. Kontrollera alla NS-nycklar för använda API:er och se till att varje beskrivning innehåller en meningsfull förklaring på appens lokaliseringsspråk.
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.
Läs också