iOS Makes Me Hate
4.07K subscribers
1.28K photos
186 videos
24 files
1.42K links
Авторский канал про iOS разработку. Путь продуктовых самураев в MAANG.

Самое больше iOS сообщество практиков: https://boosty.to/lionbond/

Автор: @lvbond Senior iOS Yandex, ex-Avito, VK
Download Telegram
💎 Mobile System Design: Почему это важно в эпоху ИИ?

Открываю цикл статей вводной.

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

Нам говорят: "сначала MVP, потом рефакторинг". Но потом почти никогда не наступает. Так и рождаются системы, где уровень хаоса высок, а понимание причин — низкое.

Вот почему ценится глубина — не просто знание SDK или фреймворков, а умение залезть внутрь системы, понять её устройство и связи.

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

Как сохранять ясность в растущей энтропии? Как проектировать простое, и четко доносить идеи до команды? Как не свистеть кукухой?

Написал первую статью-исследование, которое открывает цикл статей Modern Mobile System Design:
🟣Почему это ключевой навык в эпоху ИИ
🟣На основе опросов и статей собрал информацию какие программисты будут востребованы
🟣Какие ключевые навыки нужно качать
🟣Кто такие Context инженеры, Контекстное мышление, Архитекторы AI-агентов

🧬Получить доступ к циклу статей можно 💰тут или ⭐️ тут
Please open Telegram to view this post
VIEW IN TELEGRAM
6
This media is not supported in your browser
VIEW IN TELEGRAM
Можно ли отказаться от Xcode?

Есть два мифа:
1. Настоящий иосер пишет только в Xcode
2. Нельзя запускать симулятор нигде кроме Xcode

Сейчас, в эпоху нейронок, многие почти не пользуются Xcode'ом или другими привычными IDE. На их место встал Cursor/Windsurf, CLI, MCP, а для кого-то даже терминал.

Но еще до взрыва нейронок, уже пару лет есть ребята, кто спокойно пересел на VSCode и чувствуют себя отлично.

Например, SweetPad помогает забилдить апку в VSCode. Если вас уже задолбал Xcode и вы не хотите встречаться с его багами — отличная альтернатива.

Чем лучше VSCode?
- VS Code легче по ресурсам: запускается быстрее, меньше тормозов при простых задачах.
- Мульти-языковая среда: если ты пишешь не только на Swift (например, backend, скрипты, веб и т.д.), то VS Code удобно объединять все в одном инструменте.
- Ты можешь ставить только нужные плагины, конфигурировать, как тебе удобно. Легче устанавливать доп плагины
- debug view hierarchy можно заменить через Reveal. Говорят он работает лучше.

Конечно, есть и зависимости:
- Interface Builder — это если вы юзаете Preview или Storyboard'ы. Но я верстаю без этого.
- Для подписи и выкладки в стор все еще нужно скачивать Xcode. Тут, если покряхтеть, можно выгружать через какой-то сервис.

Кстати, у Apple даже есть официальная дока как настраивать Swift на VSCode
141
Watchdog

Сейчас занимаюсь много перфомансом. Тк работаю с видео и изображениями. Нужно следить за производительностью и контентом. Нагрузкой на главный поток и расчетом лайаутов, контента. Надеюсь, когда-нибудь поделюсь фичей после релиза.

Для чего нужно писать свои Watchdog'и?
- профайлинг Xcode’а только для симулятора/дебага. Нужно подключенное устройство. Сейчас с этим у многих компаний проблемы. Ограничения на реальные девайсы, дебаг усложняется.
- симулятор != реальное устройство. Разные мощности и оптимизации
- Проблемы могут быть только на определенных устройствах, версиях аппки и ios.
Часто нужны реальные условия и окружения юзеров

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

Решил собрать самые интересные решения:

🟣Implementing a main thread watchdog on iOS. Автор предлагает сделать простенький таймер, который следит за нагрузкой главного потока.

🟣Addressing watchdog terminations. Дока от Apple про системный Watchdog

🟣Watchdog Terminations on iOS. Типичные ошибки разрабов почему Watchdog крашит их приложение
Please open Telegram to view this post
VIEW IN TELEGRAM
113
This media is not supported in your browser
VIEW IN TELEGRAM
Что я делаю в Яндексе?

Иногда буду делиться чем не стыдно. И что доходит до прода 😂

Мои задачи связаны с UGC. А чаще это про видео, ленты и картинки. Все, чтобы вам было интересно выбрать ресторан с вашей любимой кухней.

Было много задач, но расскажу про сторисы. Прям как в запретограме (почти).

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

Заюзал еше самый современный стэк SUI + SC

В итоге вышло аж ~80 тесткейсов. Которые мы еще и почти все автоматизировали.

Тк мы одни из первых, кто работал с видео, то вызовов было много.

Пока это первая версия и на очереди уже крутое обновление. По-любому вы найдете какой-то неприятный маленький косяк. Но я его уже скорее всего исправил :)

Пока работает только в Питере и Москве.
Please open Telegram to view this post
VIEW IN TELEGRAM
32733
Как я проходил собес в Microsoft

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

Мы даже провели опрос, где 70% посчитали собесы сломанами. Может быть в мировых гигантах дела обстоят получше и эти процессы поставили эффективнее?

Автор статьи рассказывает к проходил собес на iOS разраба в Microsoft.

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

