はじめに
ついに最終日になってしまいました。。。
昨日までに引き続き、今日も感想を書いていこうと思います。
悔いのないように全力で参加します!
iOSDC Japan 2021 前夜祭をタイムシフトで追いかけて
iOSDC Japan 2021 day1 参加セッションの感想
バックグラウンドでアプリがキルされても怖くない!アプリの状態を元に戻すリストア機能の全て
リストアに関しては今までAndroidでは意識していたのに、iOSではなぜか意識していなかったことに気付き参加しました。
たったこれだけでリストアできるようになるというのは知らなかったのでとても勉強になりました!
入力中データの復元はNSCoder
にセットすればリストアできるというのも手軽で良いなぁと感心していたら...
SceneDelegate
が入ると機能しないとの事で衝撃を受けました。笑
でもSceneDelegate
でのNSUderActivity
を使った対応方法もしっかりご紹介いただき、Storyboard
だけでなくSwiftUIでの対応もすぐに取り入れたいほど参考になりました。
スポットライト検索でアプリの機能がヒットするようになるというのも感動でした!
元ゲーム開発者が贈る描画パフォーマンス改善
iOSの描画の仕組みにはあまり触れる機会がなかったので個人的に興味があり参加しました。
Flutterの描画をMetalDebuggerを使って描画の流れを追うという発想はなかったので目から鱗でした。
さらにライブデバッグのような事もされていて手順や見方がとてもわかりやすかったです。
テクスチャーの説明についても初めて聞く話でとても興味深かったです。
UIKitに関してはオフスクリーンレンダリングが重くなる原因なんですね。
発表者さんのUIKitの描画の考察もとても納得感がありました。
昨日の発表でもありましたが、やはり改善をしたい場合はまず計測が大事なようです。
描画に関してはaAnimationHitchesというものを使って計測が可能との事でした。
オフスクリーンレンダリングをなくす工夫もとても勉強になりました。
アルファブレンドについても意識していなかったので今後は気にしていこうと思います。
最後の発表スライドもSwiftUIで実装されていたという衝撃告白にめちゃくちゃ驚きました!
スライドのスクロール操作どうやってやっているんだろうとは思っていましたがまさかそんな方法があったとは!
技術力も素晴らしくとても楽しいセッションでした。
発表で使われた絵文字表示アプリは以下のリポジトリで確認できるようです。
https://github.com/sidepelican/iosdc2021/tree/main/EmojiMania
WidgetKitで良い体験を作るには
現状ウィジェットを使ってはいないのですが、現職のアプリでも一部TodayExtensionを利用している部分があったり、今後の機能追加でウィジェットを採用する可能性も大いにあるかなと考えていたので、参考にしたくて聞きにいきました。
冒頭ではWidgetKitの注意点などを解説していただけてとても助かりました。
SwiftUIで実装する必要がある事はしていましたが、UIKitをSwiftUIでラップしても使えないという点は気をつけないといけないなと感じました。
ビューの更新に関する考え方もアプリとは異なるので気を付けるポイントになりそうです。
予算という概念もこれまでのアプリにはなかったので覚えておきたいと思います。
メモリが30MBまでという制限があり、シミュレータではそれを超えても動くことがあって気付かないというのは普段開発されているからこそのTipsだなと感じました。
セッション後半のより良いウィジェットを実装するための勘所についてもとても参考になりました。
ウィジェットがクラッシュしたりなどで真っ黒になるというのは、普段使わない身としては初めて聞く話で勉強になりました。
最後のメッセージはウィジェットに限らずソフトウェアを開発する上では常に言えることだったので、身が引き締まりました。
AVPlayerできちんとコンテンツ保護
現職でも動画再生を機能として持つアプリがあったり、これまでも動画関連のアプリに何度か関わったことがあったので気になって参加しました。
このあたりのHLSの仕組みは改めて見てなるほどなぁとなりました。
コンテンツ保護をする必要性についてもとても納得感があると感じました。
また、コンテンツ保護の方法についてもあまり知識がなかったので、詳しく説明していただけて勉強になりました。
さらに暗号化に関する知識まで紹介されていて、セッションのテーマからは想像していなかった知見まで得られてお得な気分になりました。笑
実際にAppleが用意しているFairPlayStreamingについても詳細に説明されていて、かなり実践的な内容だったと感じました。
余談ですが、FPSと略すと画面処理の方と混同しそうですよね...笑
最後にはiOSに限らずマルチプラットフォームでの対応についても紹介されていました。
セッションを通して、動画はやっぱり奥が深いなぁと感じました。
セッション開始前はクライアント側で録画やキャプチャを防ぐ方法などが紹介されるのかなと思っていたのですが、実際にはもっと本質的な内容になっていて非常に学びが多かったです!
オフライン編集もできる複雑なデータ構造を端末間で同期するために
この時間は気になるセッションが盛り沢山でとても悩んだのですが、オフライン編集、端末間同期というパワーワード(?)に誘われて聞きにいくことにしました。
発表者の方は趣味で縦書きのテキストエディタを開発されているそうで、のっけからすごいなぁと感じました。
課題の背景をしっかり説明されているのも、聞く側がユースケースを想像しやすくて良かったです。
オフライン編集も考慮した同期の話なのでどうやるのかなと気になっていたのですが、端末間通信は使わずに同期用のサーバーを置く方法だったので少し意外でした。
これをどうオフライン対応させるのか楽しみです。
冒頭では各利用パターン別の考慮ポイントを整理されていて、見ている側もとても理解しやすかったです。
ケース1 | ケース2 | ケース3 | ケース4 |
---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
次に、同期を考えた際に課題となるコンフリクトやディレクトリ構造を持った複雑なデータの考え方について紹介されていました。
データの並び順を保証するためにidを付与して絶対指定するのではなく、前のデータを指定して相対指定するという対応はなるほどなと感心しました!
最後に紹介されていた同期に関する5つのTipsについても非常に参考になる内容でした。
セッションを振り返って、オフライン対応データを端末間同期するためにどんな技術を使うか、という話ではなく、同期サーバーに対してどういうアプローチで同期をしていくかという考え方という内容でした。
話を聞きながら、gitの裏側もこんな感じになっているんだろうなぁと想像して楽しかったです。
SceneKitを使ってアプリのクオリティを劇的に上げる
アプリのクオリティが劇的に上がると言われたら、いち開発者として聞かないわけにはいきません。
これまで一部にSpriteKitを組み込んでアニメーションなどのクオリティを上げるという事はやったことありますが、その用途でSceneKitは使ったことがないのでとても楽しみです。
冒頭のこの悩みについては個人開発をやる身としてとても共感できました。
セッションではまずSceneKitが何者かという事を詳しく解説していただいてとても分かりやすかったです。
SceneKitはARやゲームくらいしか用途を思いつかなかったので、アプリのクオリティを上げるために導入するというのは新しい発想でした。
特に画像に光の反射のようなアニメーションを適用するというのは用途も多そうで、是非身につけたいテクニックだと感じました!
少ないコードで実現できるのも素晴らしいですね。
シェーダーアニメーションの知識がほとんどなかったので、shaderModifires
を使うのはハードルが高いと感じましたが、GLSL Sandboxというサイトでサンプルが多く公開されているとの事なので色々試してみたいなと思いました!
セッションで紹介されたアニメーションのサンプルコードはこちらのリポジトリから確認できるようです。
LT前半
ほんの一瞬だけでもConcurrencyの計算理論に触れてみませんか?
SwiftConcurrencyを理解するための脳トレ的なお話でした。
触りの部分だけの紹介だったので調べていくとどんどん沼にハマっていきそうな気がしました。笑
NDIとARKitを連動させた新しい映像表現
無線で映像を転送する技術を使って、iPhoneをスタジオ機材にしてしまおうという大変野心的な内容でした。笑
苦労して実装されたであろう内容を惜しげもなく公開してくださるのはとてもありがたいです!
Swiftのソートアルゴリズムの特徴を5分できちんと知る
Swiftが採用しているTimsortというアルゴリズムについての紹介でした。
ソートのアルゴリズムについて今まで気にした事なかったのでとても勉強になりました。
Using Eigen from Swift (via C)
SwiftからEigenというC++製の行列計算ライブラリを使うお話でした。
SwiftからはC++を直接使えないので昨日聞いたセッションにもあったObjective-C++でラップするのかと思ったんですが、関数ポインタのような形で対応されていてすごいなと思いました。
5分でわかるIDFA / ATT
今世界的にホットな話題であるIDFA絡みのお話でした。
神武さんのトークやスライドはいつも面白くて楽しみにしています。
TL後半
アプリの終活
会社の統合によりアプリを終了することになってからの動きについての紹介でした。
エリアごとにクローズしていく運用にエンジニアの手が取られないように対応していったのは素晴らしいなと思いました。
今、改めて振りたいiPhone搭載のセンサとその使い道
iPhone端末に対する入出力に関するお話でした。
ユーザー体験に直接影響する部分なので大切なところですね!
iPhoneに搭載されているセンサーを改めて見直す事で新しいアプリのアイディアが生まれそうな予感がしました。
Kyash iOSアプリのQAの歴史
アプリのバグが出ないように4年半工夫されてきた事の紹介でした。
メンバーが少ない時期の施策から組織化されていく様子が追体験できて学びのあるTLでした。
Hey Siri!マルチプラットフォームでのSiriショートカットの地雷を教えて
ご自身の経験によるSiriショートカット実装のTipsの紹介でした。
結論のSiriは完全にコントロールできないのでAppleにお祈りするしかないというのは笑ってしまいました。笑
2段階認証実装の勘所
多要素認証を用いた認証のお話でした。
途中接続が悪くてリテイクしたのはとても印象的でした。笑
TOTPを実装する際のTipsが紹介されていてとてもためになりました。
おわりに
今年もあっという間の3日間でした。
毎年素晴らしいイベントを開催してくれる長谷川さんはじめ運営の皆様には感謝でいっぱいです。
今年からナレーターに立木文彦さんが加わり、スピーカーは立木さんに名前を読み上げてもらえるというご褒美が追加されました。
来年こそは立木さんに名前を呼んでもらって、ついでに素晴らしいコミュニティに少しでも貢献できるようにネタを探して登壇チャレンジしたいと思います!
みなさまお疲れ様でした!