iOS Broadcast
3.38K subscribers
1.72K photos
85 videos
985 links
Подборка новостей и статей для iOS разработчиков.

Новости Kotlin и мультиплатформы @kotlin_broadcast
Новости Android @android_broadcast
Реклама и прочее @ab_manager
加入频道
#architecture

How to modularize existing iOS projects using Swift Package (15 мин)

🗣 Потрясающая пошаговая и подробная инструкция для модуляризации имеющегося проекта в Swift Package

📍 Создание Swift Package
📍 Конфигурация поддерживающих платформ
📍 Регулирование уровней доступа к полям
👍4👎3
#ui #architecture

Every Screen in Your App Should Be a Scrolling View (7 мин)

🗣 Имеющая право на жизнь философия о том, что каждый экран должен быть обернут в UIScrollView

В статье помимо очевидных доводов присутствуют и те, о которых я не задумывался. Поэтому будет полезно их учесть. Жаль, в посте не предложено готовое решение, зато есть шанс придумать свое
👍4👎2🔥2
Memento Pattern with SwiftUI

Memento - один из поведенческих дизайн паттернов банды четырёх. Какую проблему он решает?

Хранить состояния (снепшоты) объекта, чтобы иметь возможность восстановить его позднее, при этом сохранить инкапсуляцию объекта.

В паттерне есть следующие роли:
👉 Caretaker ответственен за хранение стека состояний объекта. Он держит ссылку на originator и пользуется его возможностями
👉 Originator хранит текущее состояние объекта, может создать объект и воссоздать объект по данному состоянию
👉 Memento Object - и есть сам объект, который создает Originator и ссылку на который хранит caretaker.

#architecture
👍3👎21
Handling multiple caches in App (4 мин)

Вариант имплементации кэширования для разных типов данных:
👉 Слой utils состоит из сущностей, которые реализуют протоколы для получения данных
👉 Assets Manager - посредник между слоем utils и хранилищами. Главной целью является сопоставление типа кэширования и хранилища
👉 На уровне Caching Layer располагаются все хранилища. Работа происходит только с сырыми данными абстрактно от типа

#architecture
👍2👎1🔥1
Create a Scalable SwiftUI MVVM Project

MVVM состоит из следующих компонентов:
👉 View - компонент, который отображает свойства ViewModel, а также отлавливает взаимодействия с пользователям, вызывая ViewModel
👉 View Model инкапсулирует логику, включая вызовы API, обработку событий и данных, а также хранит важные свойства
👉 Model - представление данных. Объекты, созданные из результатов вызовов API

В статье более подробно описано то, как создать настоящий проект на данной архитектуре

#architecture
3👎1
Discover the MVVM Architecture in less than 90 seconds

Статья и видео с быстрым объяснением основной сути MVVM

#architecture
🔥5👎1
The Problems with Singletons and Why You Should Use DI Instead (10 мин)

Основные проблемы синглтонов:
👉 Синглтоны глобальные
👉 Вы не можете кастомизировать инициализацию
👉 Невозможно подменить зависимости
Подробнее о проблемах и способах решения в статье

#architecture
👍3
Исключения из принципа YAGNI

👉 Всё, что относится к правилу «ноль, один, бесконечность». Если в требованиях пункт «нам нужно сохранять адрес пользователя» превращается в «нам нужно сохранять два адреса», скорее всего лучше сразу обеспечить возможность сохранять много адресов
👉 Управление версиями. Не помешает заранее задуматься о том, как, допустим, система клиент – сервер будет распознавать разные версии и реагировать на них
👉 Логирование. Особенно в тех случаях, когда баги устраняются постфактум или в сложновоспроизводимых ситуациях
👉 Временные метки. Например, время создания или перехода в какое-либо состояние
👉 Реляционные базы данных. Большая часть данных реляционна по своей природе, поэтому нереляционная база – плохой выбор по умолчанию практически для любого приложения

#architecture
👍3👎2
Protocol Oriented Programming in Swift (4 мин)

Плюсы использования протоколов:
👉 Типы могут соответствовать и получать поведение по умолчанию от более, чем одного протокола (в отличие от наследования)
👉 Протоколам могут соответствовать классы, структуры и перечисления, в то время как наследоваться могут только классы
👉 Протоколы позволяют реализовать retroactive modeling благодаря расширениям

Когда они полезны?
👉 Для написания юнит тестов. Вы можете с лёгкостью подменить реализацию
👉 Протоколы позволяют скрыть типы пользовательских сценариев от view controller'ов, либо от любых других объектов

#architecture
🔥4👎3
OCP: Open/Closed Principle in Swift (with code examples) — SOLID Principles

Компонент должен быть открыт для расширения и закрыт для модификации.

Чем полезен OCP?
👉 Защищает от лишних переопределений и дополнительных тестирований модулей
👉 Позволяет избежать новых ошибок, а также облегчает изменения бизнес-логики приложения, поскольку расширение не приведет к изменению других модулей.

В Swift соблюдению OCP помогают протоколы.

#architecture
🔥5
A New Approach to StateFul MVVM

StateFul MVVM добавляет новые сущности к MVVM - coordinator и state:
👉 Coordinator инкапсулирует логику навигации. Вместо push и present ViewController'ов друга, все в координаторе.
👉 State: Domain State Container ответственен за координацию других сущностей (например network service) для реализации бизнес логики и side effect'ов. Обычно он задает новое состояние как результат side effect'а.

Пример реализации в статье и GitHub

#architecture
👍2👎1🔥1
iOS Project Structure Like a Pro

В статье предлагается использовать многослойную (multi-layer) архитектуру для лучшей организованности кода, разделения обязанностей, переиспользования и тестирования. Предлагается использовать такие слои:
👉 UI. Этот слой можно реализовать с использованием MVC, MVVM или VIPER архитектур
👉 Бизнес логика. Здесь, например, могут быть валидация данных, расчеты и такие классы, как UserLoginService, CommentsService
👉 Доступ к данным. Этот слой ответственен за взаимодействие с хранилищем (база данных или API).
👉 Сервисный слой содержит в себе переиспользуемые сервисы, хелперы и расширения
При построении такой архитектуры не забывайте о принципах единственной ответственности, инверсии зависимостей и декаплинге (decoupling). Для реализации можно использовать Frameworks или Swift Package.

#architecture
👍81👎1
The Coordinator Pattern: A Simple, Scalable Solution for iOS App Navigation

Координатор - паттерн, используемый для работы с навигацией и флоу. Объект координатора отвечает за навигацию и общение между экранами.
Для чего он нужен?
👉 Separation of concerns: Помогает сосредоточить обработку навигации и флоу в одном месте для упрощения понимания и поддержки.
👉 Reusability: позволяет разделять viewController'ы, облегчает их переиспользование и позволяет изменять флоу без изменений внутри модулей
👉 Scalability: проще следить за навигационным деревом, тем самым проще добавлять новые фичи и менять навигацию
👉 Координаторы могут быть соединены вместе в цепочку и создавать свою иерархию

#architecture
🔥6👎1
Эволюция архитектуры приложения Facebook для iOS

Facebook для iOS (FBiOS) — старейшая мобильная кодовая база в Meta. После многих лет изменений она не похожа на типичную кодовую базу iOS:
👉 Она полна C++, Objective-C(++) и Swift
👉 Имеет десятки динамически загружаемых библиотек (dylib) и так много классов, что их невозможно загрузить в Xcode сразу
👉 Apple SDK практически не используется в чистом виде — все было обернуто или заменено собственной абстракцией
👉 В приложении активно используется генерация кода с помощью Buck - кастомной системы сборки
👉 Без интенсивного кэширования собственной системой сборки пришлось бы провести целый рабочий день в ожидании сборки приложения
Подробнее об этапах эволюции - в статье.

#architecture
😱4👎2👍1
TCA, The next iOS Architecture ? (4 мин)

Из чего состоит TCA:
👉 State описывает данные, которые нужны фичи для логики и отрисовки UI
👉 Action представляет действия, которые могут произойти в фиче, например, пользовательские действия, нотификации
👉 Reducer - функция, которые описывает, как изменяется state при данном action. Reducer также возвращает за Effect, который должен произойти. Например, API реквесты
👉 Store - runtime, который драйвит фичу. Все пользовательские действия отправляются в store, он запускает reducer и effect'ы, затем путем observ'инга state обновляетcя UI.

#architecture
👍8👎1
Почему MVx архитектуры всегда получаются плохо (7 мин)

Автор разбирает три проблемы MVx (MVC, MVP, MVVM и т.п.):
👉 Проблема остатка - как бы мы не делили фичу на компоненты архитектуры, все-время остается что-то не вписывающееся в них
👉 Проблема масштабируемости - добавление новых функций в существующие фичи приводит к раздуванию фичи
👉 Проблема разрывов в логике - ваш цельный алгоритм вынужден разрываться на "до взаимодействия с пользователем" и "после"

#architecture
👎11😁4👍1
Building Better iOS Apps with Swift Composable Architecture (3 мин)

Swift Composable Architecture (TCA) - архитектурный паттерн, который предоставляет фреймворк для построения функциональных, реактивных и тестируемых приложений. TCA основан на трех принципах:
👉 state management, где state - структура, определяющая состояние приложения
👉 data flow - процесс обновления state при новых событиях
👉 side effect handling - способ взаимодействовать со "внешним миром" (сетевые запросы, например) чистым способом
Одним из ключевых плюсов TCA является тестируемость. UI - чистая функция от state, ее легко проверить, подавая на вход различные состояния.
Чуть более подробное описание компонентов TCA читайте здесь

#architecture
👍4👎1