Что такое FileManager в iOS?

«Что такое FileManager в iOS?» — вопрос из категории Swift Core, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

FileManager — это класс Foundation, предоставляющий интерфейс для работы с файловой системой устройства в рамках песочницы приложения и доступных ему областей (например, общих папок).

Основные возможности:

  • Создание, копирование, перемещение и удаление файлов и директорий.
  • Получение содержимого директорий.
  • Запрос и установка атрибутов файлов (дата создания, права доступа).
  • Определение существования файла или директории.

Работа с путями: Всегда используйте URL, а не строковые пути, для большей надежности и поддержки системных функций.

Пример: Работа с директорией Documents:

let fileManager = FileManager.default

// 1. Получение URL директории Documents приложения
guard let documentsURL = fileManager.urls(for: .documentDirectory, 
                                          in: .userDomainMask).first else {
    fatalError("Не удалось найти директорию Documents")
}

// 2. Создание новой поддиректории
let imagesFolderURL = documentsURL.appendingPathComponent("UploadedImages")
do {
    try fileManager.createDirectory(at: imagesFolderURL, 
                                    withIntermediateDirectories: true, // создает промежуточные папки
                                    attributes: nil)
} catch {
    print("Ошибка создания директории: (error)")
}

// 3. Запись данных в файл в этой директории
let data = Data("Hello, FileManager!".utf8)
let fileURL = imagesFolderURL.appendingPathComponent("test.txt")
try? data.write(to: fileURL)

// 4. Получение списка файлов в директории
let contents = try? fileManager.contentsOfDirectory(at: imagesFolderURL, 
                                                    includingPropertiesForKeys: nil)
print(contents ?? [])

Критически важные практики:

  1. Выполняйте файловые операции в фоновых очередях, особенно если они потенциально долгие (сканирование больших директорий, копирование файлов).
  2. Всегда обрабатывайте ошибки с помощью do-try-catch. Операции с файловой системой подвержены сбоям (недостаточно места, нет прав).
  3. Проверяйте существование файла перед операциями, которые могут завершиться ошибкой (например, удаление).
  4. Для работы с iCloud Drive (Ubiquity Container) требуется дополнительная настройка прав и использование специальных методов FileManager.