Какие виды хранилища очистятся после удаления приложения?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Виды хранилища, очищаемые после удаления приложения
При удалении приложения iOS с устройства, операционная система очищает большинство связанных с приложением данных, но есть важные исключения. Понимание этого поведения критично для разработки, особенно при работе с чувствительными данными, синхронизацией или облачными сервисами.
Полностью очищаемые хранилища (Sandbox Data)
Все данные в песочнице приложения (App Sandbox) удаляются безвозвратно:
1. Документы и локальные файлы
// Пример путей, которые будут очищены
let documentsPath = FileManager.default.urls(
for: .documentDirectory,
in: .userDomainMask
).first!
let cachePath = FileManager.default.urls(
for: .cachesDirectory,
in: .userDomainMask
).first!
let tempPath = URL(fileURLWithPath: NSTemporaryDirectory())
- Documents/ — пользовательские документы и данные
- Library/Caches/ — кэшированные файлы (могут очищаться и раньше при нехватке места)
- Library/Application Support/ — данные поддержки приложения
- tmp/ — временные файлы
- Preferences/ (plist-файлы) — пользовательские настройки
2. Базы данных SQLite и Core Data
// Локальные файлы .sqlite будут удалены
let coreDataStoreURL = documentsPath.appendingPathComponent("Model.sqlite")
3. UserDefaults
// Все данные UserDefaults.standard удаляются
UserDefaults.standard.set("value", forKey: "myKey")
4. Keychain (с определенными настройками)
// Keychain items с атрибутом kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly
// или без kSecAttrSynchronizable будут удалены
let query: [String: Any] = [
kSecClass as String: kSecClassGenericPassword,
kSecAttrAccount as String: "userToken",
kSecAttrAccessible as String: kSecAttrAccessibleWhenUnlocked
]
Частично или не очищаемые хранилища
1. Keychain (с определенными атрибутами)
- Сохраняются: Записи с атрибутом
kSecAttrAccessibleAfterFirstUnlockиkSecAttrSynchronizable(синхронизированные через iCloud Keychain) - Удаляются: Локальные записи Keychain (без синхронизации)
2. Данные в iCloud
// NSUbiquitousContainer данные сохраняются в iCloud
let ubiquityContainer = FileManager.default.url(
forUbiquityContainerIdentifier: nil
)
- CloudKit containers — данные остаются в облаке
- iCloud Documents — документы синхронизированные через iCloud Drive
- Core Data with CloudKit — облачные данные сохраняются
3. Push-уведомления token
- APNS token регистрируется заново при переустановке
- Старый token становится невалидным
4. Данные в сторонних сервисах
- Firebase, AWS, Backend APIs — облачные данные не затрагиваются
- OAuth tokens, серверные сессии — требуют отдельной инвалидации
5. Системные данные приложения
- Фотографии в галерее (если приложение сохраняло в системный альбом)
- Контакты, календари (если приложение имело доступ и вносило изменения)
- Файлы в общих папках (через File Sharing)
Практические рекомендации для разработчиков
Что нужно учитывать:
- Миграция данных: Предусматривайте экспорт важных данных из песочницы
- Авторизация: Используйте серверную инвалидацию сессий при удалении
- Резервное копирование: Критичные данные храните в iCloud или синхронизируйте с сервером
- Keychain стратегия: Четко разделяйте, какие данные должны сохраняться после удаления
Пример безопасного хранения:
struct KeychainManager {
static func savePersistentToken(_ token: String) -> Bool {
let query: [String: Any] = [
kSecClass: kSecClassGenericPassword,
kSecAttrAccount: "persistentUserToken",
kSecAttrSynchronizable: kCFBooleanTrue as Any,
kSecAttrAccessible: kSecAttrAccessibleAfterFirstUnlock,
kSecValueData: token.data(using: .utf8)!
]
SecItemDelete(query as CFDictionary)
return SecItemAdd(query as CFDictionary, nil) == errSecSuccess
}
}
Особые случаи и нюансы
- App Groups Data — данные в общих контейнерах удаляются, если удаляются все приложения этой группы
- Widgets — данные виджетов очищаются вместе с основным приложением
- App Clips — удаляются автоматически через некоторое время, но не сразу после удаления основного приложения
- TestFlight — удаление тестовой версии очищает данные как обычное приложение
Важное замечание: В симуляторе поведение может отличаться от реальных устройств, особенно в отношении Keychain и iCloud. Всегда тестируйте сценарии удаления на реальных устройствах.
Понимание этих особенностей позволяет создавать приложения с корректным управлением данными, обеспечивая как конфиденциальность пользователей, так и удобство при переустановке приложения.