iOS Broadcast
3.4K subscribers
1.81K photos
86 videos
1.02K links
Подборка новостей и статей для iOS разработчиков.

Новости Kotlin и мультиплатформы @kotlin_broadcast
Новости Android @android_broadcast
Реклама и прочее @ab_manager
Download Telegram
📱 Проблема: Растущий объем View
По мере роста проектов SwiftUI элементы View становятся длинными и сложными. Простой экран быстро превращается в десятки вложенных VStack, HStack и пользовательских модификаторов.

Искушение: extension-ы и вычисляемые свойства
🔵Многие разработчики пытаются уменьшить размер кода, перемещая его части в расширения.
🔵Это улучшает удобочитаемость тела, но не решает проблему повторного использования и сопровождения.

Альтернативный подход: извлечение и повторное использование
🔵Извлекайте специальные SwiftUI View для каждой части с четкой ответственностью.
🔵Создавайте повторно используемые модификаторы View для согласованности и простоты тестирования.
🔵Используйте общие расширения для просмотра для часто используемых макетов.

Эмпирическое правило для хорошей архитектуры SwiftUI:
🔵Если элемент пользовательского интерфейса имеет четкое назначение и потенциал для повторного использования, извлекайте его.
🔵Если нет, сохраняйте его локальным или используйте вычисляемое свойство.
🔵Разбивайте код на чистые, композиционные и тестируемые компоненты для улучшения архитектуры.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍76
🐥 Важный нюанс при работе с taskGroup
Интересная особенность работы taskGroup которая не вызывает удивления если уже знаешь о ней, но может привести к неожиданным результатам, если написать похожий код не сильно задумавшись. Суть особенности отлично представлена в примере:
🔵Сниппет кода имитирует сценарий использования withTaskGroup, метод fetchData заменяет сетевой запрос случайной длительности
🔵В taskGroup добавляются задачи по вызову метода fetchData
🔵В конце результат выполнения методов fetchData cсобираются в итоговый массив results
🔵results в том порядке, в котором они были возвращены задачами, а не в том порядке, в котором они были созданы
🔵Чтобы восстановить исходный порядок, требуется добавить индексы в кортеж
В целом, не на столько важно сохранять исходный порядок, важно понимать что порядок будет случайным и не стоит надеяться на сохранение исходного порядка.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
🔨 Combine – швейцарский нож iOS-разработчика. Или нет?
Несмотря на то что я чаще привожу примеры статей про Swift Concurrency, в сердечке все равно Combine. И вот отличная статья для всех, кто еще не использует Combine и сомневается в его полезности.
🔵Combine - швейцарский нож iOS-разработчика для работы с асинхронными событиями в декларативном стиле.
🔵Combine помогает разработчикам управлять потоками данных, избавляя от множества колбэков и ручного управления очередями.
🔵Combine состоит из трех сущностей: Publisher, Operator и Subscriber.
🔵Publisher генерирует значения или ошибки и отправляет их Subscriber.
🔵Operator фильтрует или комбинирует значения между Publisher и Subscriber.
🔵Subscription управляет передачей данных от Publisher к Subscriber и контролирует объем запрошенных данных.
🔵Subscriber является получателем данных от Publisher и обрабатывает их.
🔵Combine интегрируется в SwiftUI через @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
🔥31👍1🤔1
🐥🧰 Первый взгляд на Swift SDK for Android
Давайте разберемся, что же нам представили. Swift продолжает выходить за пределы Apple-эко­системы: представлена Nightly Preview версии SDK для Android.
🔵SDK поставляется как часть инсталлятора для Windows или как отдельная загрузка для Linux / macOS.
🔵Опубликован Getting Started guide и пример-репозитории Swift for Android Examples, показывающие end-to-end workflow (Swift код на Android)
🔵Более 25 % пакетов в Swift Package Index уже сборочно поддерживают Android.
🔵В рамках SDK предусмотрена межъязыковая интероперабельность через проект swift‑java: библиотека + генератор биндингов Java ⬅️➡️ Swift.

Как это работает:
🟢SDK подключается к Android NDK / Gradle через toolchain Swift.
🟢Swift-модули компилируются в .so-библиотеки и вызываются из Java.
🟢UI-слой остаётся нативным — Compose / View.
🟢Предполагается использование стандартного Swift-компилятора, адаптированного для Android-платформы (через Android NDK и соответствующие архитектуры).
🟢SDK пока в preview/nightly статусе — то есть инструментальная цепочка и CI ещё на стадии активной доработки.
🟢Swift-пакеты, которые уже поддерживают Android-таргеты, можно переиспользовать без переписывания на Kotlin/Java — особенно слои бизнес-логики, модели данных, алгоритмы.
🟢UI-слой пока остаётся нативным на Android (Compose/View)
🟢Проект swift-java: автоматически генерируются биндинги, это значит: можно в существующем Android-проекте подключить Swift-модуль, либо начать приложение в Swift, но обращаться к Android API/библиотекам.
🟢Альтернатива Kotlin Multiplatform (KMP). В KMP логика пишется в Kotlin и используется на iOS; здесь — логика в Swift и используется на Android. Зависит от того, на каком ЯП логика уже написана

Текущие проблемы:
🔴SDK в превью: не рекомендуется для production-релизов — возможны баги, нестабильности, отсутствие обратной совместимости
🔴Интеграция SwiftUI с Android пока даже не анонсирована — основной фокус на логике.
🔴Инструменты, отладка, CI, работа с эмулятором Android
🔴Не все архитектуры/NDK-версии могут быть поддерживаются
🔴Форум полон описанием крашей и проблем в рантайме
🔴Хотя проект swift‑java генерирует, остаются нюансы: вызовы, управление памятью, поддержка наследования, интерфейсов (тред на реддит)
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍1🔥1
📱 Cветящийся, анимированный эффект обводки как в Apple Intelligence
Новый язык дизайна Apple - светящийся, анимированный эффект обводки для выделения форм и компонентов. Если вы захотите внедрить подобный эффект для индикации работы AI - можно взять готовое расширение SwiftUI и применить этот эффект.
🟢Можно применить как бекграунд или оверлей
🟢Гибкая кастомизация толщиты линий, блюра и анимаций
🟢Градиент автоматически генерирует рандомизированные по позициям цвета
🟢Поддерживает уменьшение движения accessibility настройку
🟢Работает со всеми фигурами (Circle, Capsule, RoundedRectangle, итд)
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥52
🔨iOS 26.1 Beta 4: новые возможности Liquid Glass и другие "особенности"

🟢Переключатель внутри Display & Brightness. В релизе iOS 26.1 Developer Beta 4 Apple впервые дала пользователям контроль над «стеклянным» интерфейсом Liquid Glass. В настройках дисплея, позволяющий выбрать два режима: Clear (прозрачный) и Tinted (более непрозрачный, с высоким контрастом). Для нас это означает, что интерфейсы должны корректно реагировать на оба режима и выглядеть гармонично при разной степени прозрачности.
🟢Новые языки Apple Intelligence (Русского нет). Китайский, датский, голландский, норвежский, португальский, шведский, турецкий, вьетнамский

Проблем, не много:
🔴Не работает ограничение allowCamera в MDM. Один из авторов форума сообщает, что параметр allowCamera=false, который предназначен для запрета доступа к камере на управляемых устройствах
🔴Сбой Broadcast Extension. Это полностью ломает функциональность потоковых приложений и любой другой программы, использующей Broadcast Extension (по сути работает только штатная запись экрана в Фото)

🗓iOS 26.1, по оценкам выйдет в первой половине ноября. Чем раньше вы начнёте тестирование, тем меньше сюрпризов будет после официального релиза.

Заметели какие-то особенности?
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1
🔨Основные нововведения в Xcode 26.1 beta
🟢Исправления в Instruments. В бета‑версии устранена проблема, из‑за которой инструмент Processor Trace не позволял записывать трейсы на устройствах семейства iPhone 17
🟢Кэширование Swift Package Manager. Пакеты, загружаемые из реестра, теперь кэшируются локально с протуханием через час, что уменьшает количество сетевых запросов при сборке
🟢Улучшения Coding Assistant. Во второй бете улучшено потребление памяти Coding Assistant для проектов с большими git‑репозиториями
🟢Исправления симулятора. Команда simctl list devices --json снова корректно отображает все устройства, когда на машине установлены несколько рантаймов с одинаковыми идентификаторами

Известные проблемы
🔴Проблема запуска симуляторов. После обновления macOS до Sequoia 15.6 симуляторы могут не запускаться при первой сборке. Apple рекомендует выполнить команду xcrun simctl runtime dyld_shared_cache update --all перед запуском симулятора, чтобы завершить генерацию shared‑кэша dyld
🔴Coding Assistant: поиск текста. Инструмент поиска в файлах может возвращать неверные номера строк, что приводит к ошибкам при замене текста
Please open Telegram to view this post
VIEW IN TELEGRAM
3
🎹 Розыгрыш билета на Mobius Осень 2025. Для участия надо быть подписанным на @ios_broadcast и нажать "Участвую!"

Итоги розыгрыша - 06 ноября
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍2
📱 Текстовые эффекты в SwiftUI с TextRenderer
С выходом iOS 17 и новых версий SwiftUI Apple представила протокол TextRenderer — инструмент, который даёт полный контроль над отрисовкой текста: от линий и слов до отдельных глифов.
Теперь текст можно анимировать, трансформировать и буквально «оживлять».

Ограниченные возможности стандартного Text
🔵Ранее разработчики могли изменять стиль только через модификаторы .font(), .foregroundStyle(), .kerning(), без доступа к самому процессу отрисовки.
🔵Нельзя было сделать продвинутые визуальные эффекты: поэтапное исчезание, покачивание символов, градиенты по строкам.

