iOSDC Japan 2024
レギュラートーク(20分)

SwiftUI時代のsnapshot testing

417_72ki 417.72KI 417_72ki

UIテストの代替手段として、意図しないデザインやレイアウト崩れを検出できるsnapshot testが広く採用されつつあります。
一方、Scrollableな画面はそのままでは画面全体のsnapshotが撮れないため画面外の要素で検知漏れが発生するなどFlaky Testになりがちです。

UIKitの時代はScrollView内部のviewを直接取得してsnapshotを撮るといったことが可能でした。
しかし、SwiftUIではViewというprotocolで隠蔽されるため正攻法ではScrollViewを取得することができません。

本トークでは、UIKitからSwiftUIへ移行する過程で躓いたScrollViewのsnapshot test問題を力技で解決した後、プライベートAPIを使ってその力技を不要にするべく試行錯誤した話をします。

話すこと

  • UIKitでScrollView内部のsnapshotを撮る方法
  • SwiftUIでScrollView内部のsnapshotを撮るために行った力技
  • プライベートAPI(_VariadicView)を使ってScrollViewの中身を取り出す方法

話さないこと

  • snapshot testのライブラリについて
  • _VariadicViewそのものの深堀り