Кто из нас не косячит? Я регулярно встречаюсь с ошибками в асинхронном коде и делаю их сам. Чтобы прекратить это колесо Сансары делюсь с вами самыми типичными косяками из тех, которые иногда довольно сложно отловить и починить.
Пользователь
Дайджест интересных материалов для мобильного разработчика #194 (6-12 марта)
Обработка препроцессорных директив в Objective-C
Язык программирования с препроцессорными директивами сложен для обработки, поскольку в этом случае необходимо вычислять значения директив, вырезать некомпилируемые фрагменты кода, а затем производить парсинг очищенного кода. Обработка директив может осуществляться во время парсинга обычного кода. Данная статья подробно описывает оба подхода применительно к языку Objective-C, а также раскрывает их достоинства и недостатки. Эти подходы существуют не только в теории, но уже реализованы и используются на практике в таких веб-сервисах, как Swiftify и Codebeat.
Swiftify — веб-сервис для преобразования исходников на Objective-C в Swift. На данный момент сервис поддерживает обработку как одиночных файлов, так и целых проектов. Таким образом, он может сэкономить время разработчикам, желающим освоить новый язык от Apple.
Codebeat — автоматизированная система для подсчета метрик кода и проведения анализа различных языков программирования, в том числе и Objective-C.
5 достойных изучения проектов с открытым исходным кодом на React Native
Я хочу представить 5 проектов с открытым исходным кодом, которые я изучаю сам и советую остальным.
Аргументы против использования фрагментов в Android
В 2011-м мы решили использовать фрагменты по следующим причинам:
- Тогда мы ещё не поддерживали планшеты, но знали, что когда-нибудь будем. Фрагменты помогают создавать адаптивный пользовательский интерфейс, и потому казались хорошим выбором.
- Фрагменты являются контроллерами представлений, они содержат куски бизнес-логики, которые могут быть протестированы.
- API фрагментов предоставляет возможность работы с backstack'ом (в общих чертах это выглядит так же, как и работа со стэком
Activity
, но при этом вы остаётесь в рамках однойActivity
). - Так как фрагменты построены на обычных представлениях (views), а представления могут быть анимированы средствами Android-фреймворка, то фрагменты могли в теории дать нам возможность использовать более интересные переходы между экранами.
- Google рекомендовал фрагменты к использованию, а мы хотели сделать наш код как можно более стандартным.
С 2011-го года много воды утекло, и мы нашли варианты получше.
Linux демон на PHP5
Кому жить, а кому умереть: приоритеты процессов в Android
Примечание переводчика: при переводе старался максимально пользоваться терминологией, которую предлагает сам Google в русскоязычной версии документации по Android, таким образом «service» стал «службой», «content provider» стал «поставщиком контента», и так далее. А вот «activity» стать «операцией» так и не смог — не пересилил я себя. Извините.
Давайте признаем: мобильные устройства не обладают бесконечной памятью, бесконечным зарядом батареи, или чем-то ещё бесконечным. Для нас это означает следующее: мы должны рассматривать смерть процесса как натуральную часть жизненного цикла наших приложений. Важно убедиться, что освобождение памяти, связанное с уничтожением процесса, не приводит к негативным для нашего пользователя последствиям. Для выполнения этой задачи большая часть архитектуры процессов в Android была создана таким образом, чтобы обеспечить жёсткую иерархию, в соответствии с которой процессы живут и умирают.
Быстрая работа с JSON в Swift
Итоги 2015: рынок мобильных решений
Ключевые события и тренды
Особого внимания заслуживает появление технологии 3D Touch от Apple и выход Windows 10 Mobile от Microsoft.
Дмитрий Соколов, главный инженер Сбербанк Технологий:
Самое заметное, что случилось в мобильной разработке – Material Design от Google. Это, как говорится, эпик вин. Все посходили с ума: в планы разработки срочно закладывался редизайн софта (даже в ущерб функциональности), с дизайнерских мониторов исчезли скетчи айфона (ранее, казалось, приколоченные туда гвоздями), а пользователи – сами пользователи! – начали ставить плохие оценки за «нематериальность». Думаю, в гугле под конец этого года выпишут очень щедрые премии всем причастным. Это круто, я даже не могу вспомнить столь однозначно позитивную реакцию на что-либо за последнее время. Материал всегда, материал везде, отдельные элементы пробираются даже на iOS!
А вот изнутри гугл революции не произвёл: долгие годы обещают наладить стабильное и повсеместное обновление Android, а в конце 2015-го хвастаются (хвастаются, Карл!) огромной долей Marshmallow аж в целых пол процента. А чаще всего встречается – внимание! – позапрошлая и поза-позапрошлая версия системы. И это, ребята, не менее эпичный провал.
Как на самом деле будет выглядеть рынок JavaScript в 2016 году
Сегодня на сайте Mashable появилась любопытная статья «Чтобы стать гуру программирования в 2016 году, достаточно освоить Javascript и переехать в Юту» о рынке труда разработчиков программного обеспечения. Данный материал формирует весьма превратную картину действительности, а потому давайте разбираться вместе.
Краткая предыстория. Я разработчик программного обеспечения и на протяжение нескольких последних лет мне доводилось неоднократно проводить собеседования с желающими пополнить ряды моих коллег. Кроме того, я обучал разработчиков JavaScript навыкам, благодаря которым они получали шикарную работу. У меня приличный опыт в сфере создания и консультирования многообещающих команд разработчиков и компании из списка Fortune 500.
Я также часто сотрудничаю с кадровыми агентствами, благодаря чему не понаслышке знаю, чего хотят самые высокотехнологичные компании в мире. Руководствуясь собственным опытом и тем, что рассказывают мои студенты, я могу с уверенностью заявить, что прекрасно понимаю структуру рынка труда JavaScript как снаружи, так и изнутри.
О новом push-сервере «1С-Битрикс»
Некоторое время назад у нас назрела необходимость в разработке нового push-сервера для сервиса «Битрикс24». Предыдущий вариант, реализованный на базе модуля для Nginx, имел ряд особенностей, которые доставляли нам немало хлопот. В результате мы поняли — пора делать push-сервер. Здесь мы хотим рассказать о том, как это происходило.
Передача проекта от дизайнеров iOS разработчикам
В настоящее время департамент мобильной разработки Rambler&Co активно расширяется, в том числе и в плане iOS-разработчиков и UX дизайнеров. Большое количество людей и проектов, ведущихся ими, усложняет и без того непростой процесс передачи дизайна разработчикам. Всем, так или иначе связанным с мобильной разработкой, знакомы проблемы и разногласия, возникающие на стыке интересов программиста и дизайнера — начиная тем, в каких единицах измерять расстояния, и заканчивая тем, кто должен нарезать элементы экранов в различных разрешениях. Чтобы окончательно решить проблему в рамках нашей компании, мы решили подготовить подробные гайдлайны по этому взаимодействию.
Особенности работы с файлами в приложениях на разных мобильных платформах
Программное создание NinePatchDrawable
В изображении, которое вы видите, используется вектор, но он растянут по центру. И это удивительно! Возможность растягивать вектор только в определенных областях предоставляет, по истине, колоссальные возможности. А если учесть, что есть проекты позволяющий использовать вектор на более ранних версиях андроида, векторные изображения начинают показывать себя во всем своем великолепии.
Биндинги в Swift. Делаем первые шаги к MVVM
Corona SDK стала бесплатной
Создатели известного движка для разработки кроссплатформенных мобильных приложений Corona SDK 2 марта объявили о том, что отныне Corona SDK будет бесплатна.
Четыре месяца назад, в ноябре 2014 Corona была куплена компанией FusePowered. Многие предрекали грядущие изменения в политике компании и в выборе путей ее развития. Вопрос был, в какую сторону будут эти изменения. И вот сегодня случилось — Корона объявила, что возможности, доступные раньше только в платных подписках, теперь будут бесплатны.
Разберемся, что же они теперь нам предлагают.
Как упростить жизнь iOS разработчику
Objective-C Runtime для Си-шников. Часть 3
Всем привет. Сегодня я продолжу рассказывать вам о внутреннем устройстве Objective-C Runtime, а конкретно — о его реализации на уровне языка C.
В прошлых статьях мы с вами подробно разобрались с селекторами и механизмом посылки сообщений объектам и классам. Сегодня я хотел бы закончить с сообщениями и рассказать о принципах работы некоторых встроенных возможностей языка Objective C.
Тем, с кем мы ещё не знакомы, я предлагаю для начала прочитать первую и вторую части, а прочитавших и заинтересовавшихся прошу под кат.
Сервисы дистрибуции мобильных приложений для iOS. Часть 1: TestFlight
Вступление
С каждым годом становится всё очевиднее, что для распространения тестовых версий iOS-приложений нужны специализированные сервисы. Это актуально не только для компаний, занимающихся разработкой приложений в “промышленных масштабах”, но и для инди-разработчиков. Причины: увеличение количества устройств с “нестандартным”/”не кратным” размером экрана, отличия в архитектуре центрального и графических процессоров — всё то, что раньше было повседневностью для разработки под Android, теперь становится справедливым и для iOS.
Исторически самым популярным сервисом дистрибуции являлся TestFlight — практически идеал, как в техническом отношении, так и в юзабилити. Однако, после приобретения компанией Apple в начале 2014 года, сервис претерпел ряд неоднозначных изменений, которые с одной стороны сказались негативно на его позиции лидера, а с другой дали шанс альтернативным сервисам побороться за первое место и предложить как минимум равноценную замену, а может быть и что-то более удобное и функциональное.
В своей серии статей я собираюсь поделиться результатами сравнения нескольких сервисов дистрибуции и в результате помочь другим, кто стоит перед таким же вопросом выбора.
В обзоре участвуют следующие сервисы (в таком порядке и будут публиковаться части обзора):
- Apple TestFlight
- HockeyApp
- Ubertesters
- Crashlytics (как часть Fabric)
TestFlight старой версии не будет рассмотрен, так как хотя он по-прежнему работает и доступен по адресу www.testflightapp.com, использование его в долгосрочной перспективе не имеет смысла по ряду причин:
- нет никаких гарантий, что Apple не приостановит или не прекратит его работу в любой момент
- SDK сервиса не доступно для скачивания, более того невозможно использовать сервис, если приложение использует SDK
- сервис больше не является кросс-платформенным, поддерживается только распространения приложений для iOS (подробнее)
Важно! Буквально накануне публикации статьи команда TestFlight (старой версии) разослала уведомление, в котором сообщается, что старый сервис прекратит свою работу 26 февраля 2015 года (подробности).
Система оценки: сервисы будут оценены по 10-балльной шкале по каждому из разделов (Регистрация и интеграция, Основной функционал, Дополнительный функционал, Continuous Integration). Суммарная оценка позволит определить победителя (итоговое заключение войдет в последнюю часть обзора).