JAKUB KORNATOWSKI SWIFTUI, CZYLI ZNOWU WSZYSTKO OD … · WYKORZYSTAĆ POTENCJAŁ: SWIFTUI & SWIFT...

Post on 21-May-2020

7 views 0 download

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Ć!