iOS.Devs
5.43K subscribers
88 photos
3 videos
1 file
754 links
Всё самое актуальное из мира iOS разработки. По вопросам @suriksarkisyan

При поддержке qonversion.io

Чат: @ios_camp_chat.
Download Telegram
⭐️ ReactorKit: фреймворк для организации архитектуры проектов на RX

Очень часто в проектах, где используют #rx, реактивный код размазан по всему приложению. Иногда это является аргументов в пользу отказа от реактивного подхода в целом.

Года полтора назад наткнулся на отличный фреймворк, который решает эту и некоторые другие проблемы, предоставляя декларативный подход к организации кода. За это время они сильно эволюционировали и продолжают развиваться.

Основные задачи, которые ReactorKit решает:

* Тестирование;
* Инкапсуляция;
* Низкий порог входа;
* Декларативный подход к организации кода для команды.

https://github.com/ReactorKit/ReactorKit
🔀 Паттерн стратегия в Swift

Подготовил перевод статьи про реализацию паттерна стратегия.

В общих чертах #strategy #pattern – шаблон из группы поведенческих паттернов проектирования, который определяет семейство схожих алгоритмов, помещает каждый из них в отдельный класс и позволяет использовать их во время выполнения приложения (в runtime).

Короче говоря: инкапсуляция в классы, переиспользование и возможность менять поведение в runtime.

Сценарии использования

1. Разные способы детать одно и то же;
2. Альтерантива наследованию;
3. Альтерантива ветвлению логики: if/else

Пример
Хотим печатать логи, при этом необходимо иметь возможность использовать разные стили: в верхнем регистре, нижнем или использовать особое форматирование ошибок.

При реализации паттерна стратегия необходимо выделить несколько сущностей:

What
Протокол, который определяет желаемое действие, в нашем случае писать лог.
protocol LoggerStrategy {
func log(_ message: String)
}


Who
Объект, который содержит стратегию и будет её исползовать.
struct Logger {
let strategy: LoggerStrategy

func log(_ message: String) {
strategy.log(message)
}
}


How
Конкретная реализация стратегии, то есть конкретное действие.
struct CapitalizedStrategy: LoggerStrategy {
func log(_ message: String) {
print(message.capitalized)
}
}


Пример использования:
var logger = Logger(strategy: CapitalizedStrategy())
logger.log("my first strategy") // My First Strategy


В статье также представлены другие примеры, такие как форма валидации, настройка ячеек и другие.

https://medium.com/flawless-app-stories/strategy-pattern-in-swift-1462dbddd9fe
А по ссылке очень красивый ресурс с подробным описанием всех паттернов проектирования, одних только иллюстраций достаточно, чтобы изучить их.

https://refactoring.guru/ru/design-patterns/creational-patterns
😇 Сегодня постов много, сорри, но к нам пришла очень крутая подборка.

@slutsker вручную отобрал более 60 материалов для углублённого изучения разработки для iOS, отлично подходит для составления индивидуальных планов обучения junior, middle и senior разработчиков.

💙

https://www.notion.so/iOS-study-DataSource-by-Slava-Slutsker-3f79ba2c51ce45e9b32eae4666585e9d
Forwarded from Mobile Subscriptions
Ценообразование
Правильный прайсинг – одна из самых важных составляющих успешного приложения, которое зарабатывает на подписках.

По ссылке таблица из 100 самых популярных приложений с подписками в US сторе. Эти компании провели сотни A/B тестов, чтобы прийти к правильной комбинации: длительность/стоимость подписки.

Выбирайте приложения из интересующей вас категории и используйте как ориентир при установке цен в вашем приложении.
🍿 Reddit-клиент на SwiftUI

По ссылке лайв-кодинг сессия на Podlodka Crew с реализацией макета на #swiftui.

Вадим Булавин за 1.5 часа делает Reddit-клиент. Отличный способ на деле за короткий отрезок времени посмотреть особенности применения.

https://www.youtube.com/watch?v=_fO-vx6rm1M
🛫 VIPER deprecated, или Clean Architecture в SwiftUI

Отличная статья, которая описывает особенности построения архитектуры для приложений на SwiftUI.

Rounter не нужен, Presenter вообще превратился в пустой класс.

Этому сообществу нужен новый герой.

🦸‍♂️

https://medium.com/swlh/clean-architecture-for-swiftui-6d6c4eb1cf6a
Что будет выведено?
Anonymous Quiz
56%
Objc
26%
Swift
18%
Ошибка компиляции
🎻 10 самых популярных iOS библиотек в 2020

Кликбейтный заголовок, но, как мне кажется, изучение этих библиотек покроет 99% знаний, которые требуются iOS разработчику. Причём изучение не в плане апишки, а исходных кодов. Здесь и сложные анимации, работа с сетью, мультипоточность во всём своем многообразии, сложные алгоритмы и многое другое.

Берите одну либу на месяц и перекопайте исходники каждой. Через год будете отказываться от работы в Гугл. 😐

https://infinum.com/the-capsized-eight/top-10-most-useful-iOS-libraries
💂‍♀️Оптимизация времени запуска приложения и поиск проблем с помощью Instruments

Небольшая статья с разбором Instruments на реальном примере оптимизации приложения.

https://medium.com/flawless-app-stories/optimizing-app-launch-detecting-performance-issues-using-instruments-bca421da43b
Unowned vs Weak

Небольшая статья, которая поможет разобрать все особенности применения unowned и weak на примерах.

https://medium.com/flawless-app-stories/unowned-vs-weak-614ac71ac516
Хвала безумцам! Хвала Epic Games.
Forwarded from Mobile Subscriptions
🎉 Шикарная новость для разработчиков мобильных приложений!

Apple снизит App Store комиссию с 30% до 15% для компаний, зарабатывающих менее $1 млн в год.

Программа запускается 1 января 2021 года и будет основываться на данных 2020 года.

Больше деталей => https://techcrunch.com/2020/11/18/apple-to-reduce-app-store-fees-for-small-businesses-with-under-1-million-in-revenues
Кидайте эту статью своей API команде, если они просят отправлять header с префиксом X. Например, X-Auth-Token

Этот префикс был как стандарт много лет назад. Но уже лет 8 как deprecated и не рекомендуется к использованию.

https://tonyxu.io/posts/2018/http-deprecate-x-prefix/
Знание Method Dispatch крайне важно для понимания последовательности вызовов методов в Swift.
Отличный доклад на CocoaHeads об этом.

https://www.youtube.com/watch?v=kolL8r7Tz2w

Через неделю повторим тест с другими вариантами 😉