В какой-то момент мы с командой заскучали и переписали половину приложения на SwiftUI. Расскажу как мы начинали, с какими проблемами столкнулись, к каким решениям пришли и что в итоге из всего этого вышло.
Будет полезно тем, кто очень хочет перейти на SwiftUI, но ещё немного боится.
Основы "мобильной" разработки на примере платформы iOs (iPhone)Pavel Tsukanov
Легкая обзорная лекция по платформе iOS. Рассмотрим специфику разработки под мобильные платформы, средства разработки, язык Objective-C, концепции применяемые при разработке под iOS. Расскажу шаги которые нужно сделать для создания вашего первого мобильного приложения.
Мир мобильных телефонов очень сильно изменил нашу жизнь. В наше время невозможно представить современного человека, без этого чудо устройства. На рынке появляется все больше устройств и приложений. И чтобы удобнее пользоваться этими приложениями пользователи выбирают “умные” телефоны, или как их еще принято называть смартфоны. В своем докладе я хочу поделиться своим опытом автоматизации приложений под Android и iOS. Я расскажу о том, какие инструменты автоматизации я использовал. Поговорим о недостатках этих инструментов и какие из них стоит использовать у себя на проекте.
Основы "мобильной" разработки на примере платформы iOs (iPhone)Pavel Tsukanov
Легкая обзорная лекция по платформе iOS. Рассмотрим специфику разработки под мобильные платформы, средства разработки, язык Objective-C, концепции применяемые при разработке под iOS. Расскажу шаги которые нужно сделать для создания вашего первого мобильного приложения.
Мир мобильных телефонов очень сильно изменил нашу жизнь. В наше время невозможно представить современного человека, без этого чудо устройства. На рынке появляется все больше устройств и приложений. И чтобы удобнее пользоваться этими приложениями пользователи выбирают “умные” телефоны, или как их еще принято называть смартфоны. В своем докладе я хочу поделиться своим опытом автоматизации приложений под Android и iOS. Я расскажу о том, какие инструменты автоматизации я использовал. Поговорим о недостатках этих инструментов и какие из них стоит использовать у себя на проекте.
GraphQL API: Patterns | Андрей Чиж | Zlit TechZlit
Это некий список шаблонов, подходов и рекомендаций при разработке API (включая опыт, ошибки из реальной жизни, как не упустить задел на будущее etc), который можно рассматривать как определенный "code style" для API.
Любая команда в любой компании открывает этот доклад / репозиторий в гитхаб и проектирует крутой API без детских ошибок, с легкой возможностью раcширять функционал и в котором учтены потребности бекенда и фронтенда.
Презентация мастер-класса "Создание динамических пользовательских интерфейсов и AJAX-приложений промышленного класса с помощью Dojo Toolkit и Zend Framework"
«MVVM в Swift», Александр Зимин, независимый iOS-разработчикMail.ru Group
Александр рассказал про использование паттерна MVVM в языке Swift. Были рассмотрены его отличия от MVC, что можно использовать уникального из Swift. И напоследок было продемонстрировано небольшое демо.
Александр Сычев "Статика и динамика. Как фреймворки помогут прокачать ваше пр...IT Event
Время сборки swift-приложений стало притчей во языцех в iOS-сообществе. Чуть ли не каждый день появляется новая статья о том, как ускорить компиляцию исходного кода очередным лайфхаком. При этом современные мобильные проекты давно перешагнули стадию быстрой домашней разработки и сейчас включают сотни тысяч строк кода, удобная организация которого также представляет собой нетривиальную задачу. Одним из решений указанных проблем является создание фреймворков, реализующих основополагающий принцип разделения ответственностей модульной архитектуры.
В рамках доклада будут рассмотрены процессы создания и поддержки фреймворков и организация многослойного приложения на их основе. Слушатели узнают о сложностях, с которыми им придется столкнуться при разработке фреймворка, и о том, как их следует решать.
Рассказ будет интересен разработчикам, сталкивающимся в своей практике с задачей развития универсальных приложений со множеством дополнительных возможностей.
Рано или поздно возникает необходимость в собственных инструментах по разным причинам: либо не хватает готовых, либо есть какая-то особенность в проекте. Разработка инструментов, работающих в браузере, является непростой задачей. Самое сложное — чтобы они умели работать удаленно, вне страницы. Это многих пугает — нужно много сделать и во многом разобраться. Но если большая часть проблем уже решена, и можно сосредоточиться лишь на основной функции инструмента? Что если такие инструменты смогут работать в произвольном WebView, будь оно встроено в браузер, редактор или другое приложение на любом устройстве? Доклад про удалённые инструменты: какие есть сложности и как их обойти, как перестать бояться и начать делать инструменты под свои задачи и технологический стек.
Нещодавно відбувся Online TechTalk “Flutter Mobile Development”!
Під час заходу спікери розібрали, що таке Flutter, та навіщо використовувати саме його. Також поговорили про основні принципи та підходи до розробки на Flutter, його перспективи та найпопулярніші аплікації зроблені на ньому.
Деталі та відео заходу: https://bit.ly/3mKszBR
О тестировании для HR-менеджеров. Школы тестирования, виды тестирования, инструменты, роли. Об этом в презентации Сергея Атрощенкова, сделанной для мероприятия "7-я международная IT HR конференция «нАйТи ответ!»"
GraphQL API: Patterns | Андрей Чиж | Zlit TechZlit
Это некий список шаблонов, подходов и рекомендаций при разработке API (включая опыт, ошибки из реальной жизни, как не упустить задел на будущее etc), который можно рассматривать как определенный "code style" для API.
Любая команда в любой компании открывает этот доклад / репозиторий в гитхаб и проектирует крутой API без детских ошибок, с легкой возможностью раcширять функционал и в котором учтены потребности бекенда и фронтенда.
Презентация мастер-класса "Создание динамических пользовательских интерфейсов и AJAX-приложений промышленного класса с помощью Dojo Toolkit и Zend Framework"
«MVVM в Swift», Александр Зимин, независимый iOS-разработчикMail.ru Group
Александр рассказал про использование паттерна MVVM в языке Swift. Были рассмотрены его отличия от MVC, что можно использовать уникального из Swift. И напоследок было продемонстрировано небольшое демо.
Александр Сычев "Статика и динамика. Как фреймворки помогут прокачать ваше пр...IT Event
Время сборки swift-приложений стало притчей во языцех в iOS-сообществе. Чуть ли не каждый день появляется новая статья о том, как ускорить компиляцию исходного кода очередным лайфхаком. При этом современные мобильные проекты давно перешагнули стадию быстрой домашней разработки и сейчас включают сотни тысяч строк кода, удобная организация которого также представляет собой нетривиальную задачу. Одним из решений указанных проблем является создание фреймворков, реализующих основополагающий принцип разделения ответственностей модульной архитектуры.
В рамках доклада будут рассмотрены процессы создания и поддержки фреймворков и организация многослойного приложения на их основе. Слушатели узнают о сложностях, с которыми им придется столкнуться при разработке фреймворка, и о том, как их следует решать.
Рассказ будет интересен разработчикам, сталкивающимся в своей практике с задачей развития универсальных приложений со множеством дополнительных возможностей.
Рано или поздно возникает необходимость в собственных инструментах по разным причинам: либо не хватает готовых, либо есть какая-то особенность в проекте. Разработка инструментов, работающих в браузере, является непростой задачей. Самое сложное — чтобы они умели работать удаленно, вне страницы. Это многих пугает — нужно много сделать и во многом разобраться. Но если большая часть проблем уже решена, и можно сосредоточиться лишь на основной функции инструмента? Что если такие инструменты смогут работать в произвольном WebView, будь оно встроено в браузер, редактор или другое приложение на любом устройстве? Доклад про удалённые инструменты: какие есть сложности и как их обойти, как перестать бояться и начать делать инструменты под свои задачи и технологический стек.
Нещодавно відбувся Online TechTalk “Flutter Mobile Development”!
Під час заходу спікери розібрали, що таке Flutter, та навіщо використовувати саме його. Також поговорили про основні принципи та підходи до розробки на Flutter, його перспективи та найпопулярніші аплікації зроблені на ньому.
Деталі та відео заходу: https://bit.ly/3mKszBR
О тестировании для HR-менеджеров. Школы тестирования, виды тестирования, инструменты, роли. Об этом в презентации Сергея Атрощенкова, сделанной для мероприятия "7-я международная IT HR конференция «нАйТи ответ!»"
7. !a# $% &o(o)*+*,-
Обсудили идею внутри команды
Посоветовались с бизнесом и подготовили к рискам
Изучили базовые основы SwiftUI на упражнениях
Посмотрели что есть в нашем приложении и как мы будем
решать это на SwiftUI
Разделили между собой задачи на изучение
Засинкались и составили базу знаний
8. !a# $% &o(o)*+*,-
Обсудили идею внутри команды
Посоветовались с бизнесом и подготовили к рискам
Изучили базовые основы SwiftUI на упражнениях
Посмотрели что есть в нашем приложении и как мы будем
решать это на SwiftUI
Разделили между собой задачи на изучение
Засинкались и составили базу знаний
9. !a# $% &o(o)*+*,-
Обсудили идею внутри команды
Посоветовались с бизнесом и подготовили к рискам
Изучили базовые основы SwiftUI на упражнениях
Посмотрели что есть в нашем приложении и как мы будем
решать это на SwiftUI
Разделили между собой задачи на изучение
Засинкались и составили базу знаний
10. .(o /a0o)o&o ,(o*( 01a(- פ3o SwiftUI
Как работает Layout
Как работает Data Flow
Как работает механизм Preference
Как работает механизм Environment
Чем отличаются Property Wrappers
По желанию: как работают анимации
* Полезные ссылки будут в конце
11. !a# $% &o(o)*+*,-
Обсудили идею внутри команды
Посоветовались с бизнесом и подготовили к рискам
Изучили базовые основы SwiftUI на упражнениях
Посмотрели что есть в нашем приложении и как мы будем
решать это на SwiftUI
Разделили между собой задачи на изучение
Засинкались и составили базу знаний
13. !a# $% &o(o)*+*,-
Обсудили идею внутри команды
Посоветовались с бизнесом и подготовили к рискам
Изучили базовые основы SwiftUI на упражнениях
Посмотрели что есть в нашем приложении и как мы будем
решать это на SwiftUI
Разделили между собой задачи на изучение
Засинкались и составили базу знаний
14. !a# $% &o(o)*+*,-
Обсудили идею внутри команды
Посоветовались с бизнесом и подготовили к рискам
Изучили базовые основы SwiftUI на упражнениях
Посмотрели что есть в нашем приложении и как мы будем
решать это на SwiftUI
Разделили между собой задачи на изучение
Засинкались и составили базу знаний
15.
16. #available(iOS 14, *)
VIEWS
Lazy Stacks, Lazy Grids, TextEditor, ProgressViews, Progress
Bar, Maps, Opening links, PageTabViewStyle, DatePicker,
ColorPicker, Sign In With Apple
MODIFIERS
redacted(), scrollTo(), onChange(), appStoreOverlay()
PROPERTY WRAPPERS
StateObject, ScaledMetric, AppStorage
iOS 14
20. Выбрали Nuke
+ Уже используется в проекте
+ Проверен временем
+ Общий кэш с UIKit (потому что там тоже Nuke)
– Нет стабильной версии
Написали враппер, чтобы можно было легко заменить на
другой компонент
Image loading
23. Pull-to-refresh
Взяли основу из статьи https://swiftui-lab.com/scrollview-
pull-to-refresh
Выглядит не нативно и иногда дёргается
В iOS 15 появился Refreshable модификатор, но только
для List !
41. Каждая вьюшка это композиция других вьюх
У каждой вьюшки есть модель - композиция
примитивных типов и моделей других вьюшек
У экрана есть View Model, которая загружает данные
и реагирует на действия
53. Навигация на уровне UIKit, вьюшки на уровне SwiftUI
Screen = View Controller
SwiftUI живёт в отдельном таргете с минимумом
зависимостей
Все зависимости в основном таргете
64. Screen
View Model
Json/Dto
Json/Dto
struct UserView.Model {
let id: Int
let name: String
...
let data: UserJson
}
UserJson {}
+1 зависимость
Network/Service
struct UserView.Model {
let id: Int
let name: String
...
let data: UserJson
}
65. Screen
View Model
Json/Dto
Json/Dto
struct UserView.Model {
let id: Int
let name: String
...
let data: UserJson
}
UserJson {}
+1 зависимость
Network/Service
struct UserView.Model {
let id: Int
let name: String
...
let data: UserJson
}
67. struct Model: Identifiable {
let id: Int
let imageUrl: URL
let username: String
let description: String
let onUserTap: () #$ Void
let onUserFollow: () #$ Void
}
struct Model: Identifiable {
let id: Int
let imageUrl: URL
let username: String
let description: String
enum Action {
case tap
case follow
}
let action: (Action) #$ Void
}
Actions in view
68. Actions in view model
struct UserDataTransformer {
let onUserTap: (UserJson) #$ Void
let onUserFollow: (UserJson) #$ Void
func transform<VM>(json: CommunityScreenJson) #$ CommunityScreen<VM>.Model {
return CommunityScreen.Model(
playlists: ##%,
followers: FollowersView.Model(
header: json.followersHeader,
users: json.followers.map { user in
UserView.Model(
id: user.id,
imageUrl: user.imageUrl.url,
username: user.username,
description: user.description,
onTap: {
self.onUserTap(user)
},
onFollow: {
self.onUserFollow(user)
}
)
}
),
posts: ##%
)
69. final class CommunityScreenViewModel: CommunityScreenViewModelProtocol {
let network: Network
let router: Router
@Published var model: CommunityScreen<CommunityScreenViewModel>.Model? = nil
func load() {
network.loadCommunity { json in
self.model = UserDataTransformer(
onUserTap: { user in
self.router.openUserScreen(id: user.id)
}, onUserFollow: { user in
self.network.followUser(id: user.id)
}
)
.transform(json: json)
}
}
}
Actions in view model
70. Вьюшки определяет свой набор actions внутри
модели
Вью модель замыкает json/dto внутри action
Пропадает необходимость прокидывать эти данные
во вью и обратно
72. Не работал canvas preview: все библиотеки должны
поддерживать arm64, внедрили SPM
Иногда лэйаут на экране просто ломается: помогает установка
фиксированного фрейма
Не работал pull-to-refresh: заменили (Lazy)VStack на LazyVGrid
Не доступны все опции привычной кастомизации: https://
github.com/siteline/SwiftUI-Introspect
; #a#*$* פ3o/+6$a$* ,(o+#1u+*,- * #a# *5 36<*+*
75. Не работал canvas preview: все библиотеки должны
поддерживать arm64, внедрили SPM
Иногда лэйаут на экране просто ломается: помогает установка
фиксированного фрейма
Не работал pull-to-refresh: заменили (Lazy)VStack на LazyVGrid
Не доступны все опции привычной кастомизации: https://
github.com/siteline/SwiftUI-Introspect
; #a#*$* פ3o/+6$a$* ,(o+#1u+*,- * #a# *5 36<*+*
77. Не работал canvas preview: все библиотеки должны
поддерживать arm64, внедрили SPM
Иногда лэйаут на экране просто ломается: помогает установка
фиксированного фрейма
Не работал pull-to-refresh: заменили (Lazy)VStack на LazyVGrid
Не доступны все опции привычной кастомизации: https://
github.com/siteline/SwiftUI-Introspect
; #a#*$* פ3o/+6$a$* ,(o+#1u+*,- * #a# *5 36<*+*
78. Не работал canvas preview: все библиотеки должны
поддерживать arm64, внедрили SPM
Иногда лэйаут на экране просто ломается: помогает установка
фиксированного фрейма
Не работал pull-to-refresh: заменили (Lazy)VStack на LazyVGrid
Не доступны все опции привычной кастомизации: https://
github.com/siteline/SwiftUI-Introspect
; #a#*$* פ3o/+6$a$* ,(o+#1u+*,- * #a# *5 36<*+*
80. GeometryReader - самое крайнее средство для решения
проблемы
Мозг переключается не сразу, ему нужно время
Не боятся создавать разные View для похожих элементов
Лучше использовать 2 пробела вместо 4-х и не писать self
На чипах apple silicon работает лучше
.(o u01a+*
91. !a#*6 פ3o/+6$% o,(a+*,-
Не всегда плавный скроллинг
Некоторый функционал не доступен на iOS 14
Какие-то вещи сделать просто невозможно
https://github.com/siteline/SwiftUI-Introspect
94. Aa:o,(-
After using UIKit for a very long time, it can be a bit confusing
to start implementing UIs with SwiftUI. At first, you are not
sure which element or modifier to use for certain items.
However, this feeling goes away very quickly and you start to
understand the simplicity and the ease with which you are
able to put building blocks together to achieve the desired
outcome. It’s just a different way of looking at structure of UI
and understanding how certain core concepts work.
95. Aa:o,(-
Для меня SwiftUI стал глотĸом свежого воздуха и
разнообразия в работе, первое время реально
тяжело, но голова быстро перестраивается.
Иногда я сĸучаю по UIKit и его гибĸости, ĸоторая
поĸа превосходит SwiftUI, но ĸажется это будет
недолго.
96. 21 июня, вт
10:00 – 11:00
Егор Петров
SwiftUI vs UIKit: to be or not to be?
102. https://developer.apple.com/tutorials/swiftui - туториалы от эпл
https://swiftui-lab.com - глубокие статьи про сложные штуки
https://www.fivestars.blog/swiftui - очень хорошо
https://swiftwithmajid.com - не только SwiftUI, кратко и по делу
;,%+#*