JAKUB KORNATOWSKI SWIFTUI, CZYLI ZNOWU WSZYSTKO OD … · WYKORZYSTAĆ POTENCJAŁ: SWIFTUI & SWIFT...
Transcript of JAKUB KORNATOWSKI SWIFTUI, CZYLI ZNOWU WSZYSTKO OD … · WYKORZYSTAĆ POTENCJAŁ: SWIFTUI & SWIFT...
SWIFTUI, CZYLI ZNOWU WSZYSTKO OD POCZĄTKU…
JAKUB KORNATOWSKI
JAKUB KORNATOWSKI
POBIERZ PREZENTACJĘ
▸ https://swiftly.pl/4developers
SWIFTUI… I CO DALEJ?FROM HERO TO ZERO?
JAKUB KORNATOWSKI
PRÓG WEJŚCIA WG. JĘZYKÓW
OBJECTIVE-C SWIFT
JAKUB KORNATOWSKI
PRÓG WEJŚCIA WG. JĘZYKÓW
OBJECTIVE-C SWIFT JS
JAKUB KORNATOWSKI
PRÓG WEJŚCIA WG. FRAMEWORKÓW
APPKIT UIKIT SWIFTUI
JAKUB KORNATOWSKI
PRÓG WEJŚCIA WG. FRAMEWORKÓW
APPKIT UIKIT SWIFTUI REACT JS
SWIFTUI… I CO DALEJ?
SWIFTUI
SWIFT 5.1 CATALYST
COMBINE
SWIFTUI… I CO DALEJ?
SWIFTUI. BETTER APPS. LESS CODE.
▸ SwiftUI is an innovative, exceptionally simple way to build user interfaces across all Apple platforms with the power of Swift. Build user interfaces for any Apple device using just one set of tools and APIs. With a declarative Swift syntax that’s easy to read and natural to write, SwiftUI works seamlessly with new Xcode design tools to keep your code and design perfectly in sync. Automatic support for Dynamic Type, Dark Mode, localization, and accessibility means your first line of SwiftUI code is already the most powerful UI code you’ve ever written.
https://developer.apple.com/xcode/swiftui/
SWIFTUI… I CO DALEJ?
PO CO I DLACZEGO?
▸ Uproszczenie procesu tworzenia UI.
▸ Uproszczenie tworzenia animacji.
▸ Wsparcie w tworzeniu architektury.
▸ Wprowadzenie deklaratywnego sposobu zapisu statycznego kodu.
▸ Natywne wsparcie dla programowania reaktywnego.
SWIFTUI… I CO DALEJ?
CZY COMBINE JEST REAKTYWNY?
🤔
SWIFTUI… I CO DALEJ?
▸ What? vs How?
▸ Jestem obok <nazwaSklepu>. Jak mam do Ciebie dojechać?
▸ I: Wyjedź zachodnim wyjazdem z parkingu, następnie skręć w aleje długą i jedź aż do komisariatu policji. Przed czerwonym budynkiem skręć w lewo w ulicę krótką. Po jakichś 200m będziesz pod moim blokiem.
▸ D: Mieszkam na ulicy Krótkiej 21, 00-123 w Warszawie.
PROGRAMOWANIE DEKLARATYWNE, NIE IMPERATYWNE
SWIFTUI… I CO DALEJ?
PROGRAMOWANIE DEKLARATYWNE, NIE IMPERATYWNE
▸ What? vs How?
▸ Imperatywne: C, C++, Java
▸ Deklaratywne: HTML, SQL
▸ Mix: Swift, JS, C#, Python
SWIFTUI… I CO DALEJ?
WYKORZYSTAĆ POTENCJAŁ: SWIFTUI & SWIFT 5
▸ SwiftUI to framework w pełni wykorzystujący możliwości Swift 5, zbudowany, żeby wykorzystać potencjał języka.
▸ DSL-like API.
▸ Deklaratywny sposób budowania warstw UI.
▸ Protocol-Oriented.
SWIFTUI… I CO DALEJ?
SOME
struct ContentView: View { var body: View { Text("Hello, World!”) } }
SWIFTUI… I CO DALEJ?
SOME
struct ContentView: View { var body: View { Text("Hello, World!”) } }
SWIFTUI… I CO DALEJ?
SOME
struct ContentView: View { var body: Text { Text("Hello, World!") } }
struct ContentView: View { var body: some View { Text("Hello, World!") } }
👎
👍
SWIFTUI… I CO DALEJ?
PROPERTY DELEGATES
struct SettingsView: View { @State var enableAutoSave: Bool
var body: some View { return VStack { Toggle(isOn: $enableAutoSave) { Text("Auto saving enabled!") } } } }
SWIFTUI… I CO DALEJ?
PROPERTY DELEGATES
struct SettingsView: View { var enableAutoSave: State<Bool>
var body: some View { return VStack { Toggle(isOn: enableAutoSave.projectedValue) { Text("Auto saving enabled!") } } } }
SWIFTUI… I CO DALEJ?
PROPERTY DELEGATES
struct SettingsView: View { var enableAutoSave: State<Bool>
var body: some View { return VStack { Toggle(isOn: enableAutoSave.projectedValue) { Text("Auto saving enabled!") } } } }
REWRITE THE CODE
WE MUST
UIKIT & SWIFTUICZYLI ZAADOPTUJ FRAMEWORK
UIKIT & SWIFTUI
ADOPCJA
▸ Czy da się połączyć je ze sobą?
UIKIT & SWIFTUI
ADOPCJA
▸ Czy da się połączyć je ze sobą?
▸ Jak?
import UIKit import SwiftUI
TO MOŻE JEDNAK PRZEPISAĆ?
UIKIT & SWIFTUI
HOLD YOUR HORSES
▸ Stopniowe, powolne wdrażanie.
▸ Nie ma pośpiechu w integrowaniu nowości.
▸ oldBugs = newBugs
UIKIT & SWIFTUI
MIESZAJ I ŁĄCZ
▸ Pełna interoperacyjność pomiędzy UIKit a SwiftUI
UIViewController UIView
Representable Representable
UIKIT & SWIFTUI
MIESZAJ I ŁĄCZ
▸ Pełna interoperacyjność pomiędzy UIKit a SwiftUI
struct SettingsView: View { @State var enableAutoSave: Bool
var body: some View { return VStack { Toggle(isOn: $enableAutoSave) { Text("Auto saving enabled!") } } } }
let vc = UIHostingController(rootView: SettingsView(enableAutoSave: true))
UIKIT & SWIFTUI
IMPLEMENTACJA WSPÓŁMIERNA
▸ Nie zawsze nadbudowa jest możliwa
▸ Kompatybilność wsteczna
▸ ABSTRAKCJA
UIKIT & SWIFTUI
protocol DetailsViewControllerFactory { func makeViewController(for details: Details) -> UIViewController }
struct DetailsViewControllerUiKitFactory: DetailsViewControllerFactory { func makeViewController(for details: Details) -> UIViewController { return DetailsViewController(detailsModel: details) } }
@available(iOS 13, *) struct DetailsViewControllerSwiftUIFactory: DetailsViewControllerFactory { func makeViewController(for details: Details) -> UIViewController { let view = DetailsView(details: details) return UIHostingController(rootView: view) } }
UIKIT & SWIFTUI
let detailsViewControllerFactory: DetailsViewControllerFactory = { #if USE_SWIFT_UI if #available(iOS 13, *) { return DetailsViewControllerSwiftUIFactory() } #endif return DetailsViewControllerUiKitFactory() }()
UIKIT & SWIFTUI
PROBLEMY WIEKU DZIECIĘCEGO
▸ Problemy z iOS 13 i Xcode 11
▸ Ograniczone pokrycie natywnego API
▸ Tylko dla iOS 13 / iPadOS / Catalina (polityka 2-letniego wsparcia)
▸ Support i dokumentacja!
ARCHITEKTURAPO CO NAM TERAZ VIEWMODEL?
ARCHITEKTURA
ARCHITEKTURA APLIKACJI W SWIFTUI
▸ SwiftUI to wyłącznie framework do budowania interfejsu użytkownika!
▸ Podejścia architektoniczne do budowania aplikacji na iOS nie zmieniają się znacząco.
▸ Nadal przestrzegamy S.O.L.I.D.nych praktyk, bez względu na język czy framework.
▸ Problem puchnących View Controller’ów nie znika, a migruje.
▸ “Can’t use Core Data with SwiftUI!”
ARCHITEKTURA
MVC MVVMVIEW VIEW
VIEW CONTROLLER VIEW MODEL
MODEL MODEL
MANGERS
SWIFTUIVIEW
OBSERVABLE
MODEL
CORE OBJECTS
https://matteomanferdini.com/wp-content/uploads/2019/10/The-5-most-common-misconceptions-about-SwiftUI-Matteo-Manferdini.pdf
ARCHITEKTURA
PYRAMID OF DOOMstruct DummyView: View { var body: some View { ZStack { Color.blue VStack { ForEach(0..<3) { _ in HStack { Text("Dummy”) Text("Text") } } } } } }
DUMMY TEXT DUMMY TEXT DUMMY TEXT
ARCHITEKTURA
PYRAMID OF DOOMstruct DummyView: View { var body: some View { ZStack { Color.blue VStack { ForEach(0..<3) { _ in HStack { Text("Dummy”) Text("Text") } } } } } }
DUMMY TEXT DUMMY TEXT DUMMY TEXT
ARCHITEKTURA
struct DummyView: View { var body: some View { ZStack { Color.black createVStack() } } func createVStack() -> some View { return VStack { ForEach(0..<3) { _ in self.createHStack() } } } func createHStack() -> some View { return HStack { Text("Dummy”) Text("Text") } } }
BEZPIECZEŃSTWOLEPIEJ, CZY NIE LEPIEJ?
BEZPIECZEŃSTWO
DOSTĘPNOŚĆ NARZĘDZI DO SZUKANIA PODATNOŚCI
▸ Najwięcej narzędzi dostępnych dla aplikacji napisanych w Objective-C, dostępnych na systemy 32-bitowe.
▸ Do czasów ABI Stability w Swift 5 - bardzo mało narzędzi do aplikacji pisanych w Swift.
▸ Im mniejsze wsparcie wsteczne, tym większe bezpieczeństwo (bo tym mniej dostępnych narzędzi).
SWIFT COACHINGCZYLI CO DALEJ ZE MNĄ?
DON’T PANIC
SWIFT COACHING
SWIFT COACHING
POCZĄTKUJĄCY
▸ Tak, to jest ten moment!
▸ Ale…
SWIFT COACHING
REAKCJA NA ZMIANY - RYNEK VS DEVELOPER
▸ „And it would be grate if you have…”
▸ Adopcja w aktualnych rozwiązaniach chwilę potrwa.
▸ Czy sam chcę się rozwijać?
SWIFT COACHING
20/80
▸ Reguła Pareto - 20% wysiłków daje 80% rezultatów - to samo w kontekście integracji nowości.
▸ Warto zacząć od przyswojenia odpowiednich 20%, aby zacząć je poprawnie implementować.
SWIFT COACHING
https://mixpanel.com/trends/#report/ios_13
WE HOPE THAT SWIFTUI CAN BE A STANDALONE LIBRARY WHICH IS SIMILAR TO SWIFT (BEFORE 5), JETPACK OR APPCOMPAT LIBRARY. IF IT IS BUNDLED IN IOS / MACOS, WE CANNOT USE IT FOR PRODUCTION FOR AT LEAST ONE YEAR SINCE IT’S FAR FROM MATURE NOW.
WildCat
SWIFT COACHING
https://forums.developer.apple.com/thread/123952
SWIFTUI IS A STANDALONE LIBRARY NOW. IT LIVES IN /SYSTEM/LIBRARY/FRAMEWORKS/SWIFTUI.FRAMEWORK, AND IS DYNAMICALLY LINKED LIKE ANY OTHER FRAMEWORK, WITH THE STABLE SWIFT V5 ABI. OR DO YOU MEAN THAT IT WOULD BE AVAILABLE IN SOME FORMAT THAT YOU CAN INCLUDE IN YOUR APPLICATION BUNDLE AS A DEPENDENCY? THAT'S HIGHLY UNLIKELY, GIVEN THAT IT'S VERY DEPENDENT ON PARTICULAR VERSIONS OF THE OPERATING SYSTEM'S OTHER LIBRARIES; THERE'S GOING TO BE SOME SPECIAL SAUCE INSIDE UIKIT, AND SWIFTUI ALSO LINKS DIRECTLY AGAINST COREUI, WHICH IS THE PRIVATE FRAMEWORK THAT HANDLES 'THEME' RENDERING, I.E. THE LOOK & FEEL OF BUTTONS, BARS, ETC. ON EACH PLATFORM. REST ASSURED, THOUGH, THAT THE PACE OF IMPROVEMENT WILL BE BRISK. OF ALL THE TEAMS AT APPLE, THAT ONE HAS SOME OF THE ABSOLUTE BEST & BRIGHTEST WORKING ON IT. THERE ARE SOME ROUGH EDGES RIGHT NOW, BUT MOST CAN BE CIRCUMVENTED IN ONE WAY OR ANOTHER, PLUS YOU CAN ADOPT IT PIECEMEAL VIA UIHOSTINGCONTROLLER AND FRIENDS—IMPLEMENT A MODAL CONTROLLER'S CONTENT IN SWIFTUI, OR A SINGLE TAB IN A UITABVIEW, AND KEEP THE REST AS-IS.
Jim Dovey
SWIFT COACHING
https://forums.developer.apple.com/thread/123952
SWIFT COACHING
INNOVATORS EARLY ADOPTERS EARLY MAJORITY LATE MAJORITY
Elixir Dart Ballerina
Swift Server-side Swift Go Rust Erlang Cloud-based IDE
Swift (for iOS) Python TypeScript C Updates
PHP Ruby JS
TRENDY W JĘZYKACH PROGRAMOWANIA Q3 2019 BY INFOQ
https://www.infoq.com/articles/programming-language-trends-2019/
SWIFT COACHING
MOST LOVED ❤ JĘZYKI PROGRAMOWANIA BY STACKOVERFLOW
RUST
PYTHON
TYPESCRIPT
KOTLIN
WEBASSEMBLY
SWIFT
CLOJURE
0 22,5 45 67,5 90https://insights.stackoverflow.com/survey/2019
SWIFT COACHING
CO ROBIĆ?
▸ Poranna lektura - ulubione blogi (na końcu prezentacji)
▸ Side projects, Hackathony, Blogi
▸ Podcasty i YouTuby
▸ Powolne, ciche wsparcie w obecnych projektach…
▸ … tam gdzie jest to możliwe.
▸ Niech ludzie, który mają czas, zrobią coś za Ciebie!
DON’T PANIC
#GIFTFORSHARE
#GIFTFORSHARE
@JKORNAT▸ FOLLOW & SHARE
TO JUŻ PRAWIE KONIEC…
NA KONIEC
POLECANE BLOGI I PODCASTY▸ Swiftly.pl (https://swiftly.pl) %
▸ Swift (https://swift.org)
▸ Swift By Sundell (https://www.swiftbysundell.com)
▸ SwiftLee (https://www.avanderlee.com)
▸ Matteo Manfredini (https://matteomanferdini.com)
▸ iOS Dev Weekly (https://iosdevweekly.com)
▸ Ray Wenderlich (https://www.raywenderlich.com)
▸ Andrew Bancroft (https://www.andrewcbancroft.com)
▸ Inside iOS Dev (https://podcasts.apple.com/us/podcast/inside-ios-dev/id1231805301)
▸ More Than Just Code (https://podcasts.apple.com/ca/podcast/mtjc-podcast-podcast-about/id906987516?mt=2)
▸ The iPhreaks Show (https://podcasts.apple.com/podcast/the-iphreaks-show/id634022060?mt=2)
NA KONIEC
ŹRÓDŁA▸ https://swiftly.pl/wwdc-2019/#swiftui - Wspomnienia z WWDC %
▸ https://twitter.com/johnsundell/status/1136610561632980993 - Pyramid of Doom - Twitter
▸ https://github.com/apple/swift-evolution/blob/master/proposals/0244-opaque-result-types.md - Propozycja zmiany do Swift - dodanie ”Some”
▸ https://www.swiftbysundell.com/articles/shifting-paradigms-in-swift/ - Zmiana paradygmatu na nowy (przejście)
▸ https://www.hackingwithswift.com/quick-start/swiftui/answering-the-big-question-should-you-learn-swiftui-uikit-or-both - Dlaczego jeszcze nie SwiftUI
▸ https://www.avanderlee.com/swift/combine/ - Wprowadzenie do Combine
▸ https://swiftly.pl/czym-jest-combine-framework/ - Czym jest Combine %
▸ https://matteomanferdini.com/wp-content/uploads/2019/10/The-5-most-common-misconceptions-about-SwiftUI-Matteo-Manferdini.pdf - Zmiany w architekturze po SwiftUI
▸ https://insights.stackoverflow.com/survey/2019 - Roczna ankieta Stack Overflow
▸ https://www.infoq.com/articles/programming-language-trends-2019/ - Trendy w językach programowania
▸ https://tylermcginnis.com/imperative-vs-declarative-programming/ - Deklaratywny sposób programowania
▸ https://medium.com/swlh/are-you-an-ios-x-expert-81eb9da3623a - Ciekawe spojrzenie na SwiftUI z perspektywy starego iOS'owego wyjadacza
▸ https://developer.apple.com/tutorials/swiftui/interfacing-with-uikit - Praktyczny przykład łączenia SwiftUI z UIKit od samego Vendora
▸ https://mixpanel.com/trends/#report/ios_13 - Adaptacja użytkowników iOS 13 (updating)
▸ https://forums.developer.apple.com/thread/123952 - Wątek na forum Apple o SwiftUI
TERAZ KONIEC!MOŻNA KLASKAĆ!