10 заметок с тегом apple

Ctrl + ↑ Позднее
15 октября 2015, 20:32

Новая Прибывалка для Самары

Самарчане, встречайте новую Прибывалку для iOS! Прибывалка показывает время прибытия автобусов, трамваев и троллейбусов в Самаре.

Несколько лет назад ребята из Самара-Информспутника запустили сервисы информирования о самарском транспорте. Одним из таких сервисов стала Прибывалка. Самое клёвое в их сервере — то, что оценивается реальная ситуация на дорогах: положение транспорта, скорость потока, пробки и аварии. Поэтому получаются точные прогнозы.

Я транспортом пользуюсь редко, но осенью 2013 года мне пришлось один день передвигаться без машины. Я стоял на остановке, а нужного трамвая всё не было, и я вспомнил, что существует Прибывалка для айфонов. Решил скачать и потестить. Помню, что тогда меня поразили две вещи: какой же полезный это сервис и как же неудобно всё сделано. Усугублялось всё тем, что приложение было написано на Adobe AIR — кроссплатформенном движке, который добавляет тормозов и не способствует хорошему дизайну приложений. Прогноз сбылся, я сел в свой трамвай и твитнул о том, что неплохо бы разработчикам поработать над дизайном. Сработала магия Твиттера — твит увидел Александр Сергеев и предложил сделать свою версию:



Идея засела в голове. Александр дал доступ к API, а я написал простенький сервис получения прогнозов. Я долго пытался понять, как именно сделать приложение удобнее, и нарисовал пару экранов, но дальше дело не продвинулось. В конце 2014 я рассказал Жене Демьяненко, что хотел бы сделать такое приложение, и через пару дней он прислал первые мокапы. «А чё, так можно было?» — подумал сразу я, потому что на них удачно решалась главная проблема старой Прибывалки — необходимость пробираться через несколько экранов, чтоб увидеть прогноз. И мы начали вместе работать в свободное время над новой версией. Весной я понял, что одному с кодом справляться тяжело — и в самый подходящий момент на помощь пришёл Вася Скарлухин. А потом Лёша Кузнецов сделал промостраничку.

Новая Прибывалка делает всё то же, что и старая, но гораздо лучше:

  • Показывает прогнозы прибытия транспорта. Прогнозы для ближайших остановок моментально выводятся на главный экран.
  • Помогает найти остановки поблизости. Компас, расстояние и карта подсказывают, где находится остановка и сколько до неё идти.
  • Знает ситуацию на всех остановках города. Находит любую из 1437 остановок Самары по названию или улице.

А ещё она красивая:

Новая Прибывалка получает номер версии Два-Ноль и выходит, как обновление старого приложения. Поддерживаются версии iOS от 7.0 и выше. У тех, кто предпочитает уютную скеоморфную iOS 6, продолжит работать старая версия. Если у вас не iOS, не беда — Прибывалка есть под все основные платформы. Существующие приложения перечислены на сайте транспортного оператора Самары.

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

Скачать в App Store


И рассказывайте о Прибывалке друзьям:

Вчера обновился до iOS 8.3 и заметил, что одно из моих приложений стало ужасно тормозить при скроллинге UICollectionView. Лэйаут там наподобие CoverFlow, в ячейках используется Auto Layout, но на iOS 8.2 скроллинг работал быстро.

Запустил профайлер. Оказалось, что в самом тяжёлом стэке вызовов целых 20% времени съедает метод [UICollectionReusableView _preferredLayoutAttributesFittingAttributes:]:

Начал искать, были ли у кого похожие проблемы, и наткнулся на обсуждение в Гитхабе. У них тоже тормозил скроллинг, причём на более ранних версиях iOS, и кто-то предложил добавить такой код в дочерний класс UICollectionViewCell:

- (UICollectionViewLayoutAttributes *)preferredLayoutAttributesFittingAttributes:(UICollectionViewLayoutAttributes *)layoutAttributes {
    return layoutAttributes;
}

Вставил этот код в свою ячейку, и скроллинг снова заработал быстро. Полез смотреть в документацию. Про метод preferredLayoutAttributesFittingAttributes: написано:

The default implementation of this method adjusts the size values to accommodate changes made by a self-sizing cell.

Но мне не нужен был self-sizing. Стал искать дальше, почему начал вызываться метод, пересчитывающий атрибуты лэйаута. В UICollectionViewFlowLayout.h нашёл поле estimatedItemSize:

// defaults to CGSizeZero - setting a non-zero size enables cells 
// that self-size via -preferredLayoutAttributesFittingAttributes:
@property (nonatomic) CGSize estimatedItemSize NS_AVAILABLE_IOS(8_0);

Проверил — estimatedItemSize у меня действительно равен нулю, но preferredLayoutAttributesFittingAttributes: всё равно дёргается, причём реализация по умолчанию чаще всего возвращает атрибуты, отличающиеся на несколько десятых от переданных в аргументе.

Получается, что в iOS 8.3 ребята из Apple изменили логику self-sizing для ячеек UICollectionView. В любом случае, согласно документации, этот метод не должен вызываться. Если вдруг у вас тоже начал тормозить скроллинг, попробуйте этот фикс :-)

11 сентября 2013, 17:17

Об iPhone 5c и iPhone 5s

Вчера ребята из Apple показали новые айфоны. На этот раз сбылись абсолютно все прогнозы и подтвердились многомесячные слухи — одним словом, ничего неожиданного мы и не увидели. Смотрел я презентацию с одним вопросом в голове: «А захочу ли я этот новый айфон?»

Но обо всём по порядку. Сначала — Colorful iPhone 5c.

По начинке почти ничем не отличается от обыкновенной пятёрки. Исполнен в ярких пластиковых корпусах. Выглядит весело и игриво. Стал толще и тяжелее. Предлагаются разноцветные чехлы в дырочку, позволяющие сделать внушительное количество цветовых сочетаний. Ребята из The Verge говорят, что пластик выглядит и ощущается на удивление хорошо. Цена — не сказать, что бюджетная — $549 за младшую модель без контракта.


Далее флагман — iPhone 5s.

Наконец-то LTE для России. Первый 64-битный ARM-процессор со специальным Motion-сопроцессором. Новая камера с улучшенной вспышкой. Гвоздь программы — сканер отпечатков пальцев (да, прощай, Passcode!). 128 GB не будет. Доступен в трёх цветах — добавился золотой. Цены стартуют с $649.

Отвечу на свой же вопрос: «Не захочу». Ни тот, ни другой. Не потому что они мне не понравились — потому что 4s до сих пор устраивает во всём, а новые модели не обладают какими-то must-have-фичами. Хотя я понимаю, кто и в каких странах захочет. Но в то же время не понимаю, кто захочет iPhone 5c, например, в России, если цена без контракта составляет $549, при том что цена флагмана — $649. Пока думаю, что единственная причина, по которой я захочу сменить 4s на новый телефон — это постепенно слабеющая батарейка.

Все картинки — с официального сайта Apple.

apple   ios   iphone

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

Сначала я хотел написать о технических деталях, например, более сложном создании UI, который в Android верстается руками через xml-файлы. Или о неудобном подцеплении обработчиков кнопок. Или о механизмах персистентности. Или о сложной работе с анимацией... Потом я понял, что некоторые вещи в Android реально круты, например, Intents или Content Providers. Или адаптеры и курсоры для таблиц. Далее пришло понимание, что с технической точки зрения обе платформы имеют свои преимущества и недостатки, и кому-то, скорее всего, ближе подход Google, а кому-то, как мне, всё равно решения от Apple кажутся более логичными.

Другими словами, вроде всё хорошо, но почему-то всё равно остаётся ощущение, что разрабатывать под Android тяжелее и не так увлекательно. Разгадка кроется на поверхности — во всём виноваты инструменты разработки.

Первое, что вызывает недоумение (и культурный шок пользователя OS X) — феерическая корявость Eclipse. Xcode же, наоборот, поражает своей мощью, простотой и логичностью. Visual Studio может поспорить с ним в плане продвинутости, но, на мой взгляд, нет инструмента удобнее, чем Xcode. То же самое можно сказать и про симуляторы/эмуляторы, документацию, примеры, процесс отладки, настройки проекта, профилирование — во всех этих компонентах Apple далеко впереди.

Надеюсь, что Google исправит ситуацию, тем более что уже давно обещают выпуск Android Studio на базе IntelliJ IDEA. Пока же кодинг под Android напоминает неравную борьбу с Eclipse и ADT, после которой написать что-нибудь под iPhone — сплошное удовольствие.

Ctrl + ↓ Ранее