FileManager — apa itu, bekerja dengan sistem file iOS

Penulis: IT Sectr Diterbitkan: 2026-07-09 Waktu membaca: 9 mnt

FileManager — adalah kelas dari framework Foundation yang menyediakan antarmuka untuk bekerja dengan sistem file iOS, macOS, dan platform Apple lainnya. Ini memungkinkan untuk membuat, membaca, memindahkan, dan menghapus file serta direktori, serta mengelola metadata dan hak akses. Di iOS, semua operasi FileManager dibatasi oleh Sandbox aplikasi. Menurut Apple Developer Documentation (2026), FileManager bersifat thread-safe dan dapat digunakan dari thread latar belakang, tetapi semua operasi sistem file harus dilakukan dengan mempertimbangkan sandbox dan hak akses Security-Scoped Bookmarks.

Poin utama

  • FileManager — kelas utama Foundation untuk operasi sistem file: membaca, menulis, memindahkan, menghapus file.
  • Sandbox membatasi akses FileManager hanya ke direktori aplikasi — Documents, Library, tmp, dan App Group.
  • API berbasis URL (fileManager.urls) lebih diutamakan daripada String-based (NSHomeDirectory) untuk aplikasi modern.
  • FileManagerDelegate memungkinkan pelacakan dan pengendalian operasi file melalui shouldMoveItemAt dan shouldRemoveItemAt.
  • iCloud Drive dapat diakses melalui FileManager dengan ubiquityContainer yang diaktifkan dan entitlements yang sesuai.

Apa itu FileManager

FileManager — kelas singleton dari framework Foundation yang menyediakan API terpadu untuk interaksi dengan sistem file di semua platform Apple. Dapat diakses melalui FileManager.default atau dengan membuat instance dengan delegasi kustom.

Kemampuan utama kelas ini meliputi: memeriksa keberadaan file (fileExists), membuat direktori (createDirectory), menyalin dan memindahkan (copyItem, moveItem), menghapus (removeItem), mendapatkan atribut (attributesOfItem) dan isi direktori (contentsOfDirectory). FileManager terkait erat dengan NSData, String, dan JSONEncoder/Decoder untuk serialisasi data.

FileManager bersifat thread-safe: Apple menjamin keamanan pemanggilan metode dari thread yang berbeda. Namun, operasi sistem file bisa lambat pada file besar, oleh karena itu Apple merekomendasikan untuk menjalankannya di antrian latar belakang (DispatchQueue.global) dan memanggil metode FileManagerDelegate untuk memberi informasi tentang kemajuan.

swift
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)")
}

Direktori utama aplikasi iOS

Setiap aplikasi iOS memiliki tiga direktori utama yang dapat diakses melalui FileManager dalam Sandbox: Documents, Library, dan tmp. Masing-masing memiliki tujuan dan aturan pencadangan sendiri, yang kepatuhannya sangat penting untuk lulus peninjauan App Store.

Documents — untuk data pengguna yang harus dipertahankan antar peluncuran dan dicadangkan ke iCloud. Library — untuk file aplikasi: cache (Caches), pengaturan (Preferences), basis data (Application Support). tmp — untuk file sementara yang dapat dihapus oleh sistem kapan saja di antara peluncuran aplikasi.

DirektoriURL FileManagerCadanganPenggunaan
Documents.documentDirectoryYaData pengguna, file, ekspor
Library/Caches.cachesDirectoryTidakCache gambar, data sementara
Library/Preferences.libraryDirectory + "/Preferences"YaUserDefaults, pengaturan aplikasi
Library/Application Support.applicationSupportDirectoryYaBasis data, CoreData, Realm
tmp.tmpDirectory (NSTemporaryDirectory)TidakFile sementara sesi

Aturan Apple: jika file dapat dipulihkan dari internet atau dibuat ulang — harus disimpan di Caches (tanpa cadangan). Jika file berisi data pengguna — Documents (dengan cadangan). Penempatan file yang salah adalah salah satu alasan umum penolakan aplikasi, karena Apple memeriksa kepatuhan terhadap Storage & iCloud Backup Guidelines.

Membaca dan menulis file

FileManager sendiri tidak menyediakan metode untuk membaca konten file — untuk itu digunakan NSData(contentsOf), String(contentsOf), atau metode FileHandle. FileManager bertanggung jawab untuk mengelola file: memeriksa keberadaan, memindahkan, menyalin, menghapus.

Untuk menulis data, digunakan metode createFile(atPath:contents:attributes:) atau API tingkat tinggi — data.write(to:), JSONEncoder.encode, dan PropertyListEncoder. FileManager juga menyediakan FileHandle untuk membaca dan menulis file besar secara streaming, yang tidak memuat seluruh file ke dalam memori.

swift
struct UserSettings: Codable {
    let username: String
    let isDarkMode: Bool
    let fontSize: Int
}

let settings = UserSettings(
    username: "developer",
    isDarkMode: true,
    fontSize: 16
)

// Tulis JSON ke Documents
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)

// Baca JSON
let loadedData = try Data(contentsOf: url)
let loadedSettings = try JSONDecoder()
    .decode(UserSettings.self, from: loadedData)

Saat menulis, gunakan options: .atomic — ini menjamin bahwa file tidak akan rusak jika terjadi kegagalan penulisan: data pertama kali disimpan ke file sementara, kemudian dipindahkan secara atomik ke jalur tujuan. Untuk membaca file besar, gunakan FileHandle dengan .readingMode dan baca data dalam potongan, kontrol penggunaan memori.

Manajemen direktori

FileManager menyediakan metode untuk manajemen direktori lengkap: createDirectory (membuat semua folder perantara melalui withIntermediateDirectories), contentsOfDirectory (mendapatkan daftar file), enumeratorAt (penelusuran rekursif), dan subpathsOfDirectory (semua jalur dalam direktori).

Metode enumeratorAt mengembalikan DirectoryEnumerator yang memungkinkan penelusuran direktori besar secara efisien tanpa memuat seluruh konten ke dalam memori. Ini mendukung pemfilteran melalui skipDescendants dan menyediakan atribut setiap elemen tanpa kueri tambahan ke sistem file.

swift
// Penelusuran direktori rekursif
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")
        }
    }
}

Untuk menghapus direktori, gunakan removeItem(at:). Perhatian: penghapusan direktori di iOS tidak dapat dibatalkan — file tidak masuk ke tempat sampah seperti di macOS. Sebelum menghapus, pastikan Anda tidak lagi menggunakan file dari direktori ini, dan lakukan operasi di thread latar belakang, karena menghapus banyak file dapat memblokir UI.

FileManager dan iCloud

FileManager terintegrasi dengan iCloud Drive melalui metode URLForUbiquityContainerIdentifier, yang mengembalikan URL direktori iCloud untuk aplikasi. Untuk bekerja, diperlukan mengaktifkan iCloud capability di proyek dan menambahkan entitlement yang sesuai.

File iCloud disinkronkan secara otomatis, tetapi FileManager menyediakan metode untuk kontrol manual: startDownloadingUbiquitousItem memaksa memulai unduhan, evictUbiquitousItem menghapus salinan lokal, dan urlOfItem(at:) mengembalikan URL lokal untuk file iCloud. NSMetadataQuery digunakan untuk mencari file di iCloud.

Batasan kritis: iCloud Drive tidak didukung untuk file di direktori Documents — hanya untuk file di ubiquityContainer. Jangan mencoba menyinkronkan Documents melalui iCloud; untuk ini gunakan NSUbiquitousKeyValueStore untuk volume data kecil atau Core Data dengan CloudKit untuk struktur kompleks.

Kinerja FileManager

Operasi dengan FileManager bisa mahal, terutama pada perangkat dengan memori flash lambat. Rekomendasi utama Apple mencakup menjalankan semua operasi file di antrian latar belakang, meminimalkan jumlah panggilan fileExistsAtPath, dan menggunakan caching hasil.

Metode fileExists melakukan panggilan sistem stat(), yang relatif lambat. Jika Anda memeriksa keberadaan file sebelum membacanya, lebih baik langsung mencoba membacanya dan menangani kesalahan — ini melakukan stat yang sama, tetapi menghilangkan panggilan sistem ganda. Untuk pemeriksaan massal, gunakan enumeratorAt dengan resourceValues.

Untuk mengoptimalkan pekerjaan dengan volume data besar:

  • Gunakan FileHandle untuk pemrosesan streaming file besar
  • Cache hasil fileManager.urls untuk direktori yang sering digunakan
  • Lakukan operasi batch di antrian granular, hindari memblokir main thread
  • Gunakan CoordinatedFileManager untuk akses aman dari beberapa thread

Apple Instruments menyediakan templat File Activity untuk pembuatan profil operasi file. Gunakan untuk mengidentifikasi hambatan — misalnya, panggilan fileExists yang sering dalam loop atau operasi penulisan di main thread. Masalah kinerja yang paling umum terkait dengan penulisan sinkron file besar saat aplikasi diminimalkan.

Pertanyaan yang sering diajukan

Apa itu FileManager di iOS?

FileManager — kelas framework Foundation untuk bekerja dengan sistem file Apple. Menyediakan API untuk membuat, membaca, memindahkan, menghapus file dan direktori. Di iOS, kerjanya dibatasi oleh Sandbox aplikasi, kecuali Security-Scoped Bookmarks.

Direktori apa saja yang dapat diakses melalui FileManager di iOS?

Documents — data pengguna dengan cadangan di iCloud. Library/Caches — cache tanpa cadangan. Library/Application Support — basis data. tmp — file sementara. App Group Container — untuk data bersama antar aplikasi dalam satu grup.

Bagaimana cara mendapatkan jalur ke Documents melalui FileManager?

Panggil FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first. Metode mengembalikan URL dengan jalur absolut ke direktori Documents di dalam Sandbox aplikasi saat ini. Untuk memeriksa keberadaan, gunakan fileExists(atPath:).

Bisakah saya mengakses file aplikasi lain melalui FileManager?

Tidak, Sandbox iOS melarang akses ke sistem file aplikasi lain. Pengecualian: App Groups (direktori bersama untuk aplikasi pengembang yang sama) dan Security-Scoped Bookmarks (akses ke file melalui UIDocumentPicker dan iCloud Drive).

Bagaimana cara menulis file dengan aman melalui FileManager?

Gunakan opsi .atomic saat menulis — data pertama kali disimpan ke file sementara, kemudian dipindahkan secara atomik ke jalur tujuan. Ini mencegah kerusakan file jika terjadi kegagalan penulisan. Untuk data besar, gunakan FileHandle dengan penulisan dalam potongan 1-2 MB.

Ringkasan

  • FileManager — kelas pusat Foundation untuk semua operasi sistem file di iOS: dari pemeriksaan keberadaan hingga penelusuran direktori rekursif.
  • Documents, Library, tmp — tiga direktori utama aplikasi dengan aturan cadangan dan siklus hidup yang berbeda.
  • API berbasis URL lebih diutamakan daripada jalur berbasis String untuk kompatibilitas dengan Sandbox dan Security-Scoped Bookmarks.
  • FileHandle dan pemrosesan streaming — satu-satunya cara bekerja dengan file besar tanpa kelebihan memori.
  • FileManagerDelegate memungkinkan kontrol operasi pemindahan, penyalinan, dan penghapusan melalui metode should.
  • Integrasi iCloud tersedia melalui ubiquityContainer dan NSMetadataQuery untuk bekerja dengan file cloud.
  • Kinerja operasi file sangat penting — lakukan di antrian latar belakang dan minimalkan panggilan fileExists.

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga