Рубанов про мобилу – Telegram
Рубанов про мобилу
4.41K subscribers
293 photos
72 videos
26 files
477 links
Делюсь своим опытом разработки мобильных приложений: про тестирование, доступность и UI
Download Telegram
Добавляйте в contentView

Заметил ошибку, когда добавил вьюшку не в contentView ячейки, а прямо в ячейку. Для таблиц это критично, могут появиться разные баги. Например, когда вы свайпаете ячейку вбок, чтобы удалить, то контент не уедет.

Мне стало интересно как заревьювить это во всем проекте, получилось так:
1. Сначала ищу по addSubview
2. Фильтрую упоминаня по cell
3. Проверяю короткий список, нахожу проблему еще в одном месте
У нас продолжается выпиливание Realm

Мы удалили большую часть зависимостей на рилм, релизим первую версию. Убрали рилм из корзины, меню, активных заказов. Осталось переделать все что касается хранения городов.

Давайте с меня кусочек рефлексии про удаление, а с вас сборку потыкать пока она не зарелизилась.
Зачем нужна база данных для заказа пиццы?

Кратко — низачем. База данных сначала прикрывала плохое апи.

В 2017 году Додо Пицца решила написать свое приложение. Серверная часть уже работала 5 лет, обслуживала 250+ пиццерий. Много чего было сделано для работы бизнеса, для клиентов был только сайт.

Нужно было написать новое апи для приложения. Делать надо было быстро, ребята торопились. Чтобы ускорить процесс часть работы разделили: апи было больше похоже на прокси для базы данных, часть логики решало приложение.

Все что было привязано к меню работало через базу: корзина, активный заказ. Чтобы показать товар в корзине, нужно сделать запрос к меню, получить описание продукта и только тогда вывести продукты в корзине на экран.

Запросов таких много, самый удобный способ синхронизировать все через базу и надеяться что нужная информация там есть. Конечно, после релиза приложения надо было все переделать. Но это потом, сначала еще одну важную штуку добавить, а потом еще одну…

Сложно вспомнить почему выбрали Realm, а не CoreData. Скорее всего, так было проще: схему рисовать не нужно, объекты создаются прям из кода, работает быстрее, да и опыт работы с ней был. Так и поехало.
Как работало?

Первую версию приложения сделала команда на аутсорсе. Уже тогда понимали, что проект будет жить долго, стран будет много, фич навалом. Тогда ведущими программисту казалось важным заложить поддержку работы в офлайне. Или, хотя бы, сделать восстановление между сессиями работы приложения, чтобы меню появлялось сразу на запуске, без скачивания. Архитектурно это заложили с первой строчки.

Так как домены связаны, а восстанавливать хочется любой экран, то складывать в базу надо вообще все, чтобы было откуда брать. В итоге, поток данных стал таким:
- получили из сети.
⁃ положили в базу, разметили связи между таблицами.
⁃ прочитали из базы, связанные объекты подтянулись сами.
⁃ переложили данные во вью модели, а дальше уже MVVM.

В следующий раз расскажу где нам это мешало, и в какой момент стало прям больно.
Фичеримся в апсторе первыми
No realm. Финал

Мы выпилили Realm из проекта за 3.5 месяца, сборка на ревью. Впереди релиз и возможные фиксы. Мы все сто раз проверили, но все равно хотим убедиться, что все работает нормально.

Если хотите помочь, то можете поставить сборку до того как она появится у всех в понедельник. Важнее всего проверить первый запуск: город выбрался, авторизация не слетела.

Если закажите что-нибудь, то будет совсем супер. Там скидка на вторую пиццу 70% по промокоду BLACK.

TestFlight научился самостоятельно обновлять версии, поэтому можете пользоваться сборками из него и стать нашим постоянным бета-тестером! Если что-то пошло не так, то делайте скриншот, там появится форма обратной связи.

Выпиливание в цифрах:
- Стартанули 12 августа, отправили на ревью 26 ноября.
- 3 месяца разрабы Realm чинили креш с которого все началось.
- 8 Мб занимает Realm просто после добавления в подфайл.
- За релиз мы срезали 20 Мб, теперь весим ≈40 Мб после распаковки. Знаем как срезать еще 10.
- Сложнее всего было переделать меню, ушло 14 дней.
- В коде были 2720 упоминаний realm. Даже после выпиливания их осталось 46, это аналитика и удаление оставшихся файлов от базы.
- У нас появился первый самостоятельный фича-фреймворк
Хакатон и аппклип

