iOS Makes Me Hate
3.94K subscribers
1.16K photos
169 videos
15 files
1.33K links
Авторский канал про iOS разработку. Путь продуктовых самураев в MAANG.

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

Автор: @lvbond Senior iOS Yandex, ex-Avito, VK
Download Telegram
🧬 Mobile System Design vs Архитектурный собес

Пару недель назад мне написал один знакомый, который спрашивал что обычно спрашивают на архитектурных собесах. Для меня это странно, тк я как раз в канале писал про system design интервью и про проектирование приложений. Видимо, я где-то не сделал акценты.

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

🧬 Что такое проектирование?

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

Собес обычно разделен на несколько этапов. Очень поверхностно разберем на примере чата:
🔘 Сбор основных требований фичи. Например, как пользователь может взаимодействовать с интерфейсом. Отправлять сообщения текстом или прикреплять фотографии. Может ли он удалять сообщения
🔘 Сбор нефункциональных требований. Эти требования играют очень важную роль для стабильности и производительности. Например, будут ли уведомления в реальном времени, офлайн поддержка, оптимизации батерии.
🔘 Дополнительные требования. Тут обычно задаются вопросы про аналитику, логирование сбоев, доступность и безопасность.

На основе этих требований мы и решаем какие паттерны, архитектуры, технологии нам подойдут. Здесь нет универсального ответа в стиле "VIPER/TCA/MVVM — это универсальный паттерн". Бизнес требования не должны натягивать на архитектуры — это архитектура должна адаптироваться к бизнесу.

💎 Еще раз напоминаю, что в ноушене есть полезные подборки, статьи и пересказы книг по архитектурам и system design'у
Please open Telegram to view this post
VIEW IN TELEGRAM
74
🛸 Как подменять запросы в Proxyman

Снифферы — это незаменимая тулза в работе мобильного инженера. Я даже удивлен, как много людей не знают о них.

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

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

Как это делать с проксименом сделал скриншоты

🌺 Ставь лайк, если считаешь proxyman топ тулзой
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
4214
💎 Вопросы для собесов по многопоточке | Middle | ч. 1

Я уже писал, что вопросы для мидлов создавать гораздо интереснее. Мало инфы в интернете про сложные вопросы, почти нет нигде задач.

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

В этой подборке:
🟣Что такое Dispatch Barrier?
🟣Перечисление и сравнение POSIX мутексов
🟣Работа с NSOperations
🟣В чем разница голодания и livelock'а?
🟣А также еще 20 вопросов и 5 мощных задач

Скоро ждем подборку вопросов про Swift Concurrency

🌿 Этот и другие сборники можно найти тут
🧬 Ознакомиться с другими сборниками тут
Please open Telegram to view this post
VIEW IN TELEGRAM
13
что выведет print?
5
102
BDUI – удовольствие или боль?

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

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

А то наплодятся андроид разрабов, что кричат о замене иосеров. И бэкендеров, что кричат о смерти мобильщиков.

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

Ставь лайк, если нужен в ноушене "Курс по самообороне от KMP и BDUI"
Please open Telegram to view this post
VIEW IN TELEGRAM
20
😎 Сила статической диспетчеризации в Swift

Автор статьи рассказывает, что Apple заявляла,как язык Swift в 2,6 раза быстрее по сравнению с Objective-C.

Открытых тестов, что подтверждают их слова, никогда не показывали. А разрабы, кто проверял сам, получили совершенно противоположные результаты — Swift может быть на порядок медленнее по сравнению с Objective-C, когда код неоптимизирован

В статье он также делает замеры функций и дает советы как оптимизировать код для производительности:
🟣 Что лучше Generics или функции с созданием класса
🟣 Как влияет рекурсия на производительность
🟣 Как не заиграться с оптимизацией и не усложнить код

Я в канале также уже проверял, что Message Dispatch работает медленнней

💎 Больше материала про диспетчеризацию, а также перевод этой статьи, можно найти в ноушене
Please open Telegram to view this post
VIEW IN TELEGRAM
9
💎 Обновление ноушена и комьюнити за неделю

Традиционный changelog что изменилось за неделю в ноушене и комьюнити.

Когда я проходил курсы менторства в авито, то нас учили о главном ресурсе, за которым приходит менти. Это коммьюнити. Менти приходит не только за твоими знаниями, но и за твоими социальными связями. А их дают только навыки и опыт.

Какой смысл всяких закрытых ноушенов, ресурсов, роадмапов, если этим никто не пользуется и работает в вакууме? Главное люди и фидбэк, кто использует их и дает корректировки. Важна среда обитания. Материал, который ее наполняет, служит пищей и упражнениями.

Все это создает крепкую систему эффективного культурного и информационного обмена, где каждый чему-то учит и дает точки роста. Такую роль и выполняет закрытое комьюнити. Поэтому я и решил создать то комьюнити, которое будет максимально полезное для профессионального и личночностного (упасигосподь) роста.

Когда ты ментор, то можешь посмотреть на свой путь вначале со стороны. Найти ошибки, которые допустил и помочь другому.

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

