iOS Dev
7.72K subscribers
1K photos
84 videos
1 file
1.16K links
🍏Канал об iOS-разработке, необычных подходах и решениях.
👨‍💻Автор: Виктор Грушевский (@Viktorianec)
Темы:
⭐️ Подготовка к собеседованиям.
⭐️ Архитектуры и алгоритмы.
⭐️ Код. Много кода.

⚒️База знаний: https://boosty.to/ios_dev

#ios #mobile #swift
加入频道
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
Please open Telegram to view this post
VIEW IN TELEGRAM
8👍199🔥5🎉32👏2🎄1
Структурная идентичность в SwiftUI

В отличие от традиционных UI-фреймворков, когда мы вручную отслеживаем и обновляем элементы интерфейса, SwiftUI автоматически выполняет перерисовку, когда это необходимо.

Однако перерисовывать все подряд — неэффективно.

И поэтому нам может помочь структурная идентичность — с её помощью SwiftUI решает, какие вью действительно нужно перерисовывать, сохранив производительность.

📖 В этой статье Наташа Фадеева на примерах объясняет, в чем особенности такого подхода и какую роль играет идентичность, например, в списках.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
818👍11🔥4🎄2❤‍🔥11👏1🎅1
Обнаружение и устранение зависаний в приложениях для iOS

📖 В этой статье рассмотрена одна из самых частых причин снижения производительности в iOS-приложениях.

Спойлер: причина в сложных вычислениях в главном потоке.

Рассказано, как обнаружить зависание используя App Hangs Detection и Instruments, смоделирован сценарий зависания интерфейса в проекте SwiftUI и продемонстрированы шаги для устранения этой проблемы.

Большой разбор возможных кейсов проблем с производительностью, причин зависаний и способов предотвращения такого поведения есть 💰тут и ⭐️ прямо здесь.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
814👍7🔥7❤‍🔥3👏1🎉1💯1🎄1
This media is not supported in your browser
VIEW IN TELEGRAM
Динамическая адаптация к доступному пространству с помощью ViewThatFits

ViewThatFits - это компонент SwiftUI, доступный с iOS 16.

Вкратце принцип работы следующий: ViewThatFits выбирает первое child view, чей идеальный размер по заданным осям впишется в предложенный размер.

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

По умолчанию ViewThatFits ограничивается по горизонтальной и вертикальной осям.

📖 Неплохой пример использования ViewThatFits есть тут и в официальной документации.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
1020👍8👏5❤‍🔥3🔥311🎉1🎄1
UIKit: подборка практических и теоретических задач (II часть)

В новом блоке разобрал важные вещи, без которых сложно представить нашу с вами работу (затронул hitTest, относительно новый automatic trait tracking и не только).

В нашем канале много уделяется и SwiftUI, например в опросе несколько десятков человек попросили разобрать непростые анимации, к которым мы обязательно будем возвращаться. Кстати, если ещё не прошли опрос - самое время.

🧠 Что вы получите, подписавшись сегодня:
➡️Вопросы на чтение кода
➡️Многопоточность
➡️DispatchQueue: практические вопросы
➡️Swift Concurrency
➡️Алгоритмы: терминология и примеры
➡️Память: ARC, side table, флаги, утечки
А также доступ к ранним релизам приложения iOS IQ, несколько десятков важных тем, тонну теории и многое другое.


Получить доступ можно 💰тут и ⭐️ в телеграм.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
1316👍53👏2🎉2🎅2🎄21🔥1👌1
Стратегии, позволяющие избежать мерж-конфликтов в проектах Xcode

Каждый, кто работал в более-менее большой команде разработчиков (что уж там, даже двоих человек иногда достаточно), наверняка сталкивался с конфликтами при слиянии изменений.

📖 Tuist выпустили неплохой материал с разбором, почему такие проблемы вообще возникают, и как с этим может быть связан файл project.pbxproj в Xcode.

