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

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

#ios #mobile #swift
加入频道
Новый метод count(where:) в Swift 6

➡️В SE-0220 появился новый метод count(where:), который выполняет filter() и count за один проход.

Это позволяет избежать создания нового массива и обеспечивает четкое и прозрачное решение подсчёта.

🤩 Этот метод доступен для всех типов, соответствующих Sequence, поэтому его можно использовать и для сетов, и для словарей.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
👍71🔥16122🎉2❤‍🔥11👏1🏆1🎄1🆒1
This media is not supported in your browser
VIEW IN TELEGRAM
Подборка анимаций c WWDC c примерами кода

Прекрасная сессия, в которой Robb и Philip поделились примерами кода и новыми подходами к реализации.

📺 Новая анимация при скролле.
📺 Работа с цветом.
📺 View и эффекты.
📺 Работа с текстом и новые анимации (уже добавил себе в закладких).
📺 Metal shaders (а куда же без них).

После завершения WWDC уверен, что ещё вернёмся и рассмотрим многое детально.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥50👍115💯2🎄211👏1
🥳 Нужен будет только один набор скриншотов при загрузке приложения в App Store (как для iPhone, так и для iPad).

📖 Отличная новость для дизайнеров, инди-разработчиков, да и для компаний тоже.

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

🛩 Новый App Store Connect обещают выкатить осенью.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉24🔥86👍3🤯3❤‍🔥2💯1🆒1
Подборка лучших сессий с WWDC24 (Swift, Perfomance, Debugging)

Неделя WWDC подошла к концу, поэтому решил вынести сессии, которые можно будет посмотреть в приоритетном порядке.

📼 Анализ heap memory
Рассказывают не только об основе динамической памяти (куче), но и о том, как использовать Instruments и Xcode для анализа и устранения распространенных проблем. А ещё методы и лучшие практики для диагностики утечек в приложении.

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


📼 Использование некопируемых типов в Swift
Большая сессия, которая позволит узнать, что вообще подрузамевает копирование в Swift, когда можно использовать некопируемый тип и как value ownership позволяет четко обозначить свои намерения.


📼 Swift Perfomance
Сессия поясняет то, как именно Swift обеспечивает баланс производительности. Приводят примеры разных функций Swift и способы их реализации, чтобы лучше понять возможные потенциальные проблемы, влияющие на перфоманс.
Можно глубже погрузиться в основы выделения памяти, memory layout в целом, дженерики, замыкания, в общем - топ и в закладки.


📼 Подборка анимаций c WWDC c примерами кода
Новые анимации скролла, эффекты, все с примерами.


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


📼 Run, Break, Inspect: Исследуйте эффективную отладку в LLDB
Показывают, как максимально эффективно использовать крашлоги и бэктрейсы, а также как прокачать брейкпоинты с помощью действий и сложных условий. А ещё особое внимание уделено команде «p» и новым возможностям Swift, которые улучшат опыт отладки.


📼 Swift Testing
Можно узнать, как написать набор тестов, используя встроенные функции. Как расширять существующие тесты, чтобы охватить больше сценариев, организовать тесты в различных окружениях и оптимизировать тесты для параллельного выполнения.


📼 База в Xcode
Рассказывают о популярных фишках Xcode, которые помогут ускорить разработку.


📼 Миграция на Swift 6
Можно узнать, как перевести существующее приложение на Swift 6 на реальном примере. Рассказывают об опции переноса модуль за модулем, и как компилятор помогает выявить код, подверженный риску гонок данных. Рассказывают про изоляцию и то, как решить проблему одновременного доступа к общему изменяемому состоянию.
Большая статья и разбор изоляции есть на бусти.


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


Конечно, лучше смотреть их в своём темпе, у меня даже с некоторых прошлых WWDC что-то осталось на исследование.

А если вам понравилось WWDC (трансляция, анонсы и разборы), то вы можете:

❤️‍🔥Поставить лайк🚀Дать бустПодписаться (по специальному предложению).

😃 iOS Dev это была по-настоящему насыщенная неделя (передаю большое спасибо и тем, кто уже установил приложение и написал отзыв)
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥4511🔥8👍6🎉21🤩1👌1💯1🏆1
Память: ARC, side table, флаги, утечки и многое другое

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

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

🧠 Уже сегодня в iOS IQ добавлена новая большая секция, которая отвечает на многие из этих вопросов.

Поэтому, если вы хотели бы расширить арсенал своих знаний и узнать больше об ARC, side table или тому, что приводит к утечкам памяти, уже сейчас доступно несколько десятков вопросов с разными уровнями сложности:

Подпишитесь на сайте или в телеграме (на год - выгоднее).

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
17🔥752👍2🏆2💯1🫡1🆒1
This media is not supported in your browser
VIEW IN TELEGRAM
Создание анимации в стиле Siri в iOS 18

Siddhant Mehta и Meng To использовали комбинацию из Mesh Gradient (пример вы можете увидеть в моём посте выше) и ripple-эффекта.

🛠 Исходный код проекта доступен на github.

📺 Сессия с примерами анимаций вот тут.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
👍33🔥19131👏1💯1🏆1🎄11
UIKit: подборка теоретических материалов и вопросы

Конечно, SwiftUI набирает обороты и после добавления последних фич (в том числе и по навигации) с ним станет приятнее работать.

Но несмотря на это, подавляющее большинство проектов используют UIKIt, а вопросы на собеседованиях до сих пор строятся вокруг него.

У меня собралось большое количество материалов и вопросов за время разработки и проведенных интервью, поэтому я решил добавить новую секцию и в iOS IQ.

В ней вы увидите не только классические вопросы по типу отличий frame от bounds или особенности Responder Chain, но и ряд нестандартных вещей, которые так или иначе используются в нашей работе.

Постарался подкрепить и примерами с кодом, и привел примеры реализации.

Подписаться можно здесь и вот тут.

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


Секретная ссылка со скидкой здесь: ссылка.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
👍169🔥62💯2🤝21🏆1🎅1🎄1
NotPrivateAPIs — проект, который раскрывает некоторые приватные API

❗️Конечно, их нельзя использовать в рабочих проектах и выкладывать в App Store.

Например, меню со своими элементами это вообще та ещё задача (посмотрите реакции в Messages над сообщением, или реализацию в телеграме).

📖 Morris Richman собрал в одном месте вещи, которые юзает Apple: например, как добавить кастомный хэдер в UIAlertController или как поменять иконку приложения без предупреждения пользователя.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
20👍12🔥9🤩31💯1🏆1🎄1
Как iOS 18 улучшает работу с градиентами

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

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

📖 В iOS 18 доступно новое API для смешивания цветов. Поэтому, используя UnitCurve, можно интерполировать цвета с помощью встроенных или кастомных кривых Безье, чтобы обеспечить плавность перехода.

Пример использования под катом (разверните, чтобы посмотреть):
extension Gradient {
init(from: Color, to:Color, with curve:UnitCurve, steps:Int = 10) {
let colors = stride(from: 0.0, through: 1.0, by: 1.0 / Double(steps))
.map { f in
from.mix(with: to, by: curve.value(at: f))
}
self.init(colors: colors)
}
}


📖 Почитать дополнительно про смешивание цветов можно в этой статье.

😃 iOS Devбольше разборов тут
Please open Telegram to view this post
VIEW IN TELEGRAM
22👍5🔥4❤‍🔥21👏1💯1🏆1🤗1🎄1
Realm vs SwiftData: что быстрее?

Jacob Bartlett из компании Emerge Tools провел большое исследование и сравнил производительность по трём ключевым метрикам:

1️⃣ Скорость.

2️⃣ Размер.

3️⃣ Память.

