Temporary Directory (tmp), iOS uygulaması sandbox'unda, yalnızca geçerli uygulama oturumu sırasında ihtiyaç duyulan son derece kısa süreli verileri depolamak için bir dizindir. Apple File System Programming Guide (2024)'e göre sistem, her uygulama sonlandırmasında veya cihaz yeniden başlatmasında tmp'yi temizleyebilir. Caches Directory'nin aksine, tmp'deki geçici dosyaların başlatmalar arasında kalıcı olması amaçlanmamıştır — geliştirici, disk alanını boşa harcamamak için kullanımdan sonra bunları açıkça silmelidir.
Önemli Noktalar
Temporary Directory (tmp olarak da bilinir), iOS uygulama sandbox'u içinde, yaşam süresi geçerli oturumla sınırlı verileri depolamak için tasarlanmış bir dizindir. Tüm sandbox dizinleri arasında en kısa ömürlü depolamadır.
iOS, ara dosya depolama gerektiren işlemler için tmp sağlar: Documents'a taşımadan önce bir dosyayı indirme, dışa aktarmadan önce geçici kopya oluşturma, akış verilerini arabelleğe alma. İşlem tamamlandıktan sonra geçici dosyalar silinmelidir.
Apple Developer Documentation (2024)'e göre, tmp dizini benzersizdir çünkü yolu uygulama başlatmaları arasında değişebilir. iOS her başlatmada tmp için yeni bir yol oluşturur — bu, önceki oturumdaki verilerin yanlışlıkla okunmamasını sağlar. Geliştirici, başlatmalar arasında tmp yolunu asla kaydetmemelidir.
Önemli: Caches Directory'nin aksine, verilerin birden çok başlatmada hayatta kalabildiği yerde, tmp uzun vadede oturumlar arasında veri kalıcılığını garanti etmez. Gerçekten geçici verileri depolamanın en güvenilir yoludur.
Swift'te tmp yolunu almak için genel işlev NSTemporaryDirectory() veya FileManager.temporaryDirectory kullanılır. Bunlar tüm sandbox dizinleri arasındaki en basit API'lerdir.
import Foundation
// Option 1: NSTemporaryDirectory()
let tempDir = NSTemporaryDirectory()
let tempFile = (tempDir as NSString)
.appendingPathComponent("export_temp.pdf")
// Option 2: FileManager.temporaryDirectory (URL)
let tempURL = FileManager.default.temporaryDirectory
let exportURL = tempURL.appendingPathComponent("export_temp.pdf")
Objective-C aynı genel işlevi NSTemporaryDirectory() kullanır. Sonuç, uygulamanın geçici dizinine giden tam yolu içeren bir dizedir.
@import Foundation;
NSString *tempDir = NSTemporaryDirectory();
NSString *tempFile = [tempDir stringByAppendingPathComponent:@"temp_data.bin"];
Diğer dizinlerden önemli bir fark: NSTemporaryDirectory() bir etki alanı veya arama maskesi belirtmeyi gerektirmez — bu genel bir işlevdir. Ancak, sonraki başlatmada yol değişebilir, bu nedenle asla UserDefaults'ta veya başka kalıcı depolamada kaydetmeyin.
Temporary Directory kesin olarak tanımlanmış bir dizi senaryo için tasarlanmıştır. Geliştiriciler genellikle tmp'yi Caches ile karıştırır ve bir oturumdan daha uzun sürmesi gereken verileri tmp'ye koyar. Doğru kullanım durumlarına bakalım.
Veri dışa aktarımı sırasında oluşturulan dosyalar: e-postayla göndermeden önce bir raporun geçici kopyası, yüklemeden önce sıkıştırılmış arşiv, biçim dönüştürme için ara dosya. Dışa aktarım tamamlandıktan sonra dosya silinmelidir.
Gerçek zamanlı işlenen ses, video veya akış verilerini kaydetmek için geçici arabellekler. Örneğin, kalıcı depolamaya kaydetmeden önce ses kaydı veya akış sırasında video akışını arabelleğe alma.
| Senaryo | Dizin | Gerekçe |
|---|---|---|
| Göndermeden önce PDF dışa aktar | tmp | Gönderdikten sonra dosya gerekmez |
| Görüntüleri cache yap | Caches | Oturumlar arasında kullanışlı |
| Taşımadan önce dosya indir | tmp | Ara depolama |
| Oturum günlükleri | tmp | Yalnızca oturumda geçerli |
| Belge düzenle | tmp | Kaydetmeden önce sürüm |
Veriler yalnızca şu anda burada gerekiyorsa — tmp kullanın. Sonraki oturumda faydalı olabilirse — Caches kullanın. Veri kaybı kabul edilemezse — Documents kullanın.
iOS, tmp'nin yaşam döngüsünü diğer sandbox dizinlerinden farklı yönetir. Bu döngüyü anlamak, uygulamada doğru dosya depolama tasarımı için kritiktir.
Her başlatmada, iOS tmp için yeni bir yol tahsis edebilir. Önceki yol erişilemez hale gelir, ancak fiziksel dosyalar cihaz yeniden başlatılana kadar diskte kalabilir. Bu nedenle Apple, oturumlar arasında tmp yolunu kaydetmemeyi şiddetle önerir.
Apple Tech Note TN2150 (2024)'ye göre sistem, aşağıdaki durumlarda tmp'yi temizleyebilir: cihaz yeniden başlatma, disk alanı sınırına ulaşma, uygulama boşaltma (Offload). Caches'in aksine tmp, birden çok başlatma arasında bile veri depolamak için tasarlanmamıştır — sandbox'taki en güvenilmez depolamadır.
Geliştirici, FileManager.removeItem(at:) kullanarak bir işlemi tamamladıktan sonra geçici dosyaları açıkça silmelidir. tmp'de silinmeyen dosyalar birikir ve disk alanını boşa harcar — iOS yakın gelecekte bunların otomatik temizliğini garanti etmez.
tmp ve Caches karşılaştırması, geliştiricilerin depolama için bir dizin seçerken doğru kararı vermelerine yardımcı olur. Yanlış seçim, erken veri kaybına veya gereksiz alan tüketimine yol açabilir.
| Parametre | Temporary Directory | Caches Directory |
|---|---|---|
| Yaşam süresi | Yalnızca geçerli oturum | Oturumlar arası (garantisiz) |
| Yol değişimi | Her başlatmada değişebilir | Kararlı yol |
| Otomatik temizleme | Yeniden başlatmada, boşaltmada | Alan yetersiz olduğunda |
| Geliştirici silmesi | İşlemden sonra zorunlu | Sınır aşıldığında önerilir |
| Kullanım | Ara işlemler | Kalıcı cache |
Pratik bir kural: oluşturulduktan saniyeler veya dakikalar içinde silinecek veriler için tmp seçin. Oturumlar arasında saatler veya günler boyunca saklamanın faydalı olduğu ancak yeniden oluşturulabilen veriler için Caches seçin.
Temporary Directory ile çalışmak disiplin gerektirir: tmp'deki veriler kısa ömürlü olduğundan ve birikmeleri alan israfına yol açabileceğinden, geliştiricilerin birkaç önemli uygulamayı takip etmesi gerekir.
FileManager.removeItem(at:), geçici bir dosyayla işlem tamamlandıktan hemen sonra çağrılmalıdır. Hata oluşsa bile silmeyi garanti etmek için Swift'te defer kullanın.
import Foundation
let tempURL = FileManager.default
.temporaryDirectory
.appendingPathComponent("upload_temp.dat")
defer {
try? FileManager.default.removeItem(at: tempURL)
}
// Work with temp file
try "temporary data".write(to: tempURL, atomically: true)
// ... file operation ...
// defer executes when scope exits
Veriler oluşturulduktan bir saat sonra gerekebilirse — bunları Caches veya Application Support'e kaydedin. tmp, dakikalık işlemler için tasarlanmıştır, depolama için değil.
Bu kurallara uymak, geçici dosyaların birikmemesini, disk alanının verimli kullanılmasını ve uygulamanın iOS dosya sistemi temizleme senaryolarını doğru şekilde işlemesini sağlar.
Sıkça Sorulan Sorular
Genellikle yol tek bir oturum içinde değişmez, ancak iOS bunu garanti etmez. Nadir durumlarda, sistem uygulama arka plandan ön plana geçtiğinde tmp'yi değiştirebilir. Bu nedenle Apple, yolu bir değişkende saklamak yerine her ihtiyacınızda NSTemporaryDirectory()'yi çağırmanızı önerir.
Dosyalar birikir ve disk alanı kaplar. iOS cihaz yeniden başlatmasında tmp'yi temizleyebilir, ancak o zamana kadar uygulama disk alanını boşa harcar. Önemli birikimde, kullanıcı depolama ayarlarında uygulamanın çok yer kapladığını görebilir.
Evet, hassas veriler içeren geçici dosyalar için NSFileProtectionComplete ile DataProtectionType kullanabilirsiniz. Ancak unutmayın: dosya yalnızca geçerli oturumda okunacak ve ardından silinecekse, şifreleme gereksiz olabilir. Veri türüne göre şifreleme ihtiyacını değerlendirin.
Benzersiz bir tanımlayıcı oluşturmak için ProcessInfo.processInfo.globallyUniqueString veya UUID().uuidString kullanın. FileManager ayrıca tmp'de otomatik olarak benzersiz bir ad oluşturan urlForCreatingTemporaryFile yöntemini sağlar. Bu, paralel yazmalar sırasında çakışma olmamasını garanti eder.
Dolaylı olarak — evet. Apple, uygulamanın diskte depoladığı toplam veri miktarına dikkat eder. tmp silinmemiş gigabaytlarca dosya içeriyorsa, incelemeyi yapan kişi uygulamayı reddedebilir. tmp için önerilen sınır, herhangi bir zamanda 100 MB'ı geçmemektir. tmp'yi düzenli olarak temizleyin ve FileManager aracılığıyla boyutunu kontrol edin.
Ö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