iOSDC JAPAN 2021 感想 自分用メモ
iOSDCを見たので、自分用メモとして残しました。
iOSDCの概要
iOSDC Japan 2021はiOS関連技術をコアのテーマとしたソフトウェア技術者のためのオンラインカンファレンスです。 日本中、世界中から公募された100本を超える知的好奇心を刺激するトークの他にも、パンフレットに掲載された技術記事、参加者であれば誰でも作れる即興のトーク・アンカンファレンスなど、初心者から上級者まで楽しめるコンテンツがみなさんを待っています! 9月17日(金)〜9月19日(日)はお祭りです!お楽しみに!!
その他
全体の感想
- ニコ生について
- プレミアム会員ではないので少し不便(時間を戻して見れなかったり、一時停止ができなかったり)
- 途中で止まることがちょこちょこある(戻したりできないのでその部分が抜ける)
- 1ヶ月間タイムシフトで公開しているらしいので後から見直せる
- 内容について
- その他
- Discodeを使ってみた(前日にインストール)
- 設定がいけていないのか、通知がめちゃくちゃくる
- 質疑が聞けて少しカンファレンス感があって良かった
- Discodeを使ってみた(前日にインストール)
- 後で調べたいこと
- SwiftUIでハードウェア連携
- GraphQL
- Concurrency,async/await
- 面白そう
- Nandgameとか面白そう(hak & tomzoh)
自分が聞いたセッション
- 9/17
- SwiftUIで使ったアプリを1年運用してみてわかったこと / Akifumi Fukaya
- 9/18
- 初めてのハードウェア対応 / Takeshi Yokokoji
- Network ExtensionでiOSデバイス上で動くパケットキャプチャを作る / 岸川克己
- エンジニアの視点から見る(株)ゆめみの働き方 / yumemiイシガキ
- 実践 iOS オープンソースプロジェクトの始め方 / Yoshimasa Niwa
- 100日間AR表現を実装して見つけた面白い実装を全力解説 / 服部 智
- Swift 5.5 async/await を支えるモナド、継続、コルーチン / 稲見 泰宏
- Finder Sync Extension で Mac 向け便利ツールを作ろう / Kyome
- LT
- 「スタディサプリ」がFull SwiftUIを選択した先に見えてきたもの。 / Hajime Nakamura
- 9/19
- 実践 SharePlay / Group Activities / 所友太
- 大規模なアプリのマルチモジュール構成の実践 / giginet
- LINEアプリのモバイル体験改善に向けた取り組み / 早石 明浩 / 富家 将己
- ケースに応じたUICollectionViewのレイアウト実装パターン / to4iki
- SwiftUI+GraphQLで新規プロダクトの継続的破壊(Continuous Destruction)に立ち向かう / Takuya Yokoyama
- async/awaitやactorでiOSアプリ開発がどう変わるか Before&Afterの具体例で学ぶ / Yuta Koshizawa
- hak & tomzoh 特別企画 / hak(時間が重なったので途中から)
https://fortee.jp/iosdc-japan-2021/timetable
9/17
SwiftUIで使ったアプリを1年運用してみてわかったこと / Akifumi Fukaya
https://speakerdeck.com/akifumifukaya/iosdc21
- KAUCHE
- シェア買いでお得
- 歴史
- 2020年リリース
- 中身
- iOS13移行
- SwiftUI, UIKit ミックス
- どうしてもUIKitでしか実現
- アーキテクチャ
- MVVM
- アーキテクチャ
- MVVM
- View <-> ViewMode l<-> Model
- View:ProductDetailView
- VM: ProductDetailViewModel
- V: ProductDetail
- MVVM
- SwifrUIの問題
- NavigationLink.destinationに設定したViewはNavigationLinkが読み込まれると同時に初期化されてしまう
- LazyViewを導入すると初期化するタイミングを調整
- SFSafariとNavigationLinkの相性が悪い
- 違うのを使うのが良い
- EnviromentObjectで意図しない画面遷移や画面が真っ白になる
- EnviromentObjectを利用しない
- NavigationLink.destinationに設定したViewはNavigationLinkが読み込まれると同時に初期化されてしまう
9/218
初めてのハードウェア対応 / Takeshi Yokokoji
https://speakerdeck.com/ykkc/chu-metefalsehadoueadui-ying
- STORESレジの紹介と対応ハードウェア
- 開発
- 苦労したこと
- 接続状態管理
- ハードウェア固有の動作差分
- リモートワークで機器が増える
Network ExtensionでiOSデバイス上で動くパケットキャプチャを作る / 岸川克己
https://www.icloud.com/keynote/0Cj2gU0ETpApwIpSA2soblajA#iOSDC_2021
- Network Extension、パケットキャプチャの概要
- Charles proxy for iOSのようなパケットキャプチャを作るには
- VPNとは
- Network Extensionで簡易VPNクライアントとサーバーを実装する
- Packet Tunnel Providerで作成
- Content Filterではできない
- 外部への出力が制限されている(Xcodeのコンソールに表示くらいしかできない)
- 開発
- Packet Tunnel Providerで作成
- UDPのキャプチャ
エンジニアの視点から見る(株)ゆめみの働き方 / yumemiイシガキ
- 会社の紹介
- 音声
実践 iOS オープンソースプロジェクトの始め方 / Yoshimasa Niwa
- ライブラリの開発
- APIデザイン
- わかりやすい名前を
- コンポーネント間の知識の共有
- 下位互換性の担保
- ライセンス
- 法的な問題がわかる人に相談
- どうやって表示するか
- SPDXを使う
- IDETem;ate<acros.plist
- パッケージング
- Swift Package Manager
- 事実上のデファクトスタンダード
- CocoapodsやCarthageへの対応
- すぐに試せるようにする
- Exaple.Xcodeproj
- Swift Package Manager
- APIデザイン
- メンテナンスの計画
- プロジェクトの公開
- GitHub
- GitHubActions
- ISSUE_TEMPLATE
- PULL_REQUEST_TEMPLATE
- 広く使ってもらう
- コミュニティへの還元
100日間AR表現を実装して見つけた面白い実装を全力解説 / 服部 智
- 顔ペイント
- 機能
- 顔にペイントする
- 「Tracking and Visualinzing Faces」を参考に作成
- program
- ARSCNViewDelegate
- iOS15以降
- 「Creating an App for Face-Painting in AR」も同じような機能が実装されている
- 機能
- 現実スプラトゥーン
- 機能
- 壁とかにペイントする
- 実装
- LiDARでのスキャンとMesh化
- カラーボールの挙動
- Appleのサンプルが参考になる
- 機能
- ARなぞとき
- 機能
- 空中に文字を表示
- 機能
- BlotterMedia風効果
- 機能
- 身体の周りにオーラがつく(超サイヤ人)
- 機能
- EyeTrack HeatMap
- 機能
- 見ている箇所が赤くなる(ヒートマップ)
- 機能
Swift 5.5 async/await を支えるモナド、継続、コルーチン / 稲見 泰宏
https://speakerdeck.com/inamiy/iosdc-japan-2021
- 非同期計算
- 従来
- コールバック方式による非同期計算
- コールバック地獄
- リアクティブ・プログラミングによる非同期通信
- コールバック方式による非同期計算
- swift5.5
- async/awaitによる非同期計算
- 実はどれも同じような考え
- 従来
- 関数型プログラミング
- コルーチン
- 継続
- モナド
- モナド
- 継続
- コルーチン
- コルーチン=中断と再開できる機能を持つ関数
- データ競合が起きないようにできる
- まとめ
- まとめ
Finder Sync Extension で Mac 向け便利ツールを作ろう / Kyome
https://zenn.dev/kyome/scraps/7f1e4af8f3f212
- Finder Sync Extension
- ローカルとリモートでファイルを動機する
- 例)DropBoxなど
- 指定したフォルダとその階層化の監視
- 動機状態の表示
- カスタムコンテキストメニューを提供
- カスタムツールバーボタンを追加できる
- ローカルとリモートでファイルを動機する
- Finder Sync Extension 実装の基本
- Mac側の設定で機能拡張の有効が必要
- project作成
- Finder Sync Extensionターゲットで作成
- 収容アプリと機能拡張のバージョンを合わせる
- 実装
- FIFinderSync
- 操作の監視
- カスタムコンテキストメニューの追加
- カスタムツールバーボタンの追加
- Asset Catalog
- アイテムにバッジをつける
- デバッグ方法
- 便利ルーエう作成時のTips
- NSAlert,NSOpenPanel,NSSavwPanel
- FIFinderSync
- 注意点
- 便利ツール
- ScaleHelper
- @2x,@3xの画像が自動生成できる
- RenameHelper
- ファイルを連番でリネームできる
- NewCanvas
- 無地の画像ファイルを作成できる
- ScaleHelper
LT
- Nearby Interactionを利用した空間認識 / yoshimi
- 再現ができない?特定ができない?ZOZOTOWNアプリのトップクラッシュに立ち向かった話 / chichilam
- フィードバックから原因究明
- 使い続けると落ちる→メモリの増築が原因
- リニューアルでリッチになったのでメモリが増え続けるクラッシュ
- 使い続けると落ちる→メモリの増築が原因
- 解決に向けて
- 画面遷移で画像を作り続けている箇所を改善
- まとめ
- 原因特定は色々な角度から検証し続ける
- フィードバックから原因究明
- M1チップの脆弱性M1racleを読み解く / 星野恵瑠
- Hacking the Tesla API / きんちゃん。
- やってみよう!iOSDCデザインスポンサー! / FromAtom
- デザインスポンサーは何をするの?
- 公式ロゴ
- 公式サイトを作る
- スケジュール
- 5/27 ロゴのデザイン案
- 6/12 ロゴ完成
- 7/6 サイトデザイン案
- 8/4 サイトリリース
- メンバー
- デザイナー
- エンジニア
- とりまとめ
- 社内交渉
- スポンサーのメリット
- 人のマッチ
- 毎年模索
- 良かったこと
- 全体のブランディングができる
- みんなが使ってくれる
- 水石琴乃さんに読み上げられる
- デザインスポンサーは何をするの?
- iOS 15以降のNotificationのあり方について考える / haseken
- Notification新機能
- Notification Summary
- 集中モード
- Interruption Level
- これらの影響
- Notificationがユーザーの目に触れにくくなる
- Notificationがシステムに深く係る場合、サービスに支障が出る
- Notification新機能
- あなたの知らないSafariのExperimental Featuresの世界 / HEAVEN chan / ikkou
- SwiftUI.Textを使いこなす5分間 / あつや
- 最強の500系エラー画面を探し求めて / akatsuki174
- 「Hey Siri, おはよう」に憧れて / kiwi
- スマートリモコンスイッチボット
- 専用のアプリからSiriでショートカット実行
- Homekid
- Homebridge
- 現在のステータスが返せない
- Homebridge
- スマートリモコンスイッチボット
「スタディサプリ」がFull SwiftUIを選択した先に見えてきたもの。 / Hajime Nakamura
- 技術検証
- 想定するデザインのプロトタイプをSwiftUIで実装
- Full SwiftUIでのアーキテクチャパターンの検証
- UIKitを組み合わせる仕組みの検証
- 見えてきたメリット
- アニメーション
- アニメーション
- 見えてきたデメリット
- ライフサイクル系メソッドの不安定な動作
- Firebaseの自動スクリーントラッキングが対応していない
- →ナビゲーション時に手動で送信するコード作成
- ライフサイクル系メソッドの不安定な動作
- 見えてきたTips
- プログラムで画面遷移を制御する
- APIと通信して条件に適した場合のみ画面遷移したい
- 隠しNavigationLink
- APIと通信して条件に適した場合のみ画面遷移したい
- プログラムで画面遷移を制御する
- 所感
- 開発体験が加速
- UIの実装がスピードアップ
- 実装の変更やレビューがしやすい
- 開発体験が加速
9/18
実践 SharePlay / Group Activities / 所友太
- SharePlay入門
- 実践
- その他
- QA
大規模なアプリのマルチモジュール構成の実践 / giginet
https://speakerdeck.com/giginet/da-gui-mo-naapurifalsemarutimoziyurugou-cheng-falseshi-jian
- このトークについて
- マルチモジュール分離前の状況
- 目的
- 開発時のビルド待ちを減らしたい
- これが一番の目的
- 機能感の依存や副作用を減らしたい
- テスト記述の簡略化
- ObjCなどの古い実装を隠蔽したい
- 開発時のビルド待ちを減らしたい
- アーキテクチャ
- 目的
- 現在のCookpadのアーキテクチャ
- 問題点
- Feature Module間は依存関係を持たないようにする(縦ではなく横の連携)
- Environmentを経由して依存にアクセスする
- DescriptorとResolver
- Environmentが持つ依存解決の仕組み
- UIViewcontrollerを隠蔽できる
- Feature Module間は依存関係を持たないようにする(縦ではなく横の連携)
- マルチモジュール化の効果
- まとめ
- 実践的マルチモジュール
- モジュール分離を浸透させるには
- すべてを一度に移行しない
- 穴を塞ぐ
- 開発者が迷う点を減らす
- すべてを一度に移行しない
- 古い実装(既存)を残して、新しい機能から入れられるようにする
- environmentで吸収
- 古いViewControllerへの遷移
- Resolver経由で取得する(古い実装を無理に変更するのではなく、既存を隠蔽して使えるようにする)
- 古い実装(既存)を残して、新しい機能から入れられるようにする
- 穴を塞ぐ
- 開発者が迷う点を減らす
- モジュール分離の浸透のためにできること
- モジュール分離を浸透させるには
- まとめ
- 質疑(Discode)
- バゼルなど他のビルドは検討しなかった?
- 標準のビルドに載せたい、今回は選択しなかった、知見があれば教えてほしい
- 少しだけ違う場合の使いまわしどうする?
- 別々に用意することが多い
- 全く同じであれば使い回せる仕組みになっている
LINEアプリのモバイル体験改善に向けた取り組み / 早石 明浩 / 富家 将己
- 会社紹介
- ミッション
- CLOSING THE DISTANCE
- Life on LINE
- new、買い物、電話、音楽など
- 10年
- 1つのリポジトリ
- Objective-C -> Swift(86% 移行済み)
- 3バージョン対応(iOS13~15サポート)
- ミッション
- iOS11 & iPhone X対応
- いくつも不具合あり
- 改善点
- 出たしが遅かったので、早めに対応できる体制をつくる(Eary Bird TF)
- Eary Bird TFでの対応
- 組織変更
- 2021年に組織変更
ケースに応じたUICollectionViewのレイアウト実装パターン / to4iki
https://speakerdeck.com/to4iki/kesuniying-zitauicollectionviewfalsereiautoshi-zhuang-patan
- 目次
- テーマ背景
- UICollectionViewのおさらい
- レイアウト実装の設計
- まとめ
- UICollectionView
- UICollectionViewLayout
- UICollectionViewFlowLayout
- 縦横に均等配置、動的なレイアウトはできない
- UICollectionViewDelegateFlowLayout
- 複雑なレイアウトは苦手
- UICollectionViewLayoutCustom
- 要素に応じてレイアウトを頻繁に更新するケース
- 比較的難易度の高い実装となる
- 例)可変長のアイテムをTopに整列するなど
- UICollectionViewCompositionalLayout
- iOS13以降
- カスタムと同じようなレイアウトをより簡単に実装
- 例)
- 利用ケース
- UICollectionViewFlowLayout
- UICollectionViewLayout
- 実装
- 方針
- UICollectionViewCompositionalLayout + DiffableDataSource
- レイアウトとデータを分離
-
- DiffableDataSource
- 型による制約でデータとUIの不整合を防止
- SectionProvider
- レイアウト・データ反映の提供
- SectionModel
- 表示データとProviderを保持
- DiffableDataSource
- 方針
- まとめ
- その他
- GitHubにサンプルコードあり
SwiftUI+GraphQLで新規プロダクトの継続的破壊(Continuous Destruction)に立ち向かう / Takuya Yokoyama
- Continuous Destructionとは、改善・変更のこと
- STORESレジについて
- 破壊(変更)への対応
- 変更に対応しやすい→ユーザーに価値を届けやすい
- SwiftUI
- レイアウト変更しやすい
- 表示確認がしやすい(アプリの起動が必要ない、複数パターンの確認もできる)
- STORESレジでの変更への取り組み
- デザインシステム=デザイン原則をまとめたスタイルガイド
- まとめ
- レイアウト変更しやすい
- GraphQL
- 強み
- 必要なデータだけ取得する
- 少ないリクエストで複数のリソースにアクセスできる
- STORESレジでの変更への取り組み
- 仕様変更を監視し通知する
- など
- まとめ
- まとめ
- SwiftUI+GraphQLをあわせてできること
- SwiftUIとGraphQLは1対1
- 振り返りと今後の展望
async/awaitやactorでiOSアプリ開発がどう変わるか Before&Afterの具体例で学ぶ / Yuta Koshizawa
https://zenn.dev/koher/articles/swift-concurrency-cheatsheet
- Concurrency(並行性)・・・iOSアプリ開発を劇的に変える可能性がある
- async/await
- Structured Concurrency
- actor
- Swift Concurrency
- iOS13から使える
- 質疑(Discode)
- 小さいアイコンと大きなアイコンで、大きなアイコンがくるまでは小さなアイコンを表示したい
- TaskGroupを使うと良いかも
- 小さなアイコンと大きなアイコンを非同期で取得する処理で同時にエラーが起きないか
- Excuteしている方でエラーが発生のみ発生されると思う
hak & tomzoh 特別企画 / hak(時間が重なったので途中から)
- 「作ってわかる」教材おすすめ
- 名著「CPUの創りかた」
- Nandgame・・・演算器を作るゲーム
- どこから情報を取得している?
LT
- ほんの一瞬だけでもConcurrencyの計算理論に触れてみませんか? / ばんじゅん
- 概念的な世界で説明
- CCS
- NDIとARKitを連動させた新しい映像表現 / 服部 智
- Swiftのソートアルゴリズムの特徴を5分できちんと知る / Takanori Hirobe
- Timsortと呼ばれるアルゴリズムを使っている
- Swift5.0から使われる(それまでは、Introsortが使われていた)
- 他の言語でも使われている
- ソートに重要なこと
- 速さ
- 安定性
- 同じ値の場合、ソートしても順番が変わらないと安全
- メモリ使用量
- Timsortと呼ばれるアルゴリズムを使っている
- Using Eigen from Swift (via C) / さのたけと
- Eigen
- SwiftからEigenを使えるようにする
- Swift<->C<->C++
- 5分でわかるIDFA / ATT / 神武
- IDFAで広告効果を計測する仕組み
- IDFAを使用できなくなった
- ATTを大体として使う
- ATT許可率をアップさせる
- メイン機能の後に表示する
- SKAdNetwork
- ユーザーの個人情報を含まないID
- AppStoreClientとアドネットワークでやりとり
- アプリの終活 / 久利龍義
- アプリを綺麗な状態にする
- 不要な機能、実装、画像の削除
- 時間を取られない状態にする
- 問い合わせ対応への負荷軽減
- 自動化
- READMEの最新化
- クローズに向けた機能の構築
- 注文定式機能追加
- 次のアプリへの相続
- 就活後の対応はほとんど0
- アプリを綺麗な状態にする
- 2段階認証実装の勘所 / ころころ
- 多要素認証
- 認証の3要素
- iPhoneの生体認証を多要素認証として使うことは難しい
- 多要素認証としての2段階認証
- TOTP
- ネイティブアプリでTOTPを実装
- 多要素認証
- 今、改めて振りたいiPhone搭載のセンサとその使い道 / Atsushi Otsubo
- 位置
- GPS
- 気圧センサ
- モーションセンサ
- メディア関連
- カメラ
- マイク
- その他
- LiDAR
- 輝度センサ
- 近接センサ
- 位置
- Kyash iOSアプリのQAの歴史 / konifar
- Hey Siri!マルチプラットフォームでのSiriショートカットの地雷を教えて / monoqlo