iOS Broadcast
3.31K subscribers
1.7K photos
84 videos
972 links
Подборка новостей и статей для iOS разработчиков.

Новости Kotlin и мультиплатформы @kotlin_broadcast
Новости Android @android_broadcast
Реклама и прочее @android_broadcast_bot
Download Telegram
📱 Создание больших приложений на SwiftUI
Нет ничего более спорного чем архитектура. Выбор архитектуры зависит от типа приложения. Данная статья представляет из себя гайд по решению базовых вопросов при работе с MV паттернами. Статья описывает не только теорию, но и содержит очень много практических примеров. Особенно ценным мне показался комплексный подход к решению, автор не только знакомит с концепциями, но и в деталях показывает какие проблемы могут возникнуть и к какому решению пришел он. Только часть топиков из статьи:
🟡Модульная архитектура
🟡Понимание структуры MV - паттернов
🟡Отличие концепции View и экрана
🟡Концепция виртуального DOM в React и SwiftUI
🟡Проблемы с традиционным подходом MVVM в SwiftUI
🟡Использование Store в качестве агрегатных модели
🟡Использование @EnvironmentObject
🟡Использование кэширования
🟡Модули и их роль
🟡Навигация в SwiftUI
🟡Отображение ошибок
🟡Форматирование данных
🟡Методы написания тестов
🟡Проблемы с тестированием реализации
🟡E2E-тестирование
🟡Интеграционное тестирование
🟡Модульное тестирование и доступ к данным
🟡Тестирование пользовательского интерфейса
🟡Баланс между модульными и пользовательскими тестами

Возникает логичный вопрос, откуда такое рвение делиться знаниями? В конце ссылка на авторский платный курс за 150$, но статья и сама по себе хороша
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
2
🐥 ignoredByLayout() — Как применить геометрические эффекты, не нарушая макет
ignoredByLayout — недооцененный API в SwiftUI. Мало информации, необычные сценарии использования. Идем в документацию:
🔵Возвращает эффект, который применяется только при отрисовке
🔵Отключает изменения макета во время трансформации
🔵View игнорирует преобразование при вычислениях макета

Понятнее не стало, разбираемся в природе ignoredByLayout на практике:
🟢Визуальное преобразование не меняется.
🟢Система игнорирует геометрическое преобразование.
🟢Свойства геометрии передаются без изменений.

В статье приводится сразу несколько практических сценариев использования, сам я никогда не сталкивался с ними, но теперь готов к встрече.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍52
This media is not supported in your browser
VIEW IN TELEGRAM
🧑‍✈️ Режим агента и поддержка MCP в Copilot для Xcode
Если вы до сих пор не попробовали Copilot, самое время! В актуальном релизе появился режим агента и поддержка MCP 😍. Copilot может выполнять многоступенчатые задачи, такие как анализ кодовой базы и выполнение команд терминала. А режим агента позволяет Copilot выполнять итерацию по собственному коду, обнаруживать и исправлять ошибки.

Режим агента:
🔵Семантическое понимание: Copilot интерпретирует запрос и анализирует кодовую базу.
🔵Предложение по плану: Copilot разбивает задачу на этапы и формулирует план действий.
🔵Выполнение плана: Copilot запрашивает подтверждение для выполнения действий.
🔵Задача выполнена: Copilot проверяет работу и предоставляет сводную информацию о изменениях.

Поддержка MCP:
🟣Model Context Protocol (MCP) позволяет моделям ИИ взаимодействовать с внешними инструментами через единый интерфейс.
🟣Copilot поддерживает MCP, что расширяет его возможности в Xcode.
🟣Настройка локальных серверов MCP возможна через файл конфигурации.
🟣Инструменты MCP можно вызывать непосредственно в режиме агента с помощью естественного языка.
Please open Telegram to view this post
VIEW IN TELEGRAM
1
🐥 Swift Enums vs Structs - Выбор лучшего инструмента для работы
Не самое типичное сравнение, не классы и структуры, а структуры и перечисления.
🔘Перечисления идеально подходят для конечного состояния, обеспечивают безопасность во время компиляции, switch, подходят для четко определенного набора состояний.
🔘Структуры расширяемые и гибкие. Подходят для расширяемости и добавления дополнительных вариантов, особенно полезны для стилей и конфигураций. Позволяют создавать пользовательские значения.
🔘Выбирать одно не обязательно, можно совмещать для упрощения работы. Перечисления могут содержать множество вычисляемых свойств, что может быть утомительно, а структуры использовать перечисления для ограничения количества доступных состояний.

Преимущества перечислений
🟢Обеспечивают безопасность и ясность для управления состоянием
🟢Полная проверка во время компиляции
🟢Взаимоисключающие состояния
🟢 Сопоставление шаблона с соответствующими значениями

Преимущества структур
🟢Обеспечивают расширяемость для будущих случаев
🟢Система настройки или стилизации
🟢Разрешение пользовательских изменений
🟢Сохранение сложного состояния с несколькими свойствами

Как выбрать? Перечисления подходят для конечного, четко определенного набора состояний. Структуры подходят для расширяемости и гибкости. Выбор зависит от важности безопасности во время компиляции или гибкости во время выполнения и вашей готовности к бойлерплейту и бесконечным switch.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
3
🧑‍💻 iOS 26 на подходе
Судя по слухам, на WWDC нас ожидает серьезный сюрприз от Apple не только в дизайне iOS но и в нейминге. Apple изменит подход к названию своих операционных систем, iOS 26 вместо iOS 19. Аналогично будут названы macOS 26, iPadOS 26, watchOS 26, tvOS 26 и visionOS 26.

У меня один вопрос, почему 26? Не 20, не 25 в 2025г. Удивительный мир маркетинга
Please open Telegram to view this post
VIEW IN TELEGRAM
5
📱 Кэширование в SwiftUI
Кэширование решает почти любую проблему, кроме пролемы инвалидации кеша 😉. Некоторые фреймворки предоставляют встроенные классы для кэширования, в статье рассматриваются разные стратегии их использования

NSCache
🔵NSCache — изменяемая коллекция для временного хранения данных
🔵Поддерживает автоматическое удаление объектов при заполнении памяти
🔵Работает без блокировки в разных потоках

CacheManager
🔵Использование наблюдательного объекта для совместного использования кэша в разных View
🔵Пример создания наблюдательного объекта CacheManager с использованием NSCache
🔵Пример реализации делегата кэширования в CacheManager

Управление кэшами в SwiftUI
🔵Использование NSCache для кэширования объектов
🔵Определение имени кэша для управления несколькими экземплярами
🔵Использование CacheManager
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21
📱 Разбираемся в работе Diff движка SwiftUI
Мантра этого канала - понимание механизмов работы - ключ к работе в удовольствие. Чем меньше магии в движках и фреймворках, которые мы используем - тем предсказуемее итоговый результат. Сегодня рассмотрим движок сравнения SwiftUI. Суть любого декларативного фреймворка состоит в рендеринге только при изменении. SwiftUI использует Value-Type для View, чтобы это обеспечить. При изменении состояния SwiftUI создает новое дерево View. Повторное использование View возможно при совпадении типа, положения и идентификатора.

Пример приложения: Список пассажиров
🔵Пассажиры идентифицируются UUID
🔵При перетасовке массива SwiftUI перестраивает View
🔵Идентификаторы важны для сопоставления "вьюх"

Подводные камни
🔴Использование UUID() приводит к перестройке каждого представления
🔴Использование .id(\.self) с типами значений может вызвать путаницу

Советы и напоминания
🟢Используйте Identifiable модели данных
🟢Создавайте View строк Equatable
🟢Используйте os_signpost для отладки
🟢Намеренно передавайте значения среды
🟢Используйте Transaction для группировки изменений
🟢Используйте .debounce для кнопок
Please open Telegram to view this post
VIEW IN TELEGRAM
2
Media is too big
VIEW IN TELEGRAM
🧑‍💻 В 2024 году продажи App Store в США превысили 400 миллиардов долларов
Очень любопытный отчет в предверии WWDC от Apple. В нем отчетливо видно желание компании оправдаться за комиссии и регуляции, объясняя как им тяжело живется. Целеполагание отчета предлагаю обсудить в комментариях, пока по самым интересным фактам:
🟢В 2024 году объем продаж в App Store превысил 400 миллиардов долларов
🟢Более 90% продаж были без комиссии для Apple
🟢За последние пять лет число разработчиков увеличилось более чем в два раза
🟢Большая часть роста обеспечена физическими товарами, рекламой и услугами, продаваемыми через iOS приложения, без комиссии (примерно $277 млрд за 2024, транзакции для Amazon, DoorDash, Uber, Instacart и др.)

Глобальный охват и безопасность
🟢Разработчики из США добились успеха в 175 странах благодаря единой платежной и коммерческой системе App Store
🟢Приложения из США вошли в топ-5 самых скачиваемых на 170 из 175 витрин App Store
🟢App Store остается безопасной торговой площадкой благодаря тщательному процессу проверки и защите конфиденциальности

Поддержка разработчиков
🟢Apple продолжает инвестировать в функции App Store, такие как App Store Connect и StoreKit
🟢Программа для малого бизнеса App Store поддерживает новаторские приложения от небольших разработчиков
🟢Центр разработчиков Apple в Купертино предлагает инструменты и ресурсы для улучшения приложений

