【iOSDC Japan 2023 レポート】「Xcode Previewを気軽に利用するためのDI戦略」を聞いてきた。
はじめに
年に一度のiOSエンジニアの為のお祭り iOSDC Japan 2023に参加しています。
せっかくなので、参加したセッションのレポートを書きたいと思います。
Xcode Previewを気軽に利用するためのDI戦略
登壇者
- mtj_jさん
概要
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
- 「タクシーアプリの多言語対応・ローカライズにおける課題と解決策」を聞いてきた。
- 「Appleにおけるプライバシーの全容を把握する」を聞いてきた。
- 「SwiftUIの進化についていくためにやったこと」を聞いてきた。
- 「SharePlayの歴史と進化 - そしてvisionOSへ」を聞いてきた。
- 「UIKit ベースの Custom UIContentConfiguration API を用いた複雑なカスタムセルの作り方」を聞いてきた。
Day1
- 「TextKit 2 時代の iOS のキーボードとテキスト入力と表示のすべて」を聞いてきた。
- 「PushToTalkで作るトランシーバー」を聞いてきた。
- 「6年間運用したiOSアプリのリアーキテクトについて具体的に解説」を聞いてきた。
- 「Mastering SwiftSyntax」を聞いてきた。
- 「配信アプリのためのリアルタイムプッシュ通知ぼかしの夢 〜低負荷で高速なプライバシー保護を目指して」を聞いてきた。
- 「macOSで自分のカメラを作ってみよう – Core Media IO Extension」を聞いてきた。
- 基礎から理解する!来年春までに対応すべきプライバシーの変更点
- 「UIのブラックボックスを探る」を聞いてきた。
- 「なぜ、弊社はFlutterを捨ててネイティブ化(Swift / Kotlin)にコミットしたのか」を聞いてきた。
- 「正規表現を”微分”する!?爆速で自作できる正規表現エンジン」を聞いてきた。
- 「一般的な通信でも使えるバックグランドURLSessionの活用方法」を聞いてきた。
- 「SwiftUIでの非同期処理データの状態管理を考える」を聞いてきた。