FileManager — Foundation framework-dən olan, iOS, macOS və digər Apple platformalarının fayl sistemi ilə iş üçün interfeys təmin edən sinifdir. O, fayl və kataloqları yaratmağa, oxumağa, köçürməyə və silməyə, həmçinin metadata və giriş hüquqlarını idarə etməyə imkan verir. iOS-da bütün FileManager əməliyyatları tətbiqin Sandbox çərçivəsi ilə məhdudlaşdırılıb. Apple Developer Documentation (2026)-ya görə, FileManager thread-safe-dir və fon thread-lərindən istifadə oluna bilər, lakin fayl sistemi ilə bütün əməliyyatlar sandbox və Security-Scoped Bookmarks giriş hüquqları nəzərə alınmaqla yerinə yetirilməlidir.
Əsas məqamlar
FileManager — Foundation framework-dən olan, bütün Apple platformalarında fayl sistemi ilə qarşılıqlı əlaqə üçün vahid API təmin edən sinqleton sinifdir. FileManager.default və ya xüsusi deleqat ilə nümunə yaratmaqla əldə edilə bilər.
Sinifin əsas imkanlarına daxildir: faylın mövcudluğunu yoxlamaq (fileExists), kataloq yaratmaq (createDirectory), kopyalamaq və köçürmək (copyItem, moveItem), silmək (removeItem), atributları əldə etmək (attributesOfItem) və kataloqların məzmununu əldə etmək (contentsOfDirectory). FileManager məlumatların seriyalaşdırılması üçün NSData, String və JSONEncoder/Decoder ilə sıx bağlıdır.
FileManager thread-safe-dir: Apple müxtəlif thread-lərdən metodların çağırılmasının təhlükəsizliyinə zəmanət verir. Bununla birlikdə, fayl sistemi əməliyyatları böyük fayllarda yavaş ola bilər, buna görə Apple onların fon növbəsində (DispatchQueue.global) yerinə yetirilməsini və gedişat barədə məlumat vermək üçün FileManagerDelegate metodlarının çağırılmasını tövsiyə edir.
let fileManager = FileManager.default
let documentsURL = fileManager.urls(
for: .documentDirectory,
in: .userDomainMask
).first!
let fileURL = documentsURL.appendingPathComponent("data.plist")
if fileManager.fileExists(atPath: fileURL.path) {
print("File exists at \(fileURL.path)")
}
Hər bir iOS tətbiqinin Sandbox çərçivəsində FileManager vasitəsilə əldə edilə bilən üç əsas kataloqu var: Documents, Library və tmp. Hər birinin öz təyinatı və ehtiyat nüsxə qaydaları var ki, onlara riayət etmək App Store baxışından keçmək üçün kritik əhəmiyyət daşıyır.
Documents — işə salmalar arasında saxlanılmalı və iCloud-a ehtiyatı aparılmalı olan istifadəçi məlumatları üçün. Library — tətbiq faylları üçün: keşlər (Caches), parametrlər (Preferences), məlumat bazaları (Application Support). tmp — tətbiq işə salmaları arasında sistem tərəfindən istənilən vaxt silinə bilən müvəqqəti fayllar üçün.
| Kataloq | FileManager URL | Ehtiyat nüsxə | İstifadə |
|---|---|---|---|
| Documents | .documentDirectory | Bəli | İstifadəçi məlumatları, fayllar, ixrac |
| Library/Caches | .cachesDirectory | Xeyr | Şəkil keşləri, müvəqqəti məlumatlar |
| Library/Preferences | .libraryDirectory + "/Preferences" | Bəli | UserDefaults, tətbiq parametrləri |
| Library/Application Support | .applicationSupportDirectory | Bəli | Məlumat bazaları, CoreData, Realm |
| tmp | .tmpDirectory (NSTemporaryDirectory) | Xeyr | Seans müvəqqəti faylları |
Apple qaydası: əgər faylı internetdən bərpa etmək və ya yenidən yaratmaq olarsa — o, Caches-də saxlanmalıdır (ehtiyat nüsxəsiz). Əgər fayl istifadəçi məlumatları ehtiva edirsə — Documents-də (ehtiyat nüsxə ilə). Faylların səhv yerləşdirilməsi tətbiqin rədd edilməsinin tez-tez rast gəlinən səbəblərindən biridir, çünki Apple Storage & iCloud Backup Guidelines-ə uyğunluğu yoxlayır.
FileManager özü faylların məzmununu oxumaq üçün metodlar təmin etmir — bunun üçün NSData(contentsOf), String(contentsOf) və ya FileHandle metodları istifadə olunur. FileManager faylların idarə edilməsinə cavabdehdir: mövcudluğu yoxlamaq, köçürmək, kopyalamaq, silmək.
Məlumatların yazılması üçün createFile(atPath:contents:attributes:) metodu və ya yüksək səviyyəli API-lər — data.write(to:), JSONEncoder.encode və PropertyListEncoder istifadə olunur. FileManager həmçinin böyük faylların axınlı oxunması və yazılması üçün bütün faylı yaddaşa yükləməyən FileHandle təmin edir.
struct UserSettings: Codable {
let username: String
let isDarkMode: Bool
let fontSize: Int
}
let settings = UserSettings(
username: "developer",
isDarkMode: true,
fontSize: 16
)
// JSON-u Documents-ə yaz
let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted
let data = try encoder.encode(settings)
let url = documentsURL.appendingPathComponent("settings.json")
try data.write(to: url, options: .atomic)
// JSON-u oxu
let loadedData = try Data(contentsOf: url)
let loadedSettings = try JSONDecoder()
.decode(UserSettings.self, from: loadedData)
Yazarkən options: .atomic istifadə edin — bu, yazı nasazlığı zamanı faylın zədələnməyəcəyinə zəmanət verir: məlumatlar əvvəlcə müvəqqəti fayla yazılır, sonra atomik olaraq hədəf yola köçürülür. Böyük faylları oxumaq üçün FileHandle-i .readingMode ilə istifadə edin və yaddaş istehlakına nəzarət edərək məlumatları hissə-hissə oxuyun.
FileManager kataloqların tam idarə edilməsi üçün metodlar təmin edir: createDirectory (withIntermediateDirectories vasitəsilə bütün aralıq qovluqların yaradılması), contentsOfDirectory (fayl siyahısının əldə edilməsi), enumeratorAt (rekursiv gəzinti) və subpathsOfDirectory (kataloq daxilində bütün yollar).
enumeratorAt metodu DirectoryEnumerator qaytarır ki, bu da bütün məzmunu yaddaşa yükləmədən böyük kataloqları səmərəli şəkildə gəzməyə imkan verir. O, skipDescendants vasitəsilə filtrləməni dəstəkləyir və fayl sisteminə əlavə sorğu olmadan hər bir elementin atributlarını təqdim edir.
// Rekursiv kataloq gəzintisi
if let enumerator = fileManager.enumerator(
at: documentsURL,
includingPropertiesForKeys: [.fileSizeKey, .isDirectoryKey]
) {
for case let fileURL as URL in enumerator {
let attrs = try fileURL.resourceValues(
for: [.fileSizeKey, .isDirectoryKey]
)
if attrs.isDirectory == false {
let size = attrs.fileSize ?? 0
print("File: \(fileURL.lastPathComponent), Size: \(size) bytes")
}
}
}
Kataloqu silmək üçün removeItem(at:) istifadə edin. Diqqət: iOS-da kataloqun silinməsi geri qaytarılmazdır — fayllar macOS-dakı kimi zibil qutusuna düşmür. Silmədən əvvəl bu kataloqdan faylları artıq istifadə etmədiyinizə əmin olun və əməliyyatı fon thread-də yerinə yetirin, çünki çox sayda faylın silinməsi UI-ni bloklaya bilər.
FileManager iCloud Drive ilə URLForUbiquityContainerIdentifier metodu vasitəsilə inteqrasiya edir, bu da tətbiq üçün iCloud kataloqunun URL-ni qaytarır. İşləmək üçün layihədə iCloud capability-ni aktivləşdirmək və müvafiq entitlement əlavə etmək tələb olunur.
iCloud faylları avtomatik sinxronlaşır, lakin FileManager əl ilə idarəetmə üçün metodlar təmin edir: startDownloadingUbiquitousItem yükləməni məcburi başladır, evictUbiquitousItem yerli nüsxəni silir, urlOfItem(at:) isə iCloud faylı üçün yerli URL qaytarır. NSMetadataQuery iCloud-da faylları axtarmaq üçün istifadə olunur.
Kritik məhdudiyyət: iCloud Drive Documents kataloqundakı fayllar üçün dəstəklənmir — yalnız ubiquityContainer-dəki fayllar üçün. Documents-i iCloud vasitəsilə sinxronlaşdırmağa çalışmayın; bunun üçün kiçik həcmli məlumatlar üçün NSUbiquitousKeyValueStore və ya mürəkkəb strukturlar üçün Core Data ilə CloudKit istifadə edin.
FileManager əməliyyatları, xüsusilə yavaş flash yaddaşı olan cihazlarda bahalı ola bilər. Apple-ın əsas tövsiyələri bütün fayl əməliyyatlarının fon növbələrində yerinə yetirilməsini, fileExistsAtPath çağırışlarının sayının minimuma endirilməsini və nəticələrin keşləşdirilməsini əhatə edir.
fileExists metodu nisbətən yavaş olan stat() sistem çağırışını yerinə yetirir. Əgər faylı oxumadan əvvəl onun mövcudluğunu yoxlayırsınızsa, dərhal oxumağa çalışmaq və xətanı idarə etmək daha yaxşıdır — bu eyni stat-ı yerinə yetirir, lakin ikiqat sistem çağırışından xilas edir. Kütləvi yoxlamalar üçün resourceValues ilə enumeratorAt istifadə edin.
Böyük həcmli məlumatlarla işin optimallaşdırılması üçün:
Apple Instruments fayl əməliyyatlarının profilləşdirilməsi üçün File Activity şablonu təqdim edir. Onu darboğazları müəyyən etmək üçün istifadə edin — məsələn, dövrədə tez-tez fileExists çağırışları və ya main thread-də yazma əməliyyatları. Ən çox rast gəlinən performans problemləri tətbiqin bağlanması zamanı böyük faylların sinxron yazılması ilə əlaqəlidir.
Tez-tez verilən suallar
FileManager — Apple fayl sistemi ilə iş üçün Foundation framework sinifidir. Fayl və kataloqların yaradılması, oxunması, köçürülməsi, silinməsi üçün API təmin edir. iOS-da onun işi Sandbox tətbiq çərçivəsi ilə məhdudlaşdırılıb, Security-Scoped Bookmarks istisna olmaqla.
Documents — iCloud-da ehtiyat nüsxəsi olan istifadəçi məlumatları. Library/Caches — ehtiyat nüsxəsiz keşlər. Library/Application Support — məlumat bazaları. tmp — müvəqqəti fayllar. App Group Container — bir qrupun tətbiqləri arasında ümumi məlumatlar üçün.
FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first çağırın. Metod cari tətbiqin Sandbox daxilində Documents kataloquna mütləq yol ilə URL qaytarır. Mövcudluğu yoxlamaq üçün fileExists(atPath:) istifadə edin.
Xeyr, iOS Sandbox-u digər tətbiqlərin fayl sisteminə girişi qadağan edir. İstisnalar: App Groups (bir tərtibatçının tətbiqləri üçün ümumi kataloq) və Security-Scoped Bookmarks (UIDocumentPicker və iCloud Drive vasitəsilə fayllara giriş).
Yazarkən .atomic seçimindən istifadə edin — məlumatlar əvvəlcə müvəqqəti fayla yazılır, sonra atomik olaraq hədəf yola köçürülür. Bu, yazı nasazlığı zamanı faylın zədələnməsinin qarşısını alır. Böyük məlumatlar üçün 1-2 MB hissələrlə yazmaq üçün FileHandle istifadə edin.
Xülasə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun