Каталоги песочницы приложения
Используйте Documents, Caches и временные каталоги.
«Каталоги песочницы приложения» — бесплатный урок Swift Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 4 уроков всего.
Каталоги песочницы приложения
Приложения работают в песочнице: им разрешено записывать данные только в собственный контейнер. Для документов, кэша и временных файлов предусмотрены стандартные каталоги.
Поиск каталога документов
FileManager.urls(for:in:) возвращает URL-адреса известного каталога. .documentDirectory содержит пользовательские данные, для которых следует создавать резервные копии.
import Foundation
let fm = FileManager.default
let docs = fm.urls(for: .documentDirectory, in: .userDomainMask).first!
print("Documents path ends correctly: \(docs.lastPathComponent)")Создание URL-адресов файлов
Добавьте имя файла к URL-адресу каталога, чтобы получить полный путь к собственному файлу.
import Foundation
let fm = FileManager.default
let docs = fm.urls(for: .documentDirectory, in: .userDomainMask).first!
let file = docs.appendingPathComponent("profile.json")
print(file.lastPathComponent)Каталог кэша
.cachesDirectory хранит данные, которые можно восстановить. При нехватке места система может очистить этот каталог, поэтому никогда не храните здесь невосполнимые данные.
import Foundation
let fm = FileManager.default
let caches = fm.urls(for: .cachesDirectory, in: .userDomainMask).first!
print("Caches dir name: \(caches.lastPathComponent)")Временный каталог
FileManager.default.temporaryDirectory предоставляет рабочее пространство для недолговечных файлов, которые следует удалять самостоятельно.
import Foundation
let tmp = FileManager.default.temporaryDirectory
let scratch = tmp.appendingPathComponent("work.tmp")
print("Temp file path ready: \(scratch.lastPathComponent)")Документы, кэш и временные файлы
Используйте Документы для данных, созданных пользователем (для них создаются резервные копии), Кэш — для воспроизводимых данных, а tmp — для временных файлов.
import Foundation
// Choose the right folder for the data's lifetime.
print("Documents = backed up, Caches = purgeable, tmp = transient")Поддержка приложения
.applicationSupportDirectory хранит данные, которыми управляет приложение и которые не предназначены непосредственно для пользователя, например базы данных. Обычно этот каталог создают при первом запуске.
import Foundation
let fm = FileManager.default
let support = fm.urls(for: .applicationSupportDirectory, in: .userDomainMask).first!
try? fm.createDirectory(at: support, withIntermediateDirectories: true)
print("Ensured Application Support exists")Сохранение в документы
Объедините URL-адрес каталога с вызовом записи, чтобы сохранить пользовательские данные внутри песочницы.
import Foundation
let fm = FileManager.default
let docs = fm.urls(for: .documentDirectory, in: .userDomainMask).first!
let url = docs.appendingPathComponent("note.txt")
try? "hello".write(to: url, atomically: true, encoding: .utf8)
print("Saved into Documents")Чтение сохранённых данных
Читайте файлы песочницы так же, как любой файл по URL-адресу, поскольку этот путь полностью действителен внутри контейнера.
import Foundation
let fm = FileManager.default
let docs = fm.urls(for: .documentDirectory, in: .userDomainMask).first!
let url = docs.appendingPathComponent("note.txt")
if let text = try? String(contentsOf: url, encoding: .utf8) {
print(text)
}Исключение из резервного копирования
Установите значение ресурса isExcludedFromBackup для больших файлов, которые можно восстановить, чтобы они не увеличивали размер резервных копий iCloud.
import Foundation
var url = URL(fileURLWithPath: "/tmp/big.cache")
var values = URLResourceValues()
values.isExcludedFromBackup = true
try? url.setResourceValues(values)
print("Marked excluded from backup")Зачем нужна песочница
Пути песочницы различаются для разных установок и устройств, поэтому никогда не задавайте их жёстко. Всегда определяйте каталоги во время выполнения с помощью FileManager.
import Foundation
// Never hardcode /var/mobile/... — resolve at runtime instead.
let fm = FileManager.default
let docs = fm.urls(for: .documentDirectory, in: .userDomainMask).first!
print("Resolved Documents dynamically: \(!docs.path.isEmpty)")Быстрая проверка
В каком каталоге следует хранить пользовательские данные, для которых обязательно нужно создавать резервные копии?
Итоги
Приложения хранят файлы в каталогах песочницы, определяемых через FileManager.urls(for:in:): Документы — для пользовательских данных с резервным копированием, Кэш — для данных, которые можно восстановить, tmp — для временных файлов, а также каталог «Поддержка приложения». Определяйте пути во время выполнения и никогда не задавайте их жёстко. На этом курс работы с файлами завершён.
Часто задаваемые вопросы
Урок «Каталоги песочницы приложения» бесплатный?
Да — полный текст урока «Каталоги песочницы приложения» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 4 уроков всего.
Чему я научусь в уроке «Каталоги песочницы приложения»?
Используйте Documents, Caches и временные каталоги. Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Swift Academy?
Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Каталоги песочницы приложения»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Swift Academy?
Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- URL и пути к файлам
- Чтение и запись данных
- Управление каталогами
- Каталоги песочницы приложения