12 заметок с тегом ios

и как его исправить

Apple Watch — невероятно крутой фитнес-трекер. Пульс, калории, пройденная дистанция — всё это считается само и синхронизируется с айфоном. А два механизма — ежедневные цели и шаринг активности с друзьями — грамотно мотивируют не халтурить.

С часами стало комфортнее тренироваться. Раньше, чтобы выйти на пробежку, одновременно послушать музыку и потом просмотреть итоги тренировки, нужно было брать телефон и втыкать в него наушники. Но тренироваться с современными телефонами и проводами неудобно, к тому же невозможно следить за пульсом без дополнительных устройств. Теперь для полного счастья достаточно взять часы с беспроводными наушниками.

Но есть один косяк — из коробки часы поддерживают лишь небольшой набор тренировок:

  • ходьба,
  • бег,
  • велосипед,
  • плавание,
  • эллиптический тренажёр,
  • гребля,
  • степпер,
  • «остальное» (Other).

Игровых видов спорта нет совсем. Я занимаюсь спортом шесть—семь раз в неделю, и ни одной из моих тренировок на часах нет:

  • теннис,
  • баскетбол,
  • традиционная силовая,
  • функциональная,
  • кросс-фит.

Чтобы всё это трекать, я поначалу использовал категорию «остальное». Но калории в этом режиме считаются неправильно, так как используется тот же принцип подсчёта, что и при быстрой ходьбе.

В АппСторе оказалось много приложений для разных видов спорта, и это натолкнуло меня на мысль порыться в документации HealthKit — фрэймворка для работы с тренировками и данными о здоровье. Оказалось, что в SDK доступен трекинг 70 (!) видов спорта.

Правда, почти все эти приложения какие-то кривоватые

В итоге я решил написать минималистичное watchOS-приложение, в котором были бы только нужные мне тренировки с возможностью легко добавить любую другую. Приложение получило кодовое имя «Just Do It», потому что там нет даже целей (мне и не нужно). Есть только выбор спорта и вывод основных показателей в процессе тренировки — время, калории, текущий и максимальный пульс.

Ну и главное — я хотел научиться писать приложения для часов. В итоге получилось вот что:

В комплекте идёт iOS-приложение, через которое можно стартануть тренировку на часах.

Исходный код лежит на Гитхабе.

Если вы пользуетесь часами и хотите добавить свой вид спорта, а также у вас есть Мак, Xcode и базовые навыки программирования, то это делается с помощью нескольких строчек кода в WorkoutConfig.swift.

Занимайтесь спортом! :-)

16 ноября 2015, 18:38

iPhone 4S

Всё, даже самое лучшее, когда-то подходит к концу. Три с половиной года я пользовался Айфоном четыре-эс, и это, несомненно, был лучший телефон в моей жизни.

Айфону было нелегко, но интересно. Он проехал со мной по 13 странам, падал на лондонский асфальт, зарывался в каталонский песок, мёрз в красноглинском снегу. Пробовал «Гиннесс» на вкус, конкурировал с ключами в кармане, проводил ночь в машине на морозе. Превращал яркие моменты моей жизни в мегапиксели, играл любимую музыку и безжалостно использовался, как машина для разработки. И ни разу не подвёл.

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

Но буду помнить я о своём 4S не потому, что он крут технически. Главное в другом — именно этот Айфон привёл меня в iOS-разработку, то есть сделал тем, кто я есть. Помню ту самую презентацию, первую без Джобса. Именно тогда я и захотел купить Айфон вместо своей Nokia N97 mini. Потом были курсы «Меркури» и громкие «вау» от Эпла/Мака/Икскода/Айфона. А дальше долгожданный Айфон и первые приложения на нём. Самый кайф — было осознать то, что теперь я сам могу делать крутые штуки для другой крутой штуки.

Теперь шанс стать лучшим телефоном в моей жизни предоставляется 6s.

apple   ios   iphone
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. В любом случае, согласно документации, этот метод не должен вызываться. Если вдруг у вас тоже начал тормозить скроллинг, попробуйте этот фикс :-)

Ctrl + ↓ Ранее