Warning: Undefined array key 0 in /var/www/tgoop/function.php on line 65

Warning: Trying to access array offset on value of type null in /var/www/tgoop/function.php on line 65
2143 - Telegram Web
Telegram Web
🆓 Эволюция архитектуры iOS приложения Tripadvisor
Очень актуальный для меня статья про опыт миграции команды Tripadvisor с MVVM-C на модную TCA. Зачем?

Проблемы
🔴Навигационная энтропия: координаторы создают сеть навигационных возможностей, трудно задокументировать
🔴Зависимость от UIKit: архитектура coordinator привязывает к контроллерам UIKit, несовместима с SwiftUI
🔴Трудности в разработке: сложность для новых разработчиков, необходимость многократного дублирования кода
🔴Проблемы с Combine: асинхронный характер Combine усложняет отладку

Требования к новой архитектуре
🟣Простая, предсказуемая навигация
🟣Совместимость с SwiftUI
🟣Устранение дублей
🟣Снижение барьеров для входа новых разработчиков
🟣Хорошо документированная архитектура

Преимущества TCA
🟡Навигация на основе состояния, соответствующая SwiftUI
🟡Исчерпывающие возможности тестирования
🟡Встроенная поддержка асинхронности
🟡Документация и поддержка сообщества

Новые знания и уроки
🔵Изменение ментальной модели с действий на состояние
🔵Проблемы с производительностью и иерархическим моделированием
🔵Использование мутаторов для совместного использования логики мутации

Преимущества
🟢Уменьшенный объем кода на 15-30%
🟢Устранение шаблонного кода координатора, дублированной обработки событий, упрощенная логика навигации
🟢Ускорение разработки и снижение нагрузки на техническое обслуживание
🟢Более надежный код, улучшенный охват тестированием, ускоренные циклы разработки
🟢Улучшенная интеграция SwiftUI, более четкая архитектура
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN 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
🐥 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
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
🐥 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
🧑‍💻 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
📱 Кэширование в SwiftUI
Кэширование решает почти любую проблему, кроме пролемы инвалидации кеша 😉. Некоторые фреймворки предоставляют встроенные классы для кэширования, в статье рассматриваются разные стратегии их использования

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

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

Управление кэшами в SwiftUI
🔵Использование NSCache для кэширования объектов
🔵Определение имени кэша для управления несколькими экземплярами
🔵Использование CacheManager
Please open Telegram to view this post
VIEW IN TELEGRAM
2025/07/03 22:23:16
Back to Top
HTML Embed Code: