iOSDC 2024参加レポート

iOSDC 2024、今年も参加しましたのでレポートを書いていきます。
今回は会社のスポンサーブースのお手伝いが中心だったのでセッションの参加はそこそこでした。

参加したセッションと感想を書いていきます。

Swiftコードバトル 準々決勝 by iOSDC Japan 2024

お題に沿ったSwiftのコードを実装し、以下に文字数を短くできるかを競うのがSwiftコードバトルです。
2人ずつの対戦で、各人のエディターとコードの文字数が観客席から確認できます。
見ててめっちゃ熱いバトルでした。
競プロがこんなに白熱した試合になるとは思わなかったです。

複雑さに立ち向かうためのソフトウェア開発入門 by shiz

複雑なソフトウェア開発を進めるうえでは認知負荷を下げるのがよいという話。
開発のあるあるが示されていてとても共感しました。

開発を加速する共有Swift Package実践 by el_metal

自社の複数アプリにて、それぞれが実装していた共有処理(ユーザー認証周り)をSwift Packageにまとめ、それぞれのアプリで利用できるようにしたという話でした。
社内OSS的にオーナー、コントリビューター、ユーザーと役割を決めてPackageをリリースしているそう。
しっかり役割決めるのが大事だと思いました。

MV State PatternでSwiftUIを受け入れる by Hiroma Tsuchiya

資料の公開はまだのようです。
気になる方はぜひ動画をチェックしてください。

https://live.nicovideo.jp/watch/lv345479756

個人的にSwiftUIでちょうどいいアーキテクチャは何かを考えているので、この話はとても刺さりました。
MVVMでSwiftUIを作るとSwiftUIフレームワークが提供する機能との連携がおろそかになりがちです。例えばこの機能たちです。

  • @State
  • @FetchRequest
  • @EnvironmentObject
  • @FocusState
  • @GestureState

そこで、ViewModelレイヤーをなくして、ViewとModelを直接つなげちゃいましょうというのが話の趣旨です。
Viewはバリデーションや特定コンポーネントの処理も記述し、ロジックが入るのを認めています。
ただそうするとView実装が大きくなるので、ロジックをViewLogicと名付けたクラスに切りだすことも推奨していました。

感想です。
MVVMはSwiftUIには効果が薄く無駄なレイヤーになっているというのは同意です。
SwiftUIが提供するプロパティラッパーをうまく活用できないからです。
SwiftUI, Viewが持つデータ間の同期をView側がやる設計なので独自にViewModelレイヤーでまとめようとすると、うまくいかないものです。
なので、MV State Patternは有効に見えました。
ただ、Viewにロジックいれるのを許容する違和感に戦わないといけなさそうです。
一つのViewにあるModelとModelをつなぎ合わせたいときはViewLogicで実装すればよいみたいです。
SwiftUIそのものの仕組みに乗っかるアーキテクチャを考えるのは有効だと思いました。

プレゼンを含めて、MV Patternに関する資料はたくさんあるので後で読んで見たいと思います。

AzamSharpさんのブログがこの件で言及が多いので後で読んでおきます。

座談会 「Strict ConcurrencyとSwift 6が開く新時代: 私たちはどう生きるか?」 by shiz

Swift Concurrency対応の現状や、具体的な導入方針が聞ける有意義な座談会でした。
kntkさんが話していた「個人アプリで再現不能なバグがあったが、Swift Concurrency対応したら数ヶ月発生していない。data raceの不具合だったかもしれない」という話はすごくいい話だなと思いました。

iPhoneへのマイナンバーカード搭載におけるデータ規格についての理解を深める by shindyu

Verify with Wallet APIで利用されているデータ規格について詳しく説明がありました。
この分野私も興味があるので、理解が深まって嬉しく聞いていました。
ISO規格や、mdoc, mDL、CBOR,COSEがどういうものか、独学ではわかないことだらけだったのが理解できてよかったです。

Wallet API, Verifier APIで実現するIDカード on iPhoneの世界 by 下森 周平

2つ連続でiPhoneでのモバイル本人確認の内容で良いです。
iOSのモバイルeIDを実現する方法が網羅的に解説していました。

  • ID Verifier API
    • 対面で本人確認が可能
    • コンサートや居酒屋、不動産などで年齢などの本人確認を対面でする場面を想定
  • Verify with Wallet API
    • アプリからWalletアプリに登録している本人確認書類を読み取る

ユースケースに沿ってどんなAPIが公開されているかがわかりやすかったです。
Ask the speakerでお話できたのもよかったです。

TextFieldに"2"が入力できなくなったお話 by 大前 久基

ユーザー辞書の落とし穴があるもんだなって思いました。

Swift 6のTyped throwsとSwiftにおけるエラーハンドリングの全体像を学ぶ by koher

Swift6で導入されたTyped throwsの解説です。
Typed throws -> do catchで具体的なエラーをキャッチできる仕組みです。
ResultやTask等の変換でエラーの型情報が失われるのを防ぐために導入されました。
ただし、Typed throwsは安易につかうものではないそうです。
モジュールやパッケージ内、自身が変更できるコードの範囲内で使うのがよいそうです。

Typed throwsだけではなく、Swiftの言語自体のエラーの考え方も説明されていました。

Swiftにおけるエラーハンドリングの考え方が理解できました。
koherさんはすごい。

まとめ

今年のiOSDCも素晴らしいトークが目白押しで、有意義な3日間でした。
特に、今個人的に注目していたデジタル本人確認の話題を聞けたのが良かったと思います。
来年はスピーカーとして参加できるよう、よいプロポーザル出します。

宣伝

インプレスR&D社よりSwiftの技術解説本を刊行しています。
ここまで日本語で丁寧に説明しているSwift技術本は他にありません!
気になる分野があればぜひチェックしてください。

iOS17から使えるObservationフレームワーク入門の解説
Swiftの非同期処理を解説