iOSDC Japan 2023 に参加します!

このたび、株式会社CyberAgentのiOSDC Japan 2023スカラシップ生として、2023/09/01〜2023/09/03に行われるiOSDC Japan 2023に参加します。

iOSDC Japan 2023 スカラシップ生を募集します! | CyberAgent Developers Blog
サイバーエージェントでは、技術者が最新のテクノロジーを吸収する機会を設けるため、海外・国内の技術系カ…

このスカラシップには、参加条件があります。

■参加条件「iOSDC Japan 2023」で学んだことや感想などについて、レポートのご執筆をお願いします。※ご自身のブログをお持ちでない方は、サイバーエージェントのディベロッパーズブログで公開することも可能です。

ということで、iOSDC Japan 2023が終わった後で、その学びを記事としてアウトプットします。

その準備も兼ねて、今回参加しようとしているセッションを挙げておこうと思います。

参加予定のセッション一覧

Day 0

タクシーアプリの多言語対応・ローカライズにおける課題と解決策

Day 0 16:40-17:00 (Track A)

多言語対応って大変そう...

タクシーアプリの多言語対応・ローカライズにおける課題と解決策
タクシーアプリ『GO』では、現在大規模な英語への対応作業を進めています。 日々追加される案件開発や差し込みでの対応と並行しながら、既に存在する大量の画面をPdM・デザイナーと適切に連携を取りながら複数言語に対応させていく作業はかなり難易度の高い作業です。 現在タクシーアプリ『GO』では外部文言ツールとGitHub Actionを組み合わせた文言管理を行っていますが、現在の運用に方法を採用するまでには様々な課題が有りました。 そこで本セッションでは、多言語対応に本格着手した際に発生した課題や問題点に対してどのように対応してきたか、及び現在の運用にしてどのような問題が解決されたのかなど、多言語対応…

SwiftUIの進化についていくためにやったこと by 中島 元成

Day 0 18:10-18:35 (Track A)

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

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

Day 0 17:15-18:00 (Track A)

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

watchOS開発最前線

Day 0 18:45-19:10 (Track B)

watchOSアプリの開発を考えているので、僕的にはタイムリーなネタです。

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

SharePlayの歴史と進化 - そしてvisionOSへ by 所 友太

Day 0 18:45-19:10 (Track C)

visionOS、気になりますが、watchOS開発最前線と時間が被っているので、悩みどころ...

SharePlayの歴史と進化 - そしてvisionOSへ
iOS15で登場したSharePlayについては iOSDC Japan 2021でも紹介しました。 そして先日のWWDC23で念願のApple Vision Pro/visionOSが発表され、SharePlayの一連の仕様はこのためだったのか!と全てが繋がりました。 このトークセッションではSharePlayを未知のかたでもわかるようSharePlayの歴史を振り返り、SharePlayについて簡単に復習した後、後半のメインディッシュはApple Vision ProでSharePlayはこう使われる/使える!という部分にフォーカスし、SharePlayについて堪能する20分をお届けしま…

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

Day 0 19:20-19:45 (Track B)

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

Day 1

PushToTalkで作るトランシーバー

Day 1 11:00-11:25 (Track C)

PushToTalkがiOS 16の新機能だということを知らなかった...

PushToTalkで作るトランシーバー
みなさん、トランシーバーってご存知でしょうか? 同じ機器を持っていれば、音声を離れたところへ伝えることができるアイテムです。 人によっては懐かしいと思う方もいるかもしれません。 そんな懐かしいトランシーバーを作る仕組みが、現行最新のiOS 16の機能として追加されているのをご存知でしょうか? そんなiOS 16の新機能「PushToTalk」を使ってトランシーバーを実現してみようと思います。 PushToTalkはどのような機能を提供してくれるのか? アプリ側ではどのようなものを用意すればいいのか?サーバーは? あまりフォローされていない音声の録音部分も含めてご紹介するトークとなります。

マルチモジュールアーキテクチャへの移行と開発プロセス改善の取り組み

Day 1 11:35-12:00 (Track D)

