Какой протокол нужно реализовать для сохранения файла в iOS?
Что проверяют
Протокола с названием вроде «сохрани файл» нет, поэтому проверяют, как вы уточняете задачу и какие протоколы на деле участвуют в сохранении. Слабый ответ называет протоколом FileManager, хотя это класс. Следом спрашивают, в какую директорию писать и что попадёт в бэкап.
Как отвечать
Уточните, что именно сохраняется, от этого зависит ответ:
- своя модель: реализовать
Codable(то естьEncodableиDecodable), закодировать черезJSONEncoderилиPropertyListEncoderи записатьDataметодомwrite(to:options:)с опцией.atomic, чтобы при сбое не остался обрезанный файл; - объект из Objective-C кода:
NSSecureCodingиNSKeyedArchiver.archivedData(withRootObject:requiringSecureCoding:). Старые методы архивации без secure coding помечены устаревшими; - документ в SwiftUI: протокол
FileDocument(илиReferenceFileDocumentдля класса) сreadableContentTypes, инициализатором изReadConfigurationи методомfileWrapper(configuration:). Вместе сDocumentGroupсистема сама даёт открытие, сохранение и связь с приложением «Файлы»; - место выбирает пользователь:
UIDocumentPickerViewController(forExporting:)с делегатомUIDocumentPickerDelegate, в SwiftUI модификатор.fileExporter.
Директории песочницы:
- Documents: данные пользователя, попадают в бэкап;
- Application Support: служебные файлы, тоже в бэкапе, директорию создают сами;
- Caches: то, что можно скачать заново, система вправе очистить;
- tmp: временные файлы, удалять их нужно самим.
Путь дают FileManager.default.urls(for:in:) или, с iOS 16, URL.documentsDirectory. Для чувствительных данных добавляют опцию .completeFileProtection.
Где спотыкаются
Называют FileManager протоколом. Интервьюер сразу решает, что кандидат путает базовые понятия.
Хранят в базе или UserDefaults абсолютный путь к файлу. Путь к контейнеру приложения может измениться после обновления, поэтому сохраняют относительный путь или имя файла.
Кладут кэш и скачанные медиа в Documents. Это раздувает бэкап в iCloud и нарушает правила хранения данных, из-за чего приложение могут вернуть с ревью.