Info.plist: nedir, zorunlu anahtarlar ve başlatma yapılandırması

Yazar: IT Sectr Yayınlanma: 2026-05-31 Okuma süresi: 8 dk

Info.plist, iOS ve macOS uygulamaları için meta verileri, izinleri ve başlatma ayarlarını içeren bir XML yapılandırma dosyasıdır. Sistem tarafından uygulama kodu başlatılmadan önce işlenir. Apple Developer, 2025'e göre, düzgün yapılandırılmış bir Info.plist olmadan uygulama App Store incelemesini geçemez. Info.plist, paket tanımlayıcısını, derleme sürümünü, istenen izinleri ve desteklenen ekran yönlerini tanımlar.

Önemli noktalar

  • Info.plist, plist formatında iOS/macOS uygulama yapılandırma anahtarları içeren bir XML sözlüğüdür
  • Bundle identifier, imzalama ve hizmetler için Apple ekosisteminde benzersiz bir uygulama tanımlayıcısıdır
  • Gizlilik anahtarları (NSCameraUsageDescription) kamera, mikrofon ve coğrafi konuma erişim için zorunludur
  • Custom URL schemes, derin bağlantılar için CFBundleURLTypes anahtarı aracılığıyla yapılandırılır
  • UIRequiredDeviceCapabilities, App Store'dan yükleme için minimum cihaz gereksinimlerini belirler

Info.plist nedir

Info.plist, kök elemanı dict olan ve property list şeklinde anahtar-değer çiftleri içeren XML formatında bir dosyadır. Uygulama paketinin içinde bulunur ve kod yürütülmeden önce her başlatmada sistem tarafından okunur. Plist formatı; dizeleri, sayıları, dizileri, sözlükleri, tarihleri ve boolean değerleri destekleyerek karmaşık yapılandırmaların tanımlanmasına olanak tanır.

Apple, uygulamanın kimliğini, yeteneklerini ve gereksinimlerini tanımlamak için Info.plist'i kullanır. Bazı anahtarları değiştirmek, paketin yeniden derlenmesini gerektirir, çünkü bunlar App Store'a bir derleme yüklenirken kontrol edilen meta verileri etkiler. Örneğin, yayınlamadan sonra CFBundleVersion veya CFBundleIdentifier'ı değiştirmek, uygulama güncelleme sürecini bozabilir, çünkü App Store Connect sürümleri tanımlamak için bu değerleri kullanır.

Temel anahtarlar, Xcode'da proje oluşturulurken otomatik olarak oluşturulur, ancak ayarların çoğu, uygulamanın işlevselliği geliştikçe manuel olarak eklenir. Xcode, standart anahtarlar için açılır listeler içeren bir grafik Info.plist düzenleyicisi sağlayarak yazım hatası riskini azaltır. Ancak Scene Manifest veya Background Modes gibi karmaşık yapılandırmalar için ham XML'in doğrudan düzenlenmesi önerilir.

Zorunlu Info.plist anahtarları

Bazı Info.plist anahtarları, App Store'da yayınlamak için zorunludur. Bunların olmaması, doğrulama aşamasında derlemenin reddedilmesine yol açar. Apple, Xcode Organizer veya Transporter aracılığıyla bir arşiv yüklenirken bu anahtarları otomatik olarak kontrol eder. Geliştirici, incelemeye göndermeden önce tüm zorunlu alanların doğru şekilde doldurulduğundan emin olmalıdır.

Paket tanımlayıcıları

CFBundleIdentifier anahtarı, ters etki alanı notasyonunda (com.company.appname) benzersiz bir uygulama tanımlayıcısı belirler. Kod imzalama, Push Bildirimleri, CloudKit, App Groups ve diğer birçok Apple hizmeti için kullanılır. Yayınlamadan sonra tanımlayıcıyı değiştirmek, App Store tarafından yeni bir uygulama olarak kabul edilir ve mevcut kullanıcılar güncellemeyi alamaz. Bu nedenle tanımlayıcı, uygulamanın tüm yaşam döngüsü boyunca değişmeden kalmalıdır.

xml
<key>CFBundleIdentifier</key>
<string>com.itsectr.myapp</string>

Uygulama sürümü

