SwiftUI App/Scene - SwiftUI App/Scene の実際

0fb0b8c6eecbc8e0a3981501f6a6fea6?s=47 notoroid
September 30, 2020

SwiftUI App/Scene - SwiftUI App/Scene の実際

札幌iPhoneアプリ開発懇談会2020年9月勉強会資料。

内容: Xcode12で新規プロジェクトのオプションにLife Cycleが追加され新たに選べる選択肢にSwiftUI App Life Cycleを選択可能となりました。新たな選択肢は簡潔なコードが売りですがその実際について説明します。

#iOS #SwiftUI #Swift #WWDC2020

0fb0b8c6eecbc8e0a3981501f6a6fea6?s=128

notoroid

September 30, 2020
Tweet

Transcript

  1. 4XJGU6*"QQ4DFOF 4XJGU6*"QQ4DFOFͷ࣮ࡍ

  2. ࣗݾ঺հ

  3. ೳొཁ !OPUPSPJE w J04ΞϓϦ։ൃऀ w ԰߸͍Γ·͢ిࢉاը w !OPUPSPJE w !JSJNBTV

    w ࠷ۙͷಈ޲ w ϒϩά࡮৽͠·ͨ͠
  4. ॆిใࠂ͞Μ #BUUFSFDFJWFS w όοςϦʔϞχλʔ ϢʔςΟϦςΟʔ  w ࠷େ୆ ࣮ػ ϦϞʔτ୆

     w ख࣋ͪͷJ1IPOF͔Βଞʹ͍࣋ͬͯΔ J1IPOF J1BEͳͲͷػثͷόοςϦʔঢ়ଶ֬ ೝՄೳ w ࣗ୐ʹ͋ΔJ1IPOFͷόοςϦʔঢ়ଶ֬ೝՄ ೳ
  5. ॆిใࠂ͞Μ #BUUFSFDFJWFS w "QQMF8BUDIରԠ w $PNQMJDBUJPOTରԠ w ॆి׬ྃ௨஌ w ॆి׬ྃΛ఻͑ͯ͘ΕΔ௨஌Λ௥Ճ

    w ҎԼʹࢦఆ͢Δ͜ͱͰόοςϦʔ ΛέΞ͢Δ͜ͱ͕Մೳ w Կ͔ͱߴ͍J1IPOFΛ௕࣋ͪͤ͞Δͷʹ༗ ༻
  6. ॆిใࠂ͞Μ #BUUFSFDFJWFS /FX ΢ΟδοτʹରԠ͠·ͨ͠ J04ʙ 4NBMM .FEJVN

  7. ࿩͢͜ͱ w 4XJGU6*"QQ4DFOF w 6*4DFOF%FMFHBUF w 6*)PTUJOH$POUSPMMFS

  8. ࿩͞ͳ͍͜ͱ w NBD04ͷϥΠϑαΠΫϧৄࡉ

  9. ୊໨ w ΞϓϦΛJ04ରԠ͠·ͨ͠ w "QQ%FMFHBUF੔ཧͷྺ࢙ w 4XJGU6*"QQ4DFOFͷ࣮ࡍ w ·ͱΊ

  10. ΞϓϦΛJ04ରԠ͠·ͨ͠

  11. ΞϓϦΛJ04ରԠ͠·ͨ͠ w J04ͰͷϨΠΞ΢τ่ΕΛमਖ਼ w 8JEHFU,JUΛαϙʔτ 4NBMM .FEJVN  w Ͱ͖Δ͜ͱ͸5PEBZ&YUFOTJPOͱେࠩͳ͠

    w J04Ҏ্ͷ04Ͱಈ࡞
  12. J04ͷػೳ͕ັྗͳΒ J04Ҏ߱͸੾Γࣺ͔ͯͨ΋

  13. ݁Ռͱͯ͠ J04αϙʔτܧଓ

  14. J04ҎલΛ੾ΓࣺͯΔͭ΋ΓͰ͍͕ͨ ͦͷඞཁ͕ͳ͔ͬͨͱ͍͏ͷ͕ ࠓճͷ͓୊

  15. "QQ%FMFHBUF੔ཧͷྺ࢙

  16. ୺తʹ͍͏ͱ

  17. "QQ%FMFHBUFʹ՝ͤΒΕͨ੹຿Λ੔ཧ ϚϧνϓϥοτϑΥʔϜʹ޲͚ͯௐ੔͕ J04͔ΒJ04ʹ͔͚࣮ͯࢪ

  18. "QQ%FMFHBUFͷ੹຿ Ћ w ΞϓϦͷΤϯτϦʔϙΠϯτ &OUSZ1PJOU  w ΞϓϦΠϕϯτͷัଊ "QQMJDBUJPO&WFOU 

    w ը໘ͷߏங 4DSFFO#VJME  w ЋϚϧνϓϥοτϑΥʔϜԽ .VMUJQMBUGPSN
  19. ϑΝΠϧ͔ΒݟΔ੔ཧͷ࣌ܥྻ 0CKFDUJWF$ J04 J04 J04 NBJON "QQ%FMFHBUFI "QQ%FMFHBUFN "QQ%FMFHBUFTXJGU "QQ%FMFHBUFTXJGU

    4DFOF%FMFHBUFTXJGU "QQ%FMFHBUFTXJGU "QQTXJGU 1BTU 'VUVSF
  20. &OUSZ1PJOU 0CKFDUJWF$ J04 J04 J04 NBJON "QQ%FMFHBUFI "QQ%FMFHBUFN "QQ%FMFHBUFTXJGU "QQ%FMFHBUFTXJGU

    4DFOF%FMFHBUFTXJGU "QQ%FMFHBUFTXJGU "QQTXJGU 1BTU 'VUVSF &OUSZ1PJOU &OUSZ1PJOU &OUSZ1PJOU &OUSZ1PJOU
  21. "QQMJDBUJPO&WFOU 0CKFDUJWF$ J04 J04 J04 NBJON "QQ%FMFHBUFI "QQ%FMFHBUFN "QQ%FMFHBUFTXJGU "QQ%FMFHBUFTXJGU

    4DFOF%FMFHBUFTXJGU "QQ%FMFHBUFTXJGU "QQTXJGU 1BTU 'VUVSF &OUSZ1PJOU &OUSZ1PJOU &OUSZ1PJOU &OUSZ1PJOU "QQMJDBUJPO&WFOU "QQMJDBUJPO&WFOU "QQMJDBUJPO&WFOU "QQMJDBUJPO&WFOU
  22. 4DSFFO#VJME 0CKFDUJWF$ J04 J04 J04 NBJON "QQ%FMFHBUFI "QQ%FMFHBUFN "QQ%FMFHBUFTXJGU "QQ%FMFHBUFTXJGU

    4DFOF%FMFHBUFTXJGU "QQ%FMFHBUFTXJGU "QQTXJGU 1BTU 'VUVSF &OUSZ1PJOU &OUSZ1PJOU &OUSZ1PJOU &OUSZ1PJOU "QQMJDBUJPO&WFOU "QQMJDBUJPO&WFOU "QQMJDBUJPO&WFOU "QQMJDBUJPO&WFOU 4DSFFO#VJME 4DSFFO#VJME 4DSFFO#VJME 4DSFFO#VJME
  23. .VMUJQMBUGPSN 0CKFDUJWF$ J04 J04 4XJGU6* NBJON "QQ%FMFHBUFI "QQ%FMFHBUFN "QQ%FMFHBUFTXJGU "QQ%FMFHBUFTXJGU

    4DFOF%FMFHBUFTXJGU "QQ%FMFHBUFTXJGU "QQTXJGU 1BTU 'VUVSF &OUSZ1PJOU &OUSZ1PJOU &OUSZ1PJOU &OUSZ1PJOU "QQMJDBUJPO&WFOU "QQMJDBUJPO&WFOU "QQMJDBUJPO&WFOU "QQMJDBUJPO&WFOU 4DSFFO#VJME 4DSFFO#VJME 4DSFFO#VJME 4DSFFO#VJME .VMUJQMBUGPSN
  24. 4XJGU6*ʹΑͬͯ"QQ%FMFHBUF͸ ΞϓϦΠϕϯτΛ؅ཧ͢Δ͚ͩͷ໾ׂʹ

  25. 4XJGU6*"QQ4DFOFͷ࣮ࡍ

  26. 4XJGU6*"QQ-JGF$ZDMF w J04͔Βొ৔ w "QQ%FMFHBUF4DFOF%FMFHBUFͷ࢓૊ΈΛ؆ܿʹهड़Ͱ͖Δ w 6*,JUͷΞϓϦΠϕϯτରԠͷͨΊ@ఆ͕ٛ༻ҙ͞Εͨ w !6*"QQMJDBUJPO%FMFHBUF"EBQUPS

  27. import SwiftUI @main struct FooApp: App { @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate

    var body: some Scene { WindowGroup { Text("͜ͷը໘͸Ұ࣌తͳ΋ͷͰ͢") .padding() } } }
  28. J04·Ͱͷ൥ࡶ͔͞Β J04͔Βͷ؆ܿ͞͸ མࠩͷ෼ɺΠϯύΫτ͸େ͖͍

  29. "QQ%FMFHBUFͱ4DFOF%FMFHBUFΛ ஔ׵Ͱ͖Δͱ·Ͱॻ͘#MPH౤ߘ·Ͱొ৔

  30. SwiftUI’s New App Lifecycle and Replacements for AppDelegate and SceneDelegate

    in iOS 14 IUUQTMJOLNFEJVNDPNDB,&9Q3
  31. ͸ͨͯͦ͠͏͔

  32. ͜ͱͷൃ୺

  33. 4XJGU6*"QQ4DFOFͰ ࣗ࡞ΞϓϦ ॆిใࠂ͞Μ ͷ ػೳʹରԠ͍ͨ͠

  34. 4XJGU6*"QQ4DFOFͰ࣮ݱ͍ͨ͠6*,JUػೳ ᶃγϣʔτΧοτػೳ ᶄ4UBUVTCBS4UZMF

  35. 4XJGU6*"QQ4DFOFͰ࣮ݱ͍ͨ͠6*,JUػೳ ᶃγϣʔτΧοτػೳ ᶄ4UBUVTCBS4UZMF "QQ%FMFHBUFͰγϣʔτΧοτొ࿥ 4DFOF%FMFHBUFͷ೿ੜΫϥεͰΠϕϯτड͚औΓ 6*)PTUJOH$POUSPMMFSͷ೿ੜΫϥεͰ εςʔλεόʔελΠϧࢦఆ

  36. 4XJGU6*"QQ4DFOFͰ࣮ݱ͍ͨ͠6*,JUػೳ ᶃγϣʔτΧοτػೳ ᶄ4UBUVTCBS4UZMF "QQ%FMFHBUFͰγϣʔτΧοτొ࿥ 4DFOF%FMFHBUFͷ೿ੜΫϥεͰΠϕϯτड͚औΓ 6*)PTUJOH$POUSPMMFSͷ೿ੜΫϥεͰ εςʔλεόʔελΠϧࢦఆ

  37. ͭͷػೳڞʹ 4XJGU6*ະରԠ

  38. ͦ͜Ͱ൑໌ͨ͠఺

  39. 4XJGU6*"QQ4DFOFͰ΋ 4DFOF%FMFHBUFػೳ͸ซଘ͍ͯ͠Δ

  40. 4XJGU6*"QQ4DFOFͱซଘ͢Δ4DFOF%FMFHBUF w 4DFOF%FMFHBUFͷػೳ͸4XJGU6*্Ͱ΋༗ޮ w 4DFOF%FMFHBUFͷ೿ੜΫϥε͸"QQ%FMFHBUFͷ4DFOF੾Γ෼͚Πϕϯ τͰੜ੒Մೳ w 6*)PTUJOH$POUSPMMFSͷ೿ੜΫϥε͸4DFOF%FMFHBUFͰͷը໘ߏங࣌ʹ ੜ੒Մೳ w

    4DFOF%FMFHBUFͰը໘ߏங͸4DFOF"QQͰͷը໘ߏஙΛ্ॻ͖Ͱ͖Δ
  41. αϯϓϧίʔυ HJUIVCDPNOPUPSPJE 4XJGU6*-JGF$ZDMF0WFSSJEF

  42. 4XJG6*"QQ4DFOF࠾༻ϓϩδΣΫτ΁ ௥ՃͰ4DFOF%FMFHBUFରԠ͢Δʹ͸ w 9DPEFͷϓϩδΣΫτ΢ΟβʔυͰJ04 ΞϓϦςϯϓϨʔτͷιʔείʔυΛ Ҡ২͢Ε͹0, w *OUFSGBDF4XJGU6* w -BOHVBHF4XJGU

    w -JGF$ZDMF6*,JU
  43. 4DFOF%FMFHBUF 6*4DFOF%FMFHBUF w J04͔Βಋೖ͞Εͨը໘ؔ܎Πϕϯτัଊ w ΞϓϦ಺ʹผʑͷίϯςΩετΛ࣋ͭ4DFOF͕ଘࡏ͢Δͱ͍͏ߟ͑ w ίϯςΩετྫυΩϡϝϯτϑΝΠϧɺ63- w J1BE04ͷΑ͏ͳෳ਺υΩϡϝϯτѻ͏ΞϓϦͰ͸ͳ͍ͱϐϯͱ͜ͳ͍

  44. 4DFOF%FMFHBUFͷੜ੒ w 4DFOF%FMFHBUFϑΝΠϧΛ௥Ճ͢Δ w JOGPQMJTUʹ4DFOFఆٛͷهड़͢Δ w "QQ%FMFHBUF΁ͷ4DFOFੜ੒Πϕϯτͷ௥Ճ w "QQ%FMFHBUFͰͷը໘ੜ੒ॲཧΛ4DFOF%FMFHBUFଆ΁Ҡৡ͢Δ

  45. 4DFOF%FMFHBUFಠಛͳهड़ᶃ

  46. 4DFOF%FMFHBUFಠಛͳهड़ᶄ import UIKit class AppDelegate: UIResponder, UIApplicationDelegate { // MARK:

    UISceneSession Lifecycle func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { // Called when a new scene session is being created. // Use this method to select a configuration to create the new scene with. return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) } func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) { } } "QQ%FMFHBUFͰͷ4DFOFੜ੒Πϕϯτίʔυ
  47. 4DFOF%FMFHBUFಠಛͳهड़ᶅ import UIKit class SceneDelegate: UIResponder, UIWindowSceneDelegate { func scene(_

    scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { } func sceneDidDisconnect(_ scene: UIScene) { } func windowScene(_ windowScene: UIWindowScene, performActionFor shortcutItem: UIApplicationShortcutItem, completionHandler: @escaping (Bool) -> Void) { } } γϣʔτΧοτΠϕϯτΛิ଍͢Δ4DFOF%FMFHBUFͷίʔυ
  48. None
  49. ·ͱΊ w J04·Ͱͷॏ੹Λ୲͖ͬͯͨ"QQ%FMFHBUF͸੔ཧ͞Ε·ͨ͠ w .VMUJQMBUGPSN·Ͱݟਾ͑ͨͷ͕4XJGU6*"QQ4DFOFͷಋೖ w 4XJGU6*"QQ4DFOFΛ࠾༻ͯ͠΋1MBUGPSN͝ͱͷϥΠϑαΠΫϧ ͸݈ࡏ