【iOSDC Japan 2023 レポート】「Xcode Previewを気軽に利用するためのDI戦略」を聞いてきた。

2023.09.05

はじめに

年に一度のiOSエンジニアの為のお祭り iOSDC Japan 2023に参加しています。

せっかくなので、参加したセッションのレポートを書きたいと思います。

Xcode Previewを気軽に利用するためのDI戦略

登壇者

概要

Xcode Previewでは静的なUIだけでなく、実際にUIを操作して簡単な動作確認ができます。

Xcode Previewを本格的に使うにはDependency Injection(DI)をする必要がありますが、SwiftUIのViewへのDIはアプリのトップレベルから依存をパスする、所謂バケツリレーが必要で、実装コストが大きくなってしまいます。

一方@Environment(Object)だとバケツリレーせずにDIできますが、コンパイラの力を借りることができず、Xcode Previewへのハードルが上がります。

そこでこのトークでは、Xcode Previewのことを最優先に考え、開発者が「いつでも」「気軽に」「安全に」Xcode Previewを利用できるDI戦略を紹介します。

このトークを通じて、みなさんがもっと気軽にXcode Previewを使い倒せることを目指します。

引用: fortee

資料

感想

発表のスライドはSwiftUIで作成されていて、その時点ですごいですw

SwiftUIでスライドを作成できるSlideKitはOSS化もされており、今度試してみたい。

今回は、開発効率を上げる為にXcode Previewを気軽に使用する為の方法についてのお話でした。

Xcode Previewの問題点として、APIと連携するような画面の場合、

  • プレビュー描画時にAPIがコールされる
  • 失敗、成功、呼び出し中のUIステータスがコントロールできない

その場合には、Initializer Injectionを使用して、モックのClientを渡すことで解決できる。

確かにCoreDataとかを使っている時にプレビューが上手くいかなくてXcode Previewをコメントアウトしたりすることがあったので非常に参考になりました。

ただ、Initializer Injectionの課題としては、バケツリレーで渡していかないといけない為、画面の数が増えるほど依存の数が増えるといった状態になりかねません。なので、そこはEnvironmentの力を借ります。

Xcode Previewは対象の画面にしか関心はなく、他の画面に関心はないという着眼点を元にDependency Providerという独自で編み出した解決方法について紹介していただけました。

  • DIしたいオブジェクトをまとめたstructを作り、Environmentに渡す
  • 依存解決用のViewを作成する
  • 各Viewのinitではその画面で必要な依存のみを宣言する
  • 他のViewを表示する時は、Dependency Providerを挟んで依存を解決する

これでとてもDI注入が楽になったように感じ、こちらの手法を今度試してみたいです。

また、発表も非常に分かりやすく内容を理解しやすかったです。ありがとうございました。

おわりに

試してみよう SlideKitとDependency Provider

iOSDC 2023 レポート関連

Day0

Day1

Day2