Application Support: Yapılandırma Depolama ve Core Data

Yazar: IT Sectr Yayınlanma: 2026-07-10 Okuma süresi: 10 dk

Application Support, iOS uygulamasının sandbox'ında, uygulamanın çalışması için gerekli yardımcı verileri depolamak üzere tasarlanmış ancak doğrudan kullanıcı tarafından oluşturulmayan bir dizindir. Apple File System Basics (2024)'e göre, bu dizin yapılandırma dosyaları, Core Data SQLite veritabanları, önbelleğe alınmış belgeler ve uygulamanın kendi kendine oluşturduğu diğer veriler için idealdir. Documents Directory'nin aksine, Application Support iTunes File Sharing'de görünmez ve kullanıcının ona doğrudan erişimi yoktur, bu da hizmet verilerini yanlışlıkla silinmekten korur.

Ana Noktalar

  • Application Support — uygulamanın kendi çalışması için oluşturduğu, kullanıcıya yönelik olmayan veriler için bir dizin.
  • Application Support'teki dosyalar, hariç tutma bayrağı ayarlanmadığı sürece otomatik olarak iCloud ve iTunes'a yedeklenir.
  • Dizinin yolu NSApplicationSupportDirectory veya FileManager.urls(for: .applicationSupportDirectory) şeklindedir.
  • Core Data varsayılan olarak SQLite veritabanlarını Application Support'e yerleştirir.
  • Kullanıcının Files veya iTunes aracılığıyla Application Support'e doğrudan erişimi yoktur.

iOS'ta Application Support Nedir?

Application Support, iOS uygulamasının sandbox'ında, uygulamanın kendi çalışması için oluşturduğu ve kullandığı ancak kullanıcı belgeleri olmayan verileri depolamak için tasarlanmış bir dizindir. Yapılandırmalar, veritabanları, önbelleğe alınmış meta veriler ve diğer yardımcı dosyalar için birincil konumdur.

iOS, Application Support'i Documents (kullanıcı verileri) ve Caches (geçici veriler) arasında bir ara katman olarak belirler. Application Support'teki dosyalar nispeten kalıcı olabilir, ancak kullanıcının bunlara doğrudan erişimi olmamalıdır — bu onu Documents Directory'den ayırır.

Apple Developer Documentation (2024)'e göre, Application Support, Core Data SQLite veritabanlarını, Realm dosyalarını, JSON/plist biçimindeki yapılandırmaları, indirilen referans materyallerini ve uygulamanın kullandığı ancak kullanıcının açıkça oluşturmadığı diğer verileri depolamak için önerilen konumdur.

Önemli: varsayılan olarak, Application Support iCloud ve iTunes yedeklemesine dahil edilir. Uygulama bu dizinde yeniden oluşturulabilen büyük miktarda veri depoluyorsa (örneğin, indirilen kılavuzlar), ilgili dosyalar için isExcludedFromBackup bayrağını ayarlamak gerekir.

Application Support Yolunu Alma

Swift'te, Application Support Directory'nin yolu FileManager.urls(for: .applicationSupportDirectory) aracılığıyla alınır. Apple, veri yalıtımı için Application Support içinde uygulama adıyla bir alt dizin oluşturulmasını önerir.

swift
import Foundation

let fileManager = FileManager.default
guard let appSupportURL = fileManager.urls(
    for: .applicationSupportDirectory,
    in: .userDomainMask
).first else { return }

// Create app subdirectory
let bundleID = Bundle.main.bundleIdentifier ?? "com.example.app"
let appDir = appSupportURL.appendingPathComponent(bundleID)
try fileManager.createDirectory(
    at: appDir,
    withIntermediateDirectories: true
)

Objective-C, NSApplicationSupportDirectory ile NSSearchPathForDirectoriesInDomains kullanır. Swift'te olduğu gibi, uygulama adıyla bir alt dizin oluşturulması önerilir.

objective-c
@import Foundation;

NSArray *paths = NSSearchPathForDirectoriesInDomains(
    NSApplicationSupportDirectory,
    NSUserDomainMask,
    YES
);
NSString *appSupportPath = paths.firstObject;
NSString *appDir = [appSupportPath stringByAppendingPathComponent:@"com.example.app"];

İlk başlatmada, Application Support dizini mevcut olmayabilir — createDirectory(at:withIntermediateDirectories:) kullanılarak oluşturulmalıdır. Bu, sistem tarafından otomatik olarak oluşturulan Documents Directory'den ayıran özelliktir.

Application Support'te Hangi Veriler Depolanır

Application Support, uygulamanın çalışması için kullandığı geniş bir veri yelpazesi için uygundur. Bu dizin için doğru verileri seçmek, dosya sistemi organizasyonunu iyileştirir ve yedeklemeyi basitleştirir.

Core Data ve Realm Veritabanları

Core Data'nın SQLite dosyaları varsayılan olarak Application Support'te oluşturulur. Realm de veritabanlarının bu dizine yerleştirilmesini önerir. Bu, kullanıcı belgelerini uygulamanın dahili veritabanlarından ayırır.

Yapılandırma Dosyaları

Uygulama ayarları, Feature Flags, önbelleğe alınmış kullanıcı meta verileri (ancak kimlik doğrulama token'ları değil — onlar için Keychain kullanın) içeren JSON, plist, XML dosyaları.

Veri TürüApplication SupportAlternatif
SQLite Core DataEvet (varsayılan)
Yapılandırmalar .plist / .jsonEvetUserDefaults (basit olanlar için)
İndirilen referans materyalleriEvetDocuments (kullanıcı içinse)
Uygulama günlükleriKoşulluCaches (günlükler için)
Kimlik doğrulama token'larıHayırKeychain

Seçim kriteri: veriler uygulama tarafından oluşturulup kullanılıyorsa, kullanıcı tarafından değilse ve başlatmalar arasında kalıcı olması gerekiyorsa — yeri Application Support'tür.

Core Data ve Application Support

Core Data, Application Support'in ana tüketicilerinden biridir. NSPersistentContainer oluşturulurken, Core Data otomatik olarak SQLite dosyalarını Library/Application Support'e, model adına dayalı benzersiz bir adla yerleştirir.

Core Data'nın dosyaları nerede depoladığını anlamak, geçişler (migrations), yedekleme ve hata ayıklama için kritik öneme sahiptir. Ana dosyalar: .sqlite (veri), .sqlite-wal (Write-Ahead Log), .sqlite-shm (Shared Memory).

swift
import CoreData

// Create Core Data container
let container = NSPersistentContainer(name: "MyAppModel")

// Custom store URL directory
guard let appSupportURL = FileManager.default
    .urls(for: .applicationSupportDirectory,
        in: .userDomainMask).first else { return }

let storeURL = appSupportURL
    .appendingPathComponent("MyAppModel.sqlite")
let description = NSPersistentStoreDescription(url: storeURL)
container.persistentStoreDescriptions = [description]

CloudKit Core Data senkronizasyonu kullanılırken, SQLite dosyası Application Support'te kalır ve CloudKit bir taşıma katmanı olarak işlev görür. Bu durumda, dosyaları yedeklemeden hariç tutmamak önemlidir — aksi takdirde cihazlar arasındaki senkronizasyon bozulabilir.

Application Support vs Documents Directory

Application Support ve Documents arasındaki fark, iOS uygulaması dosya yapısını doğru bir şekilde organize etmek için en önemlilerinden biridir. Yanlış seçim, kullanıcının önemli uygulama verilerini yanlışlıkla silmesine veya tersine, dosyalarını bulamamasına neden olabilir.

ParametreApplication SupportDocuments Directory
Kullanıcı erişimiHayır (gizli)iTunes File Sharing aracılığıyla
Veri türüUygulama hizmet verileriKullanıcı belgeleri
iCloud yedeklemeEvet (varsayılan)Evet (varsayılan)
Silme riskiDüşük (erişim yok)Orta (kullanıcı erişebilir)
ÖrnekSQLite Core DataDışa aktarılan PDF

Basit kural: kullanıcının dosyayı görmesi ve silebilmesi gerekiyorsa — Documents kullanın. Dosya uygulamanın çalışması için gerekliyse ancak kullanıcının bilmesine gerek yoksa — Application Support kullanın. Veriler yeniden oluşturulabiliyorsa — Caches kullanın.

Application Support ile Çalışmak için En İyi Uygulamalar

Application Support ile çalışmak, onu diğer sandbox dizinlerinden ayıran birkaç özelliğin dikkate alınmasını gerektirir. Bu uygulamaları takip etmek, veri kaybı, geçiş sorunları ve beklenmeyen uygulama davranışlarını önlemeye yardımcı olur.

İlk Başlatmada Her Zaman Dizini Oluşturun

Documents'un aksine, Application Support ilk başlatmada mevcut olmayabilir. Tüm alt dizin zincirinin oluşturulmasını garanti etmek için withIntermediateDirectories: true parametresiyle createDirectory(at:withIntermediateDirectories:) kullanın.

Bundle Identifier ile Alt Dizin Kullanın

Application Support içinde Bundle Identifier ile bir alt dizin oluşturun. Bu, uygulamanızın verilerini diğer uygulamalardan ayırır (sandbox zaten yalıtım sağlasa da) ve sağlayıcı değiştirirken geçişi basitleştirir.

swift
import Foundation

enum AppSupport {
    static func ensureDirectory() throws -> URL {
        let fm = FileManager.default
        let baseURL = try fm.url(
            for: .applicationSupportDirectory,
            in: .userDomainMask,
            appropriateFor: nil,
            create: true
        )
        let appDir = baseURL
            .appendingPathComponent(Bundle.main.bundleIdentifier ?? "default")
        try fm.createDirectory(at: appDir, withIntermediateDirectories: true)
        return appDir
    }
}

Bu uygulamaları takip etmek, uygulamanın hizmet verilerinin doğru şekilde organize edilmesini, kullanıcı tarafından yanlışlıkla silinmeye karşı korunmasını ve yedeklerden doğru şekilde geri yüklenmesini sağlar.

Sıkça Sorulan Sorular

Application Support Directory'yi manuel olarak oluşturmam gerekir mi?

Evet, Application Support uygulama yüklenirken otomatik olarak oluşturulmaz. Sistemin ilk başlatmada oluşturduğu Documents ve Caches'in aksine, Application Support geliştirici tarafından FileManager.createDirectory(at:withIntermediateDirectories:) kullanılarak oluşturulmalıdır. Bu genellikle application(_:didFinishLaunchingWithOptions:) metodunda yapılır.

Kullanıcı yanlışlıkla Application Support'ten veri silebilir mi?

Hayır, standart iOS arayüzü (Files, iTunes) aracılığıyla kullanıcının Application Support'e erişimi yoktur. Ancak, uygulamanın kendisi silindiğinde, Application Support dahil tüm sandbox tamamen kaldırılır. iCloud yedeklemesi, geri yükleme veya manuel silme işlemine kadar kalır.

Application Support, indirilen videoları depolamak için uygun mudur?

Kullanıcı için indirilen videolar için, kullanıcının bu dosyaları Files aracılığıyla yönetebilmesi için Documents Directory kullanmak daha iyidir. Video, uygulamanın dahili önbelleğinin bir parçasıysa (örneğin, çevrimdışı eğitim içeriği), büyük dosyalar için isExcludedFromBackup bayrağıyla Application Support kullanılabilir.

Uygulama güncellenirken Application Support'ten veriler nasıl taşınır?

Application Support içinde alt dizinlerin versiyonlamasını ekleyin. Güncelleme sırasında mevcut veri sürümünü kontrol edin ve gerekirse yeni bir alt dizin oluşturun, eskiyi geri dönüş için saklayın. Eski dizini, tüm kullanıcıların yeni veri sürümüne başarıyla geçtiğini onayladıktan sonra silin.

Application Support'in boyutu uygulama başlatma hızını etkiler mi?

Dolaylı olarak — evet. Application Support on binlerce küçük dosya içeriyorsa, FileManager.enumerator başlatmayı yavaşlatabilir. Application Support'teki dosya sayısını sınırlamak (1000'den fazla olmamak) ve yapılandırılmış veriler için birçok ayrı dosya yerine veritabanları (Core Data, Realm) kullanmak önerilir.

Özet

  • Application Support — kullanıcının doğrudan erişimi için tasarlanmamış uygulama hizmet verileri için bir dizin.
  • Dizinin yolu FileManager.urls(for: .applicationSupportDirectory) veya NSApplicationSupportDirectory ile NSSearchPathForDirectoriesInDomains şeklindedir.
  • Dizin, ilk uygulama başlatmada manuel olarak oluşturulmalıdır.
  • Core Data varsayılan olarak SQLite veritabanlarını Application Support'e yerleştirir.
  • Kullanıcının Files veya iTunes aracılığıyla Application Support'e erişimi yoktur.
  • Application Support'teki dosyalar, isExcludedFromBackup ayarlanmadığı sürece iCloud'a yedeklenir.
  • Veri yalıtımı ve kolay geçiş için Bundle Identifier ile bir alt dizin oluşturun.

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