Автоматическая генерация символов для цветов и картинок в ассетах
Моя любимая фича нового Xcode – автоматическая генерация констант для цветов и картинок, которые находятся в ассетах. В качестве названия константы используется имя, которое вы задали в каталоге.
Если вы решите отключить их генерацию, используйте флаг ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS
в build settings.
Главные обновления SwiftUI
👉Больше никакого Combine, вместо него для полписки на изменения используется новый фреймворк Observation.
👉Анимациям теперь можно добавлять completion handler’ы и анимировать изменения по кейфреймам.
👉У ScrollView можно следить за изменением оффсета с помощью модификатора.
👉Можно программно ставить фокус в поле поиска, а также прятать и показывать его.
👉Новые жесты: rotate и magnify.
Все анонсы WWDC
Apple собрали документацию по всем новым фреймворкам и API на одной странице. А отдельно можно скачать кучу семплов, которые показывали в сессиях.
Динамическое меню в трее на macOS
Отличный разбор API NSStatusItem, с помощью которого можно создать меню с динамическим размером и контентом, кастомным бэкграундом и поддержкой нескольких разных таргетов для нажатий.
Новый линкер в пять раз быстрее ld64
На WWDC показали новый линкер. Он написан в Apple с нуля и оптимизирован для работы на нескольких ядрах. Это первый продакшн-реди параллельный линкер, доступный для iOS разработки.
Подборка анонсов с WWDC
Пока я жду появления подробных статей с разбором всех анонсов, держите несколько отдельных штук, которые мне показались очень крутыми:
👉В SwiftUI можно применять Metal шейдеры к любым вьюхам
👉Благодаря макросам синтаксис для объявления Preview стал очень простым и читаемым
👉А еще Preview теперь работают для AppKit и UIKit
👉В SwiftUI есть новый компонент для готового экрана с пэйволлом
👉В SFSymbols появилась поддержка анимированных иконок, причем анимировать можно слои по отдельности
👉Xcode зашерлочил SwiftGen и генерирует символы для цветов и картинок автоматически
👉Ну и, конечно, Swift Data – замена Core Data, которую я предсказывал каждый год уже пять лет
Реплика системного блюра на CAFilter
Разработчик зареверсинжинирил реализацию блюра и повторил его, используя приватные API. Есть возможность обойтись и без них, перейдя на SceneKit и Metal шейдеры, но качество будет чуть хуже.
Код на GitHub
ramzesenok/110420635568400311">SwiftUI Tips & Tricks
Пополняющийся тред из 20+ не самых очевидных советов по работе со SwiftUI. Вот некоторые из них:
- lineLimit
у Text
можно задавать не одним числом, а интервалом. Тогда компонент высота компонента будет всегда не меньше нижней границы, и не больше верхней.
- В любую функцию можно передать #file
, #line
, #function
в качестве параметров – и использовать их в логах, чтобы понять, откуда была вызвана функция.
- Если вам нужно быстро создать TextField
, чтобы что-то проверить, можно не передавать ему Binding, а инициализировать его с .constant(“Text”)
.
Про работу с dynamicMemberLookup
Аннотация dynamicMemberLookup
позволяет проксировать обращение к свойствам объекта. Например, вместо cache
.storage["profile"]
дергать сразу cache
.profile
. Основной минус такого подхода – компилятор не предупредит вас, что вы обращаетесь к несуществующему свойству. В статье разбирается, как использование KeyPath вместо строковых ключей поможет вернуть compile-time safety.
Почему мы всё время начинаем и бросаем учить английский?
Одна из причин — мы не знаем свой уровень языка и берёмся за контент, который нам не по силам. Например, сериал «Друзья» часто советуют смотреть тем, кто начинает учить язык, но в нём полно юмора, который начинающие пока понять не могут. В итоге разрыв знаний удручает и мотивация учить язык падает.
Если вы готовы дать английскому ещё один шанс, Яндекс Практикум поможет поверить в свои силы и довести дело до конца. Приходите на бесплатную консультацию в Яндекс Практикум:
- Проведут устный тест на уровень языка,
- Покажут, чего реально добиться и за какой срок,
- Расскажут, как данные курсы помогут достичь цели.
P. S. С 1 июня курсы станут больше: количество занятий с личным преподавателем увеличится с 72 до 80. Цена вырастет тоже. До 31 мая вы можете купить курс по старой цене: целиком или по частям. И если решите купить полный курс сразу — сэкономите и получите обновлённую программу из 80 занятий по прежней цене.
Как устроена DispatchQueue под капотом
В статье разбирается, как с нуля написать аналог DispatchQueue на мьютексах, который умеет выполнять операции синхронно и асинхронно.
Памятка по тому, как репортить баги Apple
Приближается выход Beta версий Xcode и новых SDK, а значит – тонны новых багов. Apple подготовили новую страницу документации про то, как репортить проблемы с максимально подробным контекстом, и какие инструменты могут это облегчить.
Ничего все равно не исправят, конечно же.
Как адоптить новые фичи в кроссплатформенной кодовой базе на iOS и macOS
Из-за того, что Apple выпускает стабильные версии новой iOS и новой macOS в разное время, вы можете столкнуться с довольно неприятной проблемой – после выхода Xcode 15.0 ваш кроссплатформенный код с поддержкой новых фичей перестанет собираться под мак. В статье разбирается, как комбинировать compile-time и runtime проверки, чтобы облегчить свою жизнь.
Проектирование навигации с учетом диплинков
Обработку Universal Links лучше всего не костылить, а встраивать прямо в вашу систему навигации.
Приходите на вебинар, где на практике разберут, как лучше всего спроектировать систему диплинков в SwiftUI приложении.
Вебинар является частью продвинутого онлайн-курса «iOS Developer. Professional» от OTUS
📆 Дата: 26 мая в 20:00
👉 Регистрация на вебинар
Как Apple могли бы переписать Core Data на Swift
Вторая вещь, которая происходит каждый год перед WWDC – люди скрещивают пальчики и ждут, что Apple выпустит современную замену для Core Data. Подписываюсь под всеми хотелками из статьи!
Отражение источников света
Интерфейс Vision Pro учитывает источники освещения и слегка отражает их от своей поверхности. Вот пример того, как можно реализовать похожий эффект на SwiftUI, считывая источники освещения с камеры.
Интеграция ChatGPT и Xcode
Экспериментальный экстеншн для Xcode, который использует ChatGPT для генерации кода по инструкциям, комментариев к нему, рефакторинга кода и других фичей. Можно добавлять и свои собственные команды.
Офер в Яндекс за два дня
Приходите на Weekend Offer Mobile 17–18 июня. Всего за 2 дня можно пройти все технические секции, пообщаться с нанимающими командами и получить офер.
Ребята ищут мобильных разработчиков на iOS, Android и Flutter с опытом от 3 лет. Приглашают в один из своих офисов в России и Беларуси, также нанимают в международные хабы в Армении, Казахстане и Сербии.
Регистрация заканчивается 12 июня.
Подробности ищите здесь
Что нового в UIKit
Каждый год на WWDC все меньше апдейтов для UIKit. В этом году вот так:
👉Новый класс UIContentUnavailableView
для отображения пустого стейта
👉Поддержка Xcode Preview, у которых еще и новый синтаксис на макросах появился
👉Поддержка анимаций в SFSymbols, добавленных как элемент кнопки или как ImageView
👉Новые типы шрифтов: большой и очень большой
👉Новые типы автозаполнения для UITextField: для дня рождения и даты окончания действия карты
Расшифровки сессий на WWDC Notes
Самое время напомнить вам про офигенный ресурс от коммьюнити – WWDC Notes. Ребята смотрят сессии и превращают их в статьи, выделяя все самое важное. В этом году они обещают расшифровать 80% сессий в течение первой недели!
Опубликован вижн интеропа Swift -> C++
Интероп Swift и C++ состоит из двух частей:
- Вызов Swift из C++ кода (этот пропозал уже давно опубликован и принят)
- Вызов C++ из Swift (вот ему и посвящен этот документ)
В пропозале разбираются цели такого интеропа, сложности его реализации и то, как предполагается подружить основные концепции из двух языков друг с другом с учетом гораздо более сильных гарантий, которые дает Swift.
Что нового в Swift 5.9
👉if
и switch
теперь можно использовать при присвоении значения переменной или для возврата значения из функции
👉Можно писать макросы, которые исполняются во время компиляции
👉Структуры и enum’ы, которве нельзя копировать, а можно только передавать по ссылке
👉Новый оператор consume
, который копирует значение переменной и уничтожает ее
В статье очень детально разбираются эти и другие новые фичи. Идеальный материал, чтобы подготовиться к WWDC!
Организация межмодульного взаимодействия в многомодульном приложении
Разбор того, как архитектура межмодульного взаимодействия может влиять на скорость компиляции, вес приложения и релизный процесс. А начать чтение можно с первой статьи цикла – про то, кому вообще стоит выбирать распил приложения на модули.
Номинанты Apple Design Awards
Объявили номинантов на ежегодную премию Apple Design Awards. Этот список – отличный пример того, что Apple ценит в приложениях. Вот несколько интересных приложений:
✈️Flighty – за интуитивный интерфейс и хорошую интеграцию с платформой
🧘Headspace – за социальный импакт
🎥Riveo – за интерфейс и анимации
🏓SwingVision – за инновации в пользовательском опыте
Победителей объявят через неделю после кейноута WWDC.
Собираем каталог митапов с просмотром WWDC
Кейноут WWDC пройдет вот уже через неделю. Если вы планируете организовать совместный просмотр – напишите в личку @tatiana_2209. Мы соберем каталог всех событий, чтобы вам проще было найти что-то рядом с вами.
👉Ссылка на каталог
Act – инструмент для локального запуска GitHub Actions
Act – консольная тула, которая позволяет прогонять любой GitHub Action локально. Нужен только установленный Docker Desktop.
Вызов экшна выглядит так:act pull_request --container-architecture linux/amd64
Перевод на русский язык
Обзорная статья про Compose Multiplatform
На Хабре вышла неплохая обзорная статья на русском языке про то, как работает Compose Multiplatform, и как собрать свой первый простой проект. Если стало интересно, вот еще несколько материалов по теме:
Официальный блог пост с анонсом
Подробный доклад
Документация и схема событий аналитики
В какой-то момент в приложении Headhunter стало так много разных событий аналитики, что ребята решили навести в них порядок. Вот что получилось:
👉Отдельный репозиторий, который стал источником правды про все события.
👉Каждое событие описывается yaml файлом, который содержит название, описание, категории, к которым оно относится, и параметры.
👉Схема умеет рендериться в маркдаун, и благодаря этому генерируется человекочитаемый справочник всех событий.
👉Аналитики сами пишут yaml файлы.
👉Из схемы также генерируется код для приложения.
package – новый access modifier
В Swift 5.9 появится новый модификатор доступа – package. К символам, помеченным таким образом, можно будет получить доступ только коду из того же пакета. В статье разбирается несколько примеров его использования и его совместимость с другими модификаторамич
Новые Accessibility фичи
Как всегда в последние годы, Apple за несколько недель до WWDC представляет новые фичи доступности, которые появятся в следующей iOS. В этом году все особенно интересно!
👉Assistive Access. Новый упрощенный интерфейс для системных приложений, в котором выпилили все лишнее, оставили самые базовые элементы интерфейса и увеличили их в несколько раз. Куда там занести деньги, чтобы этот режим везде был по дефолту?
👉Live Speech. Генерация голоса, похожего на ваш, для озвучки введенного текста.
👉Point ans Speak. Озвучивание текстовых надписей, которые попадают на камеру.