А ещё они описали несколько вариантов решения: от использования workspace и SwiftPM до buildable folders в Xcode 16.

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍1794🔥3💯3👏2🎄1
Как улучшить архитектуру кода с помощью принципов SOLID (с примерами на Swift)

Эти принципы помогают сократить количество хаоса на проекте с течением времени. Да и следование SOLID облегчает в целом сопровождение кода, тестирование и потенциальное масштабирование.

Наш читатель Максим Егоров (уже знакомый вам по примеру работы с Network-фреймворком) в этот раз решил затронуть базу и показал на несложных примерах потенциальные ошибки, которые могут нарушать принципы, сформулированные Робертом Мартином, а ещё привёл варианты их исправления.

📖 Прочитать статью целиком можно здесь.

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
8👍2314🔥4💯43🎉1🎄1
This media is not supported in your browser
VIEW IN TELEGRAM
Spectrum ring — реализация на Metal в iOS

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

Варианты использования спектра вообще довольно значительны (от стандартного colorPicker в iOS до реализации самых разных волн и анимаций в музыкальных плеерах).

Реализация, референсы и код на SwiftUI+Metal уже доступен 💰тут и ⭐️ в телеграм.

🎆 В канале доступны и другие красивые эффекты.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
718👍6💯52🔥21👏1🎉1
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
Please open Telegram to view this post
VIEW IN TELEGRAM
817👍6👏43💯3🔥1
Разделение или работа в команде

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

📺 Несколько лет назад появился сериал Разделение, о котором я даже написал пару строк (и по случайному совпадению он завершал один из небольших квестов в нашем канале).
К слову, линия мистера Милчека с его перфоманс-ревью и последующей рефлексией возможно найдет ответ и у некоторых разработчиков.

🎮 А ведь кроме этого вышла сначала it takes two, а в этом году не менее чудесная Split Fiction, в которой, к слову, секретное послание оставил и геймдизайнер.

Пожалуй, крайне важная часть — умение работать в команде, ведь далеко не всегда всё зависит от мобильного клиента, или конкретно от разработчика.

Тесное взаимодействие команд дизайна, тестирования, реализации на сервере и формирование продуктовых задач, которые попадают в спринт достигается за счёт синергии всех участников процесса.

Кроме этого, одна из основных составляющих нашей работы состоит как раз в сложности разделения.

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

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

🔄 Главное помнить, что умение переключать контекст - важнейший скилл. Не только в работе, но и в жизни.

И это далеко не самый простой навык.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
1514👍94🔥3💯2👏1🎉1
ℹ️ Вышел первый стабильный релиз Swiftly - официального менеджера версий Swift

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

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

🛠 В этом релизе swiftly стал частью Swift toolchain.

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

Среди базовых фич:

➡️ Установка нескольких тулчейнов (и стабильные релизы, и снэпшоты).
➡️ Обновление установленных тулчейнов до актуальной версии.
➡️ Проверка доступных для установки тулчейнов с помощью list-available.
➡️ Совместное использование предпочитаемого тулчейна в качестве настройки проекта с помощью файла .swift-version.
➡️ Выполнение заданной команды с помощью подкоманды run.

📖 Официальная новость на сайте Swift.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
1121👍12🔥5👏4🎉2❤‍🔥11🎄1
Архитектура SwiftData: паттерны и практики

SwiftData ознаменовала важный шаг вперёд в области хранения данных. Она была призвана заменить Core Data чем-то более интуитивным: тем, что будет проще интегрировать в SwiftUI.

Однако осталось несколько важных вопросов.

Как именно мы должны проектировать приложение на её основе?

Должны ли мы целиком полагаться на @Model и @Query, или можно абстрагировать их за протоколами для обеспечения гибкости? Как быть с бизнес-логикой? Да и как в целом нужно структурировать код для обеспечения надёжности и тестируемости в будущем.

📖 В этой масштабной статье можно узнать ответы на эти и другие вопросы:

🔘 Как структурировать модели данных
🔘 Где разместить бизнес-логику
🔘 Как писать модульные тесты
🔘 Как настроить работу Preview в Xcode
🔘 Как интегрировать CloudKit
🔘 Как работать с изменениями в слоях в будущем.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
614👍10🔥4💯421🎉1👌1
Вышел Xcode 16.3 с нативной интеграцией вайб-кодинга!

Ночью вышел Xcode 16.3 и Swift 6.1, а вместе с ним и новый режим программирования.

На этой неделе в Европе официально разрешили Apple Intelligence и Тим Кук просто шокировал общественность, написав в X:

«Нам пришлось принять сложное решение. Всё больше разработчиков стало доверять ИИ, всё больше процессов интегрируется и вместе с тем мы вынуждены сохранять гонку не только с Google и OpenAI, но и с самим временем. Поэтому мы решили выпустить из беты режим вайб-кодинга в Xcode. Никакого Leetcode, никаких мыслей, теперь только х-к, х-к и в продакшн (какие-то буквы, к сожалению, пропущены).»

Буквально месяц назад Сергей Брин призвал ходить коллег в офис и работать 60 часов в неделю, но Apple сыграли на опережение как всегда. Разработчики в Купертино сидели по 120 часов с понедельника по субботу, приходя в 4 утра.

Новая инновация уже вызвала целую волну сокращений в Кремниевой долине и даже затронула бигтехи в РФ.

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

Теперь они предлагают работать и скручивать опыт, ведь как известно, для работы с новым ИИ теперь необходимо как можно меньше навыков. Чистое, незамутнённое алгоритмами сознание теперь имеет преимущество перед разработчиками с 10+ опыта.

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
24🤣149😁14🎉5👍3💯332🔥21👏1
Современные практики для работы с URL в Swift

Использование современных API в Foundation для построения (и дальнейшей работы) с URL не только упрощает наш код, но и снижает риск возникновения ошибок и возможных крашей.

📖 В своей статье Джон Санделл разбирает импакт от StaticString, макросов, как прийти к виду let url = #staticURL("https://yangx.top/iosdev"), например, а также опции построения сложных запросов с помощью фич из iOS 16.

Кстати, про особенности и свойства URLSession можно узнать из этого поста.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
417👍10❤‍🔥6🔥4👏1🎉1💯1🎄1😎1
This media is not supported in your browser
VIEW IN TELEGRAM
Эффект свечения текста в комбинации с numericText

Показал пример несложной анимации, при этом довольно приятной по ощущениям (нужен массив с несколькими цветами, несколько теней и contentTransition с numericText).

Код этого и других примеров (в том числе с Metal доступен 💰тут и ⭐️ в телеграм).

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
1337👍14🔥122💯2🎅1🆒1😎1
WWDC25

К сожалению, в этом году лотерея была не на моей стороне. С другой стороны - будет больше времени на то, чтобы детальнее рассмотреть все фичи.

🐱 Кстати, если кто планирует ехать, в эти дни в Сан-Франциско будет как минимум CommunityKit-конфа и OneMoreThing (если её решатся провести снова).

А мне пока остаётся смотреть на старые фотки из Apple Visitor Center.

Если кому-то выпало нормально очков удачи и вы выиграли билет на ивент, поделитесь радостью в комментариях)

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
9❤‍🔥21🤗87🫡3👍2🔥2🎉1👌1
Как на самом деле работает Swift Concurrency

📖 Виталий Батраков в своём блоге рассказывает о том, что такое асинхронные функции, как создавать и работать с Task и не только.

Например, в статье разбираются Default concurrent/Serial/Main executors и как именно они формируют общую картину.

🔗 Напомню, в канале есть и глоссарий по Swift Concurrency.

Кстати, здесь можно проверить свои силы в вопросах на примерах кода (в приложении часть из них тоже есть).

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍25🔥992👏2🎉1💯1
This media is not supported in your browser
VIEW IN TELEGRAM
Работа с модификатором task в SwiftUI: примеры, особенности, приоритеты

➡️ Модификатор task можно использовать в качестве инструмента для выполнения асинхронного кода.

Как рекомендует автор следующего материала, стоит задуматься о применении этого модификатора в частности для случаев, когда есть комбинация отдельных блоков onAppear и Task.

📖 В этой статье рассмотрены различные опции использования task в реальном проекте.

🛠 А вот тут можно посмотреть на этот проект.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
8👍171033💯2🔥1👏1🎉1😎1
iOS IQ - апдейт по прогрессу базы и бонус для новых подписчиков

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

Я постоянно стараюсь облегчить жизнь не только благодаря фичам с оптимизацией на работе, но и делаю полезные утилиты: Lines (если у вас ещё есть код на Objective-C), ReviewBuddy, iOS IQ (кстати, уже в разработке новые интересные темы) и целый ряд других приложений.

Многое из моих реальных задач связано с шифрованием, а также работой с большим объёмом данных.

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

При этом iOS IQ постоянно наполняется вопросами на самые разные темы.

➡️Вопросы на чтение кода
➡️Многопоточность
➡️DispatchQueue: практические вопросы (две части)
➡️Swift Concurrency
➡️Память: ARC, side table, флаги, утечки
➡️UIKit (теория + практика, две части)
➡️Компилятор Swift
➡️Основы: URLSession, UICollectionView и т.д.)


Присоединяйтесь, всю неделю будет действовать вводное предложение: 💰в бусти и ⭐️ в телеграм.

Ах да, ещё недавно был редизайн (так что можно заглянуть хотя бы ради нового оформления).

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
914🤩7🔥5👍4🎉2🏆2❤‍🔥1💯1🎅1
Коллекционер и аукцион

Попробуем новый формат - с вас самое короткое решение задачи, с меня подарок в телеграм (сегодня это будет white hat 🎩).

Сама задача:

Вам дан массив цен картины prices, где prices[i] это цена картины в i-день.

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

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

Пример 1

Input: prices = [12,1,4,3,6,2]
Output: 5

Ответ здесь 5, так как мы можем купить картину на 2 день и продать её на 5 день, получив прибыль 5 = 6 - 1

Пример 2

Input: prices = [12,11,10,9,8,7]
Output: 0

Здесь ответ 0, так как мы не можем получить прибыль, купив картину в любой из дней.

Присылайте в комментарии ваши варианты решения задачи на Swift, но помните, что решение задачи должно быть максимально коротким (не обяательно самым быстрым).

[UPD 12:42] - тест-кейсы должны быть пройдены все.

Подсчёт символов решения будет внутри этой функции, включая пробелы (учтите при отправке ваших решений):

func maxProfit(_ p: [Int]) -> Int {

}


Решения присылайте в комментарии (внимание - вы можете решать олдскульно или пользоваться любыми средствами от Grok до Cursor).

Итоги в 16:00 по мск.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
2012👏5👍4💯3👌2🏆221🔥1😎1
iOS Dev
Коллекционер и аукцион Попробуем новый формат - с вас самое короткое решение задачи, с меня подарок в телеграм (сегодня это будет white hat 🎩). Сама задача: Вам дан массив цен картины prices, где prices[i] это цена картины в i-день. Вы хотите добиться…
Ну что, время итогов алгоритмического конкурса

Я не ожидал столько вариантов решения, но очень рад, что вы решили поучаствовать и проверить себя. Эта задача — интерпретация одной из популярных литкодовских (вот тут можно почитать условие).

И хотя было несколько достойных кандидатов, я решил выбрать двоих победителей среди всех присланных.

🏆 Решение Дмитрия - 55 символов.

🏆 Решение Вовы - 54 символа.

Победители уже получили 🎩 white (1) hat (2), надеюсь, отсылка к цвету очевидна.

И, хотя вот эта версия от Игоря не прошла все кейсы, но бонус всё-таки улетел (до 12:42 была лазейка в условиях задачи).

🚀 Поддержите бустом канал, если вы хотели бы видеть больше таких задач.

В следующий раз можем выбрать что-то посложнее.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
26🏆118🔥5👏3🎉3👍21🤩1💯1