マルチモジュールアーキテクチャへの移行と開発プロセス改善の取り組み
楽天グループが運営する「楽天ラクマ」は、今年でサービス開始12年目を迎えます。 Objective-CのSwiftへの書き換え完了後の取り組みとして、アーキテクチャの改善、SwiftUIへの置き換え、開発プロセスの改善などに取り組んでいます。 また、改善を行う中でリリース前のテスト項目に漏れが発生するなどの課題に直面し、ドキュメンテーションや共有方法について改善を行うことでコミュニケーション面での課題の改善を図っています。 このセッションでは、ラクマで行っているリファクタリングの内容や開発ルールなどの取り組みについてご紹介します。 - マルチモジュールアーキテクチャへの移行 - SwiftU…

Mastering SwiftSyntax by kishikawa katsumi

Day 1 13:00-13:45 (Track A)

マクロ気になってます。

Mastering SwiftSyntax
Swift 5.9ではマクロが導入されます。すでにSwiftUIではマクロが広く利用されています。今後はコミュニティ製や自作したマクロを使うこともあります。 マクロはSwiftSyntaxというライブラリを使った構文変換です。これまでSwiftSyntaxはツールを介した間接的な利用がほとんどでした。しかしマクロを書いたりデバッグするには直接SwiftSyntaxを使う必要があります。 SwiftSyntaxを使うコードはかなり見慣れないコードになります。コンパイラで使用されているコードで一般的な用途のコードではないからです。 この講演ではSwiftSyntaxの構文ノードの種類やAPIの使用…

旅行アプリでより正確にパスポートを読み込む技術 ~ MLKit / Vision / CoreNFC by Takahashi Tomoki

Day 1 13:55-14:20 (Track B)

MLKitを使った開発をしてみたいと思っていたところ...

旅行アプリでより正確にパスポートを読み込む技術 ~ MLKit / Vision / CoreNFC
みなさん、海外旅行は好きですか?対策緩和で少し海外に行きたいと思う方も増えてきたのではないでしょうか。我々はすべての方に海外旅行をより簡単でおトクに選べて安心なサービスを作るために日々「NEWT」を開発・改善し続けています。そこで必ず必要になるのが「パスポート」です。海外旅行においてパスポートは入力を間違えると最悪の場合、出発・入国ができないなどのトラブルに見舞われてしまいます。そんなお客様のトラブルを限りなくゼロに近づけるためにパスポートの読み込みにOCRの導入を行いました。その際に検討した内容や実際に導入・決定している方針などを踏まえて以下の内容をお話しします。 - MLKit/Visio…

ActorでCoreDataをスレッドから解放しよう by ひめし

Day 1 14:30-14:55 (Track A)

ActorでCoreDataをスレッドから解放しよう
CoreDataはクライアントでデータベースを利用する際に欠かせないものです。 しかし、NSManagedObjectはスレッドセーフではなく、NSManagedObjectContext内で原則操作を行う必要がある等、スレッドを意識しながら利用する必要があります。 一方、Swift Concurrencyの普及が進み、データ競合はActorによって制御することが一般的になりました。CoreDataを利用する際も、実行スレッドを考慮することなく全てasyncで安全に操作したいものです。 しかし、CoreDataを実際にそのように利用した例は多くありません。 そこで本トークでは、CoreData…

SwiftUI + KMM 開発で見えたそれぞれの長所と短所 by 林達也

Day 1 15:05-15:30 (Track B)

KMM、最近かなり使われているみたいなので、気になります...

SwiftUI + KMM 開発で見えたそれぞれの長所と短所
Wantedly では 2020年からモバイルアプリのロジック部分のクロスプラットフォーム技術として Kotlin Multiplatform Mobile (KMM) を採用しています。 2022年からは徐々に SwiftUI 導入を進めて、プロフィールをリニューアルするプロジェクトでは全面 SwiftUI での開発を試みました。 また、プロフィールのリニューアルは、Android が先行して実装し、KMM の実装もすでに完成していました。 そのため、このプロジェクトは、KMM と SwiftUI を初めて組み合わせるプロジェクトとなりました。 本トークでは、このような状況で KMM と…

なぜ、弊社はFlutterを捨ててネイティブ化(Swift / Kotlin)にコミットしたのか by 佐藤 直之

Day 1 15:05-15:30 (Track C)

大学のプロジェクトでFlutterを使っているので、聞いておきたい!!

なぜ、弊社はFlutterを捨ててネイティブ化(Swift / Kotlin)にコミットしたのか
RIZAPでは、RIZAPのBody Make事業のほか、2022年7月より、運動初心者向けの完全無人コンビニジムchocoZAP (ちょこざっぷ) を本格的に全国的に展開しています。 サービスローンチと同時にchocoZAPアプリをリリースし、入退館管理にとどまらず運動記録やアプリ内ゲームコンテンツなど改良を重ねてお客様に使用していただいています。 本セッションでは、そのRIZAPがなぜ、最初にFlutterを選択し、のちにFlutterを捨ててネイティブ化(Swift / Kotlin)を選択したのか、についてご紹介させていただきます!

アプリ内課金におけるトラブルを劇的に減らすための取り組み by Koki Hirokawa

Day 1 15:40-16:05 (Track D)

アプリ内課金におけるトラブルを劇的に減らすための取り組み
アプリ開発の中でも、アプリ内課金はとりわけ高品質が要求される領域です。 課金に関するトラブルは、ユーザに対し不安や混乱を抱かせるとともに、お問い合わせなど面倒なアクションを要求します。また、事業への信頼値の低下やお問い合わせへの対応コストの増加など、ビジネスにも多大な影響を及ぼすため、可能な限り抑えたいところです。(開発メンバーのメンタルも健全に保ちたい…!) 私が開発に携わっているアプリでは、ユーザがアプリ内商品を意図せず重複購入してしまいお問い合わせが多発する問題に悩まされてきました。本トークでは、この問題を解消するに至った取り組みについて、仮説立てから設計、より良いアプリ内課金体験を提…

ソーシャルログイン機能のデバッグ地獄をくぐり抜けてリファクタリングした話 by Takanori Hirobe

Day 1 16:15-16:40 (Track A)

ソーシャルログイン機能のデバッグ地獄をくぐり抜けてリファクタリングした話
今日のモバイルアプリはログイン機能を持つものが多いですが、プロダクトの成長に伴って複数のソーシャルログイン機能を導入することは少なくありません。私たちが担当する出前館アプリもその一つです。 我々の今後の開発予定を考えると、ソーシャルログイン機能の改修が必要でした。しかし、その仕様に関するドキュメントやデバッグ方法のナレッジが不足している、という大きな課題がありました。そこで我々は各ソーシャルログイン機能に対してデバッグ作業を地道に進めつつ、ドキュメントの整備を進めました。 本セッションでは我々が取り組んだソーシャルログイン機能リファクタリングに関する苦労話とそれによって実現できた機能改善事例…

一般的な通信でも使えるバックグランドURLSessionの活用方法 by Li Jierong

Day 1 16:50-17:15 (Track D)

一般的な通信でも使えるバックグランドURLSessionの活用方法
バックグランドURLSessionとは、アプリがバックグランドに行っても、終了されても、別プロセスでデータ通信が可能なURLSessionです。 バックグランドで長時間ダウンロードする必要がある時のみ使われるイメージはありますが、アプリやWidgetに必要な情報の先読み、バックグランドに行ったことによるタイムアウトの回避にも使えます。 Date taskがサポートされず、upload taskかdownload taskを使う必要があるので、使い方は少し特殊ですが、一度対応しておけば普通のURLSessionと同じ使い勝手になるので、バックグランドURLSessionを一般的な通信で使ってみま…

SwiftUIでの非同期処理データの状態管理を考える by kntk

Day 1 17:25-17:50 (Track C)

SwiftUIでの非同期処理データの状態管理を考える
みなさんはSwiftUIで非同期処理データの状態管理をどう行なっていますか? - enumを使う方法: `enum DataState { case loading; case success(Value); ... }` - コンポーネントを使う方法: `LoadingContent(fetch: fetch) { Content($0) }` などがあると思いますが - リロード中は前回の結果を表示したい場合 - ページングに対応する場合 等の要件で、微妙に異なるバリエーションがいくつか存在する上、それらの方法にはメリットとデメリットがあります。 パフォーマンス低下を引き起こしてい…

StoreKit testingを使ってアプリ内課金のテストや検証を効率化する方法 by ぼぶ

Day 1 17:25-17:50 (Track D)

やっぱり、ハッカソンで課金のデモしたいですよね!!

