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

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

📺 MVI в iOS-приложении (32 мин)

🗣 Разбор популярной State Machine в Android в реалиях iOS. В начале немного сложновато, но под конец на реальном примере все встает на свои места

📍 Какие существуют инструменты и фреймворки, позволяющие реализовать State Machine и их различия
📍 Модули MVI и их обязанности
👎3🔥2👏1
#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