Warning: Undefined array key 0 in /var/www/tgoop/function.php on line 65

Warning: Trying to access array offset on null in /var/www/tgoop/function.php on line 65
- Telegram Web
Telegram Web
📱 Проблема: Растущий объем 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
7
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
👍1021
🐥 Безопасные уведомления в 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
2025/11/11 06:07:17
Back to Top
HTML Embed Code: