[5] Дневник разработки AppleInsider.ru для iOS 7

92

AppleInsider.ru для iOS 7

Мы продолжаем рассказывать вам о том, как продвигается процесс разработки обновленной версии приложения AppleInsider.ru под iOS 7. Повествование ведет лично генеральный директор студии Unreal Mojo Слава Карпенко, поэтому интересное и информативное чтиво гарантировано. Сегодня мы предлагаем вам очередную запись этого дневника.

День 6

Или, скорее «шестой эпизод»

В прошлый раз остановился на том, что более-менее сделал общую работу с таблицей новостей, даже переписав процесс отображения пузырька с количеством комментариев. На следующий день обнаружил, что слегка облажался с подсчётом ширины этого самого пузырька — в формуле поставил плюс вместо минуса, в результате, чем «шире» было число, тем уже получался пузырёк. Исправил.

Далее подключил нотификации об изменениях состояния объектов, чтобы таблица должным образом обновлялась, когда, например, ты читаешь статью, или когда меняется количество комментариев к статье.

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

Ранее (в AppleInsider.ru 1.x и 2.x) приложение запрашивало у сервера список последних опубликованных статей со всеми атрибутами (название, автор, дата, кол-во комментариев, ссылка на статью, ссылка на картинку и туча ещё всякого разного). Помимо того, что это жрало лишний трафик для пользователей, оно ещё и генерировало много избыточного трафика на сервере. Потому в версии 3 приложения было решено делать по-другому: теперь оно запрашивает только список идентификаторов статей с датой публикации, а затем, только если в базе нет остальных данных для каждой из требуемых статей, спрашивает сервер о данных для конкретных необходимых статей. Чтобы минимизировать нагрузку на сервер (а мы помним, что приложением пользуются десятки тысяч людей ежедневно), такие запросы также группируются приложением и высылаются пакетно: все запросы о получении информации о статье за прошедшую секунду собираются в кучу, и отправляются на сервер.

Исходя из этих соображений, написал систему, которая бы накапливала запросы и запрашивала сервер. Поскольку разные модули приложения теоретически могут запрашивать разные куски информации о статье, нужно было еще реализовать логику группирования запросов по типам информации:

typedef enum { kPostInfo_Title = (1L << 1), kPostInfo_CommentCount = (1L << 2), kPostInfo_PostBody = (1L << 3), kPostInfo_Thumbnail = (1L << 4), kPostInfo_Slug = (1L << 5), kPostInfo_URL = (1L << 6), kPostInfo_Date = (1L << 7), kPostInfo_Metadata = (kPostInfo_Title | kPostInfo_CommentCount | kPostInfo_Thumbnail | kPostInfo_Slug | kPostInfo_URL | kPostInfo_Date)
} PostInfoMask;

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

AppleInsider.ru для iOS 7

Для хранения картинок было решено использовать FastImageCache от Path. Решение было принято по многим причинам: хранить все скачанные картинки на диске в виде отдельных .jpg файлов, как было сделано в предыдущих версиях приложения — весьма дорого с точки зрения производительности, в результате, когда пользователь мотал вверх-вниз список новостей, на каждую ячейку приходилось загружать файл с диска, распаковывать его (он же JPEG) и только после этого рисовать. Конечно, ряд оптимизаций был и в прошлых версиях, но то, что предлагают ребята из Path, мне в целом понравилось больше.

Оставлю за скобками то, что я вообще очень хорошо отношусь к Path, так как их сооснователь Dustin Mierau когда-то начинал свою карьеру программиста в моей первой компании, помогая в разработке плеера MacAmp.

Где-то за час интегрировал библиотеку в код, заодно сразу написав код, который бы через UIBezierPath вырезал полученную картинку в кружочек, как в дизайне. Потом подключил код к сетевому менеджеру, который запрашивает картинки через вторую NSURLSession (с низким приоритетом выполнения) и всё магическим образом заработало:

AppleInsider.ru для iOS 7

Попутно нашел проблему — в заголовках статей встречаются HTML entities типа « — как на скриншоте выше в статье про «Генеральный директор». Добавил код, который транслирует их в обычный UTF-8 (при помощи куска GoogleToolboxMac).

Заодно обнаружил, что на сервере все «маленькие» картинки для статей хранятся в виде не совсем уж маленьких — зачастую размером под 100 килобайт и где-то 650 пикселей в ширину (тогда как приложению нужно максимум 140). Приложение, конечно, после скачивания картинку обрезает в нужный вид, но лишний траффик вроде как тоже не нужен. Посоветовался с ребятами, кто занимается для AppleInsider.ru серверной стороной, они постараются ужимать такие картинки на сервере в будущем. Отрадно то, что переделывать приложение для этого будет не нужно ☺

На этом работы по созданию списка новостей можно считать более-менее завершёнными. Для него останется сделать:

  1. Поиск — этим я займусь позже
  2. Шаринг в соцсети — этим я тоже займусь позже, после того, как сделаю контроллер для просмотра текста новости, которому будет нужен тот же самый шаринг
  3. Переключатель сверху Новости — Избранное — Категории. Его сделаю сразу после просмотра текста новости
  4. Реализовать показ рекламных баннеров.

Пришло время для реализации следующего контроллера, который непосредственно показывает новость:

AppleInsider.ru для iOS 7

Как и в предыдущих версиях, это, по сути, обёртка над UIWebView, так как текст статьи нам приходит в HTML. От обычного браузера контроллер отличается весьма сложной логикой работы с содержимым статьи.

Из старой версии взял код, который вставляет текст статьи в шаблон HTML, который в дальнейшем показывается в web view. Конечно, сам HTML и стили пришлось подточить, чтобы стало похоже на то, что нарисовал дизайнер (кое-где, он, конечно, нафантазировал такого, что я сделать не могу, но без этого никогда не обходится, потому всегда нужно искать разумные компромиссы или игнорировать мега-идеи ;).

Когда пользователь при чтении статьи касается картинки или ссылки, то включается умеренно разветвлённый алгоритм проверок на то, что же нужно сделать:

  • Если это картинка, то нужно показать её в отдельном контроллере на весь экран;
  • Если это ссылка на некую веб-страницу, то нужно понять, внешняя это ссылка или ссылка на статью на AppleInsider.ru;
  • Если ссылка внешняя, то посмотреть, допускается ли её открывать без вопросов пользователю о том, хочет ли он перейти по ней (там есть набор неких правил, по которым понятно, спрашивать или не спрашивать);
  • Если ссылка внутренняя, то посмотреть, является ли это ссылкой на статью с «буквенным» названием (например, //appleinsider.ru/sluxi/sluxi-evad3rs-prodalis-kitajcam-za-million-dollarov.html — в ней такой «буквенной» частью будет «sluxi-evad3rs-prodalis-kitajcam-za-million-dollarov»). Сделать поиск по собственной базе в поисках этого тега для статей (вдруг её не надо загружать). Если ничего не нашлось, то спросить сервер о том, какой идентификатор принадлежит статье с таким названием, после чего загрузить данные и показать новый контроллер с этой статьей;
  • Если ссылка внутренняя, но вида //appleinsider.ru/?p=241842, тогда получить из ссылки идентификатор (241842), далее поискать его в собственной базе, если нет, то спросить о ней сервер, далее загрузить данные и тоже показать статью.

Собрал, частично переписал код и вуаля!

AppleInsider.ru для iOS 7 AppleInsider.ru для iOS 7

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

< Предыдущая запись

92 комментария

  1. 0

    Cool (отправлено из приложения AppleInsider.ru)

  2. 0
    nick.perevedencev

    Мне не нравятся цвета… Просто СЛИШКОМ зелено сделали, а так все остальное средне… (отправлено из приложения AppleInsider.ru)

  3. 0

    Судя по количеству букв, готовится приложение, которое заменит все существующие в апсторе (отправлено из приложения AppleInsider.ru)

  4. 0

    Очешуенно, скорее бы!) (отправлено из приложения AppleInsider.ru)

  5. 0

    Много белого! Темных цветов чуть-чуть добавьте! А то как то слишком ярко смотрится, особенно на черных устройствах… (отправлено из приложения AppleInsider.ru)

  6. 0

    Все отлично. (отправлено из приложения AppleInsider.ru)

  7. 0

    Уже пол года как вышла iOS 7 а вы только начали переделывать приложение… (отправлено из приложения AppleInsider.ru)

  8. 0

    Огонь, да и только!

  9. 0

    с такими темпами это приложение мы увидим года через два(( (отправлено из приложения AppleInsider.ru)

    • 0

      pherum, Согласен.. Забавно, что отрисовано оно было уже давно.. Но темпы разработки угнетают.. Мне непонятны шрифты на скринах, и выбор цветовой гаммы.. Не знаю.. Есть приложения, которые очень красиво и уместно используют паралакс.. Есть, где используется куча разных переходов, которые являются фишкой 7-ки. Да уберите вы кнопку назад. Свайп назад и все. Это и красиво и удобно. Не впечатляет.. Я к чему это.. Просто всегда ждешь от таких статей( раз их вообще взялись писать) чего-то нового и необычного.. Ну а тут получается дизайнеры уже все отрисовали, и статьи показывают, как это накладывают.. Ну хорошо.. Краем уха будем знать того разработчика, который запустит к марту(если повезет) старое приложение в новой оберточке) Сделаем картинки статьи круглыми — это же главная фишка оси, да?:) (отправлено из приложения AppleInsider.ru)

  10. 0

    Извините, а о чем эта статья? О доходах той или иной компании? Мне, как потребителю абсолютно не важны цифры их прибыли, меня интересует качество того или иного продукта. И я, (лично я как юзер) выбираю PC на Винде, а IOS меня интересует только как идеальное сочетание с планшетом или смартфоном. Не более. (Я не работаю на этих устройствах, я обычный пользователь). (отправлено из приложения AppleInsider.ru)

    • 0
      vladislav735

      Dimon.f, Ты это вообще к чему? (отправлено из приложения AppleInsider.ru)

    • 0

      Dimon.f, Высказался как типичный ПиИшный пользователь- не в тему)))

    • 0

      Dimon.f, Dimon.f что ты там увидел про доходы компании? И вообще твой комент не чему. Если тебя это не интересует, зачем читаешь? Ты обычный пользователь, а что есть какие то еще пользователи? В этой статье говорится как разрабатывают приложение под IOS 7, но не про какие нибудь «доходы» . (отправлено из приложения AppleInsider.ru)

  11. 0

    Ребята стараются не для тебя (отправлено из приложения AppleInsider.ru)

  12. 0

    Недалек тот день, когда айфоны с ios6 будут на аукционах продавать, помяните мое слово! И вот тогда — то мы с videooperatorom капусты рубанем;) (отправлено из приложения AppleInsider.ru)

  13. 0

    Вы наверное будите делать адаптацию ещё год!!!За чем писать,то что вы просто говоря ту……..те!)Извините за прямолинейность но так оно и есть,так что лучше не пишете,как ваша работа продвигается,а просто дайте результат!! (отправлено из приложения AppleInsider.ru)

    • 0

      hrundel11, Этот сайт Ренату принадлежит, он тут Господь бог, и он решает, когда обновлять! (отправлено из приложения AppleInsider.ru)

      • 0

        impulse, Этот сайт существует благодаря читателям и каждый из них имеет право на мнение и он точно не Господь бог!)) (отправлено из приложения AppleInsider.ru)

        • 0

          hrundel11, Мнение — да, но не указания, что делать! Демократии тут нет. (отправлено из приложения AppleInsider.ru)

          • 0

            impulse, Демократия и имеет смысл того,что можно говорить то что хочешь и в любой форме,а уж другое дело,слушать и воспринимать или нет!! (отправлено из приложения AppleInsider.ru)

            • 0

              hrundel11, Ну вот как бы вы поступили если на вашем сайте какой-то тролль будет указывать что вам делать, я бы в баню отправил грехи смывать! (отправлено из приложения AppleInsider.ru)

              • 0

                impulse, Я бы не позволил бы выпускать пустые статьи,которые могли скомпрометировать такие высказывания в мой адрес!!А я высказал своё мнение и считаю,что объективно,потому как оптимизация многих приложения была даже ещё без релиза ios 7! (отправлено из приложения AppleInsider.ru)

                • 0

                  hrundel11, А Ренат и иже с ним, что, молиться должны на ios7?) это их дело, когда выпускать, и выпускать ли вообще обновление! Эппл их предупредило, что надо обновить, но точных сроков не назвало. (отправлено из приложения AppleInsider.ru)

    • 0

      hrundel11, Если не нравится читать про процесс разработки — не читайте их, ждите анонса приложения… Мне вот параллельно когда выйдет приложение, мне интереснее о процессе разработки почитать.

    • 0

      hrundel11, +
      Такое ощущение, что анриал мохо работают бесплатно. (отправлено из приложения AppleInsider.ru)

  14. 0
    ilya.kachalkin

    Давайте, выпускайте к выходу 7.1, а не то вы позже всех обновляете. Нынешние ваши приложения выглядят на семерке убого и как с другой планеты. Не ждите до восьмерки — может, в iOS 8 Айв все круглым сделает, и снова переделывать:) (отправлено из приложения AppleInsider.ru)

  15. 0
    fred.khidirov

    как я могу обновить новая версия ? 🙁 (отправлено из приложения AppleInsider.ru)

  16. 0

    Наверное, можно еще включить переносы слов в стилях страниц с текстами. У вас пользователи русскоязычные и настройки ОС думаю, тоже, русские. Браузер сможет корректно переносить, читать станет легче. Спасибо (отправлено из приложения AppleInsider.ru)

  17. 0

    До недавнего времени считал, что программирование сводится к написанию кода. А это — путь решения проблем, с помощью генерирования интересных идей и алгоритмов. Как говориться: «Думай иначе!». Клёвые статьи, спасибо!

  18. 0

    Непонятно зачем сделали картинки к новостям в круге. Изображение в круге вроде как использовании в системе исключительно для контактов или картинок групп например как в вк. Но к новостям? (отправлено из приложения AppleInsider.ru)

  19. 0

    Норм. Жду обновление.

  20. 0

    Еще уведомления с одной цифрой какие-то овальные, а не круглые, как в системе. (отправлено из приложения AppleInsider.ru)

  21. 0
    tovgeneralov

    Сделайте пожалуйста НОЧНОЙ РЕЖИМ как в Айпланете, так как ночью читать на ярчайше белом фоне ужоснах как неудобно.

    Спасибо. 🙂 (отправлено из приложения AppleInsider.ru)

  22. 0
    Selindger23

    Я бы сказал как это уже заи…. Но не буду. Давайте быстрее. Денег дайте что ли разрабу. (отправлено из приложения AppleInsider.ru)

  23. 0
    yaluninegor

    Мне нравится приложение, все в одном стиле, красиво. Но. Почему так долго? Статьи выходят непонятно как и такое чувство, что вы пилите приложение когда совершенно делать нечего. Раз в неделю. (отправлено из приложения AppleInsider.ru)

  24. 0

    Мда, из обычного обновления устроили сериал какойто (отправлено из приложения AppleInsider.ru)

    • 0
      patsimmobilia

      2322202, Если бы я был программистом IGuides, стырил бы все нововведения и устроил бы более ранний релиз обновления, а потом доказывай, кто у кого спер!))) Одно но, если бы у бабки был х.й, то она была бы дедом))) (отправлено из приложения AppleInsider.ru)

  25. 0

    Странно как то и смешно:)господа недовольные вы за это приложение деньги платили?хоть раз?хоть рубль?хоть цент? Ответ один, нет! Так что требовать чего то от кого то когда сами только потреблять готовы глупо и как минимум не честно по отношению к тем кто создаёт! Кто из вас будет строить дом для множества человек за бесплатно? И при том что все эти «будущие жильцы» этого самого дома будут необоснованно вас подгонять, говорить что вы неправы что кирпичи белого а не красного цвета и то, что вы очень долго делаете и не могли бы вы быстрее,вот вы скажите кто из вас так бы поступил? (отправлено из приложения AppleInsider.ru)

  26. 0

    Шрифт очень не нравится. И приложение слишком белое, реально хочется чего-то тёмного. (отправлено из приложения AppleInsider.ru)

  27. 0

    +100000 (отправлено из приложения AppleInsider.ru)

  28. 0
    kirill.fomin58

    Ребят как дизайнер скажу пару слов, приложение по скриншотам выглядит эстетично и красиво, зеленый цвет на мой взгляд очень вписывается, по критике — только иконки социальных сетей прямо залазиют друг на друга, чуть чуть меньше их и ок. Ну и Головач уберите и не Иван Иванов тоже, ок 😉 (отправлено из приложения AppleInsider.ru)

  29. 0

    Господа, все хорошо, но не больно ли долго вы делаете свое адаптированное приложение под iOS7, вышедшее аж летом?! Понимаю, что это кропотливый труд, но скалывается впечатление, что больше вы пишите бессмысленный текст, чем делаете… Не так ли?.. Больше дела, блин! (понимаю, что скажите » тогда не читай, если не интересно»). Но все же, какое-то балабольство, а результата нет… Бред… (отправлено из приложения AppleInsider.ru)

    • 0

      stepig, iOS 7 летом вышла? Я что-то путаю или релиз в 20-х числах сентября состоялся?
      А по поводу комментария в целом… да, ты прав, особенно в конце — ты какой-то бред написал. (отправлено из приложения AppleInsider.ru)

  30. 0
    farwaterrec

    Программисты, ска, умные люди! Очень умные! (отправлено из приложения AppleInsider.ru)

  31. 0
    Эндрю.Фил

    Ну что-то вы уж очень долго делаете… Уже устал ждать ))) (отправлено из приложения AppleInsider.ru)

  32. 0

    Только у меня последняя версия приложения Appleinsider дико виснет? iPhone 5S iOS 7.0.4. (отправлено из приложения AppleInsider.ru)

  33. 0
    memberofnature

    Судя по статьям, делают iOS заново! Не тупите, скоро полгода с выхода семёрки. (отправлено из приложения AppleInsider.ru)

  34. 0

    Вместо «typedef enum» лучше пользоваться конструкцией «typedef NS_ENUM(…)», для использования типизации перечиcляемых типов в C++11 и сохранения обратной совместимости.

  35. 0

    «Где-то за час интегрировал библиотеку в код, заодно сразу написав код, который бы через UIBezierPath вырезал полученную картинку в кружочек, как в дизайне»
    Зачем обрезать картинки ? Можно же воспользоваться CAShapeLayer ч качестве маски у UIMageView’шного CALayer. Так будет тратиться время на урезание и при отрисовке на блэндинг слоёв, а так маской всё будет обрезаться и отобразаться со скоростью непрозрачного слоя.

  36. 0

    «Из старой версии взял код, который вставляет текст статьи в шаблон HTML, который в дальнейшем показывается в web view.»
    Это вообще ленивое решение, оптимизируете везде всё и тут на тебе большую ложку дёгтя. NSAttributedText вместе с Text Kit справились бы намного лучше.

  37. 0

    Огромное спасибо за статью!

    Интересует такой вопрос: на кого данная статья рассчитана и весь цикл статей в целом?

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

    На начинающих разработчиков или людей которые хотят ими стать? Тогда слишком мало технических деталей и почерпнуть для себя что-то кроме «Слава крутой директор! Я хочу быть таким же!» крайне сложно

    Или может быть на конечных пользователей приложения AppleInsider? Судя по большинству комментов вида «о, новая версия, хочу!» или «шрифты — отстой, старые были лучше!» или «iOS 7 говно, останусь на iOS 6» — большинство пользователей сайта не разработчики, но тогда какой смысл писать про всю эту iOS требуху? Достаточно было выложить картинки того, как будет выглядеть новая версия и этим ограничиться.

    Заранее спасибо за ответ!

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

  38. 0

    Я надеюсь проблема с multithread решится в новой версии. (отправлено из приложения AppleInsider.ru)

  39. 0

    Скажите, это только у меня сейчас приложение стало долго «размораживаться» после его повторного запуска? (отправлено из приложения AppleInsider.ru)

  40. 0

    Если говорить о новом дизайне, то первые разговоры начались еще пол года назад. За 2-3 месяца 1 версию уже можно было запустить для обкатки. А так…. Сколько можно показывать трейлеров??? Покажите уже фильм! Или плохо финансируете разработчика? (отправлено из приложения AppleInsider.ru)

  41. 0

    При всём уважении, но те же iGuides сделали ре-дизайн ещё до релиза iOS 7. А ваше приложение до сих пор допотопное. И кстати очень зря вы запретили публиковать ваши статьи в Applifto. С таким дизайном и клавиатурой, просто не хочется запускать ваше приложение. (отправлено из приложения AppleInsider.ru)

  42. 0

    А что с разработкой? (отправлено из приложения AppleInsider.ru)

  43. 0
    fred.khidirov

    http://imgs.su/tmp/2014-02-06/1391704815-309.jpg у меня не получается обновит новый версию Appleinsider.ru iOS 7 что делать. ? (отправлено из приложения AppleInsider.ru)

  44. 0
    ilya.matytsyn

    Ну и где следующий выпуск? Эта запись от 9.1.2014, сегодня уже 20.2.2014. iOS 7 вышла 18.9.2013, а беты еще раньше. Для кого они делались? Вы, ребята, нищие совсем? Может скинемся все кто сколько может, а то видимо вы рекламу размещение за еду, да? (отправлено из приложения AppleInsider.ru)

Авторизуйтесь Чтобы оставить комментарий