iOSDC Japan 2023 に参加してきた!
プラチナスポンサーを務める株式会社CyberAgentのスカラシップ生に採用していただき、iOSDC Japan 2023 に現地参加してきました!
大変お待たせいたしました。
iOSDC Japan 2023のレポート記事です。
今回、iOSDC初参加でした。
最初は、楽しみであり、緊張していました。
しかし最後には、楽しかった!また参加したい!という気持ちでした。
ということで、この記事では、印象に残ったセッションを2つ紹介します。
以下2セッションは、各記事の内容を抜粋したものです。
詳細は各日の記事をご覧ください。
Swift Packageを使った巨大な依存グラフのキャッシュ戦略
このセッションは、LINE株式会社で、LINEの開発者体験を向上させるチームで働いている、giginetさんの発表でした。
まず、LINEアプリの開発における課題を説明していました。
LINEはプロジェクトが大きく、コード行数にして200万行以上、Xcodeプロジェクト数は300以上あるそう。
コードベースが大きくなったことから、Bazelを採用することになりました。
ビルド時間は早くなったが、メンテナンスコストが上がったことなどが、iOSDC Japan 2022 のスポンサーセッションで紹介されていました。
https://youtu.be/6w8JWtvD1yE?si=UbOeEhKbMtTwgSuK
見えてきたBazelの課題から、標準機能である、Swift Packageが最高の解決策であることが導き出されます。
これでめでたしめでたしかと思いきや、そうはいきません。
Swift Package にもデメリットが存在します。
LINEの規模になると、その課題がより顕著に現れるそう。
まず、キャッシュ機構の不足です。
Swift Packageの成果物は、DerivedDataに保存され、揮発しやすいという特性があります。
次に、複数のXcode Projectから利用することの難しさです。
LINEには、数百のXcode Projectが存在するため、Swift Packageのインテグレーションを扱うのは難しいです。
理想は、
- SwiftPMによるSwift Packageの依存解決と取得
- ビルド成果物をキャッシュ、共有、再利用
- Xcodeプロジェクトからの利用
という流れです。
これを実現するのが、Scipioです。
実は、僕自身、普段から、SwiftPMを使った開発をしているのですが、依存のキャッシュが揮発しやすいことに悩まされていました。
そこで、調べている中で、Scipioの存在を知ったので、トークの中で、Scipioの名前を聞いた時には驚きました。
Scipioは、SwiftPMを利用して、XCFrameworkを生成するビルドツールです。
主な機能としては、
- リソースバンドルのサポート
- Static/Dynamic Frameworkの生成
- リモートキャッシュシステム
があります。
XCFrameworkとは、Appleが開発したビルド済みライブラリを配布するための形式で、内部では複数プラットフォームのFrameworkを持っています。
Scipioの動作の流れは、
- SwiftPMでPackage.swiftから依存を解決
- パッケージからXCFrameworkを生成
となります。
Scipioには2つの動作モードがあります。
1つ目は、prepareモードです。
CocoaPodsやCarthageに近い動作をします。
パッケージマニフェスト (PodfileやCartfileと同じような役割) を記述し、Scipioのprepareコマンドを実行して、XCFrameworkが生成されます。
2つ目は、createモードです。
SwiftPMでPackage.swiftから依存を解決して、パッケージからXCFrameworkを生成します。
Scipioの機能として大きいのが、キャッシュシステムです。
1度ビルドしたものは、再度ビルドされません。
成果物をS3のリモートストレージに置くことで、開発者間でキャッシュの再利用ができる、リモートキャッシュ機能も大きな特徴です。
その他、Scipioの内部実装について、細かく説明されていましたが、全てこの記事で振り返ると、膨大な分量になってしまうので割愛します。
非常に興味深い内容でした。
Scipioは、その機能から、始めやすく、やめやすいという特徴があるので、今後、使ってみようと思います。
watchOSとMapKitを駆使した位置情報収集:バッテリー消費最小化と取得精度向上テクニック
Shoko Satoさんは、LINEのDevRelで、iOSDC 2023 にプロポーザルを出すために、2022年12月からiOSの学習を始めたそう。すごい...
個人開発しているアプリを題材に、位置情報、消費電力、MapKitについての説明と、実証実験についてお話ししていました。
僕自身、個人開発しているアプリで、MapKitを使っていることもあり、今回のiOSDCのセッション中でもっともついていくことができました。
それでも、体系的に説明されていたこともあり、新たな発見があり、面白かったです。
このセッションで、最もボリュームがあったのが、実証実験。
位置情報を取得するにあたり、いくつかのプロパティがあります。
それらを変えながら、精度とバッテリ消費を記録するという実験でした。
プロパティの1つに取得精度があり、6段階に分かれています。
- kCLLocationAccuracyBestForNavigation
- kCLLocationAccuracyBest
- kCLLocationAccuracyNearestTenMeters
- kCLLocationAccuracyHandredMeters
- kCLLocationAccuracyKilometer
- kCLLocationAccuracyThreeKilometers
ナビゲーションにあたり、実用的なものになると、3より精度が高いものになるかと思いますが、1〜3のバッテリー消費にはほとんど差がありませんでした。
精度とバッテリー消費量はトレードオフではあるものの、以上のような結果を見る限り、最高精度でも良いのでは?という気がしました。
他のプロパティとの組み合わせも重要であるため、ユースケースに合わせて実装する必要があるという結論に至りました。
まとめ
いろいろなテーマのセッションがあり、また、それぞれが濃く、ついていくのがかなり大変でしたが、聞いていてとても楽しかったです。
また、常に、新たな視点が増えていく感覚があって、これからの学習に役立てたいという気持ちが強く残りました。
また、登壇者のみなさんをみて、かっこいい...、いつか発表したい...という気持ちも強くなりました。
僕のiOSに対する知識が不足していることで、セッションでの発表内容を十分に理解できなかったことや、コミュニティに参加する機会が今までなかったことから、参加者の方々とお話しする機会を十分に活かすことができなかったのが心残りです。
iOSDCの雰囲気がだいぶわかったので、その温度感を忘れず、iOSの学習に励み、また来年参加したいと思います!!
今回のiOSDC Japan 2023への参加は、iOSDC Japan 2023のプラチナスポンサーを務める、株式会社CyberAgentのスカラシップ制度によって実現することができました。
ご支援いただきまして、本当にありがとうございました。
Comments ()