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

iOSDC2022 - SwiftUI in UIKit で開発する世界

h.crane
September 12, 2022

iOSDC2022 - SwiftUI in UIKit で開発する世界

[Conference]
iOSDC Japan 2022

[Title]
SwiftUI in UIKit で開発する世界

[YouTube]
https://www.youtube.com/watch?v=6nWnQVRVcs0

[Proposal]
https://fortee.jp/iosdc-japan-2022/proposal/d824fc5d-191a-4864-899a-339d830ed182

h.crane

September 12, 2022
Tweet

More Decks by h.crane

Other Decks in Technology

Transcript

  1.                <Company>                ・Rakuten Group, Inc          <Application>          ・Rakuma

       <Role>    ・iOS Developer    ・Developer Relations               <Account>                ・Twitter:@hcrane14
  2. 目次
 序章 SwiftUIに対応しよう
 - ラクマのアプリとリファクタリング 
 
 1章 SwiftUIの導入ライン
 -

    SwiftUIのデメリット
 
 2章 UIKitからSwiftUIへの移行
 - アーキテクチャー問題
 - 双方向のデータフロー実装
 - 画面のみを移行するケース
 3章 UIKitと画面遷移
 - UIHostingControllerの役割
 - Coordinatorパターンとその拡張 
 - FlowControllerについて
 
 終章
 - 開発のベストプラクティス
 
 その他・参考文献

  3. Rakuma iOS App - UIHostingController Percentage 
 ※1 2022/7 時点


    ※2 画面数の割合ではないので注意

  4. 低
 難易度
 View + 遷移
 View + ロジック
 View 全体


    View パーツ
 高
 選択したライン

  5. UseCase
 Repository
 DataStore
 APIClient
 UIKit
 MVP + Clean Architecture 


    ViewController 
 Presenter
 Presenter Protocol 
 ViewController Protocol
 UseCase Protocol 
 Repository Protocol 
 Data Layer Protocol

  6. UseCase
 Repository
 DataStore
 APIClient
 UIKit
 MVP + Clean Architecture 


    ViewController 
 Presenter
 UseCase
 Repository
 DataStore
 APIClient
 Presenter Protocol 
 ViewController Protocol
 Unidirectional Data Flow
  7. 低
 難易度
 View + 遷移
 View + ロジック
 View 全体


    View パーツ
 高
 軽めに導入ライン

  8. 低
 難易度
 View + 遷移
 View + ロジック
 View 全体


    View パーツ
 高
 選択したライン

  9. UIViewController UIViewController UIHostingController SwiftUI View ViewModel Domain / Data Layer

    UIHostingController SwiftUI View ViewModel Domain / Data Layer Good
 Bad

  10. UIHostingController SwiftUI View ViewModel Processing Flow
 ViewModel to UIHostingController 


    Output
 Initialize
 Domain / Data Layer Domain / Data Layer
  11. > One of the first rules a developer learns is

    to separate the code handling the data and the user interface. The link between the data and UI is usually done in a controller, or, in iOS, a view controller. In most projects, view controllers are interconnected and can be very dependent with one another. That’s where the flow controller comes in. It serves as a link between view controllers. It’s the brain of the app.
 Quote: https://ocollet.com/2014/02/06/flow-controller/