CFBundleShortVersionString (görüntülenen sürüm) ve CFBundleVersion (derleme numarası) anahtarları, App Store Connect ve sistem tarafından güncelleme yönetimi için kullanılır. Sürüm, major.minor.patch formatında belirtilir. Derleme numarası, uygulama sürümü değişmesede bile App Store Connect'e yüklenen her derleme ile artmalıdır. Apple, bir derlemenin yeni mi yoksa daha önce yüklenmiş bir derlemenin kopyası mı olduğunu belirlemek için CFBundleVersion'u kullanır. Derleme numarası önceden yüklenmiş bir derlemeyle eşleşirse, ITMS-90161 hatası döndürülür.

xml
<key>CFBundleShortVersionString</key>
<string>1.2.0</string>
<key>CFBundleVersion</key>
<string>42</string>

Desteklenen arayüz yönleri

UISupportedInterfaceOrientations anahtarları, iPhone için desteklenen ekran yönlerini tanımlar. iPad için, cihaz sonekiyle birlikte ayrı bir UISupportedInterfaceOrientations~ipad anahtarı kullanılır. Her yön bir dize olarak belirtilir: UIInterfaceOrientationPortrait, UIInterfaceOrientationLandscapeLeft, UIInterfaceOrientationLandscapeRight, UIInterfaceOrientationPortraitUpsideDown. Bir uygulama yalnızca dikey yönü destekliyorsa ve yalnızca iPhone'a özel değilse, iPad için yalnızca dikey belirtilmişse App Store derlemeyi reddeder.

xml
<key>UISupportedInterfaceOrientations</key>
<array>
    <string>UIInterfaceOrientationPortrait</string>
    <string>UIInterfaceOrientationLandscapeLeft</string>
</array>

İzinler ve gizlilik anahtarları

iOS 10'dan itibaren Apple, NS ön ekli (NeXTStep) anahtarlar aracılığıyla istenen her izin için bir açıklama gerektirir. Açıklama, özel API'lere ilk erişim talebinde kullanıcıya bir sistem iletişim kutusunda gösterilir. İzin gerektiren bir API çağrılırken ilgili NS anahtarının olmaması, uygulamanın bir istisna ile anında çökmesine neden olur ve bu yalnızca çökme günlüklerine kaydedilir.

AnahtarAmaç
NSCameraUsageDescriptionFotoğraf ve video için kameraya erişim
NSPhotoLibraryUsageDescriptionFotoğraf kitaplığına erişim
NSLocationWhenInUseUsageDescriptionKullanım sırasında coğrafi konum
NSMicrophoneUsageDescriptionSes kaydı için mikrofona erişim
NSContactsUsageDescriptionCihaz kişilerine erişim

Her gizlilik anahtarı, talebin nedeni hakkında kullanıcının anlayabileceği bir açıklama içermelidir. “Uygulama çalışması için” veya “Erişim gerekli” gibi boş veya şablon metinler, App Store reddine yol açar. Açıklama, belirli işlevselliği açıklamalıdır: “QR kodlarını taramak ve profil fotoğrafları oluşturmak için kamera erişimi gereklidir.” Desteklenen her dil için InfoPlist.strings dosyaları aracılığıyla açıklamaların yerelleştirilmiş sürümlerinin kullanılması önerilir.

Özel verilere erişen bir API çağrılırken gerekli NS anahtarının olmaması, uygulamanın çökmesine neden olur. Sistem, süreci bir istisna ile sonlandırır ve bu yalnızca Xcode veya Firebase Crashlytics'teki çökme raporu günlüklerinde fark edilir. Kullanıcı, herhangi bir açıklama olmadan yalnızca uygulamanın aniden kapandığını görür. Bu nedenle, kamera, mikrofon veya coğrafi konum kullanan yeni bir işlevsellik eklemeden önce, önce Info.plist'e ilgili gizlilik anahtarını eklemek ve ardından API çağrısını uygulamak gerekir.

Custom URL Schemes ve App Links

CFBundleURLTypes anahtarı, uygulamaya derin bağlantı için özel URL şemaları kaydeder. Bu, tarayıcıdan, e-postadan veya diğer uygulamalardan myapp://profile/123 gibi bağlantılar aracılığıyla uygulamanın açılmasına olanak tanır. Her şema, uygulamayı benzersiz şekilde tanımlar: iki uygulama aynı şemayı kaydederse, sistem kullanıcıya hangisini kullanacağını seçmesi için bir iletişim kutusu gösterir.

xml
<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLName</key>
        <string>com.itsectr.myapp</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>myapp</string>
        </array>
    </dict>
</array>

Universal Links'i desteklemek için, Info.plist'te değil, Entitlements dosyasında com.apple.developer.associated-domains anahtarı gerekir. Universal Links, yalnızca etki alanını uygulamaya bağlayan yapılandırılmış bir apple-app-site-association dosyası sunucuda varsa çalışır. Özel URL şemalarının aksine, Universal Links bir onay iletişim kutusu göstermez ve diğer uygulamalarla çakışmaz, çünkü özel şema yerine HTTPS bağlantıları kullanır. Ancak, geçerli bir SSL sertifikasına sahip bir etki alanı gerektirirler.

Özel şema standart iOS şemaları ile çakışabilir. Diğer uygulamalarla çakışmayı en aza indirmek için en az 4 karakterli şema kullanılması önerilir. Örneğin, “fb” şeması çok kısadır ve çakışmaya neden olabilir. app:// yerine myapp:// şeklinde ters notasyon kullanmak daha iyidir. Ayrıca, uygulama silinirse ancak başka bir uygulama aynı şemayı kaydetmişse, kullanıcının bir bağlantı aracılığıyla gezinirken beklenmeyen davranışla karşılaşabileceğini unutmayın.

Başlatma yapılandırması ve arka plan modları

UIBackgroundModes anahtarı, uygulamanın arka plan yeteneklerini bildirir. Her mod, Info.plist'te karşılık gelen bir açıklama ve Xcode proje yeteneklerinde onay gerektirir. Bir mod belirtilmezse, sistem 30 saniye sonra veya kaynaklar yetersiz olduğunda arka plan görevini zorla sonlandırabilir.

xml
<key>UIBackgroundModes</key>
<array>
    <string>fetch</string>
    <string>remote-notification</string>
    <string>location</string>
    <string>processing</string>
</array>

UIApplicationSupportsMultipleScenes anahtarı, iPad ve Mac Catalyst'te çoklu görev desteğini etkinleştirir. Bu anahtar olmadan, uygulama birden çok pencereyi yönetmek için SwiftUI ScenePhase veya UIKit UISceneDelegate'i kullanamaz. iPadOS'te kullanıcılar aynı uygulamanın birden çok penceresini açabilir, aralarında içerik sürükleyebilir ve Split View kullanabilir. Uygulama çoklu pencere modunu desteklemiyorsa, bu anahtarı false olarak ayarlamak ilgili işlevselliği devre dışı bırakır.

LSRequiresIPhoneOS anahtarı, uygulamanın iPad'e yüklenmesini engeller. iPad arayüzünü desteklemeyen veya büyük ekrana uyarlanmamış yalnızca iPhone uygulamaları için kullanılır. Bununla birlikte Apple, bu anahtarı gereksiz yere kullanılmasını önermez, çünkü kullanıcılar uygulamaların iOS ve iPadOS çalıştıran tüm cihazlarda çalışmasını bekler. Uygulama hala iPhone ile sınırlıysa, bu gereksinimin teknik olarak gerekçelendirildiğinden ve App Store açıklamasında belirtildiğinden emin olun.

