Обновления приложений, NSURL и каталог документов - PullRequest
8 голосов
/ 08 марта 2012

У меня есть приложение в магазине приложений, которое использует Core Data для сохранения большей части данных.Исключением является хранение изображений.Я храню изображения в подкаталогах в каталоге Documents и сохраняю ссылку NSURL на это изображение в соответствующем атрибуте объекта в основном хранилище данных.

Мы заметили, что при обновлении в магазине приложений этиизображения не найдены и, следовательно, не отображаются, используя ссылки, сохраненные в предыдущей версии приложения.Теперь у меня есть подозрение, что проблема в том, что, поскольку мы используем устройства для разработки для тестирования, эта проблема распространяется, потому что каталог в каталоге приложений, в котором используется приложение dev, отличается от того, который создает / использует магазин приложений.Я заметил различия между каталогом магазина приложений для приложения в приложениях и каталогом, созданным при отладке версий в Xcode.Таким образом, URL, хранящийся в основных данных, указывает на неправильную папку приложений.Это довольно сложно отладить, так как я не могу загрузить старую версию приложения, как только новая версия выпущена в магазине.

Итак, у меня есть пара вопросов.Могу ли я гарантировать, что подкаталог «Приложения», в котором пользователи, загружающие версии одного и того же приложения, будут одинаковыми, что сделает это проблемой для устройств, не предназначенных для разработки?представлять расположение этих ресурсов, или я должен быть в порядке с хранением того, что в конечном итоге является абсолютными URL-адресами?

Большое спасибо, Фелипе

Ответы [ 2 ]

13 голосов
/ 08 марта 2012

Вы должны использовать относительные URL для хранения ссылок на файлы. Абсолютный URL может измениться после обновления приложения

Файлы, сохраненные во время обновлений приложения

Когда пользователь загружает обновление приложения, iTunes устанавливает обновление в новую директорию приложения. Затем он перемещает файлы данных пользователя от старой установки до нового приложения каталог перед удалением старой установки. Файлы в следующем каталоги гарантированно сохраняются в процессе обновления:

  • Application_Home / Документы
  • Application_Home / Библиотека

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

https://developer.apple.com/library/ios/#DOCUMENTATION/iPhone/Conceptual/iPhoneOSProgrammingGuide/PerformanceTuning/PerformanceTuning.html

Спасибо песочнице, приложение home также является домом пользователя. Таким образом, можно использовать Unix тильду, которая является короткой рукой для домашнего пользователя, то есть ~/Documents, ~/Library и так далее.

Используйте -[NSString stringByAbbreviatingWithTildeInPath], чтобы превратить полный путь в относительный путь. И поверните его с помощью -[NSString stringByExpandingTildeInPath].

0 голосов
/ 08 марта 2012

Я думаю, вы ищете следующее:

NSString *appDocumentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...