Ответ
Keychain сохраняется, а UserDefaults очищается при удалении приложения.
Причина:
- Keychain — это защищенное системное хранилище для критичных данных (пароли, токены, ключи). Оно существует отдельно от песочницы приложения и управляется iOS.
- UserDefaults (файл
plist) хранится внутри песочницы приложения, которая полностью удаляется вместе с приложением.
Пример кода:
// Данные в Keychain сохранятся после удаления приложения
let keychainQuery: [String: Any] = [
kSecClass as String: kSecClassGenericPassword,
kSecAttrAccount as String: "userAuthToken",
kSecValueData as String: "abc123xyz".data(using: .utf8)!
]
let status = SecItemAdd(keychainQuery as CFDictionary, nil)
// Данные в UserDefaults будут удалены
UserDefaults.standard.set("temporaryValue", forKey: "cachedSetting")
Практическое применение:
- Используйте Keychain для хранения данных, которые должны пережить переустановку (токены доступа, учетные данные).
- Используйте UserDefaults для настроек и кэша, специфичных для текущей установки.