Чувство жертвенности подталкивает к поиску навыков и импакта, а твой фидбэк более значимый.

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

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

Я с уверенностью могу сказать, что мы самое первое, быстрорастущее и большое закрытое иос-сообщество.

🌿Вступить в сообщество можно тут
Please open Telegram to view this post
VIEW IN TELEGRAM
102
Короче. По поводу созвонов комьюнити

Я понял, что выбирать тему для доклада, которую я не хочу, но хочет аудитория пока не мое. Типичный конфликт автора и зрителя.

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

Поэтому как докладчик я буду выбирать темы, которые будут нравится мне. Если кому-то же захочется высказаться и он считает тему интересной для аудитории, то welcome. Канал может стать твоей трибуной.

Следующая тема про которую я буду делать доклад — это собесы. За много лет у меня есть большой опыт прохождения и проведения. Я собесился на джуна и тимлида. Я собесил джунов и тимлидов. От стартапов до бигтехов. Где-то удачно, где-то нет. У меня набухло и есть что сказать.

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

Анонс позже.
1772
🌿 Скидка на подписку мидл

День неслыханной щедрости!

Мне тут подсказали, что в связи с сезоном собеседований самое время сделать небольшую скидку на middle уровень. Так как конкуренция весной и осенью самая высокая.

На ней вы получите:
🟣 Доступ в чат с практикующими спецами. В нем не будут спамить вопросами новичков.
🟣 Доступ к ноушену
🟣 Доступ к 250 вопросам и 100 задачам для подготовки
🟣Многое другое

С помощью этих инструментов ты сможешь лучше подготовиться, чем конкуренты 😬

💎 Успевай, скидка бессрочная, но ограничена на количество

UPD: Добавил еще 10 подписок

Выгодней всего будет сразу на несколько месяцев
Please open Telegram to view this post
VIEW IN TELEGRAM
8
👨‍🦱 ну что, мы переступили этот психологический лимит тракториста

Тем самым став самым большим закрытым сообществом чисто иос-разработчиков с самой большой конверсией. Почти 80%

🍤 Спасибо всем. Это большая и солидная цифра, которая точно повлияет на новые форматы контента и активностей.

🍭 Ваша поддержка и фидбэк дает мотивацию и силы. Обнял-приподнял.
Please open Telegram to view this post
VIEW IN TELEGRAM
35
🌿 Оптимизация UI: Offscreen Rendering

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

Начнем с Offscreen rendering.

Off-screen рендеринг это часть отрисовки, которая не может быть выполнена на GPU и должны быть выполнена на CPU.

Низкоуровнево это выглядит так:
при рендеринге layer'a который требует off-screen рендеринг, GPU останавливает процесс рендеринга и передает управление CPU, который выполняет все необходимые операции и возвращает контроль обратно GPU, который затем продолжает процесс рендеринга.

В дополнение к оверхеду по смене контекста, off-screen рендеринг также требует выделения дополнительной памяти.

Кейсы которые приводят к off-screen рендерингу:
🟣Кастомный drawRect (даже если мы просто заполняем background цветом)
🟣CALayer corner radius
🟣CALayer shadow
🟣CALayer mask
🟣Любая кастомная отрисовка с использованием CGContext

Как найти проблему с off-screen rendering?
В случае с corner radius, проблему можно решить отрисовав контент с округленными углами заранее. К примеру, если мы хотим показать аватарку с округленными углами, вместо того чтобы выставлять cornerRadius у UIImageView, мы можем отрисовать аватарку с округленными углами и соотвествущим фоном за ними. Таким образом сделав сделав округленные углы частью bitmap'a.

В случае с тенями, мы можем заранее посчитать и выставить shadowPath у layer'a, либо использовать картику теней для достижения нужного эффекта.

💎 В ноушене уже полная статья со всеми советами, туториалами и примерами в коде
Please open Telegram to view this post
VIEW IN TELEGRAM
91
23
🧵 Thread в Swift

В 95% случаев современные разработчики используют GCD как инструмент для многопоточности. Но иногда, нам требуется создать отдельный тред для дополнительных задач. В Swift мы легко сделаем это с помощью Thread.

Собрал подборку статей про:
- Основные советы по Thread: создание, синхронизация, завершение
- Исследование потоков в Swift
- Жизненный цикл Thread'ов

🌿 Еще больше задач и примеров про них тут
Please open Telegram to view this post
VIEW IN TELEGRAM
7
Протокол Sequence

Мы часто используем готовые коллекции языка, такие как Array, Set, Dictionary. Но что, если я захочу сделать свою? Swift легко позволяет это сделать с помощью протокола Sequence.

Дока эйпл говорит:
Тип, обеспечивающий последовательный итерационный доступ к своим элементам.


Примеры работы в скриншотах.

Полезные ссылки:
- Sequence
- Use Sequence & IteratorProtocol Protocols in Swift

🌿 Еще больше вопросов и задач в самой большой базе для собесов
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
11