$30 off During Our Annual Pro Sale. View Details »

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

notoroid
September 30, 2020

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

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

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

#iOS #SwiftUI #Swift #WWDC2020

notoroid

September 30, 2020
Tweet

More Decks by notoroid

Other Decks in Technology

Transcript

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

    View Slide

  2. ࣗݾ঺հ

    View Slide

  3. ೳొཁ !OPUPSPJE

    w J04ΞϓϦ։ൃऀ
    w ԰߸͍Γ·͢ిࢉاը
    w !OPUPSPJE
    w !JSJNBTV
    w ࠷ۙͷಈ޲
    w ϒϩά࡮৽͠·ͨ͠

    View Slide

  4. ॆిใࠂ͞Μ #BUUFSFDFJWFS

    w όοςϦʔϞχλʔ ϢʔςΟϦςΟʔ

    w ࠷େ୆ ࣮ػϦϞʔτ୆

    w ख࣋ͪͷJ1IPOF͔Βଞʹ͍࣋ͬͯΔ
    J1IPOF J1BEͳͲͷػثͷόοςϦʔঢ়ଶ֬
    ೝՄೳ
    w ࣗ୐ʹ͋ΔJ1IPOFͷόοςϦʔঢ়ଶ֬ೝՄ

    View Slide

  5. ॆిใࠂ͞Μ #BUUFSFDFJWFS

    w "QQMF8BUDIରԠ
    w $PNQMJDBUJPOTରԠ
    w ॆి׬ྃ௨஌
    w ॆి׬ྃΛ఻͑ͯ͘ΕΔ௨஌Λ௥Ճ
    w ҎԼʹࢦఆ͢Δ͜ͱͰόοςϦʔ
    ΛέΞ͢Δ͜ͱ͕Մೳ
    w Կ͔ͱߴ͍J1IPOFΛ௕࣋ͪͤ͞Δͷʹ༗

    View Slide

  6. ॆిใࠂ͞Μ #BUUFSFDFJWFS

    /FX
    ΢ΟδοτʹରԠ͠·ͨ͠ J04ʙ

    4NBMM .FEJVN

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  11. ΞϓϦΛJ04ରԠ͠·ͨ͠
    w J04ͰͷϨΠΞ΢τ่ΕΛमਖ਼
    w 8JEHFU,JUΛαϙʔτ 4NBMM .FEJVN

    w Ͱ͖Δ͜ͱ͸5PEBZ&YUFOTJPOͱେࠩͳ͠
    w J04Ҏ্ͷ04Ͱಈ࡞

    View Slide

  12. J04ͷػೳ͕ັྗͳΒ
    J04Ҏ߱͸੾Γࣺ͔ͯͨ΋

    View Slide

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

    View Slide

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

    View Slide

  15. "QQ%FMFHBUF੔ཧͷྺ࢙

    View Slide

  16. ୺తʹ͍͏ͱ

    View Slide

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

    View Slide

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

    w ΞϓϦΠϕϯτͷัଊ "QQMJDBUJPO&WFOU

    w ը໘ͷߏங 4DSFFO#VJME

    w ЋϚϧνϓϥοτϑΥʔϜԽ .VMUJQMBUGPSN

    View Slide

  19. ϑΝΠϧ͔ΒݟΔ੔ཧͷ࣌ܥྻ
    0CKFDUJWF$
    J04
    J04
    J04
    NBJON "QQ%FMFHBUFI "QQ%FMFHBUFN
    "QQ%FMFHBUFTXJGU
    "QQ%FMFHBUFTXJGU
    4DFOF%FMFHBUFTXJGU
    "QQ%FMFHBUFTXJGU
    "QQTXJGU
    1BTU
    'VUVSF

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  24. 4XJGU6*ʹΑͬͯ"QQ%FMFHBUF͸
    ΞϓϦΠϕϯτΛ؅ཧ͢Δ͚ͩͷ໾ׂʹ

    View Slide

  25. 4XJGU6*"QQ4DFOFͷ࣮ࡍ

    View Slide

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

    View Slide

  27. import SwiftUI
    @main
    struct FooApp: App {
    @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
    var body: some Scene {
    WindowGroup {
    Text("͜ͷը໘͸Ұ࣌తͳ΋ͷͰ͢")
    .padding()
    }
    }
    }

    View Slide

  28. J04·Ͱͷ൥ࡶ͔͞Β
    J04͔Βͷ؆ܿ͞͸
    མࠩͷ෼ɺΠϯύΫτ͸େ͖͍

    View Slide

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

    View Slide

  30. SwiftUI’s New App Lifecycle and Replacements for AppDelegate and SceneDelegate
    in iOS 14
    IUUQTMJOLNFEJVNDPNDB,&9Q3

    View Slide

  31. ͸ͨͯͦ͠͏͔

    View Slide

  32. ͜ͱͷൃ୺

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  38. ͦ͜Ͱ൑໌ͨ͠఺

    View Slide

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

    View Slide

  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Ͱͷը໘ߏஙΛ্ॻ͖Ͱ͖Δ

    View Slide

  41. αϯϓϧίʔυ
    HJUIVCDPNOPUPSPJE
    4XJGU6*-JGF$ZDMF0WFSSJEF

    View Slide

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

    View Slide

  43. 4DFOF%FMFHBUF 6*4DFOF%FMFHBUF

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

    View Slide

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

    View Slide

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

    View Slide

  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) {
    }
    }
    "QQ%FMFHBUFͰͷ4DFOFੜ੒Πϕϯτίʔυ

    View Slide

  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ͷίʔυ

    View Slide

  48. View Slide

  49. ·ͱΊ
    w J04·Ͱͷॏ੹Λ୲͖ͬͯͨ"QQ%FMFHBUF͸੔ཧ͞Ε·ͨ͠
    w .VMUJQMBUGPSN·Ͱݟਾ͑ͨͷ͕4XJGU6*"QQ4DFOFͷಋೖ
    w 4XJGU6*"QQ4DFOFΛ࠾༻ͯ͠΋1MBUGPSN͝ͱͷϥΠϑαΠΫϧ
    ͸݈ࡏ

    View Slide