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

Новости Kotlin и мультиплатформы @kotlin_broadcast
Новости Android @android_broadcast
Реклама и прочее @ab_manager
Download Telegram
📱SwiftUI + SharePlay: смотри видео вместе с друзьями
Очень интересно и скорее всего вообще никому не пригодится. Обожаю эти фичи, которые мы видим на WWDC и больше никогда не используем в реальной жизни. SharePlay одна из таких фичей, возможно кто-то из вас нашел ей применение? В статье рассказано как с помощью Group Activities и AVFoundation сделать в iOS-приложении возможность смотреть видео синхронно на нескольких устройствах.
🔵Групповой просмотр — через FaceTime/SharePlay, синхронизация старта, паузы, позиции.
🔵Возможность менять видео для всей группы, присоединяться/покидать сеанс.
🔵Всё реализовано на SwiftUI + нативных API — без UIKit-та.

Что нужно сделать:
🔵Создать GroupActivity, описать метаданные (URL, noscript и т.д.).
🔵При старте вызвать prepareForActivation() → activate(), либо локально воспроизвести.
🔵Подписаться на sessions(), получить GroupSession, подключить playbackCoordinator к AVPlayer.

API очень удобный и интуитивный. Кто-то считает это может стать однажды популярным или уже придумал для чего использовать?
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
🔨 Как мониторить производительность iOS-приложения после релиза — MetricKit
Как с помощью MetricKit можно собирать реальные метрики от пользователей: загрузка CPU/памяти, I/O, время запуска, энергопотребление, крэши, hangs и многое другое.

Преимущества:
🟢Данные приходят автоматически — не нужно просить фидбек от пользователей.
🟢Понятные метрики: launch time, memory/CPU, disk and network I/O, energy, hangs.
🟢Можно найти реальные проблемы производительности и оптимизировать до того, как жалобы попадут в App Store.

Что нужно сделать:
🔵Подключить MetricKit.
🔵Добавить подписчика на MXMetricManager.
🔵После публикации — ждать первый отчёт.
🔵Анализировать метрики / крэши / использование ресурсов.

А если хотите пойти дальше, добро пожаловать предлагаю посмотреть мой доклад на эту тему:
🎞 Надежность мобильных приложений: что это и как достичь про то какие еще есть метрики и как их лучше собирать
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥3
🐥 Swift Concurrency: как избежать retain-циклов в Task
Работа с async/await и Task в Swift сильно упрощает асинхронный код, но ARC всё ещё делает своё — задачи захватывают объекты, которые используются внутри тела, и могут неявно удерживать память дольше, чем вы думаете. Это может привести к retain-циклам даже без UIKit-замыканий.

Что происходит под капотом:
🔵Когда вы создаёте Task { … }, Swift сильно удерживает все объекты, на которые ссылается тело задачи. Это стандартное поведение ARC: задачи держат захваченные значения до завершения.
🔵Если у вас есть объект, который сохраняет задачу как своё свойство, и в теле задачи вы захватываете self, получается временный retain-цикл: Owner → task → Owner
🔵Задача отпустит захваченные значения когда она завершится — так что цикл существует только на время выполнения задачи.

Когда это становится проблемой
🟡Если задача запускается и заканчивается быстро — чаще всего можно не беспокоиться: цикл временный и «самоустраняется».
🟡Но если задача долго живает (например, постоянный цикл, слушатель, стрим, background-loop) — цикл может превращаться в настоящую утечку памяти: объект удерживает задачу, а задача удерживает объект.

Как избежать retain-циклов?
🟡Слабые захваты weak self в задачах
task = Task { [weak self] in
guard let self else { return }
await self.loadData()
}


🟡Отмена долгоживущих задач
Если ваша задача запущена на View и должна завершиться при исчезновении UI — отменяйте её вручную: task.cancel(). Task отменяется, и память освобождается быстрее
Please open Telegram to view this post
VIEW IN TELEGRAM
👍52🤔1
🔨 Stanford CS193p лекция 3 Model & UI + Swift Type System
В новой лекции разбираются фундаментальные принципы работы SwiftUI через призму архитектуры модели и системы типов Swift — то, что определяет устойчивость и масштабируемость iOS-приложений.
Перемешивание UI и логики. Во многих SwiftUI-проектах View начинает обрастать обязанностями: хранением данных, обработкой логики, сетевыми вызовами. Это приводит к:
🟡Трудному тестированию
🟡Отсутствию переиспользования
🟡UI, зависимому от внутренних деталей хранения данных

Чёткое разделение Model ↔️ View
Связка Model и UI — центральная концепция лекции. SwiftUI ожидает, что:
🟡Model хранит истинное состояние и бизнес-логику.
🟡View — чистая функция состояния: она описывает интерфейс, но не владеет логикой.
Это делает приложение устойчивым к изменениям и легко тестируемым.

Swift Type System как фундамент архитектуры. Лекция подчёркивает важность системы типов Swift:
🟡Struct как основной строительный блок данных. Value-semantics уменьшают количество багов, связанных с состоянием.
🟡Enum + associated values. Мощный инструмент для моделирования состояний экрана: loading / success / error.
🟡Optionals. Встроенная безопасность, которая заставляет проектировать модель осознанно.
🟡Immutability по умолчанию. View остаются предсказуемыми, изменения происходят только в модели.

MVVM как естественный путь
CS193p фактически показывает MVVM-подход, но без перегибов:
🔵Model — данные и логика.
🔵ViewModel — источник правды для View, объявленный через @Observable / @StateObject.
🔵View — рендер состояния, без тяжёлой логики.

Выводы:
🔵Избегайте логики в View — переносите в модель или ViewModel.
🔵Используйте enum-состояния для сложных процессов (загрузка, ошибки, пустые состояния).
🔵Стройте данные на основе struct — меньше сайд-эффектов и легче тестировать.
🔵Используйте Optional осознанно: они должны отражать реальную модель данных.
🔵Делайте View чистой функцией состояния — UI становится стабильнее и проще.
#cs193p
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1