Dodo Mobile
4.48K subscribers
183 photos
35 videos
17 files
378 links
Канал о мобильной разработке в Dodo Brands. Канал ведёт Михаил Рубанов: @akaDuality

Вакансии https://dodobrands.notion.site/Dodo-Brands-a0e9e9ad779442a2aa322ddb52543d0a
Download Telegram
У нас вышла новая версия с обновленной иконкой — ноговодней.
Обновляйтесь, чтобы посмотреть что мы нарисовали.

А пока что — драфты от дизайнеров.

Всех с наступающим 🎉
Сегодня сразу две статьи про наши стартапы. Кто-то явно торопится рассказать про результаты до Нового Года!
Кайфую от продуманных мелочей. Вот например ребята в киоске бахнули твое имя на банковской карте и настоящий номер заказа на скриншоте с рекламой приложения. А можно же было потратить время вместо этого на объяснение того, что это очень сложно и вообще не влияет на пользовательский опыт. Не наш путь🙂
А мы вам подарочки на Новый год приготовили 🎄

Осталась всего неделя до 2024. Чтобы как-то подвести итог своим результатам и заодно вас порадовать мы решили выпускать по одной нашей внутренней тулзе в опенсурс каждый день. Начнем уже через несколько часов.

Кстати, если вы и сами что-то опенсурсили — делитесь в комментариях к этому посту.
Please open Telegram to view this post
VIEW IN TELEGRAM
DBThreadSafe-ios

Малюсенький хелпер для синхронизации ресурсов между потоками.

Раньше мы копипастили этот код между модулями или между внутренними SPM-пакетами. В какой-то момент это надоело и мы отпилили его в отдельный пакет, теперь просто его подключаем.

Работает на pthread_rwlock_t, так что оч быстрый. По этим бенчмаркам даже самый быстрый.
DBXCResultParser

Этот пакет парсит .xcresult и помогает нам собирать аналитику по тестам. Он состоит из двух частей.

DBXCReportModel
Пересобирает результаты прогона тестов .xcresult в типизированную модельку.
В модельке есть инфа по каждому тестовому таргету, файлу и конкретному тесту. Каверадж тоже будет, если у вас в настройках схемы или тестплана включена эта галочка.

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

DBXCTextFormatter
Форматирует данные из той самой типизированной моделки DBXCReportModel в человекочитаемый вид. Есть несколько форматов вывода, можете выбрать подходящий вам. Например, можно вывести список заваленных тестов. Или время, за которое прошли все зеленые тесты.

Как мы это используем
Мы подключили этот пакет в несколько других внутренних инструментов, которые используются у нас на CI:
- Отправляем оповещения в наш месенджер. В эти оповещения приказываем инфу по тестам.
- Отправляем в нашу внутреннюю аналитику, чтобы смотреть как у нас растет количество тестов и каверадж.
DBXCResultParser-Sonar

Дополнительный форматтер для DBXCReportModel, который перегоняет .xcresult в подходящую для Sonar .xml.
Если будете кормить эту .xml с вашего CI прямо в Sonar, то сможете получать разную аналитику:
1. Сколько у вас тестов
2. Какие из них прошли, а какие сломались
3. Сколько на это понадобилось времени
4. И как все эти метрики меняются со временем
BlackBox 3.0.0

Синхронные логи
В первой версии BlackBox логирование было асинхронным. Это помогало синхронизировать доступы к ресурсам внутри логеров из одного места.
Но это же и мешало при дебаге: на одной строчке выводишь что-то в логи, на следующей ставишь бряку, смотришь логи, а туда ещё ничего не прилетело.
Мы это исправили и теперь доступы к ресурсам синхронизируются внутри логгеров. Это позволило сделать логи синхронными и упростить дебаг.

Кастомайз формата
К нам прилетел первый ПР, который добавил кастомайз логов при конвертировании их для OSLogger. Стало можно:
1. Настроить как форматируется JSON — prettyPrinted и тд.. Теперь можно выводить неэкранированные ссылки.
2. Указать как форматируется источник лога — в одну строку или в несколько. Поможет сэкономить место.
3. Передать кастомный MeasurementFormatter для конвертирования продолжительности замеров, чтобы подкрутить точность, например, до секунды.
4. Указать для каких уровней логов стоит выводить иконку, а для каких нет. Будет проще находить логи уровня .error, если иконка будет только у них.
5. Настроить кастомные иконки для каждого уровня. Просто фан.

Если хотите освежить себе память по логам и замерам, то у нас есть три статьи:
Логи в iOS, эпизод 1: os_log
Логи в iOS, эпизод 2: os_signpost
Логи в iOS, эпизод 3: BlackBox
Книжка уходит в опенсорс

Но чуть позже и в другом видео. Про это на видео:
- Какие проблемы есть у книги?
- Что будет дальше с ней?
- Зачем мне редактор на английском?
- Почему ее не надо читать?
- Почему ее не надо будет верстать?
- Зачем компилировать книгу?
- Как документация может повлиять на продажи?
- Что там с VoiceOver Designer?

Самые любознательные найдут все, что захотят.

https://youtu.be/tSzXZpLFEhw

Напоминаю, что книжку «Про доступность iOS» мы можете скачать бесплатно. Подарите кому-нибудь и мне тоже будет приятно.

Если вы хотите помочь с текстом на английском, то напишите мне в личные сообщения
Про время жизни приложения

@BaldwinJ очень просил розыгрыш пиццерии. Но мы же IT-бизнес, поэтому разыгрывать будем интересную функцию!

Но сначала предыстория. Когда-то у нас был целый проект по срочному выпиливанию Realm из проекта, это база данных такая. Мы на месяц остановили продуктовую разработку, потому что терпеть было уже невозможно: мы постоянно падали, релизы стали очень нестабильными, а все не по нашей вине, а из-за нескольких подряд кривых релизов. Подробно в статье

В конце мы добавляли скриптик, который удалял файлы рилма даже тогда, когда самой библиотеки нет в проекте.
И вот оказалось, что даже спустя 3 года есть пара сотен человек в неделю, которые открывают приложение впервые за 3 года! Шкала логарифмическая, может быть непривычно
Вот такой розыгрыш для @BaldwinJ
BlackBox + Firebase 3.0.0

https://github.com/dodobrands/BlackBoxFirebasePerformance

https://github.com/dodobrands/BlackBoxFirebaseCrashlytics

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

На этом неделя опенсурса закончилась, всем спасибо ❤️
Про новогодний кодфриз

Еще одно обновления для старой статьи: мы перестали останавливать разработку мобилы на новый год. Бэкенд все еще не обновляется пару недель, а мобила это изящно обошла с помощью релиз-трейна.
Как Додо Пицца доставляет свежий код: история мобильного CI для iOS

Мобильная разработка под iOS особенная: собрать приложение можно только на macOS, среда разработки по сути только одна, большая часть принятого в сообществе тулинга написана на Ruby, свой пакетный менеджер появился только пару лет назад. Тяжко.

А когда речь заходит про автоматизацию тестирования и сборок — тушите свет: Xcode Cloud появился совсем недавно и почти ничего не умеет, популярные облачные решения могут месяцами не обновлять стек на новые мажорные релизы среды разработки или ОС, а ценник при этом может быть в 10 раз больше, чем за машинки на Linux. Ещё тяжелее.

Сейчас мы расскажем как собрали свой CI на М1, с виртуализацией и на полном нативе.

https://habr.com/ru/companies/dododev/articles/782922/
Вакансия Android разработчика в Drinkit

Мы в Dodo Engineering ищем Андроид разработчика на проект Drinkit ⭐️ (это проект, где сейчас я работаю).

Наши ожидания:
— Уверенно знание Kotlin и AndroidSDK, опыт от 2х лет.
— Надо понимать многопоточку, архитектуру.
— Надо продвинуто знать View. Если знаешь Compose — это плюс!
— Умеешь писать тесты
— Но главное — желание делать крутые, красивые, нелагающие и отзывчивые интерфейсы. Если его нет, то лучше пока не писать, сорян :)
— Кароче, ищем сильного и уверенного в себе разработчика 😉

Что можно почитать/посмотреть про нас:
— Есть крутая статья нашего разработчика Димы о том, как мы делали сложную фичу на Compose.
— Или можете посмотреть мое выступление на Mobius про DI в Дринките.
— Также можете почитать мои статьи про разные проекты в Dodo Engineering.

Наш стек:
- Kotlin, Coroutines/Flows
- Многомодульность, слоистая архитектура, Navigation Component, MVP -> MVI, View -> Compose.
- Kodein, GitHub Actions
- JUnit, Mockito

Я бегу впереди паровоза (нашего замечательного HR) и публикую эту вакансию чуть раньше, чем она официально будет. Поэтому это шанс записаться на собеседование до большого потока кандидатов!

Пишите в личку, кидайте резюме.

#job #dodo