iOS Dev
Открыть в Telegram
👨💻Автор: Виктор Грушевский (@Viktorianec) ⚒️ База: https://boosty.to/ios_dev | 🤖 @iOSIQBot | https://iosiq.ru 🍏Канал об iOS-разработке, алгоритмах и архитектурах ⭐️ Подготовка к собесам ⭐️ Код. Много кода. #ios #mobile #swift
Больше7 999
Подписчики
+424 часа
+427 дней
+8130 день
Архив постов
8 000
Динамическая адаптация к доступному пространству с помощью ViewThatFits
ViewThatFits - это компонент SwiftUI, доступный с iOS 16.
Вкратце принцип работы следующий: ViewThatFits выбирает первое child view, чей идеальный размер по заданным осям впишется в предложенный размер.
Обычно это происходит в порядке от наибольшего к наименьшему, но, так как наше вью иногда может поместиться только вдоль одной оси, порядок может быть нарушен.
По умолчанию ViewThatFits ограничивается по горизонтальной и вертикальной осям.
📖 Неплохой пример использования ViewThatFits есть тут и в официальной документации.
😃 iOS Dev8 000
Обнаружение и устранение зависаний в приложениях для iOS
📖 В этой статье рассмотрена одна из самых частых причин снижения производительности в iOS-приложениях.
Спойлер: причина в сложных вычислениях в главном потоке.
Рассказано, как обнаружить зависание используя App Hangs Detection и Instruments, смоделирован сценарий зависания интерфейса в проекте SwiftUI и продемонстрированы шаги для устранения этой проблемы.
✅ Большой разбор возможных кейсов проблем с производительностью, причин зависаний и способов предотвращения такого поведения есть 💰тут и ⭐️ прямо здесь.
😃 iOS Dev
8 000
Структурная идентичность в SwiftUI
В отличие от традиционных UI-фреймворков, когда мы вручную отслеживаем и обновляем элементы интерфейса, SwiftUI автоматически выполняет перерисовку, когда это необходимо.
Однако перерисовывать все подряд — неэффективно.
И поэтому нам может помочь структурная идентичность — с её помощью SwiftUI решает, какие вью действительно нужно перерисовывать, сохранив производительность.
📖 В этой статье Наташа Фадеева на примерах объясняет, в чем особенности такого подхода и какую роль играет идентичность, например, в списках.
😃 iOS Dev
8 000
iOS Conf SG 2025: подборка докладов
В январе прошла одна из крупнейших конференций по iOS и новый набор лучших презентаций уже доступен.
Рекомендую обратить внимание на эти доклады:
📺 Isolation, actors, sendable… Глубокое погружение в параллелизм
Donny Wals рассказывает об изоляции (кстати, напомню про этот пост), акторах и многом другом, чтобы наконец разобраться, что на самом деле пытается сказать нам компилятор, когда выдает загадочную ошибку.
📺 Заблуждения про тестирование и как использовать тесты для более быстрой разработки
В этом выступлении Krzysztof Zablocki делится лучшими подходами к тестированию при работе над Sourcery, New York Times и Arc Browser.
📺 Создание приложений, которые выделяются
Klemens Strasser, который получил 2 номинации Apple Design Award и даже победу, делится своим опытом.
📺 10 лет Swift: что произошло за это время
Swift, который мы пишем сегодня, почти не похож на Swift, который мы писали, когда он появился 10 лет назад. Чему мы научились за это время и какие изменения еще предстоят? В этом докладе на эти вопросы пробует ответить Пол Хадсон.
📺 За пределами программирования: необходимые софт-скиллы для успешной карьеры в iOS
Спикер делится советами, как строить более прочные отношения, преодолевать трудности на рабочем месте и как софт скиллы способствуют профессиональному росту
🔗 Эти и другие доклады доступны здесь.
😃 iOS Dev
8 000
Picker в SwiftUI: примеры кода
Это один из самых часто используемых элементов, который позволяет выбирать пользователям из набора значений. Возможно, наиболее известные стили это сегмент-контрол и меню-пикер.
📖 В этой статье на несложных примерах рассказано, как создать такой пикер и настроить нужное отображение.
😃 iOS Dev
8 000
Примерно раз в год я прошу вас, читатели, помочь улучшить канал: подсветить недостатки, указать, что можно сделать иначе, поделиться идеями и мыслями в целом.
Сейчас как раз пятница, так что если у вас будет пара минут свободного времени, буду рад прочесть любые ваши отзывы.
По традиции, форма анонимная, ни один вопрос не обязательный, но все ответы совершенно точно будут прочитаны и каждое мнение будет иметь значение.
😎 Пройти опрос можно по этой ссылке.
😃 iOS Dev
8 000
Реализация пошаговой анимации в SwiftUI
На talk.objc.io вышел бесплатный эпизод, посвященный созданию анимации с комбинацией хэдера и нескольких ячеек (которые должны появляться в шахматном порядке и учитывать изменения прозрачности и градиента).
📖 Выпуск с видео и примерами кода доступен здесь.
😃 iOS Dev
8 000
Кровь, пот и пиксели
Перед обратным перелётом из Манчестера вспомнил про вашу чудесную подборку книг и решил чем-нибудь занять 5 часов. Спасибо, что на пути оказался один из магазинов blackwells с прайсом за книгу в 12 фунтов.
Признаюсь, я ждал историй успешного успеха, и отчасти поэтому занизил изначальные ожидания. Но Джейсон Шрейер не стал описывать сказки, как сделать в гараже собственный GTA VI. Вместо этого он сосредоточился на реальных трудностях не только корпораций-гигантов вроде Blizzard, но и инди-разработчиков, например, целая глава выделена для истории Stardew Valley.
Конечно, я не буду делиться спойлерами, чтобы не уменьшать потенциальный интерес от чтения. Но не могу не вынести пару мыслей касаемо разработки ПО в целом, а не только игр.
Проблемы были и будут всегда, вопрос лишь в том, как именно на это реагировать не только в здесь и сейчас, но и в долгосрочной перспективе. Ведь часто бывает так, что у нас бывает только вектор развития (или как верно заметил Шрейер, работая в огромной корпорации вы как будто находитесь на корабле и плывёте куда-то на запад, но куда именно - неизвестно).
Порой крайне сложно (если вообще реально) добиться, чтобы изначально поставленные годовые планы были достигнуты в нужный срок и со всем объёмом.
И наша задача как разработчиков постараться описать как можно больше корнер-кейсов до начала реализации, чтобы наш корабль не превратился в призрак.
😃 iOS Dev
8 000
Создание UDP-сервера и клиента в Swift на базе фрейморка Network
Сетевая модель OSI описывает, каким образом устройства в локальных (и глобальных сетях) обмениваются данными.
Всего у неё 7 уровней и каждый из них выполняет определённую задачу (скорее всего вы и так это знаете, обычно это проходят на 2-3 курсе универа).
Так вот, на прикладном уровне чаще всего нам достаточно URLSession.
Но вот для сетевых задач более низкого уровня (работа с TCP и UDP), фреймворк Network предоставляет более полный контроль на транспортном уровне. Это обеспечивает большую гибкость и эффективность по сравнению с URLSession.
📖 В этом материале от нашего читателя Максима Егорова вы можете познакомиться с тем, как написать свой UDP-сервер и клиент на несложном, но любопытном примере.
🛠 Полный код проекта доступен здесь.
😃 iOS Dev
8 000
Музей науки Манчестера
В эти выходные нахожусь в Манчестере, и хотя красивых эпл сторов тут нет (кто давно читает канал, знает, что тут можно увидеть необычные магазины изнутри), я просто не мог не заглянуть в музей, посвященный знаковым изобретениям.
Вообще, локация этого музея сама по себе необычная, для этого выбрана территория бывшего первого в мире пассажирского вокзала (Манчестер—Ливерпуль-Роуд).
Понятен и акцент на исторические достижения в области промышленности. Но лично для меня было интересно посмотреть на реплику первого в истории компьютера, в котором можно было хранить инструкции выполнения программ в памяти.
И хотя он описан как маленький и примитивный (для своего времени), да и название у него символичное Малыш (или baby) сейчас эта махина выглядит просто огромной.
27 тонн, 15 на 7 метров с потребляемой мощностью в 150+ кВт. Вычислительная мощность — 357 операций умножения в секунду. При этом само умножение было реализовано очень любопытно и по факту 1 умножение равнялось 14 операциям сложения.
После такого задача писать мобильные приложения кажется немного проще 😌
😃 iOS Dev
8 000
Новый инструмент анализа производительности: Processor Trace
Длительное выполнение операций в главном потоке может привести к самым различным проблемам: от подвисаний и проблем отображения вплоть до того, что приложение перестанет отзываться в целом.
🛠 В Xcode 16.3 Beta 2 появился новый инструмент для проверки нагрузки: Processor Trace.
С его помощью можно получить информацию о выполняемом коде, включая ветвления и инструкции.
Но, как обычно, есть и большое но: мы можем использовать его только на M4 и на устройствах iPhone 16 и выше.
И недостаток поменьше: при использовании трассировки девайс будет работать приблизительно на 1 % медленнее.
Благодаря новому инструменту можно проверять активность процессора (и уже затем мы можем решать, что реально вынести в фон с помощью Swift Concurrency или dispatch queue).
📖 Обратите внимание и на этот пост с советами по повышению производительности.
😃 iOS Dev
8 000
Симметричные и асимметричные эффекты в SwiftUI c добавлением модификатора Scroll Transition
📖 Делюсь неплохим гайдом с примерами кода по добавлению эффектов при скролле, важно помнить, что это доступно только с iOS 17.
А ещё напомню, что в канале есть несколько полезных постов:
🔗 Добавление растягиваемого заголовка в ScrollView с параллакс-эффектом для SwiftUI
🔗 Реализация эффектов ScrollView
🔗 Ещё один разбор ScrollTransitionConfiguration
А для UIKit можно чекнуть, как реализовать бесконечный скролл на базе UITableView + API HackerNews.
😃 iOS Dev
8 000
Grand Central Dispatch: большой разбор
Наш подписчик подготовил фундаментальный разбор GCD, и в отличие от многих аналогичных статей, наполнил его примерами, над которыми можно (и нужно) подумать.
Среди основных тем:
🔘Основные концепты: thread, multithreading, GCD, task, queue
🔘Типы очередей: main, global, custom
🔘Quality of Service (QoS) и разбор приоритетов
🔘Последовательная и параллельная очереди
🔘Способы выполнения задач: async, sync
🔘Deadlock
🔘Упражнения для проверки знаний по GCD - весь код доступен на GitHub
Пообщавшись с Кириллом, было принято решение вынести некоторые задачи и в большую подборку.
📖 Оригинальную статью можно прочесть здесь.
Напомню, что доступ к этой и другим практическим темам можно получить 💰тут и ⭐️ прямо здесь.
😃 iOS Dev
8 000
Синхронное выполнение задач в iOS-приложениях
Все iOS-разработчики справедливо беспокоятся о потенциальной блокировке основного потока. Поэтому практически всегда длительные задачи переносятся с него, чтобы сохранить отзывчивость приложения..
Но на самом деле, если процесс короткий, как справедливо подмечает Мэтт в своей статье, такое смещение может плохо сказаться на производительности. Так как хотя затраты на переключение минимальны, такая операция на/из потока не является бесплатной.
Добавление в код параллелизма сопровождается увеличением сложности сразу по нескольким направлениям (и оно может быть существенным).
📖 Больше примеров и полезных размышлений можно прочитать в оригинальном материале.
А разбор других (не менее важных) вопросов в разработке, подборку вопросов по многопоточности и многое другое можно найти 💰 в закрытой базе и ⭐️ прямо здесь.
😃 iOS Dev
8 000
Промпт-инженеры и их зарплаты
В канале я регулярно поднимаю вопросы, связанные с AI (от проблем у Stackoverflow, запрета использования в Apple до опросов).
И хотя польза от них есть, ведь эти инструменты можно использовать для решения вещей вроде базовых штук, связанными с анимациями или поиском каких-то свойств (буквально вместо поисковика), но есть то, чего стоит опасаться.
Во-первых, запросы на основе реального корпоративного кода часто запрещены (и я поддерживаю этот запрет, если только это не вами созданная и обученная сетка в локальном окружении).
Во-вторых, знаю ребят, которые пытались юзать ChatGPT (и аналоги) для решения алгоритмов и ломались уже на вещах уровня medium в литкоде. Особенно когда речь идёт о корнер-кейсах или нетривиальных условиях.
Будет неловко, если этот код попадёт в продакшен, как считаете?
В-третьих, и об этом ниже, на мой взгляд развитие ИИ должно было привести к решению базовых, даже бытовых вещей и оставить человеку возможность создавать что-то новое.
Но вот в чём парадокс, происходит ровно наоборот, хотя пару десятков лет назад казалось разве робот может написать симфонию.
Люди создают музыку с использованием нейросетей, рисуют картины, программируют и даже пишут книги.
Достаточно почитать про бум книг на амазоне, целиком придуманных нейросетями. Или про то, что произошло с медиумом, на котором ребята с чашкой чая пилят десятки пустых, наполненных водой, статей.
На счёт зарплат таких специалистов - отдельный разговор. Допустим, подписка на ChatGPT стоит от 20 до 200 долларов. Какое образование необходимо, чтобы пользоваться этим инструментом в IT-сфере?
Как думаете, должна ли быть отдельная должность с ограниченным пулом задач для промпт-инженеров в iOS, возможно ли это в целом? Могут ли у них быть собственные грейды?
😃 iOS Dev
8 000
Простая настройка модуляризации для iOS-приложения
При этом подходе можно добиться целого ряда важных преимуществ.
Например, разбиение приложения на модули поможет не только облегчить совместную работу над проектом и повысить тестируемость, но и при правильных настройках улучшит скорость сборки.
📖 В этой статье показано, как можно структурировать такой проект (с использованием Core/Domain/Presentation слоёв), и, что немаловажно, как масштабировать этот подход для реализации более сложных и объёмных приложений.
🛠 Код доступен на GitHub.
🔗 В канале можно и посмотреть на подход Spotify к реализации модульной архитектуры.
А познакомиться с разными подходами для выбора нужной архитектуры проекта (и посмотреть на то, какие могут быть подводные камни) можно как всегда вот здесь (или же ⭐️ прямо тут).
😃 iOS Dev
8 000
Task.sleep() vs Task.yield(): Объяснение различий
В Swift Concurrency можно использовать
Task.sleep() и Task.yield(), чтобы позволить определенной задаче «заснуть» или «выйти» на определенный период времени.
И хотя оба варианта выглядят и ведут себя похоже, есть несколько различий, о которых полезно знать.
📖 В этой статье Антуан рассказывает про оба способа и объясняет, какие есть области применения в приложениях.
😃 iOS Dev8 000
Рисование карт с помощью Swift Charts
Стандартный фреймворк Swift Charts это мощный инструмент для отображения данных с помощью самых разных способов.
В своей статье Артём Новичков вдохновился крутой сессией с WWDC и придумал необычное решение с комбинацией GeoJSON и MapKit.
📖 А что из этого вышло можно увидеть здесь.
🛠 Код проекта на GitHub.
😃 iOS Dev
8 000
Что происходит, когда вы перемещаете файл в git?
Это интересный вопрос, поскольку каждый из нас работает с гитом постоянно. Кто-то предпочитает Xcode или Tower, кто-то юзает консоль, но так или иначе понимание принципов важно.
Многие считают, что коммиты в git - это диффы изменений, но Бруно Роша в своей статье опровергает этот тезис. Коммиты это снэпшоты (кроме исключения): то есть при любом изменении в файле, git будет хранить полную копию этого файла в репозитории.
Советую посмотреть в частности на то, как именно гит понимает, когда у нас два одинаковых файла (хоть и с разными именами).
📖 Про ряд других любопытных кейсов также можно почитать в оригинальной статье.
Не забудьте и про этот пост, где понятно рассказано об основах работы с гитом для iOS-разработчиков.
😃 iOS Dev
8 000
Обновление вопросной секции для подготовки и проведения собеседований
У меня две новости (обе хорошие). Первая — вышло в публичный релиз обновлённое приложение (больше тем, вопросов на чтение кода, усложнен режим хардкора и больше интерактивности в лидерборде). Доступ как и прежде бесплатный и для всех.
Вторая - расширена вопросная база для подготовки к собеседованиям. Тут можно найти детальные ответы на испытания в приложении и многое другое.
В закрытой базе добавил больше тем для разработчиков начального и среднего уровня. Можно проверить себя в чтении кода и вновь вспомнить о не самых простых вопросах.
🧠 Что вы получите, подписавшись сегодня: ➡️Вопросы на чтение кода ➡️Многопоточность ➡️DispatchQueue: практические вопросы ➡️Swift Concurrency ➡️Алгоритмы: терминология и примеры ➡️Память: ARC, side table, флаги, утечки ✅А также доступ в закрытый чат, ранние релизы приложения iOS IQ, тонну теории и многое другое.Специальное предложение уже доступно 💰 в бусти и ⭐️ прямо здесь. 😃 iOS Dev
Уже доступно! Исследование Telegram 2025 — ключевые инсайты года 
