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

Новости Kotlin и мультиплатформы @kotlin_broadcast
Новости Android @android_broadcast
Реклама и прочее @ab_manager
Download Telegram
🔨 Stanford CS193p Лекция 5
Первые дни новогодних праздников позади, а значит пора возвращаться к контенту. Что может быть лучше для начала года чем лекции Стенфорда. Пятая лекция сосредотачивается на архитектуре приложений, модели состояния и связке с UI — это следующий логичный шаг после первых четырёх лекций

🔵Глубокая архитектура приложения — как строить устойчивые, масштабируемые структуры, где Model, ViewModel и View чётко разделены.
🔵Связь модели и UI — через @StateObject, @ObservedObject, @Binding и реактивное обновление View.
🔵Swift Type System в архитектуре — как использовать enum, структуры и Optional для описания состояния приложения
🔵Обработка пользовательских событий — обновление модели, навигация, состояние побед/ошибок.
Все эти подходы помогают перейти от простого UI к полноценному приложению с бизнес-логикой, состояниями и тестируемой моделью

Почему это полезно?
🟡Если вы строите серьёзные приложения на SwiftUI, важно не только знать синтаксис, но уметь проектировать архитектуру
🟡Эта лекция показывает best practices по организации кода, которые работают и для небольших MVP, и для крупных приложений с десятками экранов
🟡Контент из Stanford — один из самых авторитетных источников входа в изучение SwiftUI и архитектуры iOS-приложений

#cs193p
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12
iOS Broadcast
🔨 Stanford CS193p Лекция 5 Первые дни новогодних праздников позади, а значит пора возвращаться к контенту. Что может быть лучше для начала года чем лекции Стенфорда. Пятая лекция сосредотачивается на архитектуре приложений, модели состояния и связке с UI —…
🔨 Stanford CS193p Лекция 6
Новая лекция из курса iOS Development with SwiftUI от Stanford University продолжает тему архитектуры приложений на SwiftUI — от базового разделения Model/View/ViewModel к более сложным паттернам устойчивости и масштабируемости. Лекция полностью состоит из демонстрации, на основе которой после лекции формируется домашнее задание.

Продвинутая архитектура SwiftUI-приложений:
🔵Управление состоянием на уровне всего приложения
🔵Организация логики и зависимостей через Observable, @MainActor, ViewModels
🔵Стратегии для больших проектов (модули, слои, separation of concerns)

Связь Model ↔️ ViewModel ↔️ View
🔵Обновление UI через реактивные свойства (@Published, Binding, @StateObject)
🔵Продвинутые паттерны: сценирование, flows, экраны со сложным состоянием

Работа с навигацией и состоянием
🔵Управление переходами в больших приложениях
🔵Сохранение состояния при смене экранов / вкладок

Домашнее задание:
Создать игру, похожую на CodeBreaker (которую создают в курсе), но с буквами английского алфавита вместо цветных меток, а также со следующими требованиями:
🟢Код и попытки должны быть словами на английском языке. Поэтому в игре используются все 26 букв алфавита как возможные «пины»
🟢UI должен показывать точные и неточные совпадения прямо на буквах (не через отдельные индикаторы)
🟢Кнопки должны быть расположены в виде QWERTY-клавиатуры, чтобы пользователь мог выбирать буквы
🟢Игра должна поддерживать перезапуск, выбор длины слова (от 3 до 6 букв), анимации из предыдущих лекций

#cs193p
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
1
🎯 Agent Skills: отказ от AGENTS.md в пользу переиспользуемых знаний для AI-агентов
Оказывается есть аналог глобального AGENTS.md для каждого проекта. Можно настроить общие подходы через скилы.

Skills заменяют AGENTS.md
🔵AGENTS.md — это единый файл с правилами/правилами для вашего AI-агента, но он обычно включает много проект-специфичной информации, которую трудно переиспользовать
🔵Agent Skills — это отдельные, тематические блоки знаний, хранимые в своих папках и которые можно подключать к разным проектам и инструментам

Skill — это каталог, содержащий:
🔵SKILL.md — файл с описанием навыка / инструкциями.
🔵references/ — дополнительные справочные материалы.
🔵scripts, assets — вспомогательные файлы, шаблоны и прочее

Skills позволяют разделять знания по темам, например:
➡️Swift Concurrency
➡️Testing Patterns
➡️SwiftUI Best Practices
➡️Refactoring Guidelines
и использовать их во всей своей экосистеме AI-инструментов

Автор создал Swift Concurrency Skill с модульной структурой:
swift-concurrency/
├── SKILL.md
└── references/
├ async-await-basics.md
├ actors.md
├ tasks.md
├ memory-management.md
└ …

Это даёт агенту глубокий, структурированный контекст, когда он отвечает на вопросы или делает refactor/анализ кода

Преимущества подхода
🔵Повторное использование: навыки можно применять во многих проектах — больше не нужно копировать и править AGENTS.md в каждом
🔵Структурированность: навыки маленькие, тематические, легче поддерживаются
🔵Поддержка инструментов: многие инструменты (например Claude/Claude Code, Cursor) уже поддерживают стандарт Skills, а стандарт открыт
🔵Более качественные ответы: агенту легче выбирать и подгружать только нужные знания, чем держать весь контекст в одном AGENTS.md

Agent Skills эффективно превращают набор практик и знаний вашего стека в модульные, переиспользуемые блоки. Это даёт:
меньше дублирования
лёгкую поддержку и обновление знаний
более точные ответы от AI-агентов
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
🎯 Privacy как бизнес-модель Apple
Google и Apple опубликовали совместное заявление, что само по себе редкость. Компании подчеркнули общее видение будущего цифровой экосистемы - AI с акцентом на безопасность, приватность и ответственность крупных платформ.
Факт - бизнес Apple не строится на продаже пользовательских данных

Именно поэтому Apple может:
🔵Выстраивать маркетинг вокруг privacy
🔵Делать privacy частью позиционирования платформы
🔵Использовать privacy как конкурентное преимущество

Для компаний, живущих за счёт рекламы и данных, такой подход просто недоступен.
На этом фоне совместное заявление Apple и Google выглядит не компромиссом, а расчётливым шагом:
📁 Apple не продаёт данные — Apple продаёт устройства, экосистему и доверие.
🧰 Google нуждается в сильном партнере для соперничества с OpenAI и Anthropic

Gemini — один из самых зрелых AI-стеков
🔵сильная работа с контекстом и мультимодальностью
🔵быстрый цикл улучшений и масштабируемость

И ключевое — Gemini легко встраивается как внешний сервис, без передачи контроля над платформой.

Apple делает то, что умеет лучше всего:
🔵чётко очерчивает границы доступа
🔵изолирует внешние модели от пользовательских данных
🔵оставляет UX и data-flow под своим контролем

Gemini здесь — инструмент, а не хозяин экосистемы.

Apple усиливает платформу, используя privacy как рычаг, а Gemini — один из немногих AI-партнёров, которого можно встроить, не ломая эту модель.
Верите в успех этого партнерства или расстроены тем что Apple признали свое отставание и сдались вендору в плоскости AI?
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
🔨 Creating reminder lists with EventKit (и зачем это вообще нужно)
Добавить напоминание в дефолтный список — легко.
Но как только у вас появляются кейсы типа Проекты / Контексты / Приоритеты, всё ломается:
🟣Пользователю некуда "складывать" задачи из вашего приложения
🟣Получается помойка в одном списке
🟣Вы теряете смысл интеграции с системными Reminders

Искушение: писать в default list и забыть
🔴 EventKit позволяет быстро сохранить EKReminder в defaultCalendarForNewReminders() — и кажется, что задача решена. Но это не UX, а технический костыль.

Рабочий подход: создавать свои списки (reminder lists) через EKCalendar
🟢В этом случае напоминания живут внутри календария для reminders (EKCalendar c entity .reminder)

Что делаем:
🔵Запрашиваем доступ к Reminders через requestFullAccessToReminders()
🔵Загружаем текущие списки: eventStore.calendars(for: .reminder)
🔵Создаём новый список: EKCalendar(for: .reminder, eventStore: ...), задаём title, подбираем source, сохраняем saveCalendar(..., commit: true)
🔵Добавляем напоминания в выбранный список через EKReminder, выставляя dueDateComponents и сохраняя eventStore.save(reminder, commit: true)
🔵Важно: не забыть ключ в Info.plistPrivacy - Reminders Full Access Usage Description.

Списки Reminders должны сохраняться в конкретное хранилище (локально / iCloud / CalDAV). Авторы предлагают приоритет:
🟢.local или .calDAV, иначе fallback на defaultCalendarForNewReminders()?.source
🟢Если вы добавляете Reminders “как интеграцию” — делайте списки, иначе это просто запись в чужой inbox.
🟢Если у фичи есть доменная структура (проекты/категории) — отражайте её системными списками.
Please open Telegram to view this post
VIEW IN TELEGRAM