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

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

Чат: @ios_camp_chat.
Download Telegram
🧚‍♀️ Pure Functions в Swift

Наш любимый Джон Сандел выпустил новую статью про Pure Functions в Swift.
Интересно почитать в субботу вечером.

swiftbysundell.com/posts/pure-functions-in-swift
(Время чтения ~ 8 минут)
🦴 Если вы не слышали про новую уязвимость почти всех процессоров Intel, выходящих с 2011 года, которую обнаружили вчера, то вот вам все подробности:

vc.ru/tech/67324-chto-izvestno-o-novoy-krupnoy-uyazvimosti-v-processorah-intel-i-kak-zashchititsya-ot-zombieload-i-drugih-atak
(Время чтения ~ 7 минут)

🙊 Apple также объясняет необходимость отключить многопоточность для обеспечения полноценной защиты, но предупреждает о падении скорости:
support.apple.com/en-us/HT210108
🦜 UiKeyCommand

UIKeyCommand позволяет добавить шорткаты для клавиатуры в приложение. Кроме iPad их можно добавить и для iPhone, это делается быстро и работает в симуляторе.

avanderlee.com/swift/uikeycommand-keyboard-shortcuts/
(Время чтения ~ 5 минут)
🧖‍♂️ Немного про SwiftUI

🙉 Быстро рассказывают про реализацию модальных окон, алертов и ActionSheet'ов внутри SwiftUI.

mecid.github.io/2019/07/24/alerts-actionsheets-modals-and-popovers-in-swiftui/
(Время чтения ~ 4 минуты)
🤹‍♂️ Последнее время мы писали мало, но тут есть разработчики с разным опытом.

Если ты оказался в этом чате случайно или только начинаешь заниматься iOS разработкой, Skillbox поможет в этом.

После прохождения курса:
🔷 Ты научишься всему, что необходимо для полноценной работы, сразу после выпуска.
🔷 Создашь конкурентоспособное портфолио для старта в карьере.
🔷 Получишь возможность трудоустройства.
🔷 Будешь создавать самые доходные на мобильном рынке игры и приложения.

Для первых 20 студентов скидка 20%. Есть рассрочка.
Есть шанс поменять жизнь полностью.

Программа курса и остальные подробности по ссылке 👉 clc.to/Ji_lhg
🐥 Collection Diffing

В Swift 5.1 появилась альтернатива reloadData() и IGListKit. В статье рассказывается не только про сам Collection Diffing, но и про как она реализована внутри.

https://fivestars.blog/code/swift-5-1-collection-diffing.html
🚀 Упрощаем реактивный код

🏠Обзор всех стадий развития реактивной архитектуры: от попыток соединить функциональный стиль с UIKit до продакшен UDF решения

https://link.medium.com/Ux5RhYO0r0
(Время чтения ~ 9 минут)
🦊 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
💓 Onboarding

Ребята собрали в одном месте свежие 70+ видео онбордингов топовых приложений с подпиской.

producthunt.com/posts/ui-ux-onboarding-ios-best-practices
📦 Dependency Injection in Swift
Исчерпывающая статья про DI в Swift. С разбором наиболее частых ошибок и вариантов организации зависимостей в проекте.
Конечно же, с примерами. 🙃

https://medium.com/better-programming/modern-dependency-injection-in-swift-952286b308be
Ребят, всем привет. Пытаюсь переосмыслять формат канала. Мне кажется, что шэринг ссылок не очень практичен, особенно если учесть, что все вы заняты повседневными задачами и в потоке можете не успевать прочитать статью или даже запланировать её для чтения. В связи с этим, есть несколько идей, как можно изменить подход к подаче контента в канале. Но мне нужна ваша помощь. Подготовил небольшой опрос, займёт не более минуты. Заполните, плиз.

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
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
В прошлом году, в процессе beta тестирования iOS 13, мир увидел аж 8 бета версий. Это при том, что iOS 13 преподносилась как большой фикс-релиз. Поэтому я не удидивился, когда вышел анонс о том, что Apple менят подход к разработке новых операционных систем начиная с iOS 14. Новый подход предполагал, что многие недоработанные фичи просто будут выключены (кэп).

Ну а пока 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
Форматирует и локализует байты:

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
🔀 Паттерн стратегия в 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