Pull to refresh

Очистка кэша в iOS 5

Reading time5 min
Views12K
Original author: Марко Армент


У каждого приложения iOS есть рабочая папка для хранения файлов. Все элементы оттуда, кроме содержимого Caches и tmp, синхронизируются с бэкапом во время соединения с iTunes.

До выхода iOS 5, система никогда не удаляла содержимое Caches и tmp, они были единственным безопасным местом для хранения данных, которые всегда должны быть доступны и в то же время которые можно повторно скачать в случае потери. Таким образом, эти данные не занимали место в бэкапах и не замедляли синхронизацию.

В iOS 5, после появления бэкапов iCloud, компания Apple начала борьбу с приложениями, которые хранят слишком много данных в любой синхронизируемой папке, такой как Documents. Многие разработчики уже получили письма от Apple вроде такого:

Во время последнего тестирования было обнаружено, что [ваше приложение] хранит значительное количество данных в папке Documents.

Поскольку бэкапы iCloud осуществляются ежедневно через Wi-Fi для каждого устройства iOS, важно гарантировать максимальное удобство для пользователя и минимизировать количество данных, хранимых вашим приложением.

Вдобавок к купленной музыке, приложениям, книгам, фотографиям и настройкам устройства, всё содержимое рабочей папки вашего приложения, включая папку Documents, синхронизируется с iCloud.

Сама программа, а также папки Caches и temp не синхронизируются с iCloud. Ваше приложение должно хранить данные в указанных местах, в соответствии с правилами пользования хранилища iCloud.

Пожалуйста, изучите указанную документацию, сделайте необходимые изменения и обновите версию программы в App Store.

В документации всё объясняется предельно ясно:

  1. Только документы и другие данные, созданные пользователем или которые не могут быть воссозданы вашим приложением, должны храниться в папке <Application_Home>/Documentsи будут автоматически синхронизированы с iCloud.
  2. Данные, которые могут быть повторно скачаны или воссозданы приложением, следует хранить в папке <Application_Home>/Library/Caches. Например, такими являются файлы кэша базы данных или скачиваемый контент, как то, что используется приложениями для чтения журналов, газет и картографическими приложениями.

Звучит просто: переместить всё, что можно повторно скачать, в Caches.

Instapaper давно хранит скачанные статьи в папке Caches, потому что я не хотел замедлять пользователям синхронизацию с iTunes и увеличивать объём бэкапов без необходимости, а полное обновление базы случалось не так часто, чтобы стать проблемой для большинства людей. Новые правила вынуждают меня использовать Caches: у меня больше нет выбора.

Но в iOS 5 есть ещё одно важное изменение: Caches и tmp — единственные два места, которые не входят в бэкап — подвергаются очистке, когда на устройстве кончается память.

Многие разработчики сообщали об этой проблеме с Instapaper ещё до того, как iOS 5 стал доступен широкой публике, поэтому я с ужасом представляю, сколько будет жалоб, когда начнутся массовые продажи устройств с iOS 5.

Теперь не осталось места, где хранить файлы, которые не нужно бэкапить (или даже запрещено бэкапить, по новым правилам), но которые нельзя удалять в произвольное время. Это является проблемой для многих приложений, вот те из них, которые сразу приходят на ум:

  1. Instapaper и остальные программы, которые сохраняют веб-статьи для офлайнового чтения
  2. Приложения для чтения электронных книг (включая программу iBooks, если правила относятся и к ней)
  3. Подкаст-клиенты (за исключением тех подкастов, что синхронизируются с iTunes)
  4. Офлайновая Википедия
  5. Офлайновые картографические программы

Ключевое слово — офлайн. Вы можете сказать, что тут нет большой проблемы, ведь можно всё заново скачать в любое время из интернета. Но здесь не тот случай.

Типичный сценарий: пользователь Instapaper заполняет свой iPad контентом для длительного путешествия. Она синхронизирует пачку фильмов и подкастов, скачивает несколько журналов и покупает парочку новых игр, так что в итоге на устройстве почти не остаётся свободного места. Прямо перед посадкой на самолёт девушка вспоминает, что нужно скачать свежий выпуск журнала The Economist (я высокого мнения о своих пользователях). Из-за этого объём свободного места падает ниже критической отметки и срабатывает триггер, который запускает программу очистки в фоновом режиме. Незаметно для пользователя стирается всё, что она сохранила в Instapaper. Позже во время полёта, где нет доступа в интернет, она запускает Instapaper и находит программу девственно чистой.

(На прошлой неделе, почти в точности такой случай произошёл с одним из моих пользователей).

Из-за этого страдают все:

  • Ей нечего читать (она только что прочла The Economist)
  • Моя программа выглядит виновной, словно удалила все файлы, из-за чего у пользователя падает доверие к программе. Если мне повезёт, то девушка напишет в техподдержку и у меня будет шанс объяснить истинное положение дел. Но, скорее всего, она или тихо разочаруется, или поставит одну звёздочку в оценках на App Store, рассказывая всем, какая моя программа ненадёжная и удаляет все файлы без предупреждения. Из-за этого у меня снизятся продажи (одновременно снизится доход компании Apple, которая получает 30% от этих продаж).
  • У девушки отрицательный опыт работы с iPad, планшет кажется менее надёжным, что плохо отразится на самой Apple и iOS.

Всё становится ещё хуже, если подумать, насколько часто доступ в интернет затруднён или невозможен:

  • Устройства, которые находятся в офлайне большую часть дня, как iPod Touch и Wi-Fi iPad
  • 3G-устройства в международном роуминге
  • Любые устройства, которые работают в сети с высокими тарифами на передачу данных или маленьким месячным лимитом (типичный сценарий за пределами США)
  • Устройства в удалённых районах, где даже самый лучший «широкополосный» доступ работает ужасно и невозможно быстро скачать пару сотен мегабайт
  • Устройства, которые через несколько минут покинут зону Wi-Fi, и тут владелец осознаёт, что его контент удалён, но он опаздывает на работу, или у него дети попали под ливень на футбольном поле, или собака уже не может терпеть — в общем, нужно убегать прямо сейчас

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

Когда пользователь сохраняет статью в Instapaper, скачивает книгу в iBooks или подкаст в Instacast, он ожидает, что контент будет доступен при следующем запуске программы. Даже если технически возможно повторное скачивание, человек рассматривает этот контент как свои файлы — он лично положил их сюда и ему решать, когда и нужно ли их удалять.

Когда программа очистки всё стирает, выглядит, словно приложение удалило свои данные. И пользователь даже не знает, что это функция iOS 5 — он вполне логично винит разработчиков приложений. Хотя это не наша вина, это определённо станет нашей проблемой.

Очевидно, должно быть место для хранения файлов, каким был Caches до iOS 5: без резервного копирования на iTunes или iCloud, без синхронизации. Там файлы будут в неприкосновенности, пока саму программу не удалят с устройства.

Автор текста — Марко Армент, автор программы Instapaper.
Tags:
Hubs:
+32
Comments21

Articles