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

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

Автор: @lvbond Senior iOS Yandex, ex-Avito, VK
Download Telegram
🌄 Swift Concurrency и протоколы: главные грабли и как их обойти

Мы уже говорили про изоляцию. Теперь посмотрим, где начинается настоящая боль

Почему протоколы и Swift Concurrency часто конфликтуют?

🔘Твой класс помечен @MainActor, а протокол требует nonisolated метода. Получаешь по лицу ошибкой “Main actor-isolated method cannot satisfy nonisolated requirement”.

🔘Протокол ожидает sync-метод, а ты хочешь внутри сделать await. Приехали. Строй адаптеры или таски.

🔘Если тип пересекает границы акторов, он должен быть Sendable. Но многие протоколы (особенно старые) об этом не знают. Привет, гонки и нестабильность

Именно поэтому работа с протоколами в SC это неочевидный источник багов. А на деле танцуешь с изоляцией и обертками.

Это мастхев для тех, кто пишет на Swift, и хочет понять как совмещать протоколы и SC без боли

Полезные ссылки:
- ConcurrencyRecipes
- Understanding Concurrency in Swift 6 with Sendable protocol, MainActor, and async-await
- Exploring Actors and Protocol Extensions

Еще больше примеров на днях добавлю в ноушен
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
161
Почему 90% SwiftUI-приложений работают с DI неправильно

В SwiftUI культ @EnvironmentObject. Все тащат через него зависимости, как будто другого пути нет. Потом удивляются хаосу в коде.

Mohammad Azam, автор крутых заметок про SwiftUI архитектуры, рубит правду. Этот подход чаще ломает архитектуру, чем помогает.

Он напоминает про три проверенные практики:
- constructor injection
- environment values
- environment object.

И говорит прямо — хватит копировать модные паттерны

Статья дает более зрелый взгляд. Учит использовать дифференцированный выбор инструментов вместо копирования популярных практик.
721
MCP дока Apple

На нашем созвоне комьюнити мы очень вкратце поговорили про MCPшки.

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

А так. Это новый формат инструментов, которые также станут habbit breaker'ами. Нам не нужно никуда ходить и открывать лишние вкладки. Всю инфу и нужные апи мы будем держать в одном контексте и среде.

Чем полезна эта штука?
- Ускоряет разработку за счет прямого доступа к доке
- Улучшает качество ответов и советов AI тулкитов
- Дает проверенный источник, а не из сборников непонятных статей

Если вы не знаете что такое MCP, то бегом изучать:
- What Are MCP Servers? The New AI Trend Explained for Everyone
- Что такое MCP: Расставляем точки над i
51
🧍‍♀️ Когда стоит юзать Actor?

Коллеги.

Мы с вами уже много и долго изучаем SC:
- копаем пропозалы
- лезем в компиляторы
- изучаем реальные практические задачи

Но так и не дошли до важного и базового вопроса: "А когда же юзать Акторы?".

Надо исправляться.

Собрали с комьюнити основные правила и полезные статьи:
- Protect mutable state with Swift actors
- Point Free: Concurrency
- Docs: Concurrency
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
71
Коллеги-самураи, поздравляю с днем программиста

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

Смотрите че нейросеть сделала. Чего их бояться….
1274
📺 Задачи для собесов Swift Concurrency: Изоляция и компиляция

Ну и в честь праздника возвращаю долги.

Подборка задач для тех, кто собирается воевать с компилятором в Swift 6:
- @preconcurrency для старых библиотек
- MainActor + протокол UI-сервиса
- @Sendable

🧬 Сегодня последний день скидок. Получить доступ можно 💰 тут или ⭐️ тут
Please open Telegram to view this post
VIEW IN TELEGRAM
1
Месяц с whoop

Я уже месяц хожу с браслетом и в коментах прошлого поста обещал сделать обзор.

Ну че. Давайте.

Из плюсов:
- почти две недели батарея.
- нравится режим recovery. Осознанней относишься ко сну и отдыху.
- время стресса. Иногда бывали дни, когда я был в состоянии стресса по 4 часа. Это жестко. После них чаще начал себя ловить на пустых переживаниях. Помогает не злиться на долгие лифты :)
- Сон стал более качественным. Стараюсь ложиться к 11 и вставать рано.

Минусы:
- иногда по привычке смотрю на браслет как на часы.
- UX приложения недружелюбный. Есть много других фишек, которые либо лень изучать, либо не знаешь зачем.
- хуже трекает спортивные упражнения.
17
📺 Советы по перфомансу: Делаем инстаграм* быстрее

Прикольная серия статей от запретограма* как они ускоряли сайт/приложение.

Тему оптимизаций и скорости загрузки контента кто-то так или иначе копал. Сначала менеджеры говорят "мы не будем это делать в MVP". А потом "А че так медленно?". Знакомая история?

Вообще тема перфоманса не так проста, как кажется. В крупных компаниях как ВБ, Авито, Озон и тп даже есть отдельная мобильная команда Perfomance, чьи задачи только и связаны как с ускорением контента.

Я решил поискать интересный контент на эту тему. В чате сообщества кинули топовые статьи как инстаграм улучшал работу сторисов, фильтров и других.

Главные советы:

1️⃣ Prefetching
Prefetch контента должен быть не сразу всего, а только приоритизированного. Не весь контент важен. Не стоит заранее префетчить весь контент. Не до всего пользователь дойдет

2️⃣ Контент
Не забывайте про размеры и качество изображений. Очень актуально для слабого соединения.

3️⃣ Chuncking
Инстаграм разделяет ответы на части везде, где можно. Пагинация, разрезание видео/фото, синхронизация клиента и сервера.

