Несмотря на то что я чаще привожу примеры статей про Swift Concurrency, в сердечке все равно Combine. И вот отличная статья для всех, кто еще не использует Combine и сомневается в его полезности.
@Published, @ObservedObject, @StateObject, .onReceive(_:) и @EnvironmentObjectПрелесть
Combine в том, что его можно объяснить объяснить за несколько часов, за несколько дней по-настоящему освоить и больше никогда не быть прежнимPlease open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3❤1👍1🤔1
Давайте разберемся, что же нам представили. Swift продолжает выходить за пределы Apple-экосистемы: представлена Nightly Preview версии SDK для Android.
Как это работает:
Текущие проблемы:
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍1🔥1
Новый язык дизайна Apple - светящийся, анимированный эффект обводки для выделения форм и компонентов. Если вы захотите внедрить подобный эффект для индикации работы AI - можно взять готовое расширение SwiftUI и применить этот эффект.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5❤2
Проблем, не много:
Заметели какие-то особенности?
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1
Известные проблемы
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Итоги розыгрыша - 06 ноября
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍2
С выходом iOS 17 и новых версий SwiftUI Apple представила протокол
TextRenderer — инструмент, который даёт полный контроль над отрисовкой текста: от линий и слов до отдельных глифов.Теперь текст можно анимировать, трансформировать и буквально «оживлять».
Ограниченные возможности стандартного
Text.font(), .foregroundStyle(), .kerning(), без доступа к самому процессу отрисовки.Использование TextRenderer
draw(layout:in:), который позволяет работать напрямую с каждой строкой, глифом или атрибутом.Animatable для создания динамических эффектов (например, пульсации текста).TextAttribute можно задавать разные визуальные эффекты для отдельных частей текста — слово или даже буква могут «жить» отдельно.Практические идеи:
TextRenderer превращает текст в полноценный графический объект SwiftUI.
Теперь дизайнерская выразительность и контроль за рендерингом текста доступны без выхода из декларативной модели SwiftUI.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8
iOS Broadcast
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🎉2
Продолжаем разбираться с нововведениями в SwiftUI, на этот раз доступными уже с iOS 15. Стандартные декларативные View не позволяют реализовать сложную графику или кастомные визуальные эффекты.
Path и ShapeРешение: использование Canvas API
Canvas предоставляет GraphicsContext и позволяет рисовать сразу на уровне пикселей, линий, фигур — прямо внутри SwiftUICanvas { context, size in
context.fill(
Path(ellipseIn: CGRect(origin: .zero, size: size)),
with: .color(.green))
}Canvas открывает новую эру для SwiftUI — графика, которую раньше надо было «обходить», теперь доступна в декларативном стиле. Если хотите сделать приложение с визуальной выразительностью — Canvas точно стоит попробовать!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11 2❤1
Стандартные уведомления через NotificationCenter не учитывают модель конкурентности и изоляцию акторов.
.main, компилятор может выдавать предупреждения при вызове методов, атрибутированных @MainActor.notification.object as? Type, что небезопасно и не даёт строгой типизации.Использование новых протоколов
MainActorMessage и AsyncMessage, доступных с iOS 26+, которые обеспечивают безопасную передачу уведомлений в модели Swift Concurrency решает эту проблемуMainActorMessage: уведомление чётко связано с главным актором — наблюдатель вызывается на главном акторе.AsyncMessage: уведомление может быть опубликовано из любого изоляционного контекста (любой актор или не-актор), и наблюдатель получает его асинхронно.Пример:
// ✅ 1. Определение уведомления:
struct RecentBuildsChangedMessage: NotificationCenter.AsyncMessage {
typealias Subject = [RecentBuild]
let recentBuilds: Subject
}
// ✅ 2. Отправка сообщения
let message = RecentBuildsChangedMessage(recentBuilds: builds)
NotificationCenter.default.post(message)
// ✅ 3. Подписка на сообщения
token = NotificationCenter.default.addObserver(of: [RecentBuild].self, for: .recentBuildsChanged) { message in
self.handleNewRecentBuilds(message.recentBuilds)
}
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
HealthKit очень мощный фреймворк, который был не популярен среди разработчиков из-за ограниченности аудитории. Раньше приложением здоровья на iPhone можно было пользоваться очень ограниченно и пользы в интеграции с ним было мало. Все поменялось с выпуском iOS 26 и новых API. Теперь возможно реализовать полнофункциональное приложение для отслеживания тренировок на iPhone/iPad.
С iOS 26 теперь у нас есть:
HKWorkoutSession) на iPhone/iPad.Давайте разбираться!
HKWorkoutConfiguration, HKWorkoutSession, HKLiveWorkoutBuilder, HKLiveWorkoutDataSourceПример полной интеграции с API и создания интерфейса при помощи SwiftUI есть в статье.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
В рамках программы Google Summer of Code 2025 для проекта SourceKit-LSP реализовано значительное улучшение автодополнения и подсказок в IDE-средах, поддерживающих Swift.
Почему это важно для нас?
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍8❤2🔥2 1
Демонстрация: Как интегрировать новый язык дизайна в приложения
Вчера прошла "встреча с Apple" ключевой темой которой являлся новый дизайн и жидкое стекло. Мои хайлайты из 2-часового доклада:
🔵 Жидкое стекло становится частью фундаментальной системы дизайна Apple.
🔵 Интерактивность жидкого стекла представляет собой огромный скачок в программных и графических технологиях.
🔵 Акцент на содержании приложений и улучшение иерархии пользовательского интерфейса.
🔵 Пользовательский интерфейс должен быть легко доступен и элегантно отходить на второй план.
🔵 Три урока, усвоенные при перестройке приложения с помощью SwiftUI: начните с малого, работайте умнее, а не усерднее, завоевывайте доверие.
🔵 Требуется дизайн система, где дизайн и код работают в гармонии.
🔵 Переписывание приложения на SwiftUI облегчает переход на Liquid glass
🔵 Liquid Glass помогает интерфейсу отойти на второй план, позволяя контенту сиять.
Опыт команды дизайнеров Apple:
🟢 Цель проекта — создать единый язык дизайна для всех продуктов Apple.
🟢 Мотивация: улучшение эргономичности и удобства использования.
🟢 Десятки эскизов и прототипов помогают находить лучшие решения.
🟢 Преимущества имеют нативные компоненты для создания интерфейсов
🟢 Liquid Glass уменьшает количество цветов в кнопках, позволяя контенту быть хорошо видимым
🟢 Поиск перемещён с верхней части iPhone на нижнюю для большей доступности.
🟢 Сворачивание панели вкладок позволяет сфокусироваться на контенте.
🟢 Иконки приложений формируют первое впечатление о приложении.
🟢 Жидкое стекло создаёт единый визуальный язык для иконок.
Вчера прошла "встреча с Apple" ключевой темой которой являлся новый дизайн и жидкое стекло. Мои хайлайты из 2-часового доклада:
Опыт команды дизайнеров Apple:
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍1
В версии Swift 6.3 идут значительные улучшения для Embedded Swift — версия Swift, оптимизированная под крайне ограниченные среды
Ключевые обновления:
description/debugDescription для Float, Double теперь доступен в библиотеке Embedded SwiftEmbeddedRestrictions), которые помогают выявлять конструкции языка, неподходящие для Embedded-режима (например, untyped throws, применение generic-функций к existential)@c, улучшена терпимость к несоответствиям между C-подписью и Swift-объявлением@exportДаже если вы разрабатываете исключительно под iOS, полезно знать о развитии языка: улучшенная C-совместимость, диагностика, отладка — всё это может пригодиться. Swift 6.3 продолжает расширять возможности встроенного (embedded) варианта языка — теперь он становится не просто экспериментом, а более полноценной средой для разработки лёгких и эффективных решений.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Зумирование контента — привычное действие для пользователей. С помощью
MagnifyGesture с iOS 17 в SwiftUI можно легко добавить такой жест к View:Вариант 1: Временный зум
@GestureState для хранения текущего коэффициента масштабирования:.scaleEffect(magnification) к View и добавьте жест@GestureState private var magnification: CGFloat = 1
.gesture(
MagnifyGesture()
.updating($magnification) { value, state, _ in
state = value.magnification
}
)
Вариант 2: Сохраняемый зум
.scaleEffect(totalMagnification * currentMagnification) и жест@State private var totalMagnification: CGFloat = 1.0
@State private var currentMagnification: CGFloat = 1.0
.gesture(
MagnifyGesture()
.onChanged { value in
currentMagnification = value.magnification
}
.onEnded { value in
totalMagnification *= value.magnification
currentMagnification = 1.0
}
)
Что важно:
Добавление зума через MagnifyGesture в SwiftUI — мощный инструмент для повышения интерактивности интерфейса. Главное — выбрать правильную стратегию и грамотно реализовать состояние.
Please open Telegram to view this post
VIEW IN TELEGRAM
QA Mobile MeetUp
Если вы тестируете мобильные приложения, приходите на митап Спортса” и Selectel.
Обсудим насущное: сбор ферм девайсов, генерацию тестовых данных, ревью тест-кейсов и тестирование рекламы.
📍оффлайн в Москве и онлайн
🗓5 декабря, 18:00
👉 Смотрите программу и регистрируйтесь
Реклама. АО "Селектел". erid:2W5zFJUA5jv
Если вы тестируете мобильные приложения, приходите на митап Спортса” и Selectel.
Обсудим насущное: сбор ферм девайсов, генерацию тестовых данных, ревью тест-кейсов и тестирование рекламы.
📍оффлайн в Москве и онлайн
🗓5 декабря, 18:00
👉 Смотрите программу и регистрируйтесь
Реклама. АО "Селектел". erid:2W5zFJUA5jv
Использование
GeometryReader для управления layout-разметкой может усложнить и сделать более тяжелой иерархию View. Часто, чтобы центрировать контент или задать максимальную ширину (например, для iPad), разработчики оборачивают всё в GeometryReader, вычисляют размеры — но это влияет на layout, вызывает лишние пересчёты, усложняет структуру. Правильным решением в этом кейсе является использование onGeometryChange + contentMargins (iOS 17+ с бекпортом до iOS 16)onGeometryChange даёт возможность реагировать на изменение геометрии контейнера — без необходимости оборачивать интерфейс в GeometryReadercontentMargins можно задавать отступы для scroll-контента, центрировать и ограничивать ширину — делая layout адаптивным и чистымПрактические плюсы для iOS разработчика:
Что стоит проверить прямо сейчас:
GeometryReader просто ради вычисления ширины/центрирования. Возможно, его можно заменить на onGeometryChange + contentMarginscontentMargins + ограничение max-width, чтобы красиво центрировать контент на широких экранахonGeometryChange позволяет элегантно отлавливать это и обновлять layout без лишней обёрткиPlease open Telegram to view this post
VIEW IN TELEGRAM