Каждый год Додо Пицца усиленно готовится к Новому Году: в конце декабря пиковые нагрузки на всю сеть, все IT должно работать гладко. Крайней мерой является кодфриз: с середины декабря нельзя релизить (и как следствие, писать) код для продакшена.

Это отличное время заняться другими делами: профилированием, пайплайном, планированием, ретро. В конце декабря мы провели мобильный хакатон: 4 команды взяли разные фичи которые не попадали в продуктовый беклог и посмотрели как там что работает:

- Баблы для статуса заказа на андроиде.
- Темная тема
- AR для выбора размера пиццы
- App Clip

Я был в команде аппклипа, рассказал про него подробней.
Курс про доступность

Самая большая проблема адаптации доступности — нет никакой школы и информации, со всеми проблемами приходиться биться как в первый раз. Другая сложность — совершенно непонятно как проектировать для людей с нарушениями, это другой мир, а знающего человека рядом нет.

Валерия Курмак меняет положение дел и запускает курс про доступность http://kurmak.info/. За месяц можно узнать какие бывают ограничения, как это решать, пообщаться с незрячими и разобрать проблемы с которыми они сталкиваются. Курс подойдет как программистам так и дизайнерам.

Я рассказываю на курсе про мобилу и VoiceOver: поделюсь всем опытом что накопился, покажу самые забористые кейсы. Расскажу как строить из этого процесс: проектировать, проверять и тестировать. Будут упражнения, домашка и разбор ваших проблем. Незрячие протестируют домашку и дадут фидбек.

Курс начинается 6 февраля, длится месяц, проходит по выходным. С VoiceOver плохо в любом российском продукте, так что полезно всем.

По теме я уже написал 3 статьи, это может быть хорошим интро.
Voice Control и VoiceOver: как адаптировать приложение для незрячих или неподвижных
VoiceOver на iOS: каждый контрол ведёт себя по-разному
VoiceOver на iOS: решение типовых проблем
Привычка записывать

Я понял что у меня выработалась лучшая моя привычка — все записывать: встречи, собеседования, мысли, идеи, планы. Скриншотить интерфейс, графики, схемы. И прикидывать, интересно ли это еще кому-то. А почти все оказывается интересно.

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

Я всегда отталкиваюсь от артефакта. Есть картинка и мысль к ней — это пост. Есть десяток картинок и мыслей — статья. Снял видос — надо поделиться! Можно просто делиться ссылками что прочитал, это тоже работает.

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

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

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

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

Полтора года назад я возмущался, что все не умеют писать резюме. А теперь к 8/10 кандидатов приходят к нам, потому что читали блог и им интересно.

В итоге, напряг написать что-то совсем ушел, зато появилась привычка рассказывать о своей работе.
Выпилили Realm

В прошлом году мы сделали несколько важных технических задач:
- начали писать тесты на все
- сделали инструменты для моков UI тестов
- закрепили CI как практику
- выпилили Realm с которым жили 3 года.

Про все это еще, наверно, расскажем, а пока написал зачем удаляли, как удаляли и что вместо Realm появилось в проекте.

https://habr.com/ru/company/dododev/blog/539360/
Короткие встречи

На удаленке стало намного больше созвонов и у многих расписание поделилось на часовую сетку. Иногда расписание получается очень плотным.

Чтобы успевать между встречами попить/слить водичку проводите встречу за 50 минут и 10 оставляйте на перерыв. Даже настройка такая есть в гугл-календаре, включите ее.

Самые крутые могут ставить встречи не на час, а на полчаса. Это 25 минут общения, принцип такой же.
Код без тестов — это легаси

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

Решение очевидное: писать автоматические тесты, быстро узнавать от них если мы что-то сломали. К маю прошлого года у нас как-то накопилось 900 тестов и мы стали активно писать новые.

Мы перешли на Quick тесты и интенсивные моки, запустили проект по автоматизации UI-тестов, собирали метрики по скорости написания, и много чего еще. Спустя 9 месяцев у нас 3400 юнит-тестов, 180 UI, активно рефлексируем над результатом и думаем куда идти дальше.

Об этом я когда-нибудь расскажу, а пока перевод отправной точки всей автоматизации: код без тестов — это легаси
Мини-приложения в Китае

Помню, как впервые обсуждали запуск в Китае: надо сделать мини-приложение для какого-то чата. Что сделать? Как оно выглядит? Какой там интерфейс? Как проектировать на китайском?

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

С тех пор прошло пару лет, мы запустились в Китае, пробуем разные концепции и работаем уже с обоими мессенджерами: WeChat и AliPay

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