Documents Directory: nedir, amacı ve dosya erişimi

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

Documents Directory, iOS uygulama sandbox'ı içinde, uygulama oturumları arasında kalıcı olması gereken ve kullanıcının iTunes File Sharing ve iCloud aracılığıyla erişebileceği kullanıcı verilerini depolamak için tasarlanmış bir dizindir. Apple File System Programming Guide (2024)'e göre, bu dizinin içeriği otomatik olarak iCloud ve iTunes yedeklemelerine dahil edilir, bu nedenle geliştirici hangi verileri Documents'a koyacağını bilinçli olarak seçmelidir. Caches Directory'nin aksine, Documents'taki dosyalar alan yetersizliğinde sistem tarafından silinmez — boyut yönetimi sorumluluğu uygulamaya aittir.

Önemli Noktalar

  • Documents Directory, kalıcı olması ve iTunes aracılığıyla erişilebilir olması gereken kullanıcı dosyaları için ana dizindir.
  • Documents'taki veriler iCloud ve iTunes'a otomatik olarak yedeklenir — depolama alanınızı tasarlarken bunu göz önünde bulundurun.
  • Sistem, önbellek temizlenirken Documents'taki dosyaları silmez — alan boşaltma sorumluluğu geliştiriciye aittir.
  • Dizinin yolu NSSearchPathForDirectoriesInDomains ile NSDocumentDirectory veya FileManager.urls aracılığıyla alınır.
  • Yeniden indirilebilen büyük dosyalar için Caches Directory kullanın — iCloud yedeklemesinde yer israf etmemek için.

iOS'ta Documents Directory Nedir?

Documents Directory, iOS uygulama sandbox'ı içinde, başlatmalar arasında kalıcı olması ve kullanıcı tarafından erişilebilir olması gereken kullanıcı verilerini depolamak için tasarlanmış bir dizindir. Her uygulama kendi izole sandbox'ını alır ve Documents, Caches, tmp ve Library ile birlikte temel dizinlerden biridir.

iOS katı bir sandbox kullanır: bir uygulama, özel izinler olmadan diğer uygulamaların dosya sistemine veya sistem dizinlerine erişemez. Documents Directory, kullanıcının iTunes File Sharing aracılığıyla içeriğini görüntüleyebileceği tek dizindir (Info.plist'te UIFileSharingEnabled anahtarı etkinleştirildiğinde).

Apple WWDC 2023'e göre, App Store'daki uygulamaların %85'inden fazlası, dışa aktarılan PDF'lerden kaydedilmiş oyun dosyalarına ve dışa aktarılan görsellere kadar en az bir tür kullanıcı verisini depolamak için Documents Directory'yi kullanır.

Geliştiricinin anlaması önemlidir: Documents'taki dosyalar iCloud ve iTunes yedeklemelerine otomatik olarak dahil edilir. Bir uygulama Documents'ta büyük miktarda kurtarılabilir veri depoluyorsa (örneğin, görsel önbelleği veya geçici dosyalar), bu kullanıcının iCloud depolama alanının gereksiz yere tüketilmesine yol açar.

Documents Directory Yolunu Alma

Swift'te, Documents Directory yolu FileManager aracılığıyla alınır. Apple, modern iOS yetenekleriyle daha iyi uyumluluk için dize tabanlı API yerine URL tabanlı API kullanılmasını önerir.

swift
import Foundation

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

// Documents'ta dosya oluştur
let fileURL = documentsURL.appendingPathComponent("report.pdf")
let data = Data("Hello, world!".utf8)
try data.write(to: fileURL)

Objective-C, NSSearchPathForDirectoriesInDomains kullanır — URL yerine dize yolu döndüren daha eski ancak hala desteklenen bir yaklaşım.

objective-c
@import Foundation;

NSArray *paths = NSSearchPathForDirectoriesInDomains(
    NSDocumentDirectory,
    NSUserDomainMask,
    YES
);
NSString *documentsPath = paths.firstObject;
NSString *filePath = [documentsPath stringByAppendingPathComponent:@"report.pdf"];

Swift'teki modern projeler FileManager.urls kullanmalıdır, çünkü bu yöntem dize yerine URL döndürür, bu da yol kodlama hataları riskini azaltır ve kodu daha tip güvenli hale getirir.

Documents'ta Hangi Veriler Saklanmalı

Documents Directory, kullanıcı tarafından oluşturulan veya kullanıcının açıkça ihtiyaç duyduğu veriler içindir. Apple bu dizin için uygun olan birkaç kategoriyi vurgular.

Kullanıcı Belgeleri ve Dosyaları

Kullanıcının oluşturduğu veya içe aktardığı dosyalar — metin belgeleri, PDF'ler, görseller, dışa aktarılan raporlar, yedek dosyaları. Bu veriler kullanıcı için doğrudan değere sahiptir ve kaybedilmeleri kritik olurdu.

Oyun Kayıtları ve Uygulama Durumu

Oyun kayıtları, uygulama durum dosyaları, dışa aktarılan projeler — kullanıcının uygulamayı yeniden yükledikten sonra geri yüklemeyi beklediği her şey. Ancak, kritik veriler için ayrıca iCloud Key-Value Storage veya iCloud senkronizasyonlu Core Data kullanılması önerilir.

Veri TürüDocuments İçin UygunAlternatif
PDF ve metin belgeleriEvet
Görsel önbelleğiHayırCaches Directory
Oyun kayıtlarıEvetiCloud KVS
Günlükler ve hata ayıklama verileriHayırCaches veya tmp
Dışa aktarılan raporlarEvet

Temel kriter: veriler ağdan yeniden indirilebiliyor veya yeniden oluşturulabiliyorsa — yeri Caches'tir, Documents değil. Documents'taki her gigabayt, kullanıcının iCloud yedeklemesindeki bir gigabayttır.

Yedekleme ve Senkronizasyon

iOS, cihaz iTunes'a bağlandığında veya iCloud ile senkronize edildiğinde Documents Directory içeriğini otomatik olarak yedeklemelere dahil eder. Bu davranış dizin düzeyinde devre dışı bırakılamaz — yalnızca NSURLIsExcludedFromBackupKey özniteliği aracılığıyla dosya bazında yapılabilir.

iOS 5.0'dan itibaren Apple, Documents'ta büyük miktarda kurtarılabilir veri depolayan uygulamaları reddetmeye başladı. Apple'ın önerisi: yeniden indirilebilen dosyalar, yedekleme hariç tutma bayrağıyla Caches Directory'de saklanmalıdır.

swift
import Foundation

let documentsURL = FileManager.default
    .urls(for: .documentDirectory, in: .userDomainMask)
    .first!

// Dosyayı iCloud yedeklemesinden hariç tut
var resourceValues = URLResourceValues()
resourceValues.isExcludedFromBackup = true

var fileURL = documentsURL.appendingPathComponent("cached_data.json")
try fileURL.setResourceValues(resourceValues)

iCloud senkronizasyonu, uygulama iCloud Documents kullanıyorsa NSUbiquitousContainer aracılığıyla çalışır. Bu durumda, Documents Directory'deki dosyalar kullanıcının cihazları arasında otomatik olarak senkronize edilir. iCloud'u olmayan uygulamalar için senkronizasyon yedekleme ile sınırlıdır.

Documents Directory vs Caches Directory

Documents ve Caches arasındaki fark, yeni başlayan iOS geliştiricileri arasındaki en yaygın yanılgılardan biridir. Temel fark: sistem, alan boşaltmak için istediği zaman Caches'ten dosyaları silebilir, ancak kullanıcının bilgisi olmadan Documents'a asla dokunmaz.

ÖzellikDocuments DirectoryCaches Directory
iCloud yedeklemesiEvet (varsayılan)Hayır
Sistem tarafından silmeAslaAlan yetersizliğinde
iTunes File SharingEvet (bayrak etkinken)Hayır
AmaçKullanıcı verileriÖnbellek, geçici veriler
Veri kurtarmaGeri yükleme gerektirirYeniden indirilebilir

Apple Developer Documentation (2024)'e göre, Documents Directory'nin uygunsuz kullanımı inceleme sırasında uygulama reddinin yaygın nedenlerinden biridir: bir uygulama Documents'ta birkaç megabayttan fazla kurtarılabilir veri depoluyorsa, Apple bunları Caches'e taşımayı veya NSURLIsExcludedFromBackupKey uygulamayı önerir.

Pratik bir kural: kullanıcı dosyayı kaybetmeye üzülecekse — Documents'ta saklayın. Dosya yeniden indirilebiliyor veya yeniden oluşturulabiliyorsa — Caches'te saklayın.

Documents ile Çalışmak İçin En İyi Uygulamalar

Deneyimli iOS geliştiricileri, uygulama yaşam döngüsünün tüm aşamalarında (geliştirmeden App Store yayınına kadar) Documents Directory ile ilgili sorunları önlemeye yardımcı olan birkaç kural geliştirmiştir.

Dizin Boyutunu İzleme

FileManager.enumerator(at:includingPropertiesForKeys:) aracılığıyla Documents Directory boyutunu düzenli olarak kontrol edin. Kullanıcı verisi olmayan 100 MB'ı aşarsa — depolama mimarisini yeniden gözden geçirme nedenidir.

Kurtarılabilir Dosyaları Yedeklemeden Hariç Tutma

Yeniden indirilebilen tüm dosyalar için isExcludedFromBackup = true olarak ayarlayın. Bu, kullanıcının iCloud deposundaki yükü azaltır ve App Review tarafından reddedilme riskini düşürür.

Güncellemeler Sırasında Geçiş

Documents'taki veri biçimini değiştirirken geçiş planlayın: yeni dosyaların doğru oluşturulduğundan emin olana kadar eski dosyaları silmeyin. Sürüme özel alt dizinler kullanın.

swift
import Foundation

let documentsURL = FileManager.default
    .urls(for: .documentDirectory, in: .userDomainMask)
    .first!

let versionDir = documentsURL.appendingPathComponent("v2")
try FileManager.default.createDirectory(
    at: versionDir,
    withIntermediateDirectories: true
)

Bu uygulamaları takip etmek, kullanıcı verisi kaybı riskini azaltır, iCloud yedekleme boyutunu küçültür ve App Store incelemesini basitleştirir.

Sıkça Sorulan Sorular

Kullanıcı iTunes olmadan Documents Directory'ye erişebilir mi?

Evet, Files (iOS 11'den itibaren yerleşik iOS uygulaması) aracılığıyla. Info.plist'te UIFileSharingEnabled anahtarı etkinleştirildiğinde, Documents Directory içeriği Dosyalar uygulamasında "iPhone'umda" bölümünde görüntülenir. Kullanıcı dosyaları görüntüleyebilir, kopyalayabilir ve silebilir.

Uygulama silindiğinde Documents Directory'ye ne olur?

Uygulamanın tüm sandbox'ı (Documents Directory, Caches, tmp ve Library dahil) cihazdan tamamen kaldırılır. iCloud'daki yedeklemeler, geri yükleme veya manuel silme işlemine kadar korunur. Yeniden yükleme sırasında uygulama temiz bir sandbox ile başlar.

Kod içinde Documents Directory boyutu nasıl kontrol edilir?

Dizindeki tüm dosyaları dolaşmak ve boyutlarını toplamak için FileManager.enumerator kullanın. Her dosya için resourceValues(forKeys:) aracılığıyla .fileSize özniteliğini alın. Alternatif olarak, URLResourceKey.fileSizeKey ve .directoryEnumerationResults kullanın.

Documents'ta Core Data SQLite veritabanı saklayabilir miyim?

Varsayılan olarak, Core Data SQLite dosyasını Library/Application Support'ta oluşturur, Documents'ta değil. Veritabanını Documents'a taşımak önerilmez — iTunes File Sharing'e dahil edilir ve kullanıcı yanlışlıkla silebilir veya değiştirebilir. İstisna, uygulamanın Core Data aracılığıyla kullanıcıya açıkça veri erişimi vermesidir.

UIFileSharingEnabled nedir ve nasıl etkinleştirilir?

UIFileSharingEnabled (Application supports iTunes file sharing), Info.plist'teki bir boole anahtarıdır. YES olarak ayarlandığında, kullanıcılar iTunes ve Files aracılığıyla Documents Directory'den dosya kopyalayabilir. Info.plist'e anahtarı ekleyin: UIFileSharingEnabled = YES. Yalnızca uygulama gerçekten kullanıcı belgeleri oluşturuyorsa etkinleştirin.

Özet

  • Documents Directory, bir iOS uygulamasında kalıcı olması ve yedeklenmesi gereken kullanıcı verileri için birincil konumdur.
  • Dizin yolu Swift'te FileManager.urls(for: .documentDirectory) veya Objective-C'de NSSearchPathForDirectoriesInDomains aracılığıyla alınır.
  • Documents'taki tüm dosyalar varsayılan olarak iCloud ve iTunes yedeklemelerine dahil edilir — hariç tutmak için isExcludedFromBackup kullanın.
  • Caches Directory'nin aksine sistem, Documents'taki dosyaları otomatik olarak silmez.
  • Kurtarılabilir veriler (önbellek, geçici dosyalar) için Documents yerine Caches Directory kullanın.
  • UIFileSharingEnabled anahtarı, iTunes ve Dosyalar uygulaması aracılığıyla Documents'a erişim sağlar — bilinçli kullanın.
  • Documents Directory boyutunu düzenli olarak izleyin: kritik olmayan veriler için 100 MB'ı aşmak mimari bir sorundur.

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