sugiken のメモ帳

iOSDC 2023 1日目

開発Swift

iOSDC 2023 1日目!

各セッションについてのメモ。

freee は業務としてカンファレンスに参加できるが、iOSDC は例年ブースを出しているのでその運営も兼ねて iOSDC に参加した。

モーダルの遷移を理解する

2023/09/01 16:40〜
Track B
レギュラートーク(20分)
https://fortee.jp/iosdc-japan-2023/proposal/229fc10b-6d26-4688-b658-3b925ce25123
問題のサンプルコード: https://github.com/objective-audio/ModalProblem
解決するサンプルコード: https://github.com/objective-audio/ModalArchitecture

確実に動作させるのが難しいモーダル
SwiftUI に絞って話す

用語整理

モーダル =

  • Sheet や Alert のこと

データソース =

  • @State や ObservableObject とか
  • View とデータソースに分けて話す

Menu

Menu を開いている時は他のモーダルを表示できないという意味で、Menu もモーダルと言える

なるほど。この発想はなかった。

問題

iOS15 だと複数階層のモーダルを同時に閉じることができない

iOS16からは1階層目のモーダルを閉じるとその上の階層のモーダルも閉じることができる

モーダルの不整合が起きないようにするために

とにかく中途半端なタイミングでモーダルを操作すると問題が起きる。

前提

iOS15 まではモーダルを閉じれないことがあるので、一旦保留

作ったもののデモ

Popover 表示中に Alert を開くボタンをタップした時に、Alert がちゃんと表示されるようにしていた。それ自体は実装の検証として興味深いが、モーダルが絡むときのユーザー体験がどうあるべきかが難しいなと思った。

Enum でモーダルが開く状態を制御するコード

https://github.com/objective-audio/ModalArchitecture/blob/325d87b82de57bb106212339f70397053921f063/ModalArchitecture/Framework/Modal.swift#L4

enum Modal<Content: ModalContent> {
    case sheet(Content.ChildContent)
    case fullScreenCover(Content.ChildContent)
    case popover(Content.ChildContent)
    case alert(DialogContent<Content>)
    case confirmationDialog(DialogContent<Content>)
}

おもろい。enum ってこういう使い方もあるよなー。Swift に慣れている人にとっては普通か。

感想

正直自分はモーダルを使いこなせてはいないが、気をつけるべきところやiOS15の辛みが垣間見た。

  • 中途半端な時にモーダルを操作しない!
  • データソースは1つにする!
  • iOS16以降に限定する!(これはこれで辛い)

質疑応答で

「非同期通信をしていて複数 Alert を表示するようなケースではどうするのがいいか?」という趣旨の質問があったが、HIG 的には Alert でエラーメッセージの表現をするのってどうなんだっけ?復習が必要だ。

「出会い」の体験を向上させるために、私たちが向き合っていること 〜Core Bluetooth,Core ML,SwiftUIの活用事例〜

2023/09/01 18:10〜
Track C
スポンサーセッション(20分)
https://fortee.jp/iosdc-japan-2023/proposal/45d0a40e-bcc9-43a1-b530-15b00cc9d030

Sansan さんの発表!!

まずもう名刺交換のこと(だと思うが)を「出会い」って言ってるのが良い

グラフ描画

SwiftUI を重ねることでグラフを表現 UIKit で実装された画面の中に組み込む形で表示

mercari/Mew

円グラフの描画

PieSliceShapre(startAngle: slice.startAngle, endAngle: slice.endAngle) // ちょっと完璧に書き写せていないかも

ち、力技だ。
そうまでして外部ライブラリを利用しなかったのはなぜだろう。聞き逃したかな。

質問したら

  • Swift Charts を使えるならそっちがいい
  • QA が大変だった

Core BT の活用

技術的トピック

  • RSSI/ TxPower で距離の測定
  • Core BT における距離測定

=> これは明日以降のどこかで話してくれる

CoreML の活用

CoreML 使ったオンデバイスのリアルタイム名刺検出 結果: 300%向上 GPU Nural Engine の活用でめっちゃ向上した

Core ML モデルへの変換 Core ML Tools でできる

感想

あらゆるモデルを CoreML に変換してオンデバイスで色々やるっていうのやってみたい。 https://huggingface.co/ とかでモデル見つけてサクッと遊んでみるか。

watchOS 開発最前線

2023/09/01 18:45〜
Track B
レギュラートーク(20分)
https://fortee.jp/iosdc-japan-2023/proposal/251cd59e-46f8-4445-a8a5-df43bc8a2add

watchOS単体 vs iOS従属

従属→単体のコンバートは可能 逆もできると思うが、ドキュメントに書いていない

SwiftUI での開発がデファクトスタンダード

UIKit は使うことができない。

SwiftUI が watchOS に最適化されていることがある

普段見ている View と異なるアウトプットになったりしていて、混乱することが多い。 【watchOS】watchKit x SwiftUIで使用できるUIまとめ が参考になる。

デザイン

極端に小さい画面で何を表現するべきかを考え、決めるのがとても難しい。

Apple の時計アプリを例に

iOSアプリの Tab が watchOS では別アプリのようになっている

これは別アプリというよりかは TabBar を使っているから別れているという印象を受けたがどういう意味だったんだろう。

感想

watchOSアプリ作ってみたいな。技術的なこともだが、デザイン的なことのほうがチャレンジしがいがありそう。あと AppleWatch 持ってないから買わなきゃ。

以上