← Назад к вопросам

Какие виды хранилища очистятся после удаления приложения?

1.0 Junior🔥 131 комментариев
#Хранение данных

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Виды хранилища, очищаемые после удаления приложения

При удалении приложения 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
    }
}

Особые случаи и нюансы

  1. App Groups Data — данные в общих контейнерах удаляются, если удаляются все приложения этой группы
  2. Widgets — данные виджетов очищаются вместе с основным приложением
  3. App Clips — удаляются автоматически через некоторое время, но не сразу после удаления основного приложения
  4. TestFlight — удаление тестовой версии очищает данные как обычное приложение

Важное замечание: В симуляторе поведение может отличаться от реальных устройств, особенно в отношении Keychain и iCloud. Всегда тестируйте сценарии удаления на реальных устройствах.

Понимание этих особенностей позволяет создавать приложения с корректным управлением данными, обеспечивая как конфиденциальность пользователей, так и удобство при переустановке приложения.

Какие виды хранилища очистятся после удаления приложения? | PrepBro