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, 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.
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.
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.
@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, 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'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.
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 Support | Alternatif |
|---|---|---|
| SQLite Core Data | Evet (varsayılan) | — |
| Yapılandırmalar .plist / .json | Evet | UserDefaults (basit olanlar için) |
| İndirilen referans materyalleri | Evet | Documents (kullanıcı içinse) |
| Uygulama günlükleri | Koşullu | Caches (günlükler için) |
| Kimlik doğrulama token'ları | Hayır | Keychain |
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, 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).
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 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.
| Parametre | Application Support | Documents Directory |
|---|---|---|
| Kullanıcı erişimi | Hayır (gizli) | iTunes File Sharing aracılığıyla |
| Veri türü | Uygulama hizmet verileri | Kullanıcı belgeleri |
| iCloud yedekleme | Evet (varsayılan) | Evet (varsayılan) |
| Silme riski | Düşük (erişim yok) | Orta (kullanıcı erişebilir) |
| Örnek | SQLite Core Data | Dış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, 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.
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.
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.
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
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.
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.
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.
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.
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
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.
Ayrıca okuyun