4️⃣ Кэширование
Кэш динамический в процессе просмотра он обновляется и актуализируется. Также все действия пользователя сначала записываются локально, а потом синхронизируются с бэком.

5️⃣ Размер кодовой базы
Не отдавайте много данных сразу. Большие модели могут лишний раз нагружать декодинг. Делайте много lazy loading'ов.

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

Статьи:
- Making Instagram.com faster: Part 1
- Making Instagram.com faster: Part 2
- Making Instagram.com faster: Part 3 — cache first
- Making instagram.com faster: Code size and execution optimizations

*запрещённая в РФ соцсеть компании Meta
Please open Telegram to view this post
VIEW IN TELEGRAM
11
релиз билды в 2к25
177
📺 Подборка статей по оптимизации видео и фото в iOS

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

Вот собрал интересные на мой взгляд статьи:

🟣How to optimize videos for iOS. Полезная статья где сравнивают форматы mp4 или mov, H.264 vs. HEVC, ну и базовым советам.

🟣iOS Performance — AVPlayer edition. Небольшой сборник советов как юзать AVPlayer если у вас список из разных видосов на экране.

🟣Discover media performance metrics in AVFoundation. WWDC про метрики видосов.
Please open Telegram to view this post
VIEW IN TELEGRAM
8
#Книги #Рекомендации

О понятности

«Я сделал это письмо длиннее, чем обычно, потому что у меня не было времени сделать его короче и понятнее». Блез Паскаль


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

Перекладывать ответственность на читателя за декодинг речи и мыслей — графоманская и незрелая позиция, какой я сам боле(ю)л.

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

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

Читаю книгу Ильяхова "Ясно понятно". Читал давно "Пиши, сокращай" 2015 года издания. Не мог полностью её принять. Избыточное сокращение казалось убивает уникальность и добавляет недосказанности, неочевидности, неясности. Как с тем примером про цикл for each и reduce в функции.

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

Сейчас увеличение "ясности" — особенно актуально. Когда языки программирования стираются метаязыками и разговорными. Когда мы меняем гуглинг на чатгпт, а IDE на MCP и терминалы. Когда наступает сингулярность и размываются грани взаимодействия людей и машин. Ценность понятности вырастает.
711
В iOS-безопасности нет «поставил и забыл»: инструменты и атаки меняются быстрее релизов.

Если сомневаетесь, что на клиенте всё прикрыто, новый сезон конференции Podlodka iOS Crew 22-26 сентября поможет закрыть дыры.

В программе:


• Региональные ограничения и поведение устройства. Как iPhone определяет доступные фичи для страны, что проверять и как воспроизводить это на практике — со Светославом Карасевым (hh ru).

• Обфускация в iOS. Какие подходы реально мешают реверсу, какие инструменты выбрать и как собрать свой пайплайн на SwiftSyntax — с Павлом Каретниковым (Газпромбанк).

• AppSec для iOS. От ландшафта атак до хранения данных и сети — практики, ошибки и советы, как внедрять безопасную разработку в командах разного размера.

• Финальный разбор мини-CTF. Неделю собираем флаги, в пятницу — разбор находок и выводы для прода — с Никитой Красновым (Альфа-Банк).

🔗 Подробности и регистрация: https://podlodka.io/ioscrew

Для подписчиков скидка 500 р по промокоду: ios_crew_16_7V9XMN
Скрытая цена генерации юнит тестов с помощью AI

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

Я этот хак узнал случайно. Как-то я писал несложную, но извилистую логику замены ссылок. И подбирал разные тесткейсы для курсора. Ожидая что с такой рутинной работой он изи справится. Но он всегда упускал какие-то корнер-кейсы. Тогда я взял юнит-тесты андроид разрабов и тупо ему сказал "Смотри, вот есть юнит-тесты на котлине. Напиши мне код на Swift, чтобы работал успешно на этих тесткейсах". И всё. Он сделал за 2 минуты именно тот код, что мне нужен.

Но у всего есть сайд-эффекты. Главная побочка аи-тулкитов — это потеря контроля. Бездумно генерируя код ты теряешь самую важную деталь — понимание как работает проект.

Знание доменной области (domain knowledge) — важная обязанность любого разраба. Например, кто-то пишет банковское приложение и знает особенности, правила, практики общей работы. И то, что на нее может повлиять. Например, выпилы приложений из сторов чаще в финтехах. А за неуплату налогов чаще строже карают чем за убийства...

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

Вот и автор не советует злоупотреблять автогенерацией тестов ведь:

1️⃣ Ручное написание тестов помогает понять домен
Когда разработчик сам думает, как покрыть разные случаи, ему приходится разобраться, как на самом деле устроены правила бизнеса (например, страховки, исключения, лимиты).

2️⃣ ИИ-генерация тестов может пропустить нюансы
ИИ работает по видимым шаблонам, по коду, который ему дали, но может не знать неизвестных деталей, не прописанных явно. Там, где нужен человеческий опыт, она может ошибиться.

3️⃣ ИИ-тесты хороши как вспомогательный инструмент, но не как полный заменитель
Автоматически сгенерированные тесты — хорошая основа или дополнение, но ручной подход даёт более глубокое понимание и гибкость.

4️⃣ Поверхностные знания бизнес-логики
Если разработчик довольствуется “зелёным” результатом тестов, не вникая, он может не увидеть, где логика нестандартная или изменится. В дальнейшем это может привести к ошибкам, когда правила домена эволюционируют.

Выводы: Лучше всего сбалансировать: использовать ИИ для поддержки, автоматизации, но стремиться к тому, чтобы разработчик сам писал ключевые тесты, особенно те, что связаны с правилами бизнеса.
7