iOSDC2022参加記録を書く場所
このスクラップは?
iOSDC2022に参加する上で、参加記録を書く場所として用意しました。
参加記というと通常のブログ形式が一般的ですが、複数のセッションが用意されていることや、何日にも渡って開催されることを鑑みると実はスクラップ形式で書き進めるのが一番低コストかつ網羅的に書けるのではないかと思いこの形式を採用しました。
セッションの内容をまとめる・感想を書くだけでなく、その他の内容も適宜書いていこうと思います。
全資料についてはこちらにまとめていただいているので割愛します。
前日譚:ノベルティボックス開封
ノベルティボックスが8/30に届いたので開封をしました。
ものすごい量で、食品も多いイメージだった。
個人的にはタオル系がいいなと思ったし、小物系でもスマホスタンド・パソコンを掃除する道具などなど今すぐ使えるなーというものが多くてよかった。
パンフレットではLINEのここのコード書きました特集が好きだった。(下のツイートで紹介されてる)
とまぁ充実していたわけだけど、ノベルティボックスを開けた瞬間目に入ってきた文字で火がついてしまって、ほとんどトークン探しに時間を費やしていたのであんまりパンフレットの内容は頭に入ってない笑
とりあえずまだまだ時間はあるのでどこかでちゃんと読もうかなと思います。
Day 0 前夜祭:準備
2022年9月10日、ついに前夜祭!
準備としてはバッチリ!と言ってもiOSDCトークンをこんな感じで準備しただけですが...笑
早めに会場入りしてオープンした瞬間にたくさん入力したいと思います笑
Day0 トークン
とりあえず満足です笑
前夜祭説明
- NFCで入退室管理するのめちゃくちゃすごい
- これTwitterとDiscordとこことでどこに投稿するかの使い分けがだいぶむずい気がしてきたなー
ノートアプリのテキストエディタの解体新書
- てくてくFM
- @fromkkさん
- ScrollViewの中に複数のUITextViewを配置して作っている
- 今回はUIStackViewを利用している
- UITextViewはカスタムクラスにして、contentSizeを監視し、高さを同期している
-
invalidateIntrinsicContentSize()
を活用する
-
- Drag & Dropは
UILongPressGestureRecognizer
を使用 -
readableContentGuide
で読みやすい幅を表現 - → そのままだとiPhone側で謎のマージンができる https://zenn.dev/st43/articles/d27a68cd01a0b8
- 役割ごとに細かくclassを作ることでテストしやすくしている
- ツールバーは独自で作って
accessibilityLabel
を設定している - キーボードショートカットはiOS14と15で実装方法が違う
- AppleのOSでは半角の濁点・半濁点などが結合してしまう→パーサーを使うときには注意
- TextKit2に期待している
- fromkk/TextEditorSample
感想
- あんまり触れない分野だったので面白かった
- でも現地だとコードが小さくて追うのが難しかったな、後でサンプルコードとか確認しよう
ウーニャ、しってる。みんなふんいきでSwiftUIをつかってる。
- 分割と命名を工夫して可読性を向上させるディスカッション
- Labelを使うと画像とテキストに関連性を持たせられる
- LabelStyleを使って見た目は整える
- https://twitter.com/search?q=%23iosdc %23a %23ウーニャ&src=typed_query&f=live
感想
- かなりインタラクティブで面白い!
- 議論できるのよかった
MLOps for Core ML
- Machine Learning Operations
- 課題:時間とともにモデルの推論精度は劣化する→パイプライン実行を自動化する必要がある
- → モデルの継続的トレーニング(Continuous Training - CT)
- Appleデバイスの性能を最も活かせるのはCoreML、Neural Engineを使えるのはCoreMLだけ
- 機械学習のブルーオーシャンCoreML / iOSDC 2020
- TensorflowのままよりCoreMLにするだけで300%の高速化ができる
- 学習パイプライン→MLflowというライブラリを使う
- 実験管理→パラメータなどを記録する、MLflowにはログを記録するメソッドがあるのでそれを使う
- 実機での新モデルの検証→テスターにだけ新モデルを配布する、Apple公式でクラウド経由でアップデートなしにモデルを配布できる機能がある
感想
- さすがの堤さん、スライドがオフラインでもだいぶみやすい
- 機械学習って結構面倒なことが多いものって認識が強かったけどちゃんとそこが課題になって解決策が検討されているんだなということがわかった
- 服装が夏過ぎてそろそろ寒くなってきた...笑
量子情報工学への招待 〜iOSアプリ開発を通して学んでみよう〜
- 量子コンピュータ
- 確率的に決定→観測して初めて存在位置がわかる
- ケットというのか
- 多量子ゲート
感想
- 量子コンピュータのさわりやってた時が懐かしかったけど、意外としっかり量子力学の基礎をまずガッツリやるからわからない人大変そうだった
- iOS成分なかったけどうまくできなかったみたいな感じなんやろうか
メタバースを支えるエンジニアの生態について
- カピバラwww
- Rustが入ってるのいいな
- PRD→仕様書みたいな
Day1: オープニング
- iOSDCの過去のグッズがもらえるコーナーをたまたま見つけて扇子を確保
- MoTの抽選が結構豪華っぽいので後で挑戦してみようと思ったり
- オープニングムービーかっこよきやねー
- fortee.jpは長谷川さんがそもそも作ってるものだったのか
- 丸井グループ、どこでも出てくるな
- スポンサー紹介だけですごい長さ笑
スポンサーブース
- MoTの抽選はトミカになった笑
Swift アクターモデルと Elm Architecture の融合
- オフライン人が少ない...w
- Actor ... スレッド安全なオブジェクト。データ競合が起こらない
- Elm Architecture ... 基本的にはFlux/Reduxみたいな感じだけど副作用の実装がEffect(Cmd)になる感じ
- class / actorが登場しない
- Actorがオブジェクト指向でElm Architectureは関数型だけど両者はかなり近いものになっている
- オブジェクト群の分散管理に強い多神教がActor、Single Source of Truthの構成で一神教なのがElm Architecture
- MVVMとTCAのいいところどりはすごいわかる
- Actomaton/Actomaton
- https://github.com/Actomaton/Actomaton-Gallery とりあえずこれをクローンしておいた
- Storeが分解されているの全然知らんかったな
- 複数のViewModel = 複数のElm Architecture
- Comonadic UI = Comonad + アクターモデル
- 関数型プログラミングからオブジェクト指向へ
感想
- 融合おもしろかったなー
Kotlin Multiplatform Mobile でiOSとAndroidの実装差異を無くす
- KMMの話や
- チームラボKMM使ってるのか
- BluetoothやUIは共通化せず、ビジネスロジックのみ共通化する
- KotlinのコードはObj-Cのフレームワークとして変換される
- 組み込むにはframeworkを埋め込むだけ
- iOSで使うにはframeworkがあればいい→KMMリポジトリ、Frameworkリポジトリ、iOSリポジトリと分ける
- ネイティブコードをKMMから呼び出す方法がある
感想
- KMMとネイティブで分けるとまたここでクライアントエンジニアとサーバーサイドエンジニアの構図と似ているなぁと思った
- Kotlinライブラリがなく、インターフェイスに差異があるそれぞれのフレームワークをどこまで共通化するべきなのかは若干疑問が残りそう。それぞれ特有のバグがあった時のデバッグが大変になりそうな気がする。。。
CoreGraphicsでドット絵を描こう
- Editormodeというアプリ
- CoreGraphicsギュンギュン動くの楽しみ
- ボケるものはinterpolationなどで補間を切るとドット絵はくっきり表示される
- bitPerComponent ... 4bitなら16階調、8bitなら256階調、1色の階調を指定している
- CGImageは左下origin、UIImageは左上オリジンなので変換時にorientationを指定する必要がある
- noppefoxwolf/swift-line-algorithms
- メモリレイアウトの確認方法面白い、frameでメモリをみてMemory Viewを見る
- noppefoxwolf/PixelArtKit
- インデックスカラー面白い→CoreImageのCIFilterを使った、Metalを使っている
- AppStoreのプロモーションコードがある
感想
- わかりやすくておもしろかった
- CoreGraphicsとCoreImageには強くなりたいなぁ
音声配信アプリにおけるiOSを使った音声配信の全てと裏側
- AVFAudioとAgora
- AVFAudio: AVFoundationからAudio関連の機能だけ抜き出したもの
- buffer.waveFormHeight
- AVAudioRecorderだと波形の高さとかは取れない?かもしれない
- Live Streaming(RTC), RealTimeMessage(RTM)
- entaku0818/VoiceMemo ... SwiftUIで使う場合はどうしたかのメモ
感想
- シンプルに部屋が寒い笑
正規表現って結局何なのさ?〜エンジニアのためのコンピューターサイエンス入門〜
- 無数の文字列集合の部分集合を言語と言う
- 正規表現→言語を決定する表現の一つ
- 正規言語→正規表現で表現できる言語
- オートマトンと同じ、そうか、たしかに
- 正規表現はNFAで表せる
- GNFA→状態遷移に正規表現を許したもの
- GNFAにすれば正規表現と同値性ができる
- 有限な言語は正規言語
- 正規表現をかつで結んだものも正規表現
- 正規表現の否定も正規表現
- これら全てがオートマトンで考えることで証明可能
- プログラミングにおける正規表現とは違う
- 後方参照は純粋な正規表現ではない
- 再帰も純粋な正規表現ではない
感想
- めちゃ大学の授業を思い出した
- やっぱり純粋な正規表現ではないんだなぁ
LT大会前半戦
神速iOSDC 〜 6年分
- これすごいな
- 傾向をしっかりまとめてるのもすごい
Apple Watchを使い倒す 〜Watchから取れるデータとその活用法〜
- 外観の違いわからない笑
- Apple Watchの歴史はセンサ搭載の歴史、なるほど
- https://github.com/rirex5/iPhoneSensors
SF Symbolsの無限の可能性に迫る、SF Symbolsアートの世界
- クラメソの人だ!
- SF Symbolsアート笑
- 面白すぎるなこれ
レトロゲームを楽しむ環境を構築する
- どんなゲームが好きですかで年齢がわかる笑
- Open Source Cartridge Reader→Swiftでゲーム吸い出しはすごい
- ブレッドボードだけ!?
- 簡略化すごい
- Tシャツも任天堂だ
Bluetoothでレゴをリモートプログラミングしよう
- LEGOのBluetoothモジュールってあるんだな
- lego.github.ioの仕様見れば色々いける
- デモいい
LT大会後半戦
挑戦!ISUCON de Server-side Swift 〜タイムゾーンには気をつけろ〜
- めっちゃ遅いWebサービスの高速化、ISUCON
- Vaporを使ってサンプルをフルスクラッチで書き換えた
- Concurrencyでめっちゃ良かったけど結構不安定ではあった
- Vaporはデフォルトだと16KBしか送れない
- @_disfavoredOverloadをつけられるとオーバーロード送り出しの優先度を下げる
- 今年は申し込み忘れましたwwww
独自の共通認証基盤を用いているサービスでアカウント削除機能を提供したときの道程
- 削除のサポートページが出ている
Exposure Notification Privacy-preserving Analytics Architectureの仕様について
- COVID-19のAPI
- ゼロ知識証明とな
バックポートして学ぶ新APIの仕組み
- moduleAlias使えるようになったんだ!Nodeと同じだ
UIStackView逆引きレシピ
- UIStackView = VStack/HStack
- わかるーデザイナーの近接通りにStackを作る
- サイズクラスごとにレイアウト変えられるのか!
手で触れずにアプリを動かす技術
- 音声認識か!
- SFSpeechRecognizer
- と思ったら今度は顔認識w
- AVCaptureSession
レガシーなプロダクトからドメイン層を再設計する
- リアーキテクチャーの話
- FatViewを頑張ってリアーキテクチャにしたらFatPresenterになった
- t_wadaさんに相談した
- → どのレイヤーが持っているかよりドメインがどうなっているかを知るのが大事
- UIデザインの話に近いな〜t_wadaさんの考え方
- いやデザインの話だこれは
感想
- モデリング大体難しいのでその実践知が知れるのはとてもありがたい
- やっぱり本質的にコードもデザインするものだなぁと思った
Day1まとめ
- トークンは何とか一位に返り咲けた
- ただ公式のトークンがなぜか全然見つけられない、どう考えてももう全てアルバムかパンフにあるはずなんだけど特にノベルティとか半分も見つけられてないのすごく謎が深いのである
- トークは結構深めのテーマ中心に選んで聞いたけど概ね満足だったなぁ
- グッズとしてはトミカとノートを獲得しました、やっぱり抽選とかなるべく企業色が薄いものの方が良かったなぁ
- あとはiOSDCの昔のノベルティは嬉しかった、扇子嬉しい
Today's Update
- スタッフの歩数面白いw
- トークンどこにあるんだろう...
Xcode が遅い! とにかく遅い!! 遅い Xcode をなんとかする方法
- XCBBuildServiceが見える全部のプロジェクトのインデックスを作ろうとすると(SPM周りの)バグを踏む
- 全部のインデックスを作る挙動を阻止すればいい
- XCBBUILDSERVICE_PATH環境変数で置き換え→XCBBuildServiceProxyKit
- Xcode14ではもう問題なくなってる
- clangがロック機構のせいでSwiftのビルドは一つのCPUでしか走らない時間がある
- llvm:LockFileManager::waitForUnlock()が最大1分30秒待つことになっている
-
-Xclang -fno-implicit-modules-use-lock
.... ロック問題は解決できるが効果があるかは状況次第 - Xcode自体が大きなアプリのビルドにあまり向いてなさそう→Bazel?
感想
- Xcodeのパフォーマンスがもっと上がる世界になってほしいなー
動画だけじゃない!iOS 15のピクチャ・イン・ピクチャを使って好きなUIを表示させよう!
- AVSampleBufferDisplayLayer←CMSampleBufferを与えて動画を再生
- CMSampleBuffer←これをUIViewから作れる
- tsuzukihashi/sample-pip
- UIView→AVSampleBufferDisplayLayer→UIView or AVPicutureInPictureController
- PiPのためバックグラウンド再生していることをメモして送るとリジェクト回避できる
感想
- ちゃんとリジェクトされずにこういう使い方できるんだというところが感動した
サーバーと同期してリアルタイムに更新する画面を実装する
- 自動的な更新について
- polling→絶対負荷大きい
- サイレントPush通知→ユーザーがオフにできちゃう確かに
- Firebase Realtime Database/Cloud Firestore→これはそうやね
- WebSocket→実装が大変
感想
- やっぱりWebSocket強いなー
デザインシステム
- Graphic Standard + UIデザインシステム + コードによる実装
- SurfaceとFoundationの組み合わせ
- Pattern
感想
- TODO: 後でFigmaみる
Swift Concurrency時代のiOSアプリの作り方
-
Task { @MainActor in }
知らなかった -
Task.detached
は別スレッド実行になる - ViewModel的なObservableObjectにはMainActorをつける
- TaskはView側に、do-catchは中に入れて、エラーはプロパティに、イベント系はCombineで送って受け取る
- Service LayerとCore Layerで考える
- 型パラメータインジェクション
- async/awaitの途中状態のテストは複雑
感想
- サンプルコード欲しい
iOSDCチャレンジ結果
正解が発表されていたので記録していたシートを公開します。
合計7個を見つけることができませんでした...あと少しすぎて悔しかったです...😂
でも結果として3位の景品はまさかの脱出ゲーム!
1位、2位の脳トレパズルよりも嬉しい...🤣
LT大会前半戦
CarPlay向けのアプリって開発できるの?
JailBreakと向き合おう
鉄道アプリを支えるテクノロジー
- 軌道回路というもので電車の走っている場所がわかる
- 司令所で運行を管理している
- 応荷重装置で混雑度を取る
- 取れない車両はナビタイムの検索履歴で予測している
- 司令所はどこにあるかわからない
Flutterアプリ開発にネイティブコードはどこまで求められるのか
- 約5%かー
- 画像処理が遅いのはなるほど
- やっぱりUIをネイティブによせない方が良さそうだなー
VisionKitを使ってクレジットカードスキャナーを作る話
- VisionKit使って確かにやりたい
iPhoneでサッカースタジアムをスキャンしVPSを動作させるには
- 点群みたいなやつ
LT大会後半戦
サポートiOSバージョンを定期的にあげる仕組みづくり
大学で出席管理アプリ・掲示板閲覧アプリを開発・運用している学生の話
- NITechピロリン
- TrueTime.swift
- MicroViewControllerいいね
- 打刻とか任せてもらえるのかなりいい
GDPR or "similar" statute
- GDPR ... 一般データ保護規則、EEA圏の法律
- UK GDPR
- COPPA ... 児童オンラインプライバシー規則、アメリカの法則
- PDPA ... タイのGDPR
- 国や地域ごとにテキストやUIを変えれるようにしないといけない
- JETROの記事を読む
今更だけどUIKitで型パラメータのインジェクトを利用してViewのレイアウトをしてみよう
- 後でサンプル見る
SceneKit AND SwiftUI
- ライブコーディングすごかった
iPadOSDC Japan 2022
- Swift Playgroundsでアプリを作った話
- Swift Playgroundsでも十分やなー
Parallel testing of iOS UI on a large scale
- Bitrise new feature
- @ tzuhan
- Automated UI tests
- Build Pipelines ... currently in beta release
- Steps + Workflows + Stages