Upgrade to Pro — share decks privately, control downloads, hide ads and more …

DevCoach 173: iOS | Mendalami SwiftUI, UI Frame...

Nad
October 18, 2024
53

DevCoach 173: iOS | Mendalami SwiftUI, UI Framework Masa Depan!

Nad

October 18, 2024
Tweet

More Decks by Nad

Transcript

  1. Developer Coaching #142 iOS Developer • Pentingnya networking dalam pengembangan

    aplikasi iOS. • Fungsi URL Session sebagai tool networking. • Perbedaan setiap tipe dari URLSession • Cara mengubah data dengan format JSON
  2. Learning Objectives • Pengantar SwiftUI • Perbandingan SwiftUI dan UIKit

    • Komponen UI dalam SwiftUI • State Management di SwiftUI • Future of iOS Development dengan SwiftUI • Swift Playgrounds iOS Developer
  3. Perkembangan SwiftUI SwiftUI 1.0 - Debut rilis - Deklaratif dan

    reaktif - Cross-platform - Integrasi dengan UIKit dan AppKit - Hot-reload dengan Xcode Previews 2019 iOS Developer
  4. Perkembangan SwiftUI SwiftUI 2.0 - WidgetKit - Appearance Modifier -

    ProgressView - Menus dan Context Menus - Multiplatform app templates - Lifecycle API baru 2020 SwiftUI 1.0 - Debut rilis - Deklaratif dan reaktif - Cross-platform - Integrasi dengan UIKit dan AppKit - Hot-reload dengan Xcode Previews 2019 iOS Developer
  5. Perkembangan SwiftUI SwiftUI 3.0 - List, Form, dan Grid Improvements

    - AsyncImage - Material - Accessibility Improvements - iOS 15 Focus Mode Support - Markdown Support in Text 2021 SwiftUI 2.0 - WidgetKit - Appearance Modifier - ProgressView - Menus dan Context Menus - Multiplatform app templates - Lifecycle API baru 2020 SwiftUI 1.0 - Debut rilis - Deklaratif dan reaktif - Cross-platform - Integrasi dengan UIKit dan AppKit - Hot-reload dengan Xcode Previews 2019 iOS Developer
  6. Perkembangan SwiftUI SwiftUI 4.0 - NavigationStack & NavigationSplitView - Resizable

    Bottom Sheets - Grid Layout - ShareLink - Improvements to Charts - Enhanced ScrollView 2022 SwiftUI 3.0 - List, Form, dan Grid Improvements - AsyncImage - Material - Accessibility Improvements - iOS 15 Focus Mode Support - Markdown Support in Text 2021 SwiftUI 2.0 - WidgetKit - Appearance Modifier - ProgressView - Menus dan Context Menus - Multiplatform app templates - Lifecycle API baru 2020 SwiftUI 1.0 - Debut rilis - Deklaratif dan reaktif - Cross-platform - Integrasi dengan UIKit dan AppKit - Hot-reload dengan Xcode Previews 2019 iOS Developer
  7. Perkembangan SwiftUI SwiftUI 5.0 - Macros - Improved Scroll Performance

    - Interactivity in Charts - Scene Management Updates - SwiftData - MapKit Improvements 2023 SwiftUI 4.0 - NavigationStack & NavigationSplitView - Resizable Bottom Sheets - Grid Layout - ShareLink - Improvements to Charts - Enhanced ScrollView 2022 SwiftUI 3.0 - List, Form, dan Grid Improvements - AsyncImage - Material - Accessibility Improvements - iOS 15 Focus Mode Support - Markdown Support in Text 2021 SwiftUI 2.0 - WidgetKit - Appearance Modifier - ProgressView - Menus dan Context Menus - Multiplatform app templates - Lifecycle API baru 2020 SwiftUI 1.0 - Debut rilis - Deklaratif dan reaktif - Cross-platform - Integrasi dengan UIKit dan AppKit - Hot-reload dengan Xcode Previews 2019 iOS Developer
  8. Perkembangan SwiftUI SwiftUI 5.0 - Macros - Improved Scroll Performance

    - Interactivity in Charts - Scene Management Updates - SwiftData - MapKit Improvements 2023 SwiftUI 4.0 - NavigationStack & NavigationSplitView - Resizable Bottom Sheets - Grid Layout - ShareLink - Improvements to Charts - Enhanced ScrollView 2022 SwiftUI 3.0 - List, Form, dan Grid Improvements - AsyncImage - Material - Accessibility Improvements - iOS 15 Focus Mode Support - Markdown Support in Text 2021 SwiftUI 2.0 - WidgetKit - Appearance Modifier - ProgressView - Menus dan Context Menus - Multiplatform app templates - Lifecycle API baru 2020 SwiftUI 1.0 - Debut rilis - Deklaratif dan reaktif - Cross-platform - Integrasi dengan UIKit dan AppKit - Hot-reload dengan Xcode Previews 2019 SwiftUI 6.0 - Custom Containers - Accessibility Enhancements - Improved Xcode Previews - Text Selection and Suggestions - Graphics and Animations - SF Symbols 6 2024 iOS Developer
  9. iOS Developer • Menambahkan TableView di Storyboard. • Hubungkan TableView

    dengan View Controller. • Membuat TableViewCell beserta XIB file-nya. • Susun tampilan TableViewCell. • Hubungkan TableViewCell dengan kelas UITableViewCell. • Siapkan data yang diperlukan. • Menambahkan delegation dataSource di TableView. • Mendaftarkan TableViewCell ke TableView. • Mengatur delegation dari TableView. • Menjalankan aplikasi. UIKit • Siapkan data yang diperlukan. • Menyusun AcademyItemView. • Menggabungkan AcademyItemView dengan ContentView. • Menjalankan aplikasi. SwiftUI
  10. iOS Developer SwiftUI Perbedaan UIKit Deklaratif, di mana developer mendeklarasikan

    apa yang harus ditampilkan dan bagaimana UI berinteraksi dengan data. 1 Pendekatan Pemrograman Imperatif, yang berarti developer harus secara eksplisit menentukan setiap perubahan pada UI melalui kode.
  11. iOS Developer SwiftUI Perbedaan UIKit Menggunakan View sebagai elemen dasar

    untuk membangun UI, di mana semua tampilan dideklarasikan sebagai struktur fungsional. 2 Manajemen Tampilan Menggunakan UIView dan UIViewController sebagai elemen dasar. Deklaratif, di mana developer mendeklarasikan apa yang harus ditampilkan dan bagaimana UI berinteraksi dengan data. 1 Pendekatan Pemrograman Imperatif, yang berarti developer harus secara eksplisit menentukan setiap perubahan pada UI melalui kode.
  12. iOS Developer SwiftUI Perbedaan UIKit Menggunakan View sebagai elemen dasar

    untuk membangun UI, di mana semua tampilan dideklarasikan sebagai struktur fungsional. 2 Manajemen Tampilan Menggunakan UIView dan UIViewController sebagai elemen dasar. Dilengkapi dengan Xcode Previews, yang memungkinkan developer melihat pratinjau UI secara real-time saat menulis kode tanpa harus menjalankan aplikasi sepenuhnya. 3 Alat Pengembangan Tidak memiliki fitur preview langsung. Developer harus menjalankan aplikasi di simulator atau perangkat fisik setiap kali ingin melihat perubahan pada UI. Deklaratif, di mana developer mendeklarasikan apa yang harus ditampilkan dan bagaimana UI berinteraksi dengan data. 1 Pendekatan Pemrograman Imperatif, yang berarti developer harus secara eksplisit menentukan setiap perubahan pada UI melalui kode.
  13. iOS Developer SwiftUI Perbedaan UIKit Menggunakan View sebagai elemen dasar

    untuk membangun UI, di mana semua tampilan dideklarasikan sebagai struktur fungsional. 2 Manajemen Tampilan Menggunakan UIView dan UIViewController sebagai elemen dasar. Dilengkapi dengan Xcode Previews, yang memungkinkan developer melihat pratinjau UI secara real-time saat menulis kode tanpa harus menjalankan aplikasi sepenuhnya. 3 Alat Pengembangan Tidak memiliki fitur preview langsung. Developer harus menjalankan aplikasi di simulator atau perangkat fisik setiap kali ingin melihat perubahan pada UI. Menggunakan property wrapper seperti State, Binding, ObservedObject, dan EnvironmentObject untuk manajemen data dan sinkronisasi antara UI dan data secara otomatis. 4 Pengelolaan Data Tidak memiliki konsep ini. Developer biasanya harus menggunakan delegates, closures, atau notifications untuk mengelola pembaruan data dan UI. Deklaratif, di mana developer mendeklarasikan apa yang harus ditampilkan dan bagaimana UI berinteraksi dengan data. 1 Pendekatan Pemrograman Imperatif, yang berarti developer harus secara eksplisit menentukan setiap perubahan pada UI melalui kode.
  14. iOS Developer SwiftUI Perbedaan UIKit Menggunakan View sebagai elemen dasar

    untuk membangun UI, di mana semua tampilan dideklarasikan sebagai struktur fungsional. 2 Manajemen Tampilan Menggunakan UIView dan UIViewController sebagai elemen dasar. Dilengkapi dengan Xcode Previews, yang memungkinkan developer melihat pratinjau UI secara real-time saat menulis kode tanpa harus menjalankan aplikasi sepenuhnya. 3 Alat Pengembangan Tidak memiliki fitur preview langsung. Developer harus menjalankan aplikasi di simulator atau perangkat fisik setiap kali ingin melihat perubahan pada UI. Menggunakan property wrapper seperti State, Binding, ObservedObject, dan EnvironmentObject untuk manajemen data dan sinkronisasi antara UI dan data secara otomatis. 4 Pengelolaan Data Tidak memiliki konsep ini. Developer biasanya harus menggunakan delegates, closures, atau notifications untuk mengelola pembaruan data dan UI. Menggunakan struktur App untuk mendeklarasikan siklus hidup aplikasi, yang lebih ringkas dan mudah diatur dibandingkan UIKit. 5 Lifecycle Management Menggunakan UIApplicationDelegate dan UIViewController untuk mengelola siklus hidup aplikasi dan tampilan, yang lebih kompleks. Deklaratif, di mana developer mendeklarasikan apa yang harus ditampilkan dan bagaimana UI berinteraksi dengan data. 1 Pendekatan Pemrograman Imperatif, yang berarti developer harus secara eksplisit menentukan setiap perubahan pada UI melalui kode.
  15. TextField iOS Developer @State private var value: String = ""

    var body: some View { TextField("Masukkan nilai", text: $value) .textFieldStyle(.roundedBorder) .padding() }
  16. Toggle iOS Developer @State private var isLove: Bool = false

    var body: some View { Toggle(isOn: $isLove) { Text("Apakah kamu suka Dicoding?") } }
  17. NavigationLink iOS Developer NavigationView { List(dicodingMembers) { member in NavigationLink

    { DetailView(member: member) } label: { Text(member.name) } }.navigationTitle("Member Dicoding") }
  18. iOS 16.0+ NavigationStack iOS Developer NavigationStack { List(dicodingMembers) { member

    in NavigationLink(member.name, value: member) }.navigationDestination(for: Member.self) { member in DetailView(member: member) }.navigationTitle("Member Dicoding") }
  19. iOS 16.0+ NavigationSplitView iOS Developer NavigationSplitView { List(dicodingMembers, selection: $selectedMember)

    { member in NavigationLink(member.name, value: member) }.navigationTitle("Member Dicoding") } detail: { if let member = selectedMember { DetailView(member: member) } else { Text("Nothing Selected.") } }
  20. TabView iOS Developer TabView { Tab("Member", systemImage: "graduationcap") { MemberView()

    } Tab("Academy", systemImage: "books.vertical") { AcademyView() }.badge(4) Tab("Account", systemImage: "person.crop.circle.fill") { AccountView() }.badge("!") }
  21. Scene Architecture iOS Developer @main struct DicodingApp: App { var

    body: some Scene { WindowGroup { ContentView() } } }
  22. Scene Architecture iOS Developer @main struct DicodingApp: App { var

    body: some Scene { WindowGroup { ContentView() } } }
  23. Scene Architecture iOS Developer @main struct DicodingApp: App { var

    body: some Scene { WindowGroup { ContentView() } } }
  24. Scene Architecture iOS Developer @main struct DicodingApp: App { var

    body: some Scene { WindowGroup { ContentView() } } }
  25. View Lifecycle Events iOS Developer onAppear(perform:) any time the view

    appears on screen onDisappear(perform:) when a view disappears from screen active inactive
  26. task(priority:_:) execute asynchronously before the view appears on screen View

    Lifecycle Events iOS Developer onAppear(perform:) any time the view appears on screen onDisappear(perform:) when a view disappears from screen active inactive
  27. Example iOS Developer @State private var isPlaying: Bool = false

    var body: some View { VStack { Text("Apakah kamu menyukai Coding?") .padding() Button(action: { self.isLove.toggle() // false -> true }) { Image(systemName: isLove ? "heart.fill" : "heart") } } }
  28. Example iOS Developer struct ContentView: View { @State private var

    isLove: Bool = false var body: some View { VStack { Text("Apakah kamu menyukai Coding?") .padding() LoveButton(isLove: $isLove) } } } struct LoveButton: View { @Binding var isLove: Bool var body: some View { Button(action: { self.isLove.toggle() }) { Image(systemName: isLove ? "heart.fill" : "heart") } } }
  29. Observable Class iOS Developer class DataModel: ObservableObject { @Published var

    name = "Some Name" @Published var isEnabled = false }
  30. Observable Class iOS Developer class DataModel: ObservableObject { @Published var

    name = "Some Name" @Published var isEnabled = false }
  31. Observable Class iOS Developer class DataModel: ObservableObject { @Published var

    name = "Some Name" @Published var isEnabled = false } struct MyView: View { @StateObject private var model = DataModel() var body: some View { Text(model.name) } }
  32. Observable Class iOS Developer class DataModel: ObservableObject { @Published var

    name = "Some Name" @Published var isEnabled = false } struct MyView: View { @StateObject private var model = DataModel() var body: some View { Text(model.name) } }
  33. struct MyView: View { @StateObject private var model = DataModel()

    var body: some View { Text(model.name) MySubView(model: model) } } Observable Class iOS Developer class DataModel: ObservableObject { @Published var name = "Some Name" @Published var isEnabled = false }
  34. struct MyView: View { @StateObject private var model = DataModel()

    var body: some View { Text(model.name) MySubView(model: model) } } Observable Class iOS Developer class DataModel: ObservableObject { @Published var name = "Some Name" @Published var isEnabled = false } struct MySubView: View { @ObservedObject var model: DataModel var body: some View { Toggle("Enabled", isOn: $model.isEnabled) } }
  35. Observable Class iOS Developer class DataModel: ObservableObject { @Published var

    name = "Some Name" @Published var isEnabled = false } struct MyView: View { @StateObject private var model = DataModel() var body: some View { Text(model.name) MySubView(model: model) } } struct MySubView: View { @ObservedObject var model: DataModel var body: some View { Toggle("Enabled", isOn: $model.isEnabled) } }
  36. Observable Class iOS Developer @Published name @Published isEnabled DataModel @StateObject

    var model MySubView(model: model) MyView @ObservedObject var model MySubView
  37. struct MyView: View { @StateObject private var model = DataModel()

    var body: some View { Text(model.name) MySubView(model: model) } } Observable Class iOS Developer class DataModel: ObservableObject { @Published var name = "Some Name" @Published var isEnabled = false } struct MySubView: View { @ObservedObject var model: DataModel var body: some View { Toggle("Enabled", isOn: $model.isEnabled) } }
  38. struct MyView: View { @StateObject private var model = DataModel()

    var body: some View { Text(model.name) MySubView() .environmentObject(model) } } struct MySubView: View { @ObservedObject var model: DataModel var body: some View { Toggle("Enabled", isOn: $model.isEnabled) } } class DataModel: ObservableObject { @Published var name = "Some Name" @Published var isEnabled = false } Environment Object iOS Developer class DataModel: ObservableObject { @Published var name = "Some Name" @Published var isEnabled = false }
  39. struct MyView: View { @StateObject private var model = DataModel()

    var body: some View { Text(model.name) MySubView() .environmentObject(model) } } struct MySubView: View { @ObservedObject var model: DataModel var body: some View { Toggle("Enabled", isOn: $model.isEnabled) } } class DataModel: ObservableObject { @Published var name = "Some Name" @Published var isEnabled = false } Environment Object iOS Developer class DataModel: ObservableObject { @Published var name = "Some Name" @Published var isEnabled = false }
  40. MySubView() .environmentObject(model) Observable Class iOS Developer @Published name @Published isEnabled

    DataModel @StateObject var model MySubView(model: model) MyView @ObservedObject var model MySubView @EnvironmentObject var model MySubView
  41. Quiz #2 DevCoach 173 Pada state manakah pemanggilan data dari

    API/Networking dilakukan dalam pengembangan aplikasi dengan SwiftUI?
  42. • Concurrency Model yang Diperbarui a. Global Actors b. Task

    Cancellation c. AsyncSequence Enhancements • Memperbaiki Penggunaan Memori a. Ownership Model • Peningkatan pada Error Handling • Swift Testing Swift 6.0 iOS Developer
  43. Swift Testing is a new framework with expressive and intuitive

    APIs that make testing your Swift code a breeze. Swift Testing iOS Developer
  44. SwiftData makes it easy to persist data using declarative code.

    You can query and filter data using regular Swift code. And itʼs designed to integrate seamlessly with SwiftUI. Swift Data iOS Developer
  45. Swift Charts is a powerful and concise SwiftUI framework you

    can use to transform your data into informative visualizations. Swift Chart iOS Developer
  46. iOS Developer SwiftUI adalah framework modern Apple yang memudahkan pembuatan

    UI aplikasi dengan sintaksis ringkas dan fitur Preview real-time.