И хотя с точки зрения записи и выполнения простых запросов на чтение Realm впереди, но в некоторых моментах благодаря превосходному управлению графами объектов при работе с более сложными данными SwiftData оказалась производительнее.

При небольших объемах (≤10 000 элементов, что охватывает подавляющее большинство сценариев в мобильных приложениях) SwiftData также была намного быстрее при обновлении существующих данных.

📖 Много графиков, выводов и интересных особенностей можно узнать в этой статье.

📖 А на хабре вы возможно видели, что Realm не так хорош в этой статье от Dodo Engineering.

C моей точки зрения, всё, конечно зависит от задач. И для небольших проектов в целом можно использовать что угодно, а вот при разработке внутри компании все равно придётся все тщательно взвесить и, возможно, попробовать несколько подходов, или собрать себе собственный SQLite (привет, ВК).

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
14👍7🔥6👏3❤‍🔥1💯1🎄1🆒1
This media is not supported in your browser
VIEW IN TELEGRAM
Создание эффекта перехода App Store с использованием NavigationTransition в iOS 18

Этот эффект можно увидеть, например, в разделе «Сегодня» или на 📺.

И если создание похожего перехода в iOS 18 может занять пару строк кода, то повторение анимации с учетом всех эффектов — куда более сложная задача.

📖 В этой статье Peter Friese поэтапно рассказывает, какие моменты стоит учитывать и показывает все итерации на примерах кода.

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

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥30👍9911💯1🏆1🆒1
This media is not supported in your browser
VIEW IN TELEGRAM
Создание динамических текстовых эффектов с помощью TextRenderer

👨‍💻 Используя метод draw протокола TextRenderer, мы должны выполнить рендеринг на основе информации об элементах, предоставленной Text.Layout в рамках GraphicsContext.

Новые функции в iOS 18 дают нам доступ ко многим ранее недоступным деталям, таким как определение того, обрезан ли текст через свойство Layout's isTruncated, количество строк, отображаемых после рендеринга, и конкретные данные о расположении текста.

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

📖 Кстати, если хотите почитать про хардкорные вещи в TextView: работу с атрибутами, стилями, перфомансом, математикой для отрисовки и многим другим — на канале есть отличный пост.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19🔥77💯21👏1🤩1🎅1🎄1🆒1
Алгоритм Чайкина в Swift: назначение и реализация

Уже прошло приличное количество времени с того самого контеста в телеге, но я всё ещё нахожу интересные решения для сложных вещей и с радостью делюсь с вами. Помните анимацию в Wallet?

Алгоритм Чайкина - это простой метод сглаживания грубой линии в красивую плавную кривую. Он работает путем многократного добавления новых точек вдоль каждого сегмента линии на расстоянии 25 и 75 % пути между исходными точками, а затем соединяет эти новые точки. С каждым разом линия становится все более и более гладкой.


Прежде, чем посмотреть то, как реализовать этот алгоритм в Swift, посмотрите прекрасную статью про то, как воспроизвести рукописный шрифт.

🐱 Применений у этого алгоритма множество: графический дизайн, анимации, шрифты и многое другое.

📖 Здесь вы можете посмотреть пример реализации на Swift.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
20👍11🔥54👏32💯1🎅1🆒1
Swift Testing: разбор отличий и преимуществ по сравнению с XCTest

На WWDC в этом году Apple представила Swift Testing, новый фреймворк для тестирования.

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

Познакомиться с фреймворком можно с помощью просмотра сессии WWDC24 — в этом посте.


📖 Посмотреть на примеры использования можно в этой статье.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
12👍8🔥8211👏1💯1🏆1🆒1
This media is not supported in your browser
VIEW IN TELEGRAM
Разбор нововведений при работе со скроллом в iOS 18

На WWDC 2024 Apple в очередной раз показала ряд замечательных новых API для ScrollView в SwiftUI.