Использование TextRenderer
🔵Новый протокол предоставляет метод draw(layout:in:), который позволяет работать напрямую с каждой строкой, глифом или атрибутом.
🔵Можно комбинировать с Animatable для создания динамических эффектов (например, пульсации текста).
🔵Через TextAttribute можно задавать разные визуальные эффекты для отдельных частей текста — слово или даже буква могут «жить» отдельно.

Практические идеи:
🔵Создавать визуальные переходы и эффекты появления текста в onboarding-экранах.
🔵Добавлять акценты и микродвижения для повышения вовлеченности пользователя.
🔵Использовать эффекты бережно — цель в выразительности, а не в декорации.

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
🎹 Розыгрыш билета на Mobius Осень 2025. Для участия надо быть подписанным на @ios_broadcast и нажать "Участвую!" Итоги розыгрыша - 06 ноября
🎉 Результаты розыгрыша:

🏆 Победитель:
1. Evgeniy (@Evgeniy_Shevtsov)

✔️Проверить результаты
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🎉1
📱 SwiftUI Canvas API — графика нового поколения для iOS
Продолжаем разбираться с нововведениями в SwiftUI, на этот раз доступными уже с iOS 15. Стандартные декларативные View не позволяют реализовать сложную графику или кастомные визуальные эффекты.
🔴До появления Canvas разработчикам приходилось переходить в UIKit/Metal или использовать сложные трюки с Path и Shape
🔴Высокопроизводительная графика, частицы, шейдеры — всё это было вне удобной области SwiftUI

Решение: использование Canvas API
🟢Canvas предоставляет GraphicsContext и позволяет рисовать сразу на уровне пикселей, линий, фигур — прямо внутри SwiftUI
🟢Поддержка GPU-шейдеров и эффектов, Canvas стал«самым важным графическим улучшением с момента Core Animation
🟢Отлично подходит для визуальных спецэффектов, кастомных макетов, игр, интерактивной графики — без ухода в UIKit/Metal

Canvas { 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
👍1121
🐥 Безопасные уведомления в Swift Concurrency: MainActorMessage и AsyncMessage
Стандартные уведомления через 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)
}


➡️ Получаете: строгую типизацию, безопасность акторов, меньше бойлерплейта. Новые API дают гарантию изоляции и безопасного взаимодействия с актор-моделью. Если вы ещё используете старые методы — сейчас самое время обновиться.
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 без Apple Watch
HealthKit очень мощный фреймворк, который был не популярен среди разработчиков из-за ограниченности аудитории. Раньше приложением здоровья на iPhone можно было пользоваться очень ограниченно и пользы в интеграции с ним было мало. Все поменялось с выпуском iOS 26 и новых API. Теперь возможно реализовать полнофункциональное приложение для отслеживания тренировок на iPhone/iPad.

С iOS 26 теперь у нас есть:
🟢Возможность начать и завершить тренировочную сессию (HKWorkoutSession) на iPhone/iPad.
🟢В реальном времени отслеживать такие метрики, как пульс, сожжённые калории, дистанция.
🟢Сохранять данные тренировок в HealthKit, чтобы они были доступны другим приложениям.

Давайте разбираться!
🔵Тренировкой управляют четыре основных объекта: HKWorkoutConfiguration, HKWorkoutSession, HKLiveWorkoutBuilder, HKLiveWorkoutDataSource
🔵Создайте конфигурацию тренировки с типом активности и местоположением.
🔵Инициализируйте тренировку с помощью health store и установите делегата.
🔵Получите конструктор тренировок и подключите источник данных.
🔵Сохраните ссылки на сеанс и конструктор, подготовьте датчики и покажите обратный отсчет.
🔵Запишите время начала и начните сбор данных, обновите состояние до активного и запустите таймер.
🔵Сохраните данные о тренировке в HealthKit

Пример полной интеграции с 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
🐥 Улучшенное автодополнение в Swift: новая ступень в развитии IDE
В рамках программы Google Summer of Code 2025 для проекта SourceKit-LSP реализовано значительное улучшение автодополнения и подсказок в IDE-средах, поддерживающих Swift.
🔵Раньше автодополнение показывало лишь краткое описание (первый абзац доккомментария) для элемента кода. Теперь поддерживается отображение полного документационного комментария прямо в списке предложений.
🔵Добавлена поддержка запроса signature help (подсказка сигнатуры функции/метода): отображаются все перегрузки и их описание.
🔵Эти улучшения применимы не только в Xcode: редакторы, поддерживающие LSP (например, Visual Studio Code, Neovim, IntelliJ IDEA) получают аналогичные преимущества.

Почему это важно для нас?
🟢Более богатые подсказки в коде значительно ускоряют процесс разработки: меньше «гугления», проще разобраться в API и перегрузках.
🟢Улучшает качество кода: с полной документацией и подсказками вы реже пропустите важную деталь метода или неверную перегрузку.
🟢Подходит для фреймворков, где много перегрузок, а документация длинная — например, SwiftUI, Combine, HealthKit
🟢Работает в редакторах, где ранее поддержка Swift была ограничена — расширяет выбор инструментов IDE для разработчика.
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍82🔥2