Обновление критического обновления для одного из моих приложений недавно было отклонено из-за предполагаемого нарушения правил хранения данных iCloud.
Здесь, как мое приложение хранит данные (не было проблемой, так как первая версия моего приложения была одобрена в 2009 году):
- При запуске он копирует "стартовую" базу данных SQLite3 из пакета приложений в папку "Документы".
- База данных содержит базовую схему и некоторые данные примера, чтобы пользователь мог видеть, как использовать приложение. Он небольшой - чуть меньше 3 МБ.
- Затем будущая работа пользователя сохраняется только в этом файле базы данных. Они могут удалять или хранить образцы, они могут добавлять тонны своих данных, но этот файл базы данных всегда будет там.
Обновление в начале этого года было отклонено по той же причине, но когда я дал им объяснение выше, статус приложения изменился с "Отклонено" на "В обзоре" на "Обработка для магазина приложений". Они не пришли мне никаких объяснений, поэтому я подумал, что это просто недоразумение в части рецензента.
На этот раз рецензент ответил на мое объяснение, просто сказав, что данные, не созданные пользователем, не должны храниться в iCloud, и мое обновление остается в состоянии "Отклонено".
Но я не понимаю, что я должен делать здесь. Поскольку вся работа пользователя хранится в базе данных, я не могу исключить это из резервной копии iCloud или сохранить ее в папке Cache. Кроме того, я не могу чисто отделить "пользовательские" от "неавторизированных" данных, потому что приложение работает из одного и того же файла базы данных. Исходные, не созданные пользователем данные будут быстро заменены собственными данными пользователя, хотя имя файла и расположение каталога базы данных будут оставаться прежними.
И даже если в базе данных не было образцов данных, любое приложение с поддержкой базы данных все равно должно будет генерировать пустую базу данных при ее запуске, даже если единственное, что она хранит, это схема базы данных приложения.
Это, должно быть, очень распространенная проблема, но, к сожалению, мне нехорошо отключить резервное копирование - пользователи много работают над хранимыми в моем приложении данными, а для них очень важно резервирование iCloud.
Какие варианты у меня есть на данный момент? Вот что я вижу:
-
Свяжитесь с Apple еще раз и попытайтесь объяснить, что происходит.
-
Могу ли я установить атрибут резервного копирования файла на NO, а затем переключать его только на YES, когда пользователь делает свое первое изменение? Это хорошо, технически и хорошо с Apple?
-
Удалите данные из базы данных. Это будет очень плохо для удобства использования и увеличит нагрузку на поддержку, но я готов сделать это, если он получит мое обновление. Тем не менее, мне все равно придется создать базу данных-заглушки при запуске, чтобы провести пустую схему базы данных, поэтому я не уверен, что это даже повлияет на процесс утверждения.
-
Cry.
У кого-нибудь есть совет? Я должен представить себе, что есть множество других приложений, которые используют базу данных так же, как и мои, но не имеют возможности просто отключать резервное копирование.
Это также очень удручает, что любые изменения, которые я делаю, потребуют еще одного раунда тестирования и обзора приложений, который вернет мое критическое обновление еще на 2 - 3 недели.:/
UPDATE. Может быть другой вариант: могу ли я просто сохранить файл в Library/
вместо Documents/
, так как их проблема, похоже, связана с использованием папки "Документы"? Будет ли резервная копия файла сохранена в Library/
?
ОБНОВЛЕНИЕ 2. То, что я нахожу наиболее запутанным, заключается в том, что любое приложение с поддержкой базы данных (даже если оно использует Core Data, я полагаю) должно будет создать файл базы данных, содержащий хотя бы схему приложения, Проблема в том, что размер моей базы данных слишком велик? Поскольку я не вижу, как любое приложение с поддержкой базы данных может избежать необходимости создания базы данных при запуске.
ОБНОВЛЕНИЕ 3. Я использую настраиваемый слой взаимодействия SQLite, а не Core Data. Кроме того, данные примера состоят из стартовых изображений, которые пользователь, вероятно, в конечном итоге удалит, когда они начнут использовать приложение.