SwiftUIのセッションの内容を確認し、SwiftUI 1のプロジェクトのビルドを試しています。
Podcast 向けにSwiftUIについて話す機会を得たので、話す内容を簡潔にまとめてみます。
1) SwiftUI単体でアプリを構成できるように
SwiftUIの最初のリリースでは画面の一部をSwiftUIに置き換えを実現していたが、セカンドシーズンではアプリの土台そのものをSwiftUIベースで簡潔に記述できる、かつマルチプラットフォームごとに最適な画面を提供できる。
アプリのルートにあたるAppをSwiftUIの形式に無理に合わせる必要はなかったかもしれないが、SwiftUIの構築方法を知っていれば紋切り型にAppも構築できるようになるという意味では非常に有用。とくに初心者にとって当然のものとして取り組むのであれば息をするように玄人よりも欠けるのではないかという可能性すら感じてしまう。
古参のアプリ開発者にもこれは朗報で、iOS13でアプリの基盤であるAppDelegateに加えSceneDelegateが加えられた時の混乱ぶりからSwiftUIで一度リセットされるのは朗報だとおもう。AppDelegateは過去の遺産を引きずりコード入力補助で出てくるメソッドが非奨励だらけで目的のメソッドを探すために一苦労するという状況だったのでSwiftUIを機にリセットされるのはありがたい。
2)新しい予約語
新しい予約後が増えている。@main、@StateObject、@SceneStorage、@AppStorage, @ScaledMetricsと増えている。がSwiftUI 1からの目新しさでというと@StateObject が、SwiftUIのデータフローを改善するもので他はSwiftUIでアプリを構築するために追加されたものと考えればそれほど予約後のインパクトはないかもしれない。
3)包括的なマルチプラットフォーム環境
基本的なセッションを見る限り、ここまで複数のデバイスを包括的にサポートするフレームワークはないのでは?と思わせてくれる。
WWDC2020 で SwiftUI のセッションを見る順番は?
継ぎ足し感があるのはmacOSのSetting Structぐらいで、希望ボタンはツールバー(ToolBar)という名称で再定義している。各プラットフォームで動作する機能をツールバーに列挙し、配置場所を定義することで、配置位置を画面上部かまたは画面下部かを指定するといった仕組みになっている。
MacおよびWindowsで動作するアプリは、メニューに階層状に配置配置されたコマンドが、アプリでできることの字引として機能していたが、SwiftUIではツールバーは機能を集約するものとして再定義されているのが興味深い。
2020/7/8追記 プッシュ通知の登録のようなAppDelegateにしかないDelegateメソッドはどうするかについてはAdapterを使うことで実現できるらしい。 How to handle Push Notifications in SwiftUI’s New App Lifecycle?
Adapterを使った実装となると、現状は内部的にAppDelegateのインスタンスを作っているかもしれないがどこかのタイミングで実態は別のものに入れ替わっているかもしれない。
4) Frameworkへの対応
ビデオ周りなどフレームワークへのサポートが厚くなったので自前でフレームワーク向けのカスタムViewを作る機会は減りそうな気がする。
5)Viewイベントハンドルに対応
Viewごとの特殊なイベントハンドルが提供されている。イベントハンドルから変更の発火点を作ることがより容易になるはず。
8) アニメーション対応
SwiftUI はOS側でレンダリングスケジューリングされるので、これまで難しかったアニメーションについても気軽にクールな表現が可能になっています。
7)真のソースが何かがわかる良いプレゼン資料
プレゼンテーションがWWDC2019に比べると府に落ちると感じる。SwiftUI をご紹介します - Introduction to SwiftUI のセッションで改めて語られることでWWDC2019の時点で腑に落ちない人も一回視聴をお勧めします。SwiftUI 1を扱った人もおさらいとして良いです。
8) まだbeta
SwiftUI 1で構築したプロジェクトをxcode12 beta版でビルドしシミュレーターで確認したところ、レイアウトはボロボロ、設定の項目をタップするとアプリケーションエラー出してアプリが止まっています。
このあたりはSwiftUIがレンダラーベースで動くため何が原因かを切り分けるのは情報が少ないためbetaの仕様が決まりきっていない状況では、問題の原因がこちら側にあるのかSwiftUI側にあるのかが切り分けできていません。
いってもbetaなのでもう少し仕様が固まってから着手しても良い気がします。