【iOSDC Japan 2023 レポート】「UIのブラックボックスを探る」を聞いてきた。
はじめに
年に一度のiOSエンジニアの為のお祭り iOSDC Japan 2023に参加しています。
せっかくなので、参加したセッションのレポートを書きたいと思います。
UIのブラックボックスを探る
登壇者
概要
昨今、iOSの標準アプリではUIKitで提供されていないUIコンポーネントが多く使われ、それらを再現することは難しいと言えます。
さらにSwiftUIは実際のビューを隠してしまうため、我々は与えられたUIに囚われています。
本トークでは、美しいUIを再現するために必要なリバースエンジニアリングの基礎知識について解説します。
まず、画面から分かることについて説明し、UIの階層構造を覗く方法を紹介します。
また、プライベートAPIを使うことでUIの内部情報を取得する方法についても触れます。
これらのテクニックをマスターすることで、美しいUIを再現するだけでなく、UIの設計思想や技術的な側面を理解することができます。
引用: fortee
資料
感想
非常に面白いUIの仕様を発掘するお話でした。
標準AppleのUIは暗黙の仕様があり、何も考えないでカスタムUIを作ってしまうとその仕様を満たしていなかったり、品質が悪かったりするとのこと。
カスタムNavigationを作ると、スワイプで前の画面に戻ってくれないとかありますよね、、。
Apple標準アプリや標準コンポーネントが一つの品質のベンチマークになり、今一度、そのカスタムUIは本当に必要なの?標準でなぜダメなのか?カスタムUIにしてしまうことで出来なくなってしまうことを考えてみるのが大事。
どうやって、その仕様を知るかについてもセッション内で詳しく説明があり、非常に参考になりました。でも、やはり標準コンポーネントと同じような品質のものを作るのは非常に難しいので、トレードオフを意識して無駄にカスタムUIを作らない強い気持ちを持ちましょう。
また、AppleのアプリではOSアップデートによってデザインが変わることも多々あるので、カスタムUIを作るとそこに追従していかなければならず、ほっておくと古臭いデザインのままになる。そこに発生するコストのことも頭に入れておきましょう。
SwiftUIだとまだ機能が満たないコンポーネントがあったりして自作しがちですか、「無いから作る」ではなく、「無いなら使わない」という選択肢を持っておくことも大事そうです。
下記のオープンソースのものはとても品質が高いのでUIについて参考になるそうです。
- GitHub - scenee/FloatingPanel
- GutHub - iDevelopper/PBPopupController
- GitHub - omaralbeik/Drops
- GitHub - SvenTiigi/WhatsNewKit
- GitHub - usagimaru/FloatingSwitch
- GitHub - noppefoxwolf/ColorPicker
おわりに
標準アプリやコンポーネントをもっと沢山触って行きます。
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」を聞いてきた。
- 「なぜ、弊社はFlutterを捨ててネイティブ化(Swift / Kotlin)にコミットしたのか」を聞いてきた。
- 基礎から理解する!来年春までに対応すべきプライバシーの変更点
- 「正規表現を”微分”する!?爆速で自作できる正規表現エンジン」を聞いてきた。
- 「一般的な通信でも使えるバックグランドURLSessionの活用方法」を聞いてきた。
- 「SwiftUIでの非同期処理データの状態管理を考える」を聞いてきた。