Цель:
Очистка NSUserDefaults
приложения после его удаления. И наоборот, при повторной установке приложения оно игнорирует все предыдущие NSUserDefaults, которые могли быть сохранены. То есть возможность определить, что эти NSUserDefaults принадлежат более ранней установке, которая была удалена.
Обратите внимание, что удаленная и повторно установленная версия могут иметь один и тот же номер сборки/версии.
Контекст:
Я храню несколько пар ключ-значение, которые представляют временные метки для загрузки определенных файлов эталонных данных, поэтому мое приложение может просто пропустить повторную загрузку эталонных данных, которые не изменились.
Во время разработки я иногда удаляю приложение из симулятора или устройства, но не хочу сбрасывать все настройки, чтобы очистить NSUserDefaults
.
Я понимаю, что есть множество вещей, которые я могу использовать, чтобы определить, завершена ли и актуальна ли моя загрузка справочных данных. Моя цель - определить, можно ли легко определить этот факт между установками/удалениями моего приложения.
После того, как эталонные данные будут установлены (загружены), это еще не конец истории, так как будут существовать новые исправления, и на основе их метки времени мне нужно будет определить, игнорировать ли их или выполнять импорт стиля «обновление или создание».
Исследованные подходы:
- Замены UDID. В этом сообщении объясняется, как можно создать собственную замену UDID. В приведенном контексте тот факт, что это значение может измениться при удалении, рассматривается как минус. Хотя, в моем контексте, это было бы положительно. Затем я мог бы вложить все свои ключи, специфичные для установки, в словарь с этим уникальным идентификатором. Однако, если приложение установлено на устройстве с хотя бы еще одним приложением от того же разработчика, уникальный идентификатор будет сохраняться в цикле удаления/переустановки.
- Обнаружение повторной установки после удаления. На это я не нашел готового ответа. Есть ли более общий способ для приложения определить, что оно только что установлено, отличая это от повторной установки после удаления?
Подходы, которые я, вероятно, буду использовать:
- Я понимаю, что NSUserDefaults по умолчанию предназначены для долгой жизни, и поэтому, вероятно, мне придется построить некоторую собственную логику, чтобы обнаружить этот сценарий.
- Since I am using Core Data, I will likely create an entity that stores these reference data timestamps, instead of using NSUserDefaults. This way, a fresh empty database is a giveaway that all reference data needs a fresh load.
- I am toying with building a more generic JSON-->Core Data importer that I could use across apps with similar reference data needs. Thus, I was hoping to avoid tying things to a Core Data instance and leveraging NSUserDefaults.
- После этапа разработки я буду упаковывать базу данных SQLite и копировать ее на место вместо импорта плоских файлов в базу данных.