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

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

#ios #mobile #swift
加入频道
Как улучшить архитектуру кода с помощью принципов SOLID (с примерами на Swift)

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

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

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

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
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
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
Разделение или работа в команде

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

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

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

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

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

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

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

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

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

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
ℹ️ Вышел первый стабильный релиз 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
Архитектура SwiftData: паттерны и практики

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

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

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

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

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

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Вышел 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
Современные практики для работы с 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
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
WWDC25

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

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

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

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Как на самом деле работает Swift Concurrency

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

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

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

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
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
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
SharingGRDB — альтернатива для SwiftData от авторов Point-Free

По факту это слияние либы Sharing и GRDB.swift (от Гвендаля Руэ), в котором есть целый набор инструментов, которые могут заменить многие сценарии использования SwiftData.

SharingGRDB даёт прямой доступ к базовому SQLite (включая джойны, aggregate-запросы и многое другое).

📖 Документация и примеры запросов.

Примеры проектов:

1️⃣ Case Studies - примеры, показывающие фичи либы.
2️⃣ SyncUps - по факту ребилд приложения Scrumdinger от Apple.
3️⃣ Reminders - приложение с напоминаниями, списками и тегами.

🔗 Ссылка на репозиторий.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Гайд по работе со SwiftUI Alert + примеры

Работа с алертами в SwiftUI немного отличается от привычного способа в UIKit (но это не означает, что этот процесс сложнее).

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Где Swift Assist 😡

Вышедший буквально вчера отчёт от The Information раскрыл много деталей касаемо Apple Intelligence в целом (и затронул множество деталей разработки внутри компании).

Оказывается, что практически ничего из того, что было показано на прошлом WWDC, не было реализовано.

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

🎆 Демонстрация стала неожиданностью даже для разработчиков Siri, которые никогда не видели рабочих версий этих функций.

Ах да, вот забавный сайт с состоянием доступности Swift Assist.

Получается, ждём WWDC25, где шутка перестанет быть шуткой?

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Futuristic movement - шейдер имитации движения в космосе

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

🧑‍💻 В iOS IQ используется один из стилистически связанных warp-эффектов (статья есть и в открытом доступе), а в этот раз делюсь реализацией для движения с искривлением в пространстве.

Вы могли видеть разные вариации использования во многих фильмах 📺.

Впрочем, можете и сами попробовать написать на Swift (видос на шаттерстоке за 200 евро и неплохой способ на shadertoy).

🛠 Код на SwiftUI + Metal уже доступен для читателей: 💰в бусти и ⭐️ в телеграм.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
Основная функция приложения

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

В музыке - это прослушивание чёртовых песен или подкастов.
В такси - как доехать из точки А в точку Б.
В мессенджерах - разговор с друзьями или чтение каналов.

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

Суперприложения?

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

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

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

Даже телеграм с последними фичами (и вы ведь помните теглайн No ads - навсегда), в последнее время всё чаще проваливается в яму сложностей не только с экспоненциальным ростом базы пользователей, но и с производительностью.

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

Наша с вами цель — упрощать жизнь пользователей и использовать технологии во благо.

А не встраивать ещё одну рекламу, чтобы посмотреть рекламу.

Моя волна в яндекс.музыке - пример того, как комбинацию рекомендательных технологий и упрощение взаимодействия можно использовать во благо. Spotify к этому так и не пришёл.

Всегда должна быть возможность простого сценария.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM