iOS Broadcast – Telegram
iOS Broadcast
3.46K subscribers
1.84K photos
87 videos
1.04K links
Подборка новостей и статей для iOS разработчиков.

Новости Kotlin и мультиплатформы @kotlin_broadcast
Новости Android @android_broadcast
Реклама и прочее @ab_manager
Download Telegram
📱 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
👍4🔥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🔥21
Демонстрация:​ Как интегрировать новый язык дизайна в приложения
Вчера прошла "встреча с Apple" ключевой темой которой являлся новый дизайн и жидкое стекло. Мои хайлайты из 2-часового доклада:
🔵Жидкое стекло становится частью фундаментальной системы дизайна Apple.
🔵Интерактивность жидкого стекла представляет собой огромный скачок в программных и графических технологиях.
🔵Акцент на содержании приложений и улучшение иерархии пользовательского интерфейса.
🔵Пользовательский интерфейс должен быть легко доступен и элегантно отходить на второй план.
🔵Три урока, усвоенные при перестройке приложения с помощью SwiftUI: начните с малого, работайте умнее, а не усерднее, завоевывайте доверие.
🔵Требуется дизайн система, где дизайн и код работают в гармонии.
🔵Переписывание приложения на SwiftUI облегчает переход на Liquid glass
🔵Liquid Glass помогает интерфейсу отойти на второй план, позволяя контенту сиять.

Опыт команды дизайнеров Apple:
🟢Цель проекта — создать единый язык дизайна для всех продуктов Apple.
🟢Мотивация: улучшение эргономичности и удобства использования.
🟢Десятки эскизов и прототипов помогают находить лучшие решения.
🟢Преимущества имеют нативные компоненты для создания интерфейсов
🟢Liquid Glass уменьшает количество цветов в кнопках, позволяя контенту быть хорошо видимым
🟢Поиск перемещён с верхней части iPhone на нижнюю для большей доступности.
🟢Сворачивание панели вкладок позволяет сфокусироваться на контенте.
🟢Иконки приложений формируют первое впечатление о приложении.
🟢Жидкое стекло создаёт единый визуальный язык для иконок.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
11👍2
🐥 Усовершенствования Swift 6.3 для Embedded Swift
В версии Swift 6.3 идут значительные улучшения для Embedded Swift — версия Swift, оптимизированная под крайне ограниченные среды
Ключевые обновления:
🟢Метод denoscription/debugDenoscription для Float, Double теперь доступен в библиотеке Embedded Swift
🟢Появились диагностические предупреждения (EmbeddedRestrictions), которые помогают выявлять конструкции языка, неподходящие для Embedded-режима (например, untyped throws, применение generic-функций к existential)
🟢Улучшена взаимосвязь с C: поддержка атрибута @c, улучшена терпимость к несоответствиям между C-подписью и Swift-объявлением
🟢Отладка: улучшена работа с LLDB — появилась поддержка чтения памяти с указанием типа, улучшенная трассировка исключений на armv7m
🟢Линковка: устранена типовая проблема с дублированием символов при использовании Embedded Swift библиотек через слабые (weak) определения; введён атрибут @export

Даже если вы разрабатываете исключительно под iOS, полезно знать о развитии языка: улучшенная C-совместимость, диагностика, отладка — всё это может пригодиться. Swift 6.3 продолжает расширять возможности встроенного (embedded) варианта языка — теперь он становится не просто экспериментом, а более полноценной средой для разработки лёгких и эффективных решений.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
📱 MagnifyGesture в SwiftUI
Зумирование контента — привычное действие для пользователей. С помощью MagnifyGesture с iOS 17 в SwiftUI можно легко добавить такой жест к View:
🔴При использовании стандартных жестов зумирования возникают нюансы: нужно решить, будет ли увеличенное состояние "временным" (возврат к исходному после окончания жеста) или "сохраняемым" (пользователь может масштабировать и остаться на этом уровне)
🔴Без правильной настройки жеста и состояния пользовательский опыт будет непредсказуемым

Вариант 1: Временный зум
🟣Используйте @GestureState для хранения текущего коэффициента масштабирования:
🟣Примените .scaleEffect(magnification) к View и добавьте жест
🟣Итог: во время жеста View масштабируется, после окончания жеста возвращается к исходному состоянию.

  @GestureState private var magnification: CGFloat = 1

.gesture(
MagnifyGesture()
.updating($magnification) { value, state, _ in
state = value.magnification
}
)


Вариант 2: Сохраняемый зум
🟣Используйте два свойства:
🟣Применяйте .scaleEffect(totalMagnification * currentMagnification) и жест
🟣Итог: пользователь увеличивает View — и масштаб остаётся на этом уровне до следующего жеста.
  @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
}
)


Что важно:
Убедитесь, что целевые устройства поддерживают iOS 17+, чтобы использовать MagnifyGesture
Решите заранее: нужен ли вам зум постоянный или временный — архитектура жеста зависит от этого
При сохраняемом зуме обязательно работайте с двумя состояниями (текущим и накопленным), чтобы обеспечить плавный UX и корректные вычисления
Проверьте интерфейс: масштабирование влияет на расположение, обрезку, может потребоваться дополнительная логика для предотвращения слишком малого или слишком большого масштаба
Тестируйте на разных устройствах (iPhone, iPad), ориентациях и с разными контентами (изображения, списки, кастомные Views) — чтобы жест не конфликтовал с другими жестами (например, прокруткой)

Добавление зума через MagnifyGesture в SwiftUI — мощный инструмент для повышения интерактивности интерфейса. Главное — выбрать правильную стратегию и грамотно реализовать состояние.
Please open Telegram to view this post
VIEW IN TELEGRAM
1
📱 Когда GeometryReader не нужен
Использование GeometryReader для управления layout-разметкой может усложнить и сделать более тяжелой иерархию View. Часто, чтобы центрировать контент или задать максимальную ширину (например, для iPad), разработчики оборачивают всё в GeometryReader, вычисляют размеры — но это влияет на layout, вызывает лишние пересчёты, усложняет структуру. Правильным решением в этом кейсе является использование onGeometryChange + contentMargins (iOS 17+ с бекпортом до iOS 16)
🔵onGeometryChange даёт возможность реагировать на изменение геометрии контейнера — без необходимости оборачивать интерфейс в GeometryReader
🔵Вместе с contentMargins можно задавать отступы для scroll-контента, центрировать и ограничивать ширину — делая layout адаптивным и чистым

Практические плюсы для iOS разработчика:
🟢Более лёгкая и чистая иерархия View — без лишних вложений.
🟢Упрощённая адаптивная верстка: удобнее для iPad, разных размеров экранов, responsive-дизайна.
🟢Код легче поддерживать и читать — сокращается boilerplate, меньше хитростей.
🟢Можно контролировать layout декларативно, оставаясь в духе SwiftUI.

Что стоит проверить прямо сейчас:
Проверьте части UI, где сейчас используете GeometryReader просто ради вычисления ширины/центрирования. Возможно, его можно заменить на onGeometryChange + contentMargins
Для scrollable-экранов с ограниченной шириной (галереи, карточки, формы) — попробуйте contentMargins + ограничение max-width, чтобы красиво центрировать контент на широких экранах
Если нужна реакция на изменение размеров контейнера — onGeometryChange позволяет элегантно отлавливать это и обновлять layout без лишней обёртки
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🔨 CS193P 2025
Вышел обновленный стендфорский курс CS193p. Это бесплатный курс посвященный разработке приложений для iOS, объясняет основы создания приложений для iPhone и iPad с помощью SwiftUI. Почему культовый? В 2012 году я сам по нему учился и всю свою карьеру встречаю множество талантлевых iOS разработчиков, которые так же начали карьеру с него. На сайте представлены материалы, которые были доступны студентам Стэнфорда - записи домашних заданий и демонстрационный код.
🟢Курс на английском. От себя советую включать субтитры и слушать в оригинале, привыкать к международной терминологии
🟢Сам курс очень базовый и его можно начать изучать без знаний в iOS разработке, но база по программированию и ООП обязательна
🟢Между лекций есть домашние задания, их выполнение обязательно для полного погружения, если у вас появятся сложности, пишите в комментарии к этому посту-постараюсь помочь
🟢Если вы уже знакомы с iOS разработкой но сам курс не проходили - крайне советую пройти для систематизации ваших знаний

Пока вышли первые 6 лекций, но скоро должны появиться еще 9-10 лекций. Появилась идея сделать обзор лекций в канале @ios_broadcast, если вам такой формат интересен, ставьте 🔥
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥429
Привет, хочу поделиться классным каналом, который и сам читаю, про iOS разработку и мобильную разработку в целом.

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

👉 Подписывайтесь на @hardworkerIT
8👍4🤔21
🔨 CS193P Лекция 1
Обычная вводная лекция, о курсе, требования для прохождения курса и знакомство со всем необходимым набором возможностей Xcode. Самая интересная часть 1 лекции это домашнее задание, до 4 лекции от студентов Stanford требуется изучить основы Swift:

Цветовая кодировка разделов
🔘Серые темы не нужно читать сейчас
🟡Желтые темы необычны и требуют внимания
🔴Красные темы важны и требуют внимательного прочтения

Материалы к прочтению:
🟢Swift Tour
🟢Swift API Guidelines
🟢Swift Basics

Мои хайлдайты из плана для чтения:
🟢Словарь и массив являются мощными и часто используемыми структурами. Освойте их как можно раньше
Разобраться в разнице между let и var
🟢Функции являются типами первого рода в Swift (first-class citizens). Это означает, что их можно использовать как и любые другие типы данных
🟢Замыкания (Closure) более мощные, чем встроенные функции - являются ссылочными типами
🟢Перечисления важны в Swift
🟢Структуры являются value-type, классы - ссылочными типами
🟢Методы экземпляра, свойство self, изменение типов значений из методов экземпляра

Получил достаточно много 🔥в реакциях, так что введу разбор одной лекции в неделю. Тем кто хочет погрузиться в iOS разработку-предлагаю за эту неделю смотреть саму лекцию и задавать вопросы по домашнему заданию прямо в комментарии к посту.
#cs193p
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16👍71