iOSDC 2022に参加してきました!
iOSDC 2022にサイバーエージェント様のスカラシップで参加させていただきました!
参加費、交通費を支給していただいて本当に助かりました。
その他にもランチや懇親会といった貴重な機会をいただきありがとうございます。
印象に残ったセッションをいくつか紹介、まとめをしていきたいと思います。
Day 0
ノートアプリのテキストエディタの解体新書
Noteアプリのテキストエディタがどのように実装されているのか、についてのセッションでした。
Noteアプリには見出し画像設定部分や、タイトル入力、本文入力などさまざまなUIのコンポーネントがあり、これらの実装にUICollectionViewCompositionalLayoutやattributedStringを利用するのではなく、UIStackViewを利用していました。
テキストエディタを作る上でのUICollectionViewCompositionalLayoutや, NSAttributedString, UIStackViewの利点や欠点がわかってよかったです。また、自分は文字が入力されていくと徐々にtextViewの高さが上がっていく処理がどのように書けばいいのか思い浮かばなかったので、それも知れてよかったです!
Swiftで我が家を便利に、安全に!
このセッションでは、ラズパイの制御からサーバーサイド、クライアントサイドまですべてをSwift(一部Python)で実装する手法が説明されていました。
私は普段C言語で電子工作をしていたので、ラズパイをSwiftで制御できるという点が驚きました。Rasberry pi OSだとSwiftのビルドが通らないので、Ubuntuを使用している点が参考になりました。
自宅の侵入者を警告する実演、とても面白かったです!
このセッションのブログです↓
Day 1
アニメーションAPIのすべて
タイトル通りアニメーションAPIのすべてを紹介するというセッションでした。
本当にCore Animationなんでもできるじゃん…という感じでした笑
クラッカーのようなアニメーションを作っていたり、Circular Loader, Sound Wave, Mirror Refrectionなど、とにかくたくさんのアニメーションがつくれて、さらにソースコードまで公開されているので、皆さんもよかったら見てみてはいかがでしょうか!私はあとでじっくり見させていただきます。
Core Animationは、アニメーションのためだけの仕組みではなくiOSの視覚表現の全てを支えるiOSアプリの基盤となるもの、という点に驚きました。
その他にも、UIViewとCALayerの役割や関係性などもわかりやすく解説されていて、とても勉強になる楽しいセッションでした!
正規表現って結局なんなのさ?~エンジニアのためのコンピューターサイエンス入門
結合律や交換律、分配律、決定性・非決定性オートマトンなどの離散数学の基礎的な部分の解説から、それらの知識を踏まえて言語がどのように決定するかの仕組みを解説していました。
正規表現は決定性有限オートマトン, 非決定性有限オートマトン, 一般化非決定性有限オートマトンで表すことができ、またその逆も表すことができるという点が面白いなと思いました。
大学一年生の時に離散数学を履修していたのですが、忘れてしまっていたのでとても良い復習になりました笑
UIStackView逆引きレシピ
このセッションはLTでした。
View間のspacingの値がそれぞれ異なる場合、自分はsetCustomSpacing(_:after:)を使っていたのですが、後の仕様変更でViewが新たに追加されても対応できるように、UIStackViewを入れ子にするという点が勉強になりました。
あと「UIStackView、かわいいですよね!」が印象的でした。
Day 2
Swift Concurrency時代のiOSアプリの作り方
このセッションではログインボタンが押された時の処理をSwift Concurrencyを用いてどのように書くのかを解説していました。
勉強になった点がいくつかあったので備忘録も含めて紹介します!
Sendableについて
actor境界を超えるもの、として覚えていてあまり意味がわからなかったのですが、Sendableは並行に扱っても安全な型であることを示すもの、@Sendableクロージャ(Task.initやTask.detachedなど)にキャプチャするのに必要なもの、という解説を聞いて納得しました!
Task.initではactor contextを引き継ぐ
このセッションではViewController内のメソッドloginButtonPressed内でTask.initを記述していて、UIViewControllerはMainActorで保護されているので、Task.initのクロージャ内でも外でもmainスレッドで実行されます。actor contextを引き継ぐ、というのはそういうことか!となりました。
ちなみに、Task.initのクロージャの中でdeferをするとMainActorで保護しないと判断されてしまうバグがあるらしいです。今後の修正に期待しましょう…
Swift ConcurrencyはQiitaやZennを通して学習していたのですが、アプリには導入したことがなかったので、とても参考になりました。
まだ理解できていない部分があるので、じっくり発表資料を見させていただきます🙇
懇親会
懇親会の写真です!
実際にサイバーエージェントさんでiOSエンジニアとして働いている方々と、もう一人スカラシップで来ていた学生さんと一緒にご飯を食べました。
私が聞きたかった質問の全てに答えてくださったり、アドバイスなどもいただけて本当に感謝しかないです。
さいごに
iOSDCのスタッフ、登壇者の皆さん、本当にお疲れ様でした!
自分にはまだ難しいセッションがありましたが、いろいろなことが学べて本当に来てよかったです!
登壇してる人みんな堂々としててかっこいい…!!
自分もいつか登壇できるように日々勉強頑張りたいと思います。