Мошеннические транзакции и стандарты Apple
🔴За последние пять лет совершено мошеннических транзакций на сумму более 9 миллиардов долларов
🔴В 2024 году отклонено 1,9 миллиона заявок на приложения из-за несоответствия стандартам Apple
Please open Telegram to view this post
VIEW IN TELEGRAM
🐥 Swift в Apple: перенос службы мониторинга паролей с Java
Очень полезная статья про миграцию с Java на Swift внутри серверной инфраструктуры Apple. Чем примечателен этот опыт? Менеджер облачных паролей в Apple это продакшн сервис с громадным количеством инстансов, репликацией данных и большим RPS. Понятное дело, что Apple вынуждены "догфутить" Swift on Server подходы, но тем интереснее реальный опыт:
🔵Swift активно используется для создания облачных сервисов в Apple.
🔵В прошлом году была перезаписана служба мониторинга паролей на Swift.
🔵Обновленная серверная часть обеспечивает повышение производительности на 40%.

Функции приложения Passwords
🔵Приложение помогает пользователям управлять паролями и ключами доступа.
🔵Мониторинг паролей предупреждает пользователей о утечках данных.
🔵Система мониторинга работает на базе инфраструктуры Linux и поддерживается Apple.

Причины перехода на Swift
🔴Необходимость повышения производительности сервиса мониторинга паролей.
🔴Java не соответствовала растущим требованиям и целям повышения эффективности.
🔴Поиск более эффективного языка для поддержки роста и снижения нагрузки на сервер.

Преимущества Swift
🟢Выразительный синтаксис и простота освоения.
🟢Повышение производительности для удовлетворения требований вычислительных нагрузок.
🟢Реализация основывается на Vapor.
🟢Возможность использовать те же криптографические библиотеки что и на клиентах.
🟢Безопасность типов в языке и асинхронность, упрощающие работу с параллелизмом.

Результаты и выводы
🟣Сокращение количества строк кода на 85%.
🟣Повышение пропускной способности на 40% при задержках менее 1 мс.
🟣Меньший объем памяти на инстансах и высвобождение ресурсов для других рабочих нагрузок.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8
This media is not supported in your browser
VIEW IN TELEGRAM
📱 Создание формы звукового сигнала в реальном времени со SwiftUI
Даже не знаю, почему мне так нравятся такие статьи. Либо потому что самому нравится реализовывать анимационные задачки, либо благодаря подтверждению применимости фундаментального математического образования в программировании 😅. В любом случае максимально интересная статья:
🔵Основание для захвата микрофонного входа
🔵Создание класса для обработки аудиовхода
🔵Сбор аудиоданных в реальном времени
🔵Асинхронное выполнение быстрого преобразования Фурье (БПФ)
🔵Использование SwiftUI для отображения формы сигнала в реальном времени
🔵Визуализация значений БПФ в виде линейного графика
🔵Применение метода интерполяции и анимации для сглаживания кривых
🔵Выполнение дискретного преобразования Фурье (DFT)
🔵Вычисление величины каждой частотной составляющей
🔵Отображение результирующей формы сигнала
Please open Telegram to view this post
VIEW IN TELEGRAM
👍136
🧑‍💻 WWDC25
Сегодня начинается WWDC25, полезные ссылки:
🍏 Трансляция на сайте apple
🈸 Трансляция в приложении
🎞 Трансляция на youtube

Время UTC+3 московской тайм зоны:
20:00 Apple Keynote
23:00 Platforms State of the Union

Сессии будут доступны сразу и в приложении и на ютубе. Нас ждет самая насыщенная неделя для iOS разработчиков 🥂
Please open Telegram to view this post
VIEW IN TELEGRAM
👍172
Media is too big
VIEW IN TELEGRAM
🧑‍💻 2025 Apple Design Award winners
Пока все на низком старте, Apple опубликовала победителей премии Design Awards:

Приятно и весело:
🏆 CapWords - приложение для запоминания слов
🏆 Balatro - игра, мое личное открытие года

Инклюзивность:
🏆 Speechify - превращает текст в аудио
🏆 Art of Fauna - игра - пазл

Инновации:
🏆 Play - простое прототипирование
🏆 PBJ — The Musical - очаровательная сюжетная игра

Взаимодействие:
🏆 Taobao - реализовали отображение товаров на Apple Vision Pro
🏆 DREDGE - игра рыбалка по—Лавкрафтовски

Социальное взаимодействие:
🏆 Watch Duty: Wildfire Maps - карта пожаров
🏆 Neva - игра-история о последствиях ухудшения состояния окружающей среды

Визуал и графика:
🏆 Feather: Draw in 3D - инструмент моделирования в 2d и 3d
🏆 Infinity Nikki - Это страна чудес текстур, света и анимации, одна из самых красивых игр года
Please open Telegram to view this post
VIEW IN TELEGRAM