en
Feedback
iOS Dev

iOS Dev

Open in Telegram

👨‍💻Автор: Виктор Грушевский (@Viktorianec) ⚒️ База: https://boosty.to/ios_dev | 🤖 @iOSIQBot | https://iosiq.ru 🍏Канал об iOS-разработке, алгоритмах и архитектурах ⭐️ Подготовка к собесам ⭐️ Код. Много кода. #ios #mobile #swift

Show more
7 880
Subscribers
-224 hours
-17 days
-5230 days
Posts Archive
iOS Dev
7 880
Архитектура SwiftData: паттерны и практики SwiftData ознаменовала важный шаг вперёд в области хранения данных. Она была призв
Архитектура SwiftData: паттерны и практики SwiftData ознаменовала важный шаг вперёд в области хранения данных. Она была призвана заменить Core Data чем-то более интуитивным: тем, что будет проще интегрировать в SwiftUI. Однако осталось несколько важных вопросов. Как именно мы должны проектировать приложение на её основе? Должны ли мы целиком полагаться на @Model и @Query, или можно абстрагировать их за протоколами для обеспечения гибкости? Как быть с бизнес-логикой? Да и как в целом нужно структурировать код для обеспечения надёжности и тестируемости в будущем. 📖 В этой масштабной статье можно узнать ответы на эти и другие вопросы: 🔘 Как структурировать модели данных 🔘 Где разместить бизнес-логику 🔘 Как писать модульные тесты 🔘 Как настроить работу Preview в Xcode 🔘 Как интегрировать CloudKit 🔘 Как работать с изменениями в слоях в будущем. 😃 iOS Dev

iOS Dev
7 880
ℹ️ Вышел первый стабильный релиз Swiftly - официального менеджера версий Swift Хотя актуальный релиз Swift по дефолту включен в Xcode, иногда может понадобиться другая версия для создания сервисов или, например, каких-либо инструментов командной строки. Установка надежной версии Swift (с нужными зависимостями) требовала действий вручную, которые, очевидно, могли приводить к ошибкам. 🛠 В этом релизе swiftly стал частью Swift toolchain. Кроме этого, добавлена и поддержка macOS для того, чтобы сделать возможной установку Swift отдельно от Xcode. Среди базовых фич: ➡️ Установка нескольких тулчейнов (и стабильные релизы, и снэпшоты). ➡️ Обновление установленных тулчейнов до актуальной версии. ➡️ Проверка доступных для установки тулчейнов с помощью list-available. ➡️ Совместное использование предпочитаемого тулчейна в качестве настройки проекта с помощью файла .swift-version. ➡️ Выполнение заданной команды с помощью подкоманды run. 📖 Официальная новость на сайте Swift. 😃 iOS Dev

iOS Dev
7 880
Разделение или работа в команде Удивительно, как в нескольких компаниях сразу идеи о том, как важно отделять рабочее от всего
Разделение или работа в команде Удивительно, как в нескольких компаниях сразу идеи о том, как важно отделять рабочее от всего остального, вышли буквально на мировой уровень. 📺 Несколько лет назад появился сериал Разделение, о котором я даже написал пару строк (и по случайному совпадению он завершал один из небольших квестов в нашем канале). К слову, линия мистера Милчека с его перфоманс-ревью и последующей рефлексией возможно найдет ответ и у некоторых разработчиков. 🎮 А ведь кроме этого вышла сначала it takes two, а в этом году не менее чудесная Split Fiction, в которой, к слову, секретное послание оставил и геймдизайнер. Пожалуй, крайне важная часть — умение работать в команде, ведь далеко не всегда всё зависит от мобильного клиента, или конкретно от разработчика. Тесное взаимодействие команд дизайна, тестирования, реализации на сервере и формирование продуктовых задач, которые попадают в спринт достигается за счёт синергии всех участников процесса. Кроме этого, одна из основных составляющих нашей работы состоит как раз в сложности разделения. Тяжело перестать думать о баге или какой-нибудь важной фиче, которую вот-вот и вы выкатите на прод, особенно перед релизом. И это может влиять и на менталку, и на какие-то дела вне работы. Поэтому довольно важно научиться разделять рабочие моменты и все, что находится за пределами, какой бы сложной и важной та или иная не казалась на первый взгляд. 🔄 Главное помнить, что умение переключать контекст - важнейший скилл. Не только в работе, но и в жизни. И это далеко не самый простой навык. 😃 iOS Dev

iOS Dev
7 880
12–13 апреля проводим Weekend Offer Mobile Устроиться в Яндекс за выходные — реально. Ищем крутых Android- и iOS-разработчиков с опытом работы от 3 лет, готовых работать в офисном или гибридном режиме в России. Подавайте заявку до 9 апреля — и всего за 2 дня пройдите все технические собеседования. После сможете пообщаться с нанимающими командами и выбрать ту, которая покажется самой интересной. Если всё сложится хорошо, сразу же пришлём вам офер. Узнать подробности и зарегистрироваться. Реклама. ООО "Яндекс". ИНН 7736207543

iOS Dev
7 880
Swift init() - особенности, примеры использования и подводные камни 📖 Статья, на первый взгляд полезная новичкам, на самом д
Swift init() - особенности, примеры использования и подводные камни 📖 Статья, на первый взгляд полезная новичкам, на самом деле описывает несколько проблем, с которыми могут столкнуться разработчики. Кирилл, который уже делился своим разбором Grand Central Dispatch, акцентирует внимание на нескольких важных аспектах. Например, почему UIView.init() всегда вызывается без параметров, а init(frame:) и init(coder:) переопределяются. Или, например, когда именно нужен required-инициализатор. Статья разбита на следующие логические блоки: Работа со структурами: - Memberwise initializer. - Optionals, var vs let. - Retaining a memberwise initializer. Работа с классами: - Designated initializer. - Convenience initializer. - Уменьшаем количество override. - Помощь компилятора. - required initializer: дженерики, протоколы, Self(), final. - UIView() и что скрывает документация. 😃 iOS Dev

iOS Dev
7 880
Как эффективно работать со SwiftUI в продакшене? Внедрение в существующие проекты, тестирование, производительность, архитект
Как эффективно работать со SwiftUI в продакшене? Внедрение в существующие проекты, тестирование, производительность, архитектура — вопросов по-прежнему много. Как сделать так, чтобы всё работало? Новый сезон онлайн-конференции Podlodka iOS Crew (31 марта – 4 апреля) будет посвящен SwiftUI. Глубокие доклады, технические разборы и реальные кейсы от опытных разработчиков. Сессии идут утром и вечером, можно совмещать с работой. 💡 Где печется SwiftUI — Георгий Остроброд (JigSpace, Latook Software) объяснит, как связаны SwiftUI и Metal, и покажет магию визуальных эффектов. 🛠 Как макросы изменили навигацию — Михаил Рубанов (Dodo Engineering) покажет, как макросы упрощают код, помогают объединять SwiftUI и UIKit и создают удобную навигацию, которую легко тестировать. 🏗 Архитектурные паттерны в SwiftUI — Борис Бугор (Aiphoria.AI) сравнит MVVM, Redux и TCA, чтобы выбрать лучший подход к управлению состоянием. 🔄 Из SwiftUI в UIKit и обратно — Дмитрий Куркин (Xymatic) разберёт грамотную интеграцию этих фреймворков без хаков. Конференция сосредоточена на практической пользе – всё, что узнаете, можно сразу применять в работе. 👉 Билеты и подробности: https://podlodka.io/ioscrew 🎟 А наш промокод iosdev15 дает скидку в 500р🥳

iOS Dev
7 880
Spectrum ring — реализация на Metal в iOS В рамках экспериментов по изучению возможностей шейдеров попробовал разложить несколько цветов в непрерывный ряд (и дополнил парой красивых эффектов). Варианты использования спектра вообще довольно значительны (от стандартного colorPicker в iOS до реализации самых разных волн и анимаций в музыкальных плеерах). ✅Реализация, референсы и код на SwiftUI+Metal уже доступен 💰тут и ⭐️ в телеграм. 🎆 В канале доступны и другие красивые эффекты. 😃 iOS Dev

iOS Dev
7 880
Как улучшить архитектуру кода с помощью принципов SOLID (с примерами на Swift) Эти принципы помогают сократить количество хао
Как улучшить архитектуру кода с помощью принципов SOLID (с примерами на Swift) Эти принципы помогают сократить количество хаоса на проекте с течением времени. Да и следование SOLID облегчает в целом сопровождение кода, тестирование и потенциальное масштабирование. Наш читатель Максим Егоров (уже знакомый вам по примеру работы с Network-фреймворком) в этот раз решил затронуть базу и показал на несложных примерах потенциальные ошибки, которые могут нарушать принципы, сформулированные Робертом Мартином, а ещё привёл варианты их исправления. 📖 Прочитать статью целиком можно здесь. 🧠 Напомню, что в приложении вы можете проверить себя не только в знании этих принципов, но и в других важных темах. 😃 iOS Dev

