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

Новости Kotlin и мультиплатформы @kotlin_broadcast
Новости Android @android_broadcast
Реклама и прочее @ab_manager
Download Telegram
🔨 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
👍5
⌨️⌨️⌨️ Ввод текста прямо из push-уведомления
Часто нужно дать пользователю возможность быстро ответить или ввести текст, не открывая приложение: ответить на сообщение, оставить короткий комментарий, подтвердить действие текстом. Обычные push-уведомления этого не позволяют — только кнопки без контекста.
Требуется UNTextInputNotificationAction:
🟣Пользователь вводит текст прямо в notification UI
🟣Приложение получает введённую строку в AppDelegate / Notification Service
🟣Можно обработать ответ без открытия приложения

Как это работает
⌨️ Создаём action с текстовым вводом
let replyAction = UNTextInputNotificationAction(
identifier: "REPLY_ACTION",
noscript: "Ответить",
options: [],
textInputButtonTitle: "Отправить",
textInputPlaceholder: "Введите сообщение"
)


⌨️ Добавляем action в категорию уведомлений
let category = UNNotificationCategory(
identifier: "MESSAGE_CATEGORY",
actions: [replyAction],
intentIdentifiers: [],
options: []
)

UNUserNotificationCenter.current()
.setNotificationCategories([category])


⌨️ Обрабатываем введённый текст
if let response = response as? UNTextInputNotificationResponse {
let text = response.userText
}


Что важно учитывать
🟣Работает только для notification categories
🟣Требует корректной обработки в UNUserNotificationCenterDelegate
🟣Пользователь всё ещё должен дать разрешение на уведомления
🟣UI ввода — системный, кастомизировать нельзя

UNTextInputNotificationAction — недооценённая, но очень мощная возможность iOS.
Позволяет превратить уведомление из «пассивного» в интерактивный элемент, который реально экономит время пользователя.
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍2
🔨 Ускоряем инкрементальную сборку проекта с Claude Code + XcodeBuildMCP

При использовании Claude Code стандартные xcodebuild-сборки тормозят на больших проектах, потому что каждый билд проходит полный цикл компиляции. Новое решение — интеграция XcodeBuildMCP, которая позволяет задействовать экспериментальную поддержку инкрементальных сборок

Что это даёт разработчику
🔵Быстрые инкрементальные сборки — при повторных билд-сессиях XcodeBuildMCP ускоряет компиляцию за счёт повторного использования артефактов вместо полной пересборки
🔵Работает в связке с Claude Code/AI-ассистентами, когда команды билда передаются через MCP (Model Context Protocol)

Как включить:
🟣В конфигурации Claude Code добавляем XcodeBuildMCP и включаем экспериментальный incremental-режим:
claude mcp add -s user XcodeBuildMCP npx xcodebuildmcp@latest \
-e INCREMENTAL_BUILDS_ENABLED=true \
-e XCODEBUILDMCP_ENABLED_WORKFLOWS="simulator,device,project-discovery,session-management" \
-e XCODEBUILDMCP_SENTRY_DISABLED=true

🟣INCREMENTAL_BUILDS_ENABLED=true — включает быстрые incremental-сборки
🟣simulator, device — включают нужные рабочие группы
🟣SENTRY_DISABLED — отключает Sentry-отчёты на время эксперимента
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🐥 Все не так с Codable
Выпустили статью про наши оптимизации JSONDecoder/Encoder. Очень советую к прочтению, получил огромное удовольствие при редактуре.

Почему Codable тормозит?
🔵Многие приложения используют Codable для API-ответов, UserDefaults, кешей и пр. — и именно от его скорости часто зависит старт/UI-ответ.
🔵Внутренние механизмы стандартной реализации делают много проверок conformances (соответствий протоколам), особенно через вызовы swift_conformsToProtocolMaybeInstantiateSuperclasses. Эти вызовы оказываются самой медленной частью сериализации/десериализации
🔵Причём чем больше моделей и ключей (CodingKeys) — тем хуже масштабируется производительность

Оптимизации в JSONDecoder/Encoder
🟢Мы проанализировали использующиеся проверки и смогли уменьшить накладные расходы при conformances, избегая лишних runtime-поисков
🟢Предложили универсальный `AnyCodingKey`, который снижает количество разных protocol-denoscriptors, экономя работу рантайма
🟢Благодаря этим подходам, в A/B-экспериментах на 80 000 пользователей сериализация и десериализация стали в ≈2× быстрее на ключевых квантилях

🎁 Оптимизация через макросы
Чтобы ещё сильнее ускорить, мы конвертировали модели на уровне генерации кода:
🔵Использование Swift-макросов для автоматической генерации init(from:)/encode(to:) без CodingKeys
🔵Это уменьшает нагрузку на рантайм и ещё сильнее снижает overhead сериализации/десериализации

Выводы
🟡Если у вас большие JSON-модели или массовый парсинг/запись — Codable может быть узким местом
🟡Оптимизация ключей, контроль CodingKeys и сокращение количества протоколов, через которые проходит парсинг — реально влияет на производительность
🟡В продакшн-приложениях важно измерять не только бизнес-логику, но почти «внутренности» стандартных API — часто именно там скрываются миллисекунды, влияющие на UX
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥61
🔨 Stanford CS193p Лекция 4
Заканчиваем неделю уже регулярной еженедельной рубрикой по лекциям из курса по разработке iOS приложений на SwiftUI от Стендфорда. Эта лекция посвящена построению модели игры CodeBreaker и связке её с UI. Это важный этап курса — теперь приложение не просто отображает данные, а игра становится полностью работоспособной с логикой в модели. Вся лекция это лайв кодинг, который отображает подход к иттерационной разработке и выстраивает правильное мышление при решении задачи. Что проходит в лекции:

Повторение архитектуры Model ↔️ View
🔵Model для CodeBreaker — логику игры, проверку ходов, хранение состояния
🔵Отделение логики от UI — ключ к тестируемости и масштабируемости
🔵UI теперь связан с моделью через @StateObject / @ObservedObject / bindings, и игра оживает

Работа с состоянием и обновлениями
🔵Рассматриваются структуры данных и состояния
🔵SwiftUI автоматически реагирует на изменения модели, обновляя интерфейс

Применение Optional, Enum и коллекций
🔵Для Game Status удобно использовать enum и Optional, чтобы чётко описать стадии игры
🔵Такого рода типы делают модель выразительной и безопасной

Интеграция с UI
🔵View без бизнес-логики — модель принимает решения, а UI отображает результат
🔵Обработка событий (нажатие плитки, новая попытка) прокидывается через binding к модели

#cs193p
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🐥 Что нового в Swift — декабрь 2025
Swift подводит итоги года — и обновление декабрьского дайджеста показывает, что язык развивается не только на стороне Apple-платформ, но и в крупнейших open-source-экосистемах.
Проект Swift вырос до 70+ репозиториев, куда еженедельно вносятся улучшения по языку, инструментам, производительности и кросс-платформенности.

Swift 6.2
🟢Делает конкурентность более доступной, сохраняя простоту — сложные фичи появляются когда нужны, но не мешают «обычному» коду
🟢Добавляет WebAssembly-поддержку, усиленную интероперабельность с C++
🟢Улучшает безопасность памяти и инструменты разработки

Язык растёт за пределами iOS/macOS
🟡Embedded Swift — быстро развивается, становится всё более применимым вне экспериментов
🟡Android — рабочие сборки SDK уже доступны: нативная разработка на Swift приближается к реальности
🟡Windows — поддержка зрелая, отличный опыт через VS Code, растёт количество кросс-платформных пакетов
🟡FreeBSD — предпросмотр портирования Swift под FreeBSD 14.3+ с докладом на FOSDEM 2026

Swift в Backend и ML
🔵AWS Lambda Runtime — Swift теперь официально поддерживается как runtime для AWS Lambda — значительный шаг для серверной разработки на Swift
🔵MLX и Swift-среда для машинного обучения на Apple Silicon — растёт спектр инструментов для AI/ML-разработки

Swift Evolution
🟡SE-0501 HTML Coverage Report — возможность выводить HTML-отчёты покрытии тестов в SwiftPM
🟡SE-0497 Controlling function definition visibility — явный контроль видимости функций для оптимизаций и inlining
🟡SE-0493 Async в defer — теперь await можно использовать в defer { … }, что упрощает асинхронную очистку
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
🔨 SwiftText — утилита для извлечения текста из файлов (PDF, DOCX, OCR) на Swift
Это инструмент, который объединяет разные методы получения текста из самых распространённых источников: PDF, DOCX, OCR-изображения и другие.

Что умеет SwiftText
🔵Текст из PDF — сначала пытается извлечь текст из «правильных» PDF (vector), а при неудаче — рендерит страницу и делает OCR через Vision
🔵OCR для битмапов/сканов — делает текст из изображений страниц через Vision OCR
🔵Текст из DOCX — распаковывает Word-документ и парсит XML, получая чистый текст без внешних зависимостей кроме ZIPFoundation
🔵Markdown-вывод — есть возможность выводить результат как Markdown (например, из DOCX)

Как может пригодиться разработчику
🟡Парсинг данных из файлов (банковские выписки, отчёты, документы)
🟡Автоматизация обработки текстов в CLI/инструментах
🟡LLM/AI-функции: удобно доставать текст для дальнейшей обработки или анализа агентами/LLM
🟡Инструменты для DevOps/интеграций: извлечение текста для тестов, логов, проверок

Пример CLI-команд
# получить Markdown из DOCX
swift run swifttext docx file.docx --markdown

# получить текст из PDF
swift run swifttext pdf file.pdf

# OCR текста из битмапа
swift run swifttext ocr image.png
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥6👍1
🎯 Как заставить LLM генерировать код как вы, а не средний по интернету
Большинство разработчиков используют LLM (ChatGPT, Claude, Cursor) из коробки и получают рабочий, но недостаточно качественный код: он компилируется, но не соответствует архитектуре, стилю и практикам, которые вы используете в своем проекте. Это особенно заметно в Swift, так как в тренировочных данных таких примеров меньше, чем, скажем, JavaScript/Python. LLM обучены на статистике текста — они средние по трендовым паттернам интернета, а не специфичным корпоративным/производственным стилям. Поэтому они генерируют код, который компилируется, но:
🔴не учитывает архитектуру вашего проекта
🔴игнорирует Dependency Injection и тестирование
🔴пропускает ваши правила именования и шаблоны

AGENTS.md Это “README для LLM” - высокоуровневое описание архитектуры, команд, workflow, договорённостей:
➡️ цели, ограничения, ожидаемое качество
➡️ структура репозитория
➡️ стиль кода
➡️ архитектурные шаблоны и тесты
➡️ команда/инструменты

Rule Files - Набор правил на уровне доменов:
➡️ Dependency Injection
➡️ SwiftUI архитектура
➡️ Стратегии тестирования
➡️ Стиль коммитов
➡️ Workflow и code patterns
Каждый файл содержит чёткие директивы и примеры кода, которые LLM подгружает только тогда, когда это нужно.

Что это даёт
🔵Код, который выглядит как ваш собственный код, а не среднестатистический
🔵Снижение рефакторинга после генерации
🔵Больше соблюдения правил архитектуры и тестов
🔵Поддержка нескольких AI-инструментов (Claude, ChatGPT, Cursor) на одной основе правил
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5