StoreKit testingを使ってアプリ内課金のテストや検証を効率化する方法
WWDC2020で発表されたStoreKit testingは,テスト用のフレームワークです. UnitTestとして課金テストを実行することはもちろん,StoreKit testingに必要なStoreKit configurationを用いると様々な恩恵を得ることができます. - StoreKit2への置き換えを進めたい - MVPやハッカソン等のプロダクトで,課金デモを実装したい - AppStoreConnect上に具体的な商品・オファーを作成せず検証したい - トランザクションの挙動をステップ・バイ・ステップで確認したい - 決済に失敗したときの挙動を確認したい - Flutter…

Day 2

watchOSとMapKitを駆使した位置情報収集:バッテリー消費最小化と取得精度向上テクニック by Shoko Sato

Day 2 10:25-10:50 (Track B)

位置情報を用いたiOSアプリを開発しており、どうにかwatchOSにも取り入れられないかと思っていたので、楽しみです。

watchOSとMapKitを駆使した位置情報収集:バッテリー消費最小化と取得精度向上テクニック
位置情報は現代のアプリケーションで不可欠な要素の一つであり、Apple Watchにおいても例外ではありません。しかし、watchOSにおける位置情報の取得はバッテリーの消費という課題に直面します。そのため、watchOSとMapKitを連携させ、適切な頻度で精度良く位置情報を取得する一方で、バッテリーを極力消費させない方法が求められます。 本トークでは、位置情報収集の基本、MapKitの詳細な機能、watchOSの消費電力管理の仕組み、そしてこれらが相互にどのように影響を及ぼすか、バッテリー消費最小化と取得精度向上のテクニックについて解説します。位置情報の取得精度とバッテリー消費は一見トレー…

旅行アプリにおけるLive Activitiesを用いたフライト追跡 by Keisuke Yoshida

Day 2 11:00-11:25 (Track A)

現状、Live Activitiesを上手に活用したアプリがあまりないかと思います。

今年、Live Activitiesを使ったアプリを開発したいと思っていたので、楽しみです!

旅行アプリにおけるLive Activitiesを用いたフライト追跡
▼ 概要 iOS16.1からActivityKitが追加され、Live Activitiesを利用できるようになりました。 Live Activitiesを利用すれば、アプリの最新情報をリアルタイムにロック画面やDynamic Islandに表示することができます。 これによって、アプリを開かずに常にカスタマーに最新情報を提供することが可能になりました。 そこで私たちの開発している旅行アプリ「NEWT」では、Live Activitiesを利用すれば、リアルタイムにフライトの状況を提供し、時刻・ステータスの変更や確認に役立てることができると考えました。 今回はLive Activitiesにつ…

メタバースプラットフォームを支えるiOS開発と運用 by TAAT

Day 2 10:35-12:00 (Track D)

メタバースプラットフォームを支えるiOS開発と運用
メタバースプラットフォーム clusterの開発では、3DCGやゲームエンジンだけでなく、手軽に体験できるモバイルアプリケーションもプラットフォームを支える大事な要素です。clusterはマルチプラットフォームに対応しており、iOS開発を担当するエンジニアも多く在籍しプラットフォームを支えています。 clusterでは、バーチャル空間内の体験をUnityで、バーチャル空間外の体験をSwiftで開発しており、それぞれがどのようなインターフェイスで連携しているかについてお話します。また、clusterのiOS開発におけるモノレポのリポジトリ運用やFeature Flagによるトランクベース開発、…

xR技術の過去、現在、そして未来 いにしえのゲーム機から最新ヘッドセットまで by @hak & @tomzoh

Day 2 13:00-15:00 (Track C)

hakさんとtomozohさんの雑談...笑

リアルhakさんに会える...?!

xR技術の過去、現在、そして未来 いにしえのゲーム機から最新ヘッドセットまで
没入感、現実感のある体験を提供するVR、AR等xRのベースとなる技術は、人間の知覚に対するリサーチからスタートし、インタラクティブエンタテイメント技術の一環として発展してきました。 本セッションではこうしたxRを支える技術に着目し、それらがどのように生まれ向上していったか実例を紹介しながら振り返ります。 プレゼンテータは @hak と実行委員長 @tomzoh で勤め、コンピュータやゲーム機の昔話を交えながらラフに雑談ベースでお話しますので気軽に参加ください。 キーワード:AR、VR、SoC、赤青めがね, 液晶シャッター, 偏光グラス, LCD, OLED, サイドバイサイド, 走査線, 視…