iOS Dev
7 880
Стратегии, позволяющие избежать мерж-конфликтов в проектах Xcode Каждый, кто работал в более-менее большой команде разработчи
Стратегии, позволяющие избежать мерж-конфликтов в проектах Xcode Каждый, кто работал в более-менее большой команде разработчиков (что уж там, даже двоих человек иногда достаточно), наверняка сталкивался с конфликтами при слиянии изменений. 📖 Tuist выпустили неплохой материал с разбором, почему такие проблемы вообще возникают, и как с этим может быть связан файл project.pbxproj в Xcode. А ещё они описали несколько вариантов решения: от использования workspace и SwiftPM до buildable folders в Xcode 16. 🔗 Кстати, вот тут можно познакомиться и с другими возможными причинами мерж-конфликтов. 😃 iOS Dev

iOS Dev
7 880
UIKit: подборка практических и теоретических задач (II часть) В новом блоке разобрал важные вещи, без которых сложно представ
UIKit: подборка практических и теоретических задач (II часть) В новом блоке разобрал важные вещи, без которых сложно представить нашу с вами работу (затронул hitTest, относительно новый automatic trait tracking и не только). В нашем канале много уделяется и SwiftUI, например в опросе несколько десятков человек попросили разобрать непростые анимации, к которым мы обязательно будем возвращаться. Кстати, если ещё не прошли опрос - самое время.
🧠 Что вы получите, подписавшись сегодня: ➡️Вопросы на чтение кода ➡️Многопоточность ➡️DispatchQueue: практические вопросы ➡️Swift Concurrency ➡️Алгоритмы: терминология и примеры ➡️Память: ARC, side table, флаги, утечки ✅А также доступ к ранним релизам приложения iOS IQ, несколько десятков важных тем, тонну теории и многое другое.
Получить доступ можно 💰тут и ⭐️ в телеграм. 😃 iOS Dev

iOS Dev
7 880
Динамическая адаптация к доступному пространству с помощью ViewThatFits ViewThatFits - это компонент SwiftUI, доступный с iOS 16. Вкратце принцип работы следующий: ViewThatFits выбирает первое child view, чей идеальный размер по заданным осям впишется в предложенный размер. Обычно это происходит в порядке от наибольшего к наименьшему, но, так как наше вью иногда может поместиться только вдоль одной оси, порядок может быть нарушен. По умолчанию ViewThatFits ограничивается по горизонтальной и вертикальной осям. 📖 Неплохой пример использования ViewThatFits есть тут и в официальной документации. 😃 iOS Dev

iOS Dev
7 880
Обнаружение и устранение зависаний в приложениях для iOS 📖 В этой статье рассмотрена одна из самых частых причин снижения пр
Обнаружение и устранение зависаний в приложениях для iOS 📖 В этой статье рассмотрена одна из самых частых причин снижения производительности в iOS-приложениях. Спойлер: причина в сложных вычислениях в главном потоке. Рассказано, как обнаружить зависание используя App Hangs Detection и Instruments, смоделирован сценарий зависания интерфейса в проекте SwiftUI и продемонстрированы шаги для устранения этой проблемы. ✅ Большой разбор возможных кейсов проблем с производительностью, причин зависаний и способов предотвращения такого поведения есть 💰тут и ⭐️ прямо здесь. 😃 iOS Dev

iOS Dev
7 880
Структурная идентичность в SwiftUI В отличие от традиционных UI-фреймворков, когда мы вручную отслеживаем и обновляем элемент
Структурная идентичность в SwiftUI В отличие от традиционных UI-фреймворков, когда мы вручную отслеживаем и обновляем элементы интерфейса, SwiftUI автоматически выполняет перерисовку, когда это необходимо. Однако перерисовывать все подряд — неэффективно. И поэтому нам может помочь структурная идентичность — с её помощью SwiftUI решает, какие вью действительно нужно перерисовывать, сохранив производительность. 📖 В этой статье Наташа Фадеева на примерах объясняет, в чем особенности такого подхода и какую роль играет идентичность, например, в списках. 😃 iOS Dev

iOS Dev
7 880
iOS Conf SG 2025: подборка докладов В январе прошла одна из крупнейших конференций по iOS и новый набор лучших презентаций уж
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

iOS Dev
7 880
Picker в SwiftUI: примеры кода Это один из самых часто используемых элементов, который позволяет выбирать пользователям из на
Picker в SwiftUI: примеры кода Это один из самых часто используемых элементов, который позволяет выбирать пользователям из набора значений. Возможно, наиболее известные стили это сегмент-контрол и меню-пикер. 📖 В этой статье на несложных примерах рассказано, как создать такой пикер и настроить нужное отображение. 😃 iOS Dev

iOS Dev
7 880
Примерно раз в год я прошу вас, читатели, помочь улучшить канал: подсветить недостатки, указать, что можно сделать иначе, поделиться идеями и мыслями в целом. Сейчас как раз пятница, так что если у вас будет пара минут свободного времени, буду рад прочесть любые ваши отзывы. По традиции, форма анонимная, ни один вопрос не обязательный, но все ответы совершенно точно будут прочитаны и каждое мнение будет иметь значение. 😎 Пройти опрос можно по этой ссылке. 😃 iOS Dev

iOS Dev
7 880
Реализация пошаговой анимации в SwiftUI На talk.objc.io вышел бесплатный эпизод, посвященный созданию анимации с комбинацией
Реализация пошаговой анимации в SwiftUI На talk.objc.io вышел бесплатный эпизод, посвященный созданию анимации с комбинацией хэдера и нескольких ячеек (которые должны появляться в шахматном порядке и учитывать изменения прозрачности и градиента). 📖 Выпуск с видео и примерами кода доступен здесь. 😃 iOS Dev

iOS Dev
7 880
Кровь, пот и пиксели Перед обратным перелётом из Манчестера вспомнил про вашу чудесную подборку книг и решил чем-нибудь занять 5 часов. Спасибо, что на пути оказался один из магазинов blackwells с прайсом за книгу в 12 фунтов. Признаюсь, я ждал историй успешного успеха, и отчасти поэтому занизил изначальные ожидания. Но Джейсон Шрейер не стал описывать сказки, как сделать в гараже собственный GTA VI. Вместо этого он сосредоточился на реальных трудностях не только корпораций-гигантов вроде Blizzard, но и инди-разработчиков, например, целая глава выделена для истории Stardew Valley. Конечно, я не буду делиться спойлерами, чтобы не уменьшать потенциальный интерес от чтения. Но не могу не вынести пару мыслей касаемо разработки ПО в целом, а не только игр. Проблемы были и будут всегда, вопрос лишь в том, как именно на это реагировать не только в здесь и сейчас, но и в долгосрочной перспективе. Ведь часто бывает так, что у нас бывает только вектор развития (или как верно заметил Шрейер, работая в огромной корпорации вы как будто находитесь на корабле и плывёте куда-то на запад, но куда именно - неизвестно). Порой крайне сложно (если вообще реально) добиться, чтобы изначально поставленные годовые планы были достигнуты в нужный срок и со всем объёмом. И наша задача как разработчиков постараться описать как можно больше корнер-кейсов до начала реализации, чтобы наш корабль не превратился в призрак. 😃 iOS Dev

iOS Dev
7 880
Создание UDP-сервера и клиента в Swift на базе фрейморка Network Сетевая модель OSI описывает, каким образом устройства в лок
Создание UDP-сервера и клиента в Swift на базе фрейморка Network Сетевая модель OSI описывает, каким образом устройства в локальных (и глобальных сетях) обмениваются данными. Всего у неё 7 уровней и каждый из них выполняет определённую задачу (скорее всего вы и так это знаете, обычно это проходят на 2-3 курсе универа). Так вот, на прикладном уровне чаще всего нам достаточно URLSession. Но вот для сетевых задач более низкого уровня (работа с TCP и UDP), фреймворк Network предоставляет более полный контроль на транспортном уровне. Это обеспечивает большую гибкость и эффективность по сравнению с URLSession. 📖 В этом материале от нашего читателя Максима Егорова вы можете познакомиться с тем, как написать свой UDP-сервер и клиент на несложном, но любопытном примере. 🛠 Полный код проекта доступен здесь. 😃 iOS Dev

iOS Dev
7 880
Музей науки Манчестера В эти выходные нахожусь в Манчестере, и хотя красивых эпл сторов тут нет (кто давно читает канал, знае
Музей науки Манчестера В эти выходные нахожусь в Манчестере, и хотя красивых эпл сторов тут нет (кто давно читает канал, знает, что тут можно увидеть необычные магазины изнутри), я просто не мог не заглянуть в музей, посвященный знаковым изобретениям. Вообще, локация этого музея сама по себе необычная, для этого выбрана территория бывшего первого в мире пассажирского вокзала (Манчестер—Ливерпуль-Роуд). Понятен и акцент на исторические достижения в области промышленности. Но лично для меня было интересно посмотреть на реплику первого в истории компьютера, в котором можно было хранить инструкции выполнения программ в памяти. И хотя он описан как маленький и примитивный (для своего времени), да и название у него символичное Малыш (или baby) сейчас эта махина выглядит просто огромной. 27 тонн, 15 на 7 метров с потребляемой мощностью в 150+ кВт. Вычислительная мощность — 357 операций умножения в секунду. При этом само умножение было реализовано очень любопытно и по факту 1 умножение равнялось 14 операциям сложения. После такого задача писать мобильные приложения кажется немного проще 😌 😃 iOS Dev