В iOS что сохраняется после удаления приложения: данные в Keychain или в UserDefaults?

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

Ответ

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 для настроек и кэша, специфичных для текущей установки.