iOSDC2022 リアルタイムでみたものまとめ

# はじめに

iOSDC2022！！今年もおつかれさまでした！
iOSDCは2019が初参加でしたが初iwillblogです

今年もたくさんの素晴らしいセッションがありました
リアルタイムで見れたものをまとめます
徒然なるままに書いているので散文で恐縮ですが、ポエム感覚でお読みください

# セッション 【Day0】 

## 施策基盤としてのディープリンク 〜なめらかにアプリが開く体験のために〜

- [fortee](https://fortee.jp/iosdc-japan-2022/proposal/6c4615f5-b471-4f78-9044-4ae3f8dd75d4)
- [スライド](https://speakerdeck.com/natmark/iosdc-japan-2022-deeplink)

どのアプリでもよく使われるディープリンクを
定義の説明、Firebase DynamicLinksなどの実現手段、
実現するにあたってのtipsまで一気通貫で理解できるセッションでした。
ビジネスサイドにそのまま見せられるくらい、わかりやすくまとまっていて、実際にこの内容はぜひ共有したいなと思っています。

## SwiftUI Navigation のすべて

- [fortee](https://fortee.jp/iosdc-japan-2022/proposal/0b6f453a-68f0-4300-9ab2-cb1e3457eb53)
- [スライド](https://speakerdeck.com/kalupas226/swiftui-navigation-nosubete)

Navigationの歴史→現状のAPIの問題点→その解決策という流れで説明してもらうことで、
迷子にならず「現状のAPIでどう実装するのがいいのか」を理解できるセッションでした
コメント欄でも流れていましたが、なぜAppleが`swiftui-navigation`のようなインターフェースにしていないか疑問に思いました
特に`New boolean binding and optional item API`についてはぱっとみで使いにくいと感じるので不思議でした
なんにせよ数十分でそこまで知識がない人でも疑問を持てるまで理解度を高めてくれる素晴らしいセッションでした！
`swiftui-navigation`は必修な感じがしました！

## PWAの今とこれから、iOSでの対応状況

- [fortee](https://fortee.jp/iosdc-japan-2022/proposal/d3d878aa-3d10-42bc-b1a5-455a420aae38)
- [スライド](https://speakerdeck.com/pkino/pwa-now-and-in-the-future-status-of-support-on-ios)

恥ずかしながらもPWAは全く知らなかったので、
ネイティブとウェブのいいとこ取りができる技術があることを知って広く知識をつける必要性を感じました

また、Twitterで雑に疑問を投稿したら親切に調べてご回答いただけて大変ありがたかったです
重ねてありがとうございました

https://twitter.com/ichikawa7ss/status/1568530168171601920

（AppDistributionのリンクのようなSafariが立ち上がるものも、
PWAの一部なのかな？と思ったのですが、PWAとはまた別で、PWAはスタンドアロンのアプリが立ち上がる、
もっとネイティブに近い立ち位置のようでした）


## メタバースを支えるエンジニアの生態について

- [fortee](https://fortee.jp/iosdc-japan-2022/proposal/e9b641fa-33be-43c9-829e-44a69a595fd2)

メタバースだから、というのもあるかと思うのですが、リリースフローがしっかりしていました
ReleaseReviewでの結果を経てリリース目処が決まる点や、部門（Analytics、Playなど）+職種に応じたアサインがあって、
煩雑にみえるメタバースの継続的なリリースにつなげているんだと知ることができました。
3DGraphic以外にも多く役割があり、iOSエンジニアの活躍する場があるとしれたのもとてもよかったです。

# セッション 【Day1】 

## アニメーションAPIのすべて

- [fortee](https://fortee.jp/iosdc-japan-2022/proposal/517cb156-3905-4dd7-b666-d2200049d822)
- [github](https://github.com/kishikawakatsumi/UltimateGuideToAnimations)

ことアニメーションになると、実装レベルまで落ちてるものを写経したり、試行錯誤してなんとかイメージに近づけたりで、
なかなか体系的に理解できていなかったのですが、この発表でかなり腹落ちした感じがします

UIView.animateではどこまでできて、どこからCoreAnimationを使えばいいのか、だったり、
微妙な実装の違いで急にアニメーションしなくなってしまったり、ということがあっても
なんとか泥臭くやっていたのですが、APIレベルでの挙動を順を追って説明していただけたおかげで付き合い方が変わりそうです

タイトルの通り、アニメーションの完全版で、何度も見返したいセッションでした

## （タイムシフト） Swift Concurrency Next Step

- [fortee](https://fortee.jp/iosdc-japan-2022/proposal/1bbc3929-1302-4d62-9d0d-19de7083562d)
- [スライド](https://speakerdeck.com/shiz/swift-concurrency-next-step)

昨年のSwift Concurrencyのセッションを踏まえて、
基本的な内容のおさらい、アップデート、実装上の注意点、などがわかりやすくまとめられていました

並行処理自体はつきつめていくと複雑で理解が難しい概念だと思いますが、step by stepでまとめられていたため、理解しやすかったです
また、実装上の注意点が具体的で大変ありがたい知見だと思いました
協調スレッドプールの枯渇を特定のためのデバッグ設定や、メモリ管理に関する知見など、大変有用なものばかりでした
ある程度コンパイラでのチェックができるようになったとはいえ、改めて抑えておきたいなと思いました

## UIKit ベースの大規模なプロジェクトへの SwiftUI 導入

- [fortee](https://fortee.jp/iosdc-japan-2022/proposal/8f120179-7a65-429c-a471-ed11344f08b2)
- [スライド](https://speakerdeck.com/kuritatu18/uikit-besunoda-gui-mo-napuroziekutoheno-swiftui-dao-ru)

多くのプロジェクトが関心のあると思われるホットな話題の知見共有でした
特に以下の点で勉強になりました

- SwiftUIを導入するときに、まずリスクのないデバッグメニューから取り掛かる
- UIKitの既存のコンポーネントをSwiftUIで作るときに`SU`などプレフィックスをつける
- バージョンによっての挙動の違いを覚悟しておく必要がある

たしか話だとiOS13もサポートされていたとのことで、より辛い部分があったのだろうと思いますが、
並行稼動の仕方などはどのバージョンで切ってもおおかた通ずる、有意義なだったと思いました

## Swift Concurrency時代のリアクティブプログラミングの基礎理解

- [fortee](https://fortee.jp/iosdc-japan-2022/proposal/397d52a7-8f62-4c40-8392-2dc081227189)
- [スライド](https://speakerdeck.com/banjun/reactive-programming-fundamentals-of-swift-concurrency-era)

当方、MVVM + CleanArchitecutreで開発をしており、データフローも通信もRxを使っているのですが、
rx部分の置き換えを今後取り組むときに、どこまでをConcurrencyで書いて、どこまでをCombineで書くのか、若干混乱気味でした

このプロジェクトではiOS開発で使われるいわゆるReactive Programmingの立ち位置を整理しながら、
Concurrencyの役割を明確に提示していただけました

また、説明でもいわゆる、それっぽいとか、ニュアンスを含む表現がわかりやすくて、すっと入ってきました（伝われ）

## （タイムシフト） 入門 SwiftUI Alignment Guide

- [fortee](https://fortee.jp/iosdc-japan-2022/proposal/1730b968-d50f-40fd-b445-f44a106b6c29)
- [スライド](https://speakerdeck.com/monoqlo/iosdc2022)

SwiftUIのレイアウト時に度々用いられるAlignment Guideについて順を追って説明してもらえるとても学びのあるセッションでした
`alignmentGuide(_:computeValue:)`の説明において、
**基準点からずらす**のではなく、**デフォルトの値を置き換える**という表現をされていて、
最初に発表を聞いていたときはすぐには理解できなかったのですが、あとあとスライドを見返しながら考えると、
一気に意味がわかって、Alignment Guideとかなりお近づきになれたなと思えました
その状態で改めて発表を見ると`alignmentGuide(_:computeValue:)`を、
複数指定した場合の挙動にも合点がいって、とてもわかりやすい表現だなと感じました！

## （タイムシフト） 詳解 Core NFC - NFC を用いた iOS App 開発のてびき

- [fortee](https://fortee.jp/iosdc-japan-2022/proposal/40f51161-9c44-4330-ba92-e9aa407454c3)
- [スライド](https://speakerdeck.com/treastrain/demystify-core-nfc-a-guide-to-ios-app-dev-using-nfc)

NFCについての知識はなかったのですが、大変興味深い内容でした
実装経験がない人にも順を追った説明で、大変わかりやすかったのもありがますが、
iPhoneでの搭載情報、ハード上の特性、他の技術に比べてのメリデメ、Androidとの状況の差異など、
ビジネス的な話もあったことで、とても引き込まれました
NFC触りたいなと思わされる発表でした


# LT 【Day1】

みなさんLTうますぎました。。
（LTはリンク載せていないのであしからず🙇‍♂️）

## 神速iOSDC〜6年分〜

iOSDCだけじゃなく、Appleコミュニティや技術書典などの、
iOSコミュニティ全体のトレンドを抑えて話していただけて興味深かったです
私は2019から見始めたのでその前のこともしれて感動しました
それから挿絵がかわいかったです

## Apple Watchを使い倒す 〜Watchから取れるデータとその活用法〜

AppleWatchの外見ほぼ変わってないネタで心を掴まれました
センサーがたくさんある〜くらいの認識でしたが、それらが時系列でどんどん追加されていくのはロマンがありました
私もWatch大好きなのでGithubのサンプルアプリも触ってみます

## SF Symbolsの無限の可能性に迫る、SF Symbolsアートの世界

アートでした
僕の知ってるSF Symbolsはほんの一部でしかなかったのだなと気づきました
甲乙つけがたいですが僕はやはり極悪プロレスラーが好きです

## レトロゲームを楽しむ環境を構築する

はじめて買ったのはゲームボーイカラーです
ずっとSUGEEEEEEって感じでした
スマブラのtweetみて爆笑しました
オンラインなのでいけませんでしたが交流スペースでやっちゃうって神だなって思いました

https://twitter.com/sam_akada/status/1568891747706744832?s=20&t=aeLGlqI5KFTpd6E2e1WE6w

## Bluetoothでレゴをリモートプログラミングしよう

Bluetoothは触ったことがないので、AsyncBluetoothなるものがあるのかと勉強になりました
デモまであってステキでした
実装の部分はちょっと難しかったのですが、とてもワクワクする発表で、
リモートプログラミングに興味を持ちました

## 挑戦！ISUCON de Server-side Swift 〜タイムゾーンには気をつけろ〜

3人の勇者たちの物語、とてもアツかったです
SwiftやiOSエンジニアの幅を広げるチャレンジにリスペクトしかありません
サーバーまわりのことは正直良くわかりませんでしたが、心を掴まれるものがありました

## 独自の共通認証基盤を用いているサービスでアカウント削除機能を提供したときの道程 

Appleのドキュメント不足わかりみしかないです。。
条件を満たさないと退会できないケース、実例で聞いたことがなかったので勉強になりました
後々スライド見ましたが、延期発表がめちゃくちゃ良いオチで、LT内で聞きたかったなと思いましたw
（といいつつ、ドラで切られたのも見てる側で面白くてありがたかったですw）

## Exposure Notification Privacy-preserving Analytics Architectureの仕様について

「AppleとGoogleが手を組んだ！」ってとこで止まってたので感慨深かったです
セキュリティ周りの知識があまりなく少し難しかったのですが、
プライバシーを守りつつ、データを収集する仕組みにふれることができて面白かったです

## バックポートして学ぶ新APIの仕組み 

Appleが用意した制約の中で生きていくというマインドになっていたので、
バックポートの概念も仕組みも知りませんでした。。
AppleのAPIのdiffの調べ方などプロセスでも学ぶことがたくさんありました

## UIStackView逆引きレシピ

一日にこんなに "かわいい" したことはありませんでした
StackViewの要素間のマージンの付け方はがっつりアンチパターン踏んでました
デザイナーも意図があってレイアウトしてるはずなのでそこを慮る姿勢も学びでした

## 手で触れずにアプリを動かす技術

天才だと思いました
何度でもニコ生で繰り返しみたいです
僕の語彙では表現できません

# セッション 【Day2】 

## Xcode が遅い! とにかく遅い!! 遅い Xcode をなんとかする方法

- [fortee](https://fortee.jp/iosdc-japan-2022/proposal/9d542893-3c30-4077-a85a-1c7ec68caa9c)

Xcode14からはindexが不具合が直っているそうで、発表の瞬間の会場からの歓喜の拍手が起こっていました。
また、AppleでもFIXME:が有用だということがわかりました。

私自身の低レイヤの知識がかなりお粗末なもので、「clangか...」「Bazelか...」となっていたのですが、
そんな私でもわかった気になれるように説明してもらって聞いててとても楽しかったです

## SwiftUI in UIKit で開発する世界

- [fortee](https://fortee.jp/iosdc-japan-2022/proposal/d824fc5d-191a-4864-899a-339d830ed182)
- [スライド](https://speakerdeck.com/hcrane/iosdc2022-swiftui-in-uikit-dekai-fa-surushi-jie)

私の担当するプロジェクトでもiOS13まで切れるようになったので大変タイムリーなセッションで学びが深すぎました
特に以下の考え方が勉強になりました

- SwiftUI化するスコープを明確化する
  - UIKitにあるけどSwiftUIにないものはこれからサポートされる可能性がある（負債になる可能性がある）のでつくらない
  - 複雑な画面はUIKitで実装する
- アーキテクチャの考察
  - SwiftUIでは双方向バインディングが必要になるため、手続き型のMVPは適さない
  - とはいえTCAはToo much→MVVM
    - そもそも方針で複雑な画面はつくらないと決めているので、状態管理が複雑になることはない

また、さまざまな他社の事例やリンクも交えて話していただいたので、この内容をもとに掘り下げが可能で大変ありがたかったです

## Swift Concurrency時代のiOSアプリの作り

- [fortee](https://fortee.jp/iosdc-japan-2022/proposal/b50a5503-00e3-4dd3-ba1a-b28cd59c6a33)
- [スライド](https://speakerdeck.com/koher/swift-concurrencyshi-dai-noiosapurinozuo-rifang)

まず、2022の直前に復習のためiOSDC2021のkoherさんのConcurrencyの発表を見ました
[iOSDC Japan 2021: async/awaitやactorでiOSアプリ開発がどう変わるか … / Yuta Koshizawa](https://www.youtube.com/watch?v=472pr2v0n7M)

また、Concurrencyの理解のためkoherさんの発表に加え、shizさんの発表も見ました。
[iOSDC Japan 2021: Hello, Swift Concurrency world. / shiz](https://www.youtube.com/watch?v=yKi7_QyPxfU)

どちらの内容も素晴らしくて、私自身はConcurrencyはチュートリアルレベルでしか触ったことがありませんでしたが、
前回の内容のおかげもあり、今回の内容もスムーズに理解でしました

本編は認証機能を題材にして、ViewControllerベタ書きの状態からスケール可能な形に書き換えていくもので、
知識はインプットしたけど、どうやって実プロダクトに当てはめていくべきか考えていた私にはとてもありがたいものでした。

前回の内容はConcurrencyの内容を部分にフォーカスしながら理解できるようにして、
今回の内容は実装に当てはめて全体の構成も含めて考えることができました

また、要点やTipsをあとで振り返りやすいように纏めてあるのもありがたかったです
Task.initをViewController側に書くべきか、ViewModelに書くべきかなども、
疑問に思ったところだったのでメリデメを共有いただけてありがたかったです

## モバイルアプリの行動ログの「仕込み」を快適にする

- [fortee](https://fortee.jp/iosdc-japan-2022/proposal/ad544d2d-0e37-48f7-836a-3d46abe4ad2f)
- [スライド](https://speakerdeck.com/yujif/iosdc-japan-2022-mobile-app-logging)

CookPadでのログ実装をベースに具体的な取り組みを聞けて大変勉強になりました
企画サイドがMarkdownで書いたものをそのままコードに起こす仕組みは、CookPadさんレベルの規模感だと、
十分ペイする素晴らしい取り組みなんだろうと感じました。

また、送信したログをチェックリスト形式でデバッグメニューに表示する取り組みも勉強になりました
現状送り先のコンソールを確認するコストが都度発生しているので、こちらは私の担当しているアプリでも活用しようと思いました

また、このセッションをきっかけに[OSLogStore](https://developer.apple.com/documentation/oslog/oslogstore)を深堀りしようと思いました

## キャッシュによる状態管理のアーキテクチャ

- [fortee](https://fortee.jp/iosdc-japan-2022/proposal/a9d5b12e-6170-4f1c-be93-9412898523a0)
- [スライド](https://speakerdeck.com/rockname/cache-based-state-management-architecture)

状態管理のためのアーキテクチャーは近年よく話題に上がるトピックの一つだと思いますが、
それらの解決したい課題、メリットデメリットが混同気味だったので、それが整理される大変有益なセッションでした

結果的に私が担当しているアプリでは、GlobalStateにするべきものが多くはないので、
現状特別な設計はする必要がないことがわかりましたし、
Repository層で適切にキャッシュを扱えれば大変なことはしなくていいということが整理されました

今後状態管理が重要視されるプロジェクトに関わるときはまたこの発表に立ち戻ってきたいなと思いました。

# LT【Day2】

## CarPlay向けのアプリって開発できるの？

あまり関係ないですが、hasekenさんは去年のNotificationの発表で印象に残っていて、今年も素晴らしいLTだなぁと感じました
（勝手にAppleの新しい or ニッチなAPIを扱ってくれることが多い印象で興味深い発表が多いです）

CarPlayに関してはシミュレータで開発できることも知らなかったですし、
意外と身近な存在に感じられてCarPlayに興味を持ちました

## JailBreakと向き合おう

一度なくなったと思ってたので復活して嬉しかったです
JailBreakと向き合ったことはなくて、どう検知すればいいのか、検知したらどうすればいいのか、
全く知見がなかったので、エンジニアとしての引き出しが広がったと思います。

## 鉄道アプリを支えるテクノロジー

本来だったら知る由もない鉄道会社のテクノロジーを感じられて大変有意義でした
ハードウェアとソフトウェアが融合している部分が魅力的だなと感じました

5人の精鋭すごいなと思いました
また、画面越しでも映える筋肉で羨ましたかったです


## Flutterアプリ開発にネイティブコードはどこまで求められるのか

正直スライド下部の自己紹介をずっと見てしまいました
ネタが切れたところからの粘りがステキでした

私自身ここ半年Flutterプロジェクトにも関わることになり、
興味があるのでもう一度ちゃんと見ます

スライドが本当に素晴らしかったです

## VisionKitを使ってクレジットカードスキャナーを作る話

VisionKitとかこの辺はあまり触ったことがなかったのでありがたい知識でした
うすーい知識でPayPayとかのよく使うクレカの認識は
枠があってフレームを固定させるようなUIになっているから
AVFoundationとかなのかなー？とか素人なりに考えられてステキなトピックでした。楽しかったです

## iPhoneでサッカースタジアムをスキャンしVPSを動作させるには

SATOSHIさんの発表は毎年ロマンが半端ないですが、今年は特にすごかったです
修行に実地デバッグにスタジアムにとワクワクしました
ARさわりたいなーと思いつつ去年も何もできてないので、今年こそなにか触ってみたい
今年も知見とロマンとモチベーションを与えていただけて、とてもステキなTalkでした

※LT2クール目は業務の為見れず、、

# 終わりに
セッションや業務の関係で泣く泣く見れなかったものもたくさんあるので、ニコ生で追っかけで見たいと思ってます
（できれば見たやつは追記していきたい。。！）

私はiOSDC2019に初参加して、2020年からiOSエンジニアとしてのキャリアをスタートさせました
はじめて参加したときは業務経験もなかったので、セッションの内容の1割もわからなかったですが、
スピーカーの話の面白さとコミュニティの熱にあてられて、iOSエンジニアになることに憧れるようになりました
（特にkoherさんの[Heart of Swift](https://www.youtube.com/watch?v=XySdL_Vahx0)はとても感動したのを覚えています）

毎年自分自身の知識の広がりで「わかるかも」となったと思えば、
新たな技術や今まで無視してきた概念にぶつかって「やっぱわからん」となりながら、
今年も、去年より少しiOSDCのセッションの内容の理解度があがった気がして、またやる気をもらえました

惜しげもなく知見やリソースを共有してくれる運営・スピーカー・スポンサーの皆様に感謝です

今年もとても楽しかったです！！！