Вроде стандартный пак. Но автор говорит, что даже не смотря на провал, такой опыт собесов дал ему много точек роста и стал полезен.
72
This media is not supported in your browser
VIEW IN TELEGRAM
Страшно, очень страшно. Если бы мы знали, что это такое…😱

Но мы в Garage Eight знаем, что это такое, потому что считаем, что настоящие прорывы случаются за пределами зоны комфорта.

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

🔥 Голосуйте за гаражистов, чтобы поддержать их в борьбе со своими фобиями!
Please open Telegram to view this post
VIEW IN TELEGRAM
41
This media is not supported in your browser
VIEW IN TELEGRAM
🥩 Рубрика Well Done: бесконечный список видео

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

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

Тестишь ты на одном, а релизят на другом. В случае видосов это может сильно ухудшить UX.

В карусели два контента:
- thumbnail в ввиде первого кадра видоса. Для загрузки видосов
- видео-превью 3 секудны.

У всего есть предзагрузка. Все, что во viewport'е — загружается сразу + предзагрузка соседних ячеек.

Какие оптимизации тут были сделаны:
- Visibility tracking & Lazy loading: видео загружаются только когда элемент становится видимым.
- Для соседних видосов вьюпорта также запускается префетчинг. Начинаю предзагрузку в фоне до их фактического отображения, уменьшая задержку при воспроизведении
- Видосы кэшируются. если видео уходит за границы видимости, то оно должно остановиться. А в некоторых случаях и очиститься.
- Есть VideoPlayerPool (Object Pool и Coordinator cleanup). Я работаю только с плеерами, которые видно на экране. Это же нужно чтобы избежать лишних пересозданий. Экономит память.
- есть микроулучшение для low network connection

Результат подается в готовом ввиде.

В общей сумме это увеличивает перфоманс и плавность скролла на 70-85%. А также не проседает при большом кол-во видосов.

Какие рецепты предложили бы вы?
163
Почему проверка email регекспом — не задача клиента

Сегодня на созвоне комьюнити (делать созвоны на 2 часа в 10 утра субботы я больше не буду) мы обсудили много вопросов про систем дизайн: метрики, компромиссы, архитектуры, много обсуждали BDUI и даже его запроектировали.

Разберём безобидную идею — сложная проверка email на клиентах (iOS/Android/Web) в форме регистрации.

Одно из правил проектирования "Всё, что влияет на безопасность, деньги и целостность данных, обязательно проверять на сервере". Почему?
🟣Безопасность. Мы можем долго говорить про фишинг и реверс-инжиниринг, но правила проверок всегда видны атакующему. Для почты это не всегда важно, но все же.
🟣Слишком много реализаций. Три платформы — три реализации. Легко получить расхождения.
🟣Бизнес правила всегда идут от сервера: формат, уникальность, email/телефон/username, блокировки, инвайты, доступность региона. Это все относится к валидации.
🟣Единая точка правды. На бэкенде проще логировать попытки, строить алерты, включать капчу

Конечно, не стоит выносить ВСЮ проверку на пробелы, очевидные ошибки на сервер (хотя на проверке это тоже нужно делать). Но валидация на клиенте — это только легкий UX и простые подсказки юзеру.

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

Наша экспертиза не строится на "я всемогущ", а на "я знаю, что нужно". Именно так определяется сложность и навык. Упростить все по максимуму и оставить только необходимую сложность.
Please open Telegram to view this post
VIEW IN TELEGRAM
15
🚩 System Design собесы: Красные флаги

Еще одну тему которую мы обсуждали на прошлом созвоне — это правильные или неправильные ответы на интервью. Что есть редфлаги и как их не допустить не только на собесе, но и в жизни?

Как мы уже определили:
Ключевая метрика сеньора — умение системно мыслить и работать в условиях неопределенности.
Он не ждёт инструкций, а сам формулирует проблему, принимает решения и ведёт проект.


Инженера оценивают не по знанию паттернов и SOLID, а мышлению и способности строить системы. Я собрали и структурировал основные редфлаги инженера.

Статью подробнее c другими примерами можно почитать в закрытом ноушене, но здесь поделюсь основными критериями.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
136
Плюс в чат если бежишь вставлять в апку божественный стеклянный дизайн

UPD: знаете, что даже цвета иконок влияют на конверсии? Хочу услышать истории про такие кейсы
20
System Design: Правила декомпозиции при разработке фичи

В прошлом опросе топ 2 тема по интересу — это декомпозиция задачи. И не в том смысле, как поделить задачу в jira-трекере. А как правильно разделить её в коде. И это не про «выбери между очередным MV(X) паттерном». Декомпозиция более обширный термин и зависит от многих переменных.

Например, одно из самых ужасных для меня архитектурных решений — это класть все Service или даже ViewModel в одну папку. Огромный склад всех вьюмоделей, оторванных от своих блоков и бизнес-функций. Или же в VIPER все протоколы в один файл ModuleNameProtocols. Попробуй в этом разберись. Мы даже разбирали отдельный пост 2 года назад.

Вот вам дали разработать чат. С чего начнете? Будете делать шаблонами или оцените ситуацию? Начнете с нетворка или UI?

Многие начинают делать задачу с верстки, но даже когда еще мы читали книгу Mobile System Design, то разбирали — не торопись верстать.

Мы разберем сейчас самую базу, а потом подробнее пройдемся по:
- Layered Architecture
- многомодульной декомпозиции
- UDF декомпозиция
124