23 Мая в офисе компании Сиклум прошло мероприятие для iOS разработчиков под сложным названием Mobile Practice Leaders: iOS gathering. Яна, PR менеджер компании, объяснила, что такие мероприятия обычно проводятся закрытыми только для сотрудников ввиду особой бизнес-модели Сиклума, и на них ребята, работающие на разных проектах обмениваются технической експертизой и наработками. Но теперь Сиклум приглашает не только на Субботние конференции ( http://news.tut.by/tv/230536.html ) но и на небольшие вечерние технические междусобойчики.

Доклады и тезисы iOS gathering Ciklum Mobile Practice Leaders:

Иван Сухинин, Mobile Enthusiast – «Установка приложения из App Store по URL»

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

Задача решается достаточно просто — на веб-странице размещен специальный JavaScript, который пытается открыть приложение через URL-схему. Если этого не произошло в течении секунды, значит приложение не установлено и можно смело отправлять пользователя на страницу установки.

После установки приложение чудестным образом проверяет как была вызвана его установка. Если его установка была вызвана описанным выше способом — приложение отображает те данные, которые изначально и планировалось. Это достигается путем открытия Safari после старта приложения, Safari отправляется на заранее подготовленную страницу (которая и вызвала установку). На этой странице, через Cookies определяется требуется отобразить какие-либо данные или нет.

Исходники доступны на https://bitbucket.org/suhinini/iosusergroup

Николай Ласица, iOS team lead @ Heidelberg Mobil – «Heildelberg Mobil: Повтороное использование кода в iOS»

Николай рассказал в двух словах о своей работе в «Heildelberg Mobil» и о самой немецкой компании – клиент компании Сиклум. Когда минская команда стартовала работу в компании Helderberg Mobil – немецкие коллеги использовали SVN и был один огромный trunk для всего. Первое, что решили сделать — все разбить на модули и не использовать SVN. Решили использовать Git.

Как же интегрировать сторонние решения в проект? Включать исходные файлы сторонних решений в проект оказалось плохой идеей, от включения статических библиотек так же отказались.

Было принято решение создать свой framework. Для этого создали кастомный Template для проекта, используя «Framework guide». Для создания framework, необходимо собрать статическую либу и положить ее в нужное место. Чтобы framework был униварсальный — нужно собрать версии для разных архитектур и склеить их. Так же, во framework можно хранить ресурсы.

Денис Лебедев, iOS dev @ SteelyEye – «Еще один способ управления сторонними библиотеками в iOS-проектах»

Денис рассказывает о CocoaPods. CocoaPods это — «Objective-C Library Manager». CocoaPods позволяет держать все сторонние компоненты библиотеки свежими. Для CocoaPods не важно, на каких репозиториях находятся эти компоненты. Так же, CocoaPods умеет хорошо разрешать зависимости между этими компонентами.

Больше можно узнать на http://cocoapods.org

Владимир Колбун, iOS Team Lead @ SteelyEye – «iOS dev в SteelyEye: технологический ряд и индустрии проектов»

Его доклад был скорее внутренний для ознакомления с работой этой команды. SteelyEye — это Британское медиа агенство. Часть менеджемента и Sales находятся в Англии. Так же в Англии есть небольшое количетсво разработчиков, но основная команда находятся в Минске.

В команде используют Git, Jira и Basecamp для работы с документами. Через команду проходит много проектов для оценки – разработчики сами занимаются оценкой проектов. Самые частые запросы клиентов это:

— создание HTML-приложений, либо гибридных приложений

— дополненная реальность

Так же, докладчик отметил, что клиенты обращают внимание на лицензии сторонних компонент, которые используются в разрабатываемом ПО.

Олег Шнитко, Mobile Architect @ Heidelberg Mobil – «PowerVR Architecture and OpenGL ES 2.0 performance tuning»

Олег рассказал об архитектуре чипа PowerVR. Этот чип используется в большинстве мобильных устройств. Далее речь пошла о том, как происходит отрисовка графики на экране. Tile accelerator разделяет экран на кусочки 16×16 и обрабатывает их параллельно.

Так же Олег рассказал, как можно оптимизировать отрисовку графики:

1. Нужно использовать профайлер. С помощью него можно найти места, которые больше всего нагружены и оптимизировать их.

2. Нужно избегать попыток чтения OpenGL-контекста.

3. Отрисовка всех объектов отдельно замедляет процесс, поэтому нужно стараться объеденять объекты отрисовки.

4. Использовать атласы текстур.

5. Размеры текстур должны быть кратными 2^n.

6. Отсекать невидимые области.

Была затронута тема хранения атрибутов шейдеров в памяти. Каждая вершина имеет параметры и координаты, нормаль к поверхности, перпендикуляр для расчета освещения, цвет либо текстурные координаты. Все атрибуты можем представить как массивы и отправить на GPU. Но есть и другой вариант — объеденить все в структуру и поместить нужные данные рядом. Бывает так, что координата и цвет меняется часто, а все остальное статическое. Поэтому статические данные нужно вынести в отдельный массив. Это все увеличит пропускную способность шины памяти.

Стоит отметить высокий технический уровень докладчика, судя по тишине в зале, сосредоточенным взглядам и потерянным твитам – для многих доклад оказался хардкорным.

Кирилл Лашкевич, iOS Solution Architect @ Viber – «Время в iOS»

Кирилл рассказал о времени в iOS. Все представление времени в системе можно разделить на две части — «Wall time» и «Host time».

«Wall time» — это обыкновенные дата и время в привычном представлении. Для работы с «Wall time» можно использовать:

— NSDate, CFDate

— POSIX типы time_t и struct tm

— NSTimeInterval, CFTimeInterval — интервалы времени в секундах

— CFAbsoluteTime — количество секунд с 01.01.2001 GMT, (не путать с принятым в unix отсчетом от 01.01.1970)

«Host time» — точное машинное время, изменяется в единицах зависимых от конкретной апаратуры, для работы с ним в userspace представлены 3 функции.

Для получения текущего значения host time:

unit64_t match_absolute_time();

mach_timebase_info(mach_timebase_info*); // - для получения информации, с помощью которой можно переводить absolute time в секунды и наоборот

Очень точный sleep:

mach_sleep_until(uint64_t)

Структура mach_timebase_info описана так:

struct mach_timebase_info {
uint32_t number,
uint32_t denom
};

Перевод в наносекунды осуществляется следующим образом:

ns = mach_absolute_time * numer / denom;

Презентацию доклада можно посмотреть тут http://prezi.com/dslah5unlnqa/time-in-ios/

Вцелом мероприятие было очень домашним, около 30 участников. Был кофе и печеньки, а в перерыве участников угостили пиццей и пивом – «мы так всегда делаем на наших внутренних мероприятиях, просто обычно на них в полтора-два раза меньше людей» — пояснила Яна. Счастливчики ушли домой с фирменными кружками компании. Другие омментарии участников и докладчиков можно найти в твиттере по хеш-тэгу #CiklumMob

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *