🐥 Collection Diffing
В Swift 5.1 появилась альтернатива
https://fivestars.blog/code/swift-5-1-collection-diffing.html
В Swift 5.1 появилась альтернатива
reloadData()
и IGListKit
. В статье рассказывается не только про сам Collection Diffing
, но и про как она реализована внутри.https://fivestars.blog/code/swift-5-1-collection-diffing.html
🌘 Темная сторона iOS
Видео с CodeFest 2019 о процессе и результатах воплощения тёмной темы в приложении для iOS внутри VK.
vk.com/tech?w=wall-147415323_4462
Видео с CodeFest 2019 о процессе и результатах воплощения тёмной темы в приложении для iOS внутри VK.
vk.com/tech?w=wall-147415323_4462
VK
VK Tech
Тёмную тему в приложении ВКонтакте регулярно используют более 40% пользователей iPhone. Но прежде чем приложение перешло «на тёмную сторону», в нём пришлось обновить более трёхсот экранов, подружить архитектуру с дизайном и фронтендом, добавить цветовые схемы…
🚀 Упрощаем реактивный код
🏠Обзор всех стадий развития реактивной архитектуры: от попыток соединить функциональный стиль с UIKit до продакшен UDF решения
https://link.medium.com/Ux5RhYO0r0
(Время чтения ~ 9 минут)
🏠Обзор всех стадий развития реактивной архитектуры: от попыток соединить функциональный стиль с UIKit до продакшен UDF решения
https://link.medium.com/Ux5RhYO0r0
(Время чтения ~ 9 минут)
Medium
Simplifying RxSwift code
The overview of reactive architecture evolution, since the first pod ‘RxSwift’ till a few years of reactive programming.
🦊 FunCorp проводит конкурс мобильной разработки с призовым фондом в 550 000 рублей.
Принять участие может любой желающий. Авторы лучших работ получат денежные призы и подарки от FunCorp и реальную возможность присоединиться к их команде!
Нужно создать iOS-приложение и показать свое видение игровой аналитики.
Используя API популярной игровой площадки Steam, необходимо создать несколько экранов на основе открытых данных.
Что будут оценивать:
- продуктовое решение по отображению данных и навигации;
- техническое решение по архитектуре приложения;
- отсутствие визуальных и логических ошибок;
- God mode решения и дополнительные фичи;
Присылайте выполненные задания с 18 ноября по 8 декабря.
Результаты будут объявлены 12 декабря.
1 место - 300 000 р.
2 место - 150 000 р.
3 место - 100 000 р.
Подробности и задания тут: https://bit.ly/330s4I8
Чат для вопросов: https://t.me/funcodechallenge
Принять участие может любой желающий. Авторы лучших работ получат денежные призы и подарки от FunCorp и реальную возможность присоединиться к их команде!
Нужно создать iOS-приложение и показать свое видение игровой аналитики.
Используя API популярной игровой площадки Steam, необходимо создать несколько экранов на основе открытых данных.
Что будут оценивать:
- продуктовое решение по отображению данных и навигации;
- техническое решение по архитектуре приложения;
- отсутствие визуальных и логических ошибок;
- God mode решения и дополнительные фичи;
Присылайте выполненные задания с 18 ноября по 8 декабря.
Результаты будут объявлены 12 декабря.
1 место - 300 000 р.
2 место - 150 000 р.
3 место - 100 000 р.
Подробности и задания тут: https://bit.ly/330s4I8
Чат для вопросов: https://t.me/funcodechallenge
💓 Onboarding
Ребята собрали в одном месте свежие 70+ видео онбордингов топовых приложений с подпиской.
producthunt.com/posts/ui-ux-onboarding-ios-best-practices
Ребята собрали в одном месте свежие 70+ видео онбордингов топовых приложений с подпиской.
producthunt.com/posts/ui-ux-onboarding-ios-best-practices
Product Hunt
Qonversion - Product Information, Latest Updates, and Reviews 2024 | Product Hunt
Mobile subscription analytics for app makers to power revenue growth.
📦 Dependency Injection in Swift
Исчерпывающая статья про DI в Swift. С разбором наиболее частых ошибок и вариантов организации зависимостей в проекте.
Конечно же, с примерами. 🙃
https://medium.com/better-programming/modern-dependency-injection-in-swift-952286b308be
Исчерпывающая статья про DI в Swift. С разбором наиболее частых ошибок и вариантов организации зависимостей в проекте.
Конечно же, с примерами. 🙃
https://medium.com/better-programming/modern-dependency-injection-in-swift-952286b308be
Medium
Modern Dependency Injection in Swift
Tips, techniques, and strategies for getting the most from your dependency-injection system in iOS applications
Ребят, всем привет. Пытаюсь переосмыслять формат канала. Мне кажется, что шэринг ссылок не очень практичен, особенно если учесть, что все вы заняты повседневными задачами и в потоке можете не успевать прочитать статью или даже запланировать её для чтения. В связи с этим, есть несколько идей, как можно изменить подход к подаче контента в канале. Но мне нужна ваша помощь. Подготовил небольшой опрос, займёт не более минуты. Заполните, плиз.
https://forms.gle/MUUCiomx2RtPfE5b7
https://forms.gle/MUUCiomx2RtPfE5b7
🎨 8 отличных библиотек для SwiftUI
Споры насчёт актуальности использования #SwiftUI в Production продолжаются, как и статьи на тему проблем в этом прекрасном фрейморвке. Но сейчас не об этом.
Держите 8 классных проектов, которые предоставляют расширенную обёртку вокруг SwiftUI.
Есть даже SwiftUI реализация для UICollectionView.
https://medium.com/better-programming/8-amazing-swiftui-libraries-to-use-in-your-next-project-52efaf211143
Споры насчёт актуальности использования #SwiftUI в Production продолжаются, как и статьи на тему проблем в этом прекрасном фрейморвке. Но сейчас не об этом.
Держите 8 классных проектов, которые предоставляют расширенную обёртку вокруг SwiftUI.
Есть даже SwiftUI реализация для UICollectionView.
https://medium.com/better-programming/8-amazing-swiftui-libraries-to-use-in-your-next-project-52efaf211143
This media is not supported in your browser
VIEW IN TELEGRAM
🧩 Интерактивный гайд по RX
Набрёл на потрясающий интерактивный гайд по #Rx. В статье используется JS, но суть от этого не меняется. Добавлены примеры демо на stackblitz, поэтому можно обновлять код и поиграться.
Будет очень полезно для тех, кто только изучает или не до конца понял концепт реактивного программирования.
https://medium.com/angular-in-depth/learn-to-combine-rxjs-sequences-with-super-intuitive-interactive-diagrams-20fce8e6511
Набрёл на потрясающий интерактивный гайд по #Rx. В статье используется JS, но суть от этого не меняется. Добавлены примеры демо на stackblitz, поэтому можно обновлять код и поиграться.
Будет очень полезно для тех, кто только изучает или не до конца понял концепт реактивного программирования.
https://medium.com/angular-in-depth/learn-to-combine-rxjs-sequences-with-super-intuitive-interactive-diagrams-20fce8e6511
В прошлом году, в процессе beta тестирования iOS 13, мир увидел аж 8 бета версий. Это при том, что iOS 13 преподносилась как большой фикс-релиз. Поэтому я не удидивился, когда вышел анонс о том, что Apple менят подход к разработке новых операционных систем начиная с iOS 14. Новый подход предполагал, что многие недоработанные фичи просто будут выключены (кэп).
Ну а пока Apple осваиет feature флаги, рекомендую прочитать две интересные статьи.
Первая о том, почему классический gitflow устарел: оригинал и перевод.
Вторая о trunk based development, переход на который может помочь сильно улучшить ваши рабочие процессы: разработку, ревью, доставку фич в прод и многие другие. А здесь детали про feature flags в рамках tbd.
Ну а пока Apple осваиет feature флаги, рекомендую прочитать две интересные статьи.
Первая о том, почему классический gitflow устарел: оригинал и перевод.
Вторая о trunk based development, переход на который может помочь сильно улучшить ваши рабочие процессы: разработку, ревью, доставку фич в прод и многие другие. А здесь детали про feature flags в рамках tbd.
🧙♀️ Useful (and obscure!) Foundation types in Swift
7 неочевидных классов #Foundation, которые могут быть полезны. Примеры доступны по ссылке. Ниже тезисные описания.
1. NSScanner
Синтактический анализатор строк.
2. NSCache
Апгрейтнутый словарь. Может избежать переполнения памяти. Имеет thread safety из коробки.
3. NSByteCountFormatter
Форматирует и локализует байты:
4. NSDataDetector
Ещё один сканер, который может искать ссылки, телефоны и другие данные во входном тексте.
5. CFBinaryHeap
Двоичная куча.
6. NSOrderedSet
Упорядоченный set. Доступ O(1), но при этом объекты упорядочены, в отличии от обычных хэш таблиц.
7. NSCountedSet
Неупорядоченная коллекция для подсчёта количества вхождений объекта. Удобная штука при решении алгоритмических задачек.
https://swiftrocks.com/useful-obscure-foundation-types-in-swift
7 неочевидных классов #Foundation, которые могут быть полезны. Примеры доступны по ссылке. Ниже тезисные описания.
1. NSScanner
Синтактический анализатор строк.
2. NSCache
Апгрейтнутый словарь. Может избежать переполнения памяти. Имеет thread safety из коробки.
3. NSByteCountFormatter
Форматирует и локализует байты:
1024 * 1024
=> 1 MB
4. NSDataDetector
Ещё один сканер, который может искать ссылки, телефоны и другие данные во входном тексте.
5. CFBinaryHeap
Двоичная куча.
6. NSOrderedSet
Упорядоченный set. Доступ O(1), но при этом объекты упорядочены, в отличии от обычных хэш таблиц.
7. NSCountedSet
Неупорядоченная коллекция для подсчёта количества вхождений объекта. Удобная штука при решении алгоритмических задачек.
https://swiftrocks.com/useful-obscure-foundation-types-in-swift
⭐️ ReactorKit: фреймворк для организации архитектуры проектов на RX
Очень часто в проектах, где используют #rx, реактивный код размазан по всему приложению. Иногда это является аргументов в пользу отказа от реактивного подхода в целом.
Года полтора назад наткнулся на отличный фреймворк, который решает эту и некоторые другие проблемы, предоставляя декларативный подход к организации кода. За это время они сильно эволюционировали и продолжают развиваться.
Основные задачи, которые ReactorKit решает:
* Тестирование;
* Инкапсуляция;
* Низкий порог входа;
* Декларативный подход к организации кода для команды.
https://github.com/ReactorKit/ReactorKit
Очень часто в проектах, где используют #rx, реактивный код размазан по всему приложению. Иногда это является аргументов в пользу отказа от реактивного подхода в целом.
Года полтора назад наткнулся на отличный фреймворк, который решает эту и некоторые другие проблемы, предоставляя декларативный подход к организации кода. За это время они сильно эволюционировали и продолжают развиваться.
Основные задачи, которые ReactorKit решает:
* Тестирование;
* Инкапсуляция;
* Низкий порог входа;
* Декларативный подход к организации кода для команды.
https://github.com/ReactorKit/ReactorKit
🔀 Паттерн стратегия в Swift
Подготовил перевод статьи про реализацию паттерна стратегия.
В общих чертах #strategy #pattern – шаблон из группы поведенческих паттернов проектирования, который определяет семейство схожих алгоритмов, помещает каждый из них в отдельный класс и позволяет использовать их во время выполнения приложения (в runtime).
Короче говоря: инкапсуляция в классы, переиспользование и возможность менять поведение в runtime.
Сценарии использования
1. Разные способы детать одно и то же;
2. Альтерантива наследованию;
3. Альтерантива ветвлению логики: if/else
Пример
Хотим печатать логи, при этом необходимо иметь возможность использовать разные стили: в верхнем регистре, нижнем или использовать особое форматирование ошибок.
При реализации паттерна стратегия необходимо выделить несколько сущностей:
What
Протокол, который определяет желаемое действие, в нашем случае писать лог.
Who
Объект, который содержит стратегию и будет её исползовать.
How
Конкретная реализация стратегии, то есть конкретное действие.
Пример использования:
В статье также представлены другие примеры, такие как форма валидации, настройка ячеек и другие.
https://medium.com/flawless-app-stories/strategy-pattern-in-swift-1462dbddd9fe
Подготовил перевод статьи про реализацию паттерна стратегия.
В общих чертах #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
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
@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 тестов, чтобы прийти к правильной комбинации: длительность/стоимость подписки.
Выбирайте приложения из интересующей вас категории и используйте как ориентир при установке цен в вашем приложении.
Правильный прайсинг – одна из самых важных составляющих успешного приложения, которое зарабатывает на подписках.
По ссылке таблица из 100 самых популярных приложений с подписками в US сторе. Эти компании провели сотни A/B тестов, чтобы прийти к правильной комбинации: длительность/стоимость подписки.
Выбирайте приложения из интересующей вас категории и используйте как ориентир при установке цен в вашем приложении.
🍿 Reddit-клиент на SwiftUI
По ссылке лайв-кодинг сессия на Podlodka Crew с реализацией макета на #swiftui.
Вадим Булавин за 1.5 часа делает Reddit-клиент. Отличный способ на деле за короткий отрезок времени посмотреть особенности применения.
https://www.youtube.com/watch?v=_fO-vx6rm1M
По ссылке лайв-кодинг сессия на Podlodka Crew с реализацией макета на #swiftui.
Вадим Булавин за 1.5 часа делает Reddit-клиент. Отличный способ на деле за короткий отрезок времени посмотреть особенности применения.
https://www.youtube.com/watch?v=_fO-vx6rm1M
YouTube
Лайвкодинг: Реализуем макет на SwiftUI / Вадим Булавин
Понравилось видео и хочешь узнать что-то еще про iOS и SwiftUI? Забирай весь плейлист на https://is.gd/kChYnl или купи билет на следующий сезон конференции https://is.gd/auKynm
Подпишись на канал – каждую неделю мы выкладываем новые видео про то, как устроена…
Подпишись на канал – каждую неделю мы выкладываем новые видео про то, как устроена…
🛫 VIPER deprecated, или Clean Architecture в SwiftUI
Отличная статья, которая описывает особенности построения архитектуры для приложений на SwiftUI.
Rounter не нужен, Presenter вообще превратился в пустой класс.
Этому сообществу нужен новый герой.
🦸♂️
https://medium.com/swlh/clean-architecture-for-swiftui-6d6c4eb1cf6a
Отличная статья, которая описывает особенности построения архитектуры для приложений на SwiftUI.
Rounter не нужен, Presenter вообще превратился в пустой класс.
Этому сообществу нужен новый герой.
🦸♂️
https://medium.com/swlh/clean-architecture-for-swiftui-6d6c4eb1cf6a
🎻 10 самых популярных iOS библиотек в 2020
Кликбейтный заголовок, но, как мне кажется, изучение этих библиотек покроет 99% знаний, которые требуются iOS разработчику. Причём изучение не в плане апишки, а исходных кодов. Здесь и сложные анимации, работа с сетью, мультипоточность во всём своем многообразии, сложные алгоритмы и многое другое.
Берите одну либу на месяц и перекопайте исходники каждой. Через год будете отказываться от работы в Гугл. 😐
https://infinum.com/the-capsized-eight/top-10-most-useful-iOS-libraries
Кликбейтный заголовок, но, как мне кажется, изучение этих библиотек покроет 99% знаний, которые требуются iOS разработчику. Причём изучение не в плане апишки, а исходных кодов. Здесь и сложные анимации, работа с сетью, мультипоточность во всём своем многообразии, сложные алгоритмы и многое другое.
Берите одну либу на месяц и перекопайте исходники каждой. Через год будете отказываться от работы в Гугл. 😐
https://infinum.com/the-capsized-eight/top-10-most-useful-iOS-libraries