見出し画像

【REALITY Engineer’s Meeting with Cluster】async/awaitをREALITYのiOSの開発に導入したい!【勉強会レポ】

こんにちは、REALITYアプリのiOSエンジニアのあおやまです。

先日、clusterさんとの勉強会があり、そこで「async/awaitをREALITYのiOSの開発に導入したい!」というタイトルで発表してきました。
この勉強会のために気合入れて、2年ぶりにmeta questを引っ張り出して参加したのですが、VR酔いが戻っており当日は目を瞑って移動していました🥺

当日はたくさんのご参加ありがとうございました。
この記事では、この勉強会でお話しした内容を、補足などを追加しながら紹介します。

async/awaitとは?

WWDC21SwiftConcurrencyが発表されました。
Swift5.5から利用でき、async/awaitやactorなど非同期処理、並列処理を簡潔に記述できるAPIが含まれています。

async/awaitの活用

async/awaitは、カメラの権限を取得する場面で活用できます。
例えば、アバター動かすためのフェイストラッキングにカメラが必要な場合に、アバターの画面へ遷移する前にカメラの権限をチェックする必要があるという場面がよくあると思います。

これまでは、AVCaptureDevice.requestAccessのコールバックを使って、権限の有無を確認をしていました。

これからは、AVCaptureDevice.requestAccessがasync/awaitを利用して、権限の有無を確認できるようになりました。

https://developer.apple.com/documentation/avfoundation/avcapturedevice/1624584-requestaccess

async/awaitを利用すると、コールバックのネストが無くなり、簡潔に書けるようになります。

この機能は、ぜひREALITYのiOSの開発でも利用したいとなり、導入の検討を開始しました。

async/awaitの対応状況

async/awaitは、iOS15以降はXcode13.0から、iOS13, iOS14はXcode13.2からサポートされました。
REALITYはiOS14以降をサポートしているのでXcode13.2がリリースされると導入できる、はずでした・・・。

async/awaitをREALITYのiOSの開発に導入したい!

Xcode13.2リリース日の様子

Xcode13.2のリリース日の前週に申請済みだったので、リリース日にXcode13.2の調査を開始しました。

Xcodeを諸々更新し、async/await使ってカメラとマイクの権限のチェックの機能をリファクタしてPull Requestを作りました。
これは、事前にasync/awaitをどこに入れると良さそうか相談済みでした。

async/awaitはホットな話題だったため、ブログも下書きを始めました。

しかし、手元で動作確認していると、iOS14でクラッシュする事に気付きました。
Swiftのフォーラムに投稿された中にも、クラッシュの報告があり、これと同じ現象をチームの複数の環境で再現されました。
これにより、async/awaitの導入は見送りになりました。無念・・・。

https://forums.swift.org/t/async-await-crash-on-ios14-with-xcode-13-2-1/54541

しかし、Xcode13.3で修正予定と投稿がありました。
Xcode13.3に期待!!!

https://forums.swift.org/t/async-await-crash-on-ios14-with-xcode-13-2-1/54541 

まとめ

async/awaitの紹介とREALITYに導入したい!という話でした。
Xcode13.3が勉強会の当日までにリリースされていたら、「導入したい!」ではなく、「導入した!」にタイトルを更新したかったのですが、間に合わなくて残念でした。

メタバース領域でも、ネイティブアプリ開発能力が求められています!

REALITYでは一緒にasync/awaitなど最新の技術を取り入れながら、REALITYを開発してくれる仲間を絶賛募集中です!
カジュアル面談なども開催しているので、お気軽にお声かけください!
よろしくお願いします!