SwiftUIに適した新アーキテクチャの導入に挑む by 福井 章平, 中山 龍

Day 2 15:05-15:30 (Track A)

SwiftUIに適した新アーキテクチャの導入に挑む
ChatworkのiOSアプリは2011年にリリースされ、12年間で様々な技術変更や新機能の追加を行ってきました。しかし、長期間の開発では技術的な負債が蓄積されます。そこで昨年、新しいアーキテクチャを導入し、負債の解消に取り組みました。 新アーキテクチャを社内では「SVVS(Store, View, ViewStateの頭文字)」と呼んでおり、弊社の技術顧問であるkoherさんとの毎週の議論や、技術合宿を経て生まれました。 SVVSはSingle Source of Truthを考慮し、シンプルでオーソドックスな構成を実現しています。特にSwiftUIとの相性が良く、学習コストも低く、サー…

聞きたかったセッション

プロポーズされましたが、非採択となったセッションで、聞きたかったなぁというセッションをいくつか挙げます。

Core Dataでの辛さを把握しSwiftDataに備える

兼ねてからCoreDataを使ったアプリを開発しようとしてきましたが、そうこうしているうちに、先日のWWDC23でSwiftDataが発表されました。

やはり、CoreDataの何が辛くて、SwiftDataの何が嬉しいのか、ここは理解しておく必要があるなと感じています。

Core Dataでの辛さを把握しSwiftDataに備える
Core Dataは依然としてデータ管理の有力な選択肢の1つです。しかし、Core DataはSwiftUIやSwift Concurrencyなどモダンな開発環境において、一部の制約や課題に直面します。 本セッションでは、そういったCore Dataの「辛い」点に焦点を当て解説します。 その上で、新たに登場したSwiftDataへの期待を語ります。なぜ多くの開発者がSwiftDataに期待を寄せているのか、それを理解するためには、まずCore Dataの課題を理解することが重要だと考えるからです。 このセッションは、Core Dataのベストプラクティスを知るためや入門するためのものではなく…

少数チームで挑む:SwiftUI, TCA, KMMを用いた新規動画配信アプリ開発Tips

TCAは、まさに今僕が実際に使っているライブラリで、先日v1.0がリリースされました。

大学のプロジェクトで、マルチプラットフォーム開発をしている関係と (結局Flutterを使うことになりましたが...)、最近いろいろなところで耳にすることが多くなった、KMMにも興味があります。

しかも、少数チームで挑むということで、広く捉えれば個人開発にも適用できるような話では??と思ったり...

なんとこのセッションは、CyberAgentのエンジニアの方が発表予定だったので、機会があればお話を聞いてみようと思います!

少数チームで挑む:SwiftUI, TCA, KMMを用いた新規動画配信アプリ開発Tips
現在、iOS1人・Android2人の少数チームで新規動画配信アプリを開発しています。 技術選定やアプリのアーキテクチャ設計に際しての工夫点やハマり所、そしてSwiftUI, TCA, KMMを活用した開発Tipsについてお話します。 これから新規アプリ開発を予定している方々にとって、技術選定やアーキテクチャ設計の参考としていただければ幸いです。 キーワード: ・iOS Deployment Target 16.0+での新規iOSアプリ開発 ・swift-composable-architecture (TCA) ・Kotlin Multiplatform Mobile (KMM) ・ko…

関連リンク

iOSDC Japan 2023
iOSDC Japan はiOS関連技術をコアのテーマとした技術者のためのカンファレンスです。iOSDC Japan メインのコンテンツは日本中、世界中から公募されたスピーカーによる知的好奇心を刺激するトークと参加者間のコミュニケーションですが、それ以外にも開催期間をお楽しみ頂ける企画を検討中です。iOSDC Japan 2023は2023年9月1日〜3日の開催です。
iOSDC Japan 2023 #iosdc - fortee.jp
「iOSDC JAPAN 2023」に服部智、行木千春、伊藤悠平、下村一将、横山新、廣川昂紀、逢坂美芹が登壇いたします
サイバーエージェントは「テクノロジー」と「クリエイティブ」で世界に挑戦していきます。