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

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

Автор: @lvbond Senior iOS Yandex, ex-Avito, VK
Download Telegram
готовим подборки задач и решений для тренировки с АИшками. Промежуточный результат.

Над какими задачами у вас ломаются аишки? Какие модели юзаете? Где наоборот помогает?
8
🌿 Swift Concurrency Tips: Task cancellation

В сентябре мы немного переключимся от Swift Concurrency к AI агентам и llm-кам. Но потом вернемся, чтобы лучше структурировать контент. Пока буду делать новую рубрику Swift Concurrency Tips. Начнем с самого популярного.

Многие думают, что вызов Task.cancel() моментально останавливает выполнение. Но это не так: таска лишь помечается как отмененная, а продолжит работать, пока сама не проверит свой статус.

Таска сама должна проверить свой статус и для этого у нас есть:
🟣Task.checkCancellation() — этот метод проверят была ли задача отменена через cancel(). И если да, то кидает ошибку CancellationError. Тут главное не писать try? у Task.checkCancellation. Он "проглатывает" ошибку и не отменяет таску

🟣Task.isCancelled подходит в случае если нам не нужна ошибка

Вывод: Swift сам вашу задачу не остановит — добавляйте проверки.

Полезные ссылки:
- How to cancel a Task
- Task Cancellation in Swift Concurrency
- How does Task.checkCancellation knows task?

🧬 А в ноушене я собираю расширенный сборник самых полезных советов. Получить доступ можно 💰тут или ⭐️ тут
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
12
Мифы разработки и Reference Promotion

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

Например, один из вопросов для споров: "когда value type хранится в куче?". Этот вопрос далеко не всегда практический, но часто его задают, чтобы оценить эрудицию и начитанность кандидата статьями и опытом. Это неплохая оценка, ведь показывает насколько глубоко любит копать кандидат чисто на интересе. Его задали сегодня в нашем чате.

Тут обычно вспоминают Boxing.

Boxing — это когда значение value type (структуры или enum) кладут в специальный объект в куче. Внутри box хранится само значение, а переменные получают ссылку на него.


Когда происходит Boxing? (Вспоминая великий фильм Seven хочется пошутить What's in the box????). Компилятор прибегает к этому в нескольких случаях:
- когда value type нужно хранить в Any или протоколе
- когда переменную захватывает замыкание и она должна пережить стековый фрейм
- внутри инициализаторов структур, чтобы мутировать self, пока он ещё не до конца сконструирован

Одно из заблуждений, которое встречал на собесах, это ожидаемый ответ "когда структура хранит в себе классы". Но это не совсем правда.

В "куче" структура только "бывает" при инициализации. После выхода из инициализатора box уничтожается, и структура может снова жить как value.

В итоге, как правильно отвечать на вопрос "живет ли структура в куче"?

Обычно структура — это value type, и она хранится в стеке или inline в другом объекте. Но во время инициализации или в особых случаях (замыкания, протоколы, Any) компилятор делает boxing — временно помещает структуру в кучу.
161
📺 Swift Concurrency Tips

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

Я напомнию, что действует последние дни акции. Потом не говорите, что не предупреждал.

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

🌿 Получить доступ можно тут или тут
Please open Telegram to view this post
VIEW IN TELEGRAM
6
Ну и открываем тему месяца про AI на практике этой картинкой
182
Overeducated & underexperienced

Недавно в комментариях на одном канале тимлидов наткнулся на классный фидбэк про систему образования.

Там сравнивали подходы вузов, отмечая СНГшную систему как ту, что даёт много теории и базы, но мало практики. Приведу цитату::
>Так обучают в традиционной российской школе и вузах:
В своё время от канадца услышал тот же фидбэк о выпускнике МГУ: overeducated & underexperienced.


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

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

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

В одной из прошлых компаний действовало правило "Если кандидат говорит слишком много теории, но не справляется с простыми практическими задачами — это красный флаг".

Что это значит? Не нужно путать эрудицию и практику. Бывают кандидаты, кто идеально рассказал управление памятью: компилятор, сайд таблицы, стэк и куча, isa поинтеры и всё всё всё. Но только ему даешь изи задачу на утечку памяти, то он сыпится. Что делать с такими кандидатами?

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

Знать как делать идеально != делать идеально. Именно поэтому в этом канале и закрытой базе я делаю акценты на задачники, а не теорию. Её отлично может упаковать уже нейронки, а руку набить до идеальности могут только многократные неидеальные повторения. Нужно найти границу между overeducated и underexperienced.
16
Forwarded from CodeCamp
Оп-оп, теперь готовиться к собесам с ChatGPT стало проще — в нейронку завезли интерактивные тесты по любой теме.

Пишем промпт с темой и в конце добавляем «используй quizgpt» — на выходе получаем мини-тест, который проверит ваши знания 😊
Please open Telegram to view this post
VIEW IN TELEGRAM
15
Выводы лета и планы на осень

ЛЕТО ВСЁ! Давайте сделаем краткие выводы.

Главное событие — я переехал в Москву. Переезд, ремонты и приемка квартиры заняли много времени и сил. Не получилось поработать над всем, но все же вот выводы:

🟣Воркшоп SwiftUI System Design Interview
🟣Сделали воркшоп с призерам телеграма по созданию сложных коллекций в UIKit
🟣Обсудили почему самые большие зп у MobDevOps и что они делают
🟣Сделали много контента в закрытой базе по SwiftUI и Swift Councurrency
🟣Я выступил на митапе с темой архитектуры
🟣Объявил о начале разработки уникального проекта

Какие планы на осень? Они более насыщенные
🟡наконец нашел нужную структуру ведения контекта. Это будет тема месяца с обязательным созвоном комьюнити, приглашенным гостем и регулярными задачами. Состояние потока и структуры 80 lvl.
🟡Мы уже закомитились с крутыми экспертами по топовым воркшопам/подкастам. Возможно, даже за пределы этого канала.
🟡Сайт тренажер в закрытой/открытой бете
🟡Видео контент. Сейчас я много работаю с социальными сетями и начинаю лучше понимать что нравится людям. Больше емких, но полезных материалов
🟡Лонгридов на канале будет меньше. Больше сухости и пользы. Лонгриды переедут в ноушен и бусти)
🟡Попробуем собраться в оффлайне. Пока это сложно, но может порешаем на онлайн встречах. Их будет больше (как минимум раз в месяц 😂).

💎 Ну и я напоминаю, что 06.09.2025 будет созвон комьюнити по важной теме "AI инструменты в iOS разработке". Мы там в свободной форме поделимся опытом использования. Не стесняйтесь готовить любой вопрос по теме или нет.
Please open Telegram to view this post
VIEW IN TELEGRAM
9
🎒Подборка настроек AI инструментов для iOS инженеров

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

Начнем с подборки самых полезных видео о настройке Cursor/ChatGPT/Claude:

💎 How to use Cursor AI for iOS App Development. Легкая вводная лекция с основами по использованию самых популярных инструментов. Отлично для быстрого знакомства

💎 AI-Assisted Coding for iOS Development: CursorAI and Upcoming Swift Assist. Неплохой вводный гайд по Cursor. Можно понять как работать с AI-ролями и контекстами.

💎 How to use Windsurf AI for iOS App Development. Если вы думали, что Cursor — это монополист, то нет. Есть WIndsurf. По некоторым мнениям он дешевле и лучше.

💎 My Top Cursor Tips. Еще одна статья, которая помогает разобраться с настройками Cursor'а: ревью, агенты, rules, pre-promt'ы

💎 How To Use Cursor AI: A Complete Guide With Practical Example. Еще один гайд как юзать курсор в продакшен среде.

Все гайды дают много общих советов, но они полезны чтобы своими руками пощупать. Тут главное помнить, что АИ — это не сеньор, а джун, которого нужно менторить и обучать. В будущих постах мы подробнее поговорим о самых полезных фишках и советах.
Please open Telegram to view this post
VIEW IN TELEGRAM
1122
😡 СКИДКА 50% В ДЕНЬ ЗНАНИЙ 😡

Мы тут подумали и решили сделать очень щедрую скидку. Вы можете получить все материалы дешевле х2

Самая большая база материалов от практиков почти бесплатно:
- почти тысяча вопросов и задач для подготовки к собесам и регулярным тренировкам
- Около сотни статей
- Открытое комьюнити из ~400 инженеров в чате
- Два десятка уникальных видео-интервью и воркшопов

Успевай по очень щедрым условиям. Давай развиваться вместе.

Вступай в самое большое закрытое iOS сообщество практиков.

🧬 Получить доступ можно 💰 тут или ⭐️ тут
Please open Telegram to view this post
VIEW IN TELEGRAM
6
🤢 Три проблемы со Swift Concurrency за последние две недели

Мы уже много раз говорили, что каждый новый инструмент дает новые проблемы. Облечая одни проблемы он приносит новые: SwiftUI, AI, теперь и Swift Concurrency.

Автор статьи сравнивает SC с GCD, NSOperation и реактивщиной (?). Тут подмечает, что раньше понимал как и на каком потоке вызывается код, а в SC — такого интуитивного понимания нет 😡

Тут он дает три свежих примера на практике:

🔘При использовании пушей ему не ясно, на каком именно потоке вызывается метод делегата userNotificationCenter(_:didReceive:). В отладке всё ок, но в проде через TestFlight приложение крашилось из-за непредсказуемости контекста выполнения

🟣Он пытался обернуть устаревшее апи CMMotionActivityManager в withCheckedContinuation и сделать асинхронный код через await. Но столкнулся с плавающими deadlock’ами, что “висли” без завершения.

🔘Автор использовал actor RailwayTracker, ожидая, что он обрабатывает входящие данные последовательно. На практике оказалось, что actor допускает reentrancy: новые вызовы могут прерывать текущую обработку, что нарушает порядок.

🎒 Автор подводит итог, что SC — это мощный инструмент, но ему нельзя полностью доверять. Даже опытные разрабы регулярно сталкиваются с багами и непредсказуемым поведением, особенно на стыке со старыми API.

Используя этот инструмент нельзя просто брать набор готовых решений, а не выключать критическое мышление и эксперименты.
Please open Telegram to view this post
VIEW IN TELEGRAM
9
This media is not supported in your browser
VIEW IN TELEGRAM
Увидел в большом канале как ругают apple разрабов за то, что не сделали бесконечный список в UIDatePicker'е. В стиле "хаха, вот лохи, решают там свой литкод, но сделать фичу нормально не могут"…

но тут есть два момент:

1) компания ЯБЛОКО почти не дает литкод задачи и алгосы. Это мы узнали от Симы, у которой я брал интервью, и которая взлетела до космоса в карьере выступив на WWDC в Купертино.

2) уверен, что это даже не баг, а минорный хак для перфоманса и есть оправдания в работе некоторых условий". А если даже и есть, то чаще это тонет в ZBT, который юзают все ФААНГ компании.

Для вас это реально проблема или админы каналов делают выстрел в ногу такой критикой?
321