iOSDC Japan 2023 Report Day 0

iOSDC Japan 2023 Day 0のレポート記事です。

iOSDC Japan 2023 Report Day 0

iOSDC Japan 2023 Day 0のレポート記事です。

今回のiOSDC Japan 2023への参加は、iOSDC Japan 2023のプラチナスポンサーを務める、株式会社CyberAgentスカラシップ制度によって実現することができました。

ご支援をいただき、誠にありがとうございました。

iOSDC初参加で、雰囲気が分からず、若干不安ではありましたが、会場に入ってすぐになんとなく雰囲気を掴むことができました。

そのくらい、初参加の人でも、Day 0からすぐに楽しめました!

参加したセッション

発表内容や発表資料をもとに、セッションの内容を自分なりにまとめます。

まとめるにあたり、参考にした資料は、各章に記載します。

モーダルの遷移を理解する

モーダルの遷移を理解する
SheetやAlertなどのモーダルは、どこのViewやUIViewControllerからでも呼び出して遷移することができますが、それゆえに遷移の実装が無秩序に散らばってしまいがちです。本来のモーダルの構造を考慮せず状態を管理できていない場合、ユーザー操作以外で画面遷移をしなくていけなくなったりすると、確実に動作させることは難しいでしょう。 また、以前のSwiftUIの遷移は不完全なところがあり、UIKitを使う判断をすることも多かったかもしれませんが、最近では改善されてきて遷移を宣言的に管理することも現実的になっています。 モーダルに関わるUIの様々な問題点や最新のAPIの動向を把握し…

このセッションでは、さまざまな種類のモーダルを取り上げ、それぞれを使う上での問題点や、解決方法を紹介していました。

そもそも、僕の認識として、モーダルとは、下からニュッと出てきてオーバーレイするものだと思っていました。

しかし、モーダルにはいくつか種類があることを含め、モーダルの仕様と性質、モーダルを使う際の問題点や、解決方法が説明されていました。

Swift Packageを使った巨大な依存グラフのキャッシュ戦略

Swift Packageを使った巨大な依存グラフのキャッシュ戦略
Swift Packageは、依存配布の最適な手法です。 しかし、Xcodeのパッケージ管理では、キャッシュが揮発しやすく、膨大な依存関係を持つプロジェクトではビルド速度の維持が難しいです。 パッケージの利便性と、速度を両立する手法はないでしょうか そこで、新しいビルドツールScipio (https://github.com/giginet/Scipio)を使って、パッケージを効率的にキャッシュする手法と、実際に大規模プロジェクトに導入するケーススタディをお伝えします。 このトークでは、以下についてお話しします - SwiftPMを利用したXCFrameworkの構築手法 - リソース…

このセッションは、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のインテグレーションを扱うのは難しいです。

理想は、

  1. SwiftPMによるSwift Packageの依存解決と取得
  2. ビルド成果物をキャッシュ、共有、再利用
  3. 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は、その機能から、始めやすく、やめやすいという特徴があるので、今後、使ってみようと思います。

SwiftUIの進化についていくためにやったこと

SwiftUIの進化についていくためにやったこと
WWDC 2019 で発表されたSwiftUIですが、毎年たくさんの機能アップデートがありAPIも合わせてドラスティックに変化しています。 「スタディサプリ 中学講座」では、iOS 14 以降を対象としてフルSwiftUIを目指して開発をしてきました。(現在は iOS 15 以降対象) SwiftUIが進化していく一方で運用する上では以下のような課題がありました。 - 利用できる環境は iOS 16 以上など、サポートバージョンの兼ね合いですぐに取り入れられない - API仕様の変更によって既存の実装が非推奨となり、最適なコードと言えない状態となってしまう このセッションでは「スタディサプ…

SwiftUIと共に歩むStudy Sapuriを例に、SwiftUIでDeprecatedになったもの、どのようにチームで開発を進めているのかなどを説明していました。

僕は普段からSwiftUIを使って構築しているので、身近な話題のため、理解しやすかったです。

チーム内でどのように運用しているのかについての話も、今の僕にとって、かなりタイムリーな話題だったので、非常に興味深い内容でした。

watchOS開発最前線

watchOS開発最前線
今年2023年でついに10周年を迎えるwatchOS。そんな年に私は個人開発でカウンターアプリWristCounterをリリースしました。その経験を元に、watchOS開発の最新事情とハマりどころについて話します。 - Apple Watch単独アプリにするかの選択 - SwiftUIのwatchOS環境での振る舞い - navigationTitleが表示されない問題 - watchOSアプリでXcode Cloudを使う際の詰まりポイント - watchOS 10でのアップデート

個人で開発をしているWatchAppを例に、背景、WatchAppの特性、課題についてお話しされていました。

WatchApp開発に興味があるので、興味深い内容でした。

UIKit ベースの Custom UIContentConfiguration API を用いた複雑なカスタムセルの作り方

UIKit ベースの Custom UIContentConfiguration API を用いた複雑なカスタムセルの作り方
iOS 14 からUICollectionViewのセルのカスタマイズ方法にConfigurationというAPIが追加されました。 これまでカスタムセルはサブクラスを作成して実装していました。Configurationにより、セルレイアウトと外観を分離し再利用しやすいComposableなAPIの管理ができます。 また縦方向のリスト形式の例では削除や並び替えといった機能と滑らかな表示体験が提供でき、安全にOSの機能を考慮した複雑なカスタムセルが実装できます。 本セッションでは日本経済新聞社の紙面ビューアーアプリで実際に導入したUIKitベースのカスタム例を紹介します。 UIKitベース…

Go Takagiさんの過去のセッションをYouTubeでみたことがありました。

テンポ感が好きで、非常にわかりやすいので、とても楽しみにしていたセッションの1つです。

普段、UIKitを使わないので、個人的に難しい内容ではありましたが、それでも、丁寧な説明と、いい感じのテンポ感で、かなり理解できました。

SwiftUIを扱う上で、UIKitの知識が必要な場面は多々あるので、学習しなければ...と思いました。

Day 0 まとめ

個人的に、Day 0で最も印象に残ったのはSwift Packageを使った巨大な依存グラフのキャッシュ戦略です。

SwiftPMを本格的に使っていることから、タイムリーな話題である上、40分のセッションでしたが、飽きずに、ずっと聞いていたい発表で、楽しかったです。