Приложение СПС «Право.ru» для iOS — сложности разработки и пути их решения

в 8:49, , рубрики: ios development, ipad, iphone, Блог компании Parcsis/Turbomilk, Блог компании Pravo.ru, закон, кодекс, право, приложение, метки: , , , , , ,

В мае 2010 года мы выпустили первый мобильный клиент справочно-правовой системы «Право.ru» для устройств на платформе iOS. На тот момент это было первое приложение, предоставляющее доступ к нормативным актам и иным официальным документам РФ. В декабре 2010 появилось приложение для iPad. Так и сегодня СПС «Право.ru» для iOS является лидером по количеству установок среди справочно-правовых систем. sofbix рассказал историю создания приложения, описал проблемы, с которыми столкнулся, и пути их решения.

Разработка

В процессе реализации СПС «Право.ru» для iOS мы столкнулись с некоторыми сложностями. Первая была в том, что СПС представлена большой базой документов, хранение которых на устройстве затруднительно. Может оказаться так, что на устройстве недостаточно места. При этом операционная система освобождает ресурсы приложений (в том числе и нашего) преимущественно за счет очистки кеша. Однако, документы, обновленные с веба, должны сохраняться в памяти мобильного устройства. И мы нашли оптимальное решение, при котором открытие таких документов происходит из закешированных данных, однако загруженные с веба документы будут гарантированно сохранены на устройстве без потерь при чистки кеша.

В чем же секрет? Как можно почистить кеш и при этом не потерять документы? Ответ в резервном копировании. Дело в том, что после каждого апдейта документов производится их автоматическое сохранение в zip файл (который «сжимает» текстовые данные до 10 раз). Zip сохраняется, и когда кеш будет очищен и понадобятся документы, хранимые локально, будет запущен механизм восстановления документов. Такая гибкая система позволяет оставлять данные на устройстве в сохранности, не захламля диск устройства.

Для реализации сохранения в zip были опробованы различные обертки libz.dylib. Основным недостатком была работа через память без потокового сохранения. Нам не подошли они из-за большого размера выходного zip файла. СПС падала по причине быстрой «исчерпаемости» памяти. Пришлось взять библиотеку ZipArchive и реализовать в ней потоковое сохранение самостоятельно. Кроме того, мы добавили визуализацию прогресса выполнения сохранения через делегирование событий. Код можно взять тут.

До прошлого года приложение СПС для iOS работало медленно с сетью. Это было заметно при открытие документов с сервера или при загрузке обновлений. Нам удалось увеличить скорость в несколько раз, при том что требования к памяти наоборот сократились. Протокол работы с веб-сервисами при этом остался неизменен, мы по-прежнему используем JSON, но перешли на другую библиотеку его парсинга.

Всевозможные библиотеки сравниваются тут. Внедрение новой библиотеки JSONKit взамен старой SBJSON не составила никакого труда, потому что разработчики использовали шаблоны проектирования. Для того чтобы сделать программу независимой от используемых библиотек, мы использовали паттерн проектирования «Посредник» (Proxy). Его назначение в том, что он инкапсулирет в себе логику преобразования данных вообще с любого протокола, который задействован в веб-сервисе. А значит имеется возможность перейти на экономичный Protobuf, причем практически так же безболезненно.

Еще один паттерн проектирования, обеспечивший масштабируемость СПС — Композитор (Compositor). На его основе мы написали механизм кеширования. Далее, предоставляя тот или иной наследник абстрактного класса кеширования (на данный момент у нас 8 реализаций) поставщику данных, мы могли получить тот или иной эффект. Например, документы отправляются в вытесняющую очередь хранилища и через 1 день становятся недействительными. Однако, если у пользователя нет возможности получить более свежие данные (отсутствует интернет-соединение), он благополучно получит их из недействительного кеша. Таким образом разработчики сделали гибкий механизм, позволяющий менять концепцию кеширования как у всего приложения, так и у отдельных частей в целом.

Основные возможности приложения на сегодня:

Региональное законодательство

Приложение СПС «Право.ru» для iOS — сложности разработки и пути их решения
В результатах поиска можно указать регионы, чьи документы вас интересуют.

Быстрая навигация

Приложение СПС «Право.ru» для iOS — сложности разработки и пути их решения
Теперь по свайпу на результате поиска сразу открывается та часть документа, где встречается поисковой запрос. При этом приложение выделяет искомый текст.

Судебная практика

Приложение СПС «Право.ru» для iOS — сложности разработки и пути их решения
Укажите норму права, перейдите к связанным документам и отметьте интересующие инстанции и суды.

Редакция документа

Приложение СПС «Право.ru» для iOS — сложности разработки и пути их решения
С помощью приложения все существующие редакции у вас под рукой. При работе с текстом документа откройте список редакций и выберите нужную.

Мы продолжаем поддерживать и развивать приложение, учитывая при этом пожелания и советы пользователей. Будем рады ответить на вопросы!

Автор: glazkova

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js