UIViewControllerBasedStatusBarAppearance anahtarı, durum çubuğu stilini kontrol eder. NO olarak ayarlanırsa, durum çubuğu stili Info.plist anahtarı UIStatusBarStyle aracılığıyla küresel olarak ayarlanır. YES (iOS 7'den itibaren varsayılan) ise, her ViewController preferredStatusBarStyle'ı geçersiz kılarak kendi durum çubuğunu yönetebilir. Modern uygulamalar için, farklı ekranlarda farklı durum çubuğu stillerine sahip olmak için YES'in bırakılması önerilir, örneğin koyu arka planda açık ve açık arka planda koyu.

UIApplicationExitsOnSuspend anahtarı, uygulamanın arka plana geçerken askıya alınmak yerine tamamen sonlanmasını zorlar. Nadiren kullanılır, yalnızca yüksek güvenlik gereksinimleri olan uygulamalar için: bankacılık uygulamaları veya gizli verileri işleyen uygulamalar. Bu durumda kullanıcı, uygulamaya hızlı bir şekilde dönme yeteneğini kaybeder ve her başlatma temiz bir durumdan başlar. App Store, inceleme sırasında bu anahtarın kullanımı için gerekçe isteyebilir.

NSAppTransportSecurity anahtarı, uygulamanın ağ bağlantılarını yönetir. iOS 9'dan itibaren App Transport Security (ATS), varsayılan olarak tüm HTTP bağlantılarını engeller ve HTTPS gerektirir. Belirli etki alanlarına geçici olarak HTTP isteklerine izin vermek için NSAppTransportSecurity içindeki NSExceptionDomains sözlüğü kullanılır. Geliştirme için NSAllowsArbitraryLoads = true aracılığıyla tam ATS devre dışı bırakma izni verilir, ancak Apple gerekçe ister ve geçerli bir sebep olmadan bu tür derlemelere izin vermez. Üretim derlemelerinde, kullanıcı verilerini işleyen tüm etki alanları için ATS etkinleştirilmelidir.

Sıkça sorulan sorular

Xcode projesinde Info.plist nerede bulunur?

Info.plist dosyası, uygulama adıyla eşleşen bir adla proje klasöründe bulunur. Xcode'da, Supporting Files grubu içindeki proje gezgininde mavi kitap simgesiyle görüntülenir. Projede Spotlight aramasıyla da bulunabilir.

Info.plist manuel olarak düzenlenebilir mi?

Evet, Info.plist herhangi bir metin düzenleyicide veya Xcode grafik arayüzü aracılığıyla düzenlenebilir. Manuel düzenleme, içerik üzerinde tam kontrol sağlar ancak XML sözdizimine dikkat edilmesini gerektirir: her açılış <key> yönergesinin karşılık gelen bir </key>'i olmalı ve veri türleri Apple'ın beklediğiyle eşleşmelidir.

SwiftUI projelerinde Info.plist nedir?

SwiftUI projelerinde Info.plist, UIKit projeleriyle aynı şekilde çalışır. Ek olarak, proje sahneleri yönetmek için App protokolünü kullanmıyorsa, UIApplicationSceneManifest anahtarı gerekebilir. SwiftUI App protokolü otomatik olarak sahne yapılandırması oluşturur, ancak özelleştirme için manuel olarak anahtar eklenmesi gerekir.

Info.plist'e özel anahtar nasıl eklenir?

Xcode'da Info.plist'i açın, artı düğmesine tıklayın ve anahtar adını girin. Özel anahtarlar için, Apple sistem anahtarlarıyla çakışmayı önlemek üzere bir şirket ön eki kullanın, örneğin yalnızca CustomKey yerine ITSCustomKey. Değer türü (String, Number, Array, Dictionary) beklenen veri formatına göre seçilir.

App Store, Info.plist yüzünden derlememi neden reddetti?

Tipik nedenler: istenen izinler için gizlilik anahtarlarının eksikliği, hatalı CFBundleIdentifier, Info.plist ile App Store Connect arasında sürüm uyuşmazlığı, boş NS anahtar değerleri. Kullanılan API'ler için tüm NS anahtarlarını kontrol edin ve her açıklamanın uygulamanın yerelleştirme dilinde anlamlı bir açıklama içerdiğinden emin olun.

Özet

  • Info.plist, meta veriler, izinler ve başlatma ayarlarıyla iOS/macOS uygulamaları için XML yapılandırmasıdır
  • CFBundleIdentifier ve CFBundleVersion, tanımlama ve App Store yayını için zorunlu anahtarlardır
  • Gizlilik anahtarları (NSCameraUsageDescription) kamera, mikrofon ve diğer özel API'lere erişim için zorunludur
  • Custom URL schemes CFBundleURLTypes aracılığıyla, Universal Links Entitlements ve apple-app-site-association aracılığıyla yapılandırılır
  • UIBackgroundModes, arka planda doğru çalışma için arka plan yeteneklerini bildirir
  • Zorunlu anahtarların eksikliği uygulama çökmesine veya App Store derleme reddine yol açar
  • Info.plist düzenlemesi Xcode arayüzü veya XML sözdizimi kontrolü olan bir metin düzenleyici aracılığıyla kullanılabilir

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun