Dodo Mobile
4.59K subscribers
193 photos
45 videos
17 files
397 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
Как избежать утечек памяти при использовании Task, Combine, CurrentValueSubject и AsyncStream

Сегодня на гильдии разбирали асинхронщину в демо-проекте. Запускали в нем «тяжелую работу» разными способами и изучали, как это влияет на память.
И следом учились отменять эту тяжелую работу: стопали Task, наворачивали свой выход из выделенной DispatchQueue, отменяли подписки в правильный момент и переставали слушать AsyncStream.

Делимся записью во встречи с вами, потому что нам не жалко.

https://www.youtube.com/watch?v=g75oEjQ0eys
Интерфейсы в Apple Vision Pro

Обычно я делюсь чем-то своим, но это особый случай: появляются обзоры на очки и я хочу показать вам час демонстрации самых разных интерфейсов.

Но про интерфейсы очков я уже писал!
Forwarded from LikeaDuck🦆
#job #вакансия #додо

Наконец, поделюсь жемчужиной моих вакансий - QA Mobile Team Lead. Это - единственная вакансия, на которую не будет ссылок на формальное описание, все напишу здесь. Мы полностью переделываем наше мобильное приложение Dodo Pizza. Этим занимаются, в основном, 4 команды, в каждой из которых есть QA Mobile Engineer. Эти 4 команды объедены в юнит, на уровне которого есть главный Product Lead, отвечающий за все в нашем мобильном приложении, есть техлиды разработки, отвечающие за общий технический вижн всех 4 команд, и наконец, мы хотим что бы там же был QA Lead, отвечающий за процесс, метрики и результаты тестирования на уровне всего юнита.

Что это означает на практике? Что придется ходить в разные команды (те самые 4 фичатимы в рамках юнита), очень плотно взаимодействовать с QA инженерами в этих командах, лидировать общие точки в тестировании - мы хотели бы иметь общий бэклог багов, общую статистику по юниту в целом, а не по отдельным командам, хотели бы чаще общаться с саппортом. Конечно, где-то придется показывать не словом, а своим примером, но у нас все лидеры на это способны: так, я весь 2023 год активно контрибьютил в нагрузочные тесты на Java и занимался manual тестированием Drinkit, когда было некому. И все же, тебе не придется каждое утро на дэйли говорить "я вчера занимался...", но мы будем обсуждать с тобой конкретные метрики, цифры, удовлетворенность качеством приложения и вот это все. Это настоящая лидерская позиция, слово "Lead" тут не для галочки.

🙌 Пожалуйста, отзовитесь 🙌, если вы разбираетесь в мобильном тестировании, прочитали какую-нибудь книжку по менеджменту и если вас на работе оценивают не по тому, как вы поработали руками (сколько багов нашли или кейсов написали), а по тому, как поработала ваша команда и какие на выходе получились результаты у команды. Это очень, очень важная разница в майндсете. По технике у нас Kotlin + Kaspresso, Swift + XCUITest, GHA, AllureTestops, запускаем тесты на эмуляторах, тестируем на реальных устройствах + иногда на эмуляторах.
Сегодня встреча про доступность

Через несколько часов проведу эту встречу: пообщаемся с очень заряженными ребятами, приходите послушать.

И на курс проходите: мы уже десятый раз его проводим, материала со всех сторон огромное количество. Я на курсе тоже рассказываю все что знаю + разбираем ваши примеры, готовы закопаться в любой кейс
Сегодня, 7 февраля в 19:00 (по мск) пройдет второе мероприятие в рамках 5 конференции по цифровой доступности. Сегодня встретимся с теми, кто на своем энтузиазме продвигает тему инклюзии. Обсудим, как ребята пришли к этому, что помогает поддерживать мотивацию, как взаимодействуют с коллегами, в чем заключается их роль, с какими трудностями сталкиваются и как их преодолевают. Приходите!

А для тех, кому интересно
– глубоко погрузиться в пользовательский опыт людей с нарушением мотрики, зрения, слуха и другими особенностями,
– научиться понимать их ментальные модели и проектировать для них,
– создавать инклюзивный дизайн,
– уметь разрабатывать доступно
– и правильно тестировать
приходите к нам на курс по цифровой доступности Accessibility Unity, который стартует уже вот-вот, 17 февраля!
Пицца в AR

Запустили пепперони-сердце в дополненной реальности: пицца сама ляжет к вам на стол, вы сможете оценить ее размер, покрутить, увеличить, повешать на стену, сделать пиццу-одеяло, а в конце поделиться получившейся открыткой.

Посмотреть можно на iOS и Android, нужна последняя версия приложения. Продается не во всех пиццериях, посмотреть можно тут:
⁃ Елабуга (Россия),
⁃ Минск (Беларусь)
⁃ Астана (Казахстан).

Это тестовый запуск, поэтому очень важна обратная связь, пишите прямо в комментарии. Особенно интересно на каких телефонах тормозит или работает не так, как вы ожидаете.

Фан-факт: итоговая пицца занимает 3мб, это примерно размер всего 5-6 фотографий.

Посмотреть как работает