📖 В этой статье рассматриваются основные изменения, а также анализируется развитие значимых API с момента создания SwiftUI.

Другие материалы с WWDC2024:

📖 Список лучших сессий.
📖 Swift Testing.
📖 Создание динамических текстовых эффектов с помощью TextRenderer.


😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
18🔥7🤩5👍4👏2❤‍🔥1👌1💯1🎄1
Поддержать проект

Ваша поддержка == вклад в развитие приложения: новые вопросы, необычные форматы и многое другое
❤‍🔥135😭44👍2💯211🎉1🎄1🆒1
Разбор тем, история ответов, пояснения — встречайте обновление iOS IQ!

❤️ Половина из отзывов к приложению (всем большое спасибо) была о том, что нужны правильные ответы. Конечно, это так, и новый раздел просто обязан был появиться!

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

👨‍💻 Основная цель — не останавливаться на том, что есть, а расширить приложение до полноценной платформы по подготовке (и самостоятельной проверке).

Соревновательная часть при этом останется, но в будущем больше внимания будет уделено контенту внутри.

🏆 Кстати, скоро будет анонсирован небольшой конкурс для авторов с призовым фондом.

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


⭐️ Скачать и оценить приложение

🏆 Поддержать проект

❤️Подписаться на бусти (или в боте).

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
🏆18🔥12👍73💯2🎅2❤‍🔥1🎉1🆒11
Создание многоступенчатой анимации в SwiftUI

Анимации в приложении служат визуальными индикаторами, информирующими пользователей о совершенных действиях.

Они особенно полезны при изменении интерфейса, например, при загрузке нового контента или демонстрации новых действий.

📖 В этой статье разбирается пример работы с PhaseAnimator (его особенно удобно применять, когда нам нужна анимация, которая непрерывно повторяется и реагирует на события).

📖 Кстати, в канале есть ещё один полезный материал про PhaseAnimator и KeyframeAnimator.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
12👍6🔥5💯211👏1🆒11
🍏 Поведенческие паттерны проектирования

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

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

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

К поведенческим паттернам (согласно банде четырёх) относятся:

- Цепочка обязанностей.
- Команда.
- Интерпретатор.
- Итератор.
- Посредник.
- Memento (хранитель).
- Наблюдатель.
- Состояние.
- Стратегия.
- Шаблонный метод.
- Посетитель.

По каждому из них я добавил описание и примеры (в том числе с видео) в iOS IQ.

Получить доступ можно здесь или тут.

🔗 Почитать про структурные паттерны проектирования.
🔗 Узнать о порождающих паттернах проектирования.

🧠 Проверить свои знания можно и в приложении.


😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
16👍7🔥5😭21🤩1💯1🏆1🎄1
This media is not supported in your browser
VIEW IN TELEGRAM
Создание интерфейса поиска в стиле Photos из iOS 18

Если вы следили за трасляцией в канале (или в других источниках), то в курсе, что в новой оси поменяется в том числе и приложение Photos.

Новый раздел выглядит как кастомная View в SwiftUI, которую Seb Vidal попытался повторить с помощью публичного API (но без реверс-инжиниринга не обошлось). Затрагивается и самый сложный момент — плавный переход фона в стиль клавиатуры.

📖 Здесь можно прочитать про основные этапы для создания такого экрана.

🛠 А здесь посмотреть на реализацию в коде.

😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
11👍7💯3🔥2🤩2❤‍🔥11👏1👌1🏆1
Управление памятью в Swift

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

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

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

🔗 Почитать больше про структуру памяти в Swift и получить несколько важных подборок.
🔗 Потренироваться на темах (side table, флаги и ARC).
🔗 Узнать, когда [weak self] может быть излишним.

🧠 Проверить свои знания можно и в приложении.


😃 iOS Dev
Please open Telegram to view this post
VIEW IN TELEGRAM
19🔥9❤‍🔥5👍3👏2💯1🏆1🎅1🆒1