採択
2023/09/02 14:30〜
Track B
レギュラートーク(20分)

UIのブラックボックスを探る

noppefoxwolf noppe

昨今、iOSの標準アプリではUIKitで提供されていないUIコンポーネントが多く使われ、それらを再現することは難しいと言えます。
さらにSwiftUIは実際のビューを隠してしまうため、我々は与えられたUIに囚われています。
本トークでは、美しいUIを再現するために必要なリバースエンジニアリングの基礎知識について解説します。

まず、画面から分かることについて説明し、UIの階層構造を覗く方法を紹介します。
また、プライベートAPIを使うことでUIの内部情報を取得する方法についても触れます。
これらのテクニックをマスターすることで、美しいUIを再現するだけでなく、UIの設計思想や技術的な側面を理解することができます。

レギュラートーク(20分)

アクセシビリティテスト戦略

Byungjun Park

より多くのユーザーがアプリを利用できるようにアクセシビリティ機能の実装は必須になってきてます。
アクセシビリティ開発を特定のユーザーのための手間がかかる開発ではなく、より便利になるための通常のUI開発の延長として考えて進めていくことにしましょう。
そのためには開発においてより効率的な開発方法を導入してモチベーションをあげる必要があると思います。
まずAccessibility Inspetorを利用してアクセシビリティ適用の現状を動的に把握して改善していく方法から
SnapshotテストをベースにしているAccessibilitySnapshotを利用してアクセシビリティ要素を可視化することでより効果的な実装・テストが方法であることを話します。
最後にWWDC2023に新しく公開されたXCUIApplicationを使ってアクセシビリティ検証機能を利用する方法をお見せします。

2
レギュラートーク(20分)

UITraitCollectionを活用して、アプリに特性の概念をもたらす

noppefoxwolf noppe

iOS8から登場したUITraitCollectionは、iOSアプリケーションのユーザーインターフェースのレイアウトや表示に関する情報を含むオブジェクトです。
例えば、iPhoneの画面サイズが変更された場合、UITraitCollectionは自動的に更新され、アプリケーションは新しい画面サイズに応じたレイアウトを適用することができます。
これからのアプリ開発で重要になるUITraitCollectionですが、まだまだ活用されているアプリが少ない印象があります。

このトークではUITraitCollectionの概念を振り返り、SwiftUIとの関係性や具体的な利用ケースを紹介します。
また、iOS17から追加されたCustom UITraitCollectionを活用して出来ることを解説します。

7
レギュラートーク(20分)

C++の資産をSwiftで活用する

mornin_sculpt mornin

Swift Package Manager(SPM)ではC++ライブラリもパッケージとして管理することができます。また、WWDC23ではC++ interoperabilityが紹介されSwiftからC++を利用することが一層簡単になりました。

一方で、C++ライブラリを利用したいシーンの多くではライブラリは巨大であることが多いです。実運用しているプロジェクトでそうしたライブラリを運用するにあたってSPM管理に置き換えたりするには多くのハードルあります。

本稿では、まず実際のC++ライブラリをSPM管理下に置く方法を解説します。また、外部ファイルを読み込んで設定に反映させることでPackage.swiftの肥大化を防ぐ方法を示します。最後に、これら以外で注意が必要なXCodeの設定等を示すことでC++ライブラリのSwiftプロジェクトでの運用時の問題を解決します。

1
レギュラートーク(20分)

TCAとKMMを駆使した新規iOSアプリ開発Tips

_tomu28 Tomu Obata

現在、iOS1人・Android2人の少数チームで新規動画配信アプリを開発しています。
技術選定やアプリのアーキテクチャ設計に際しての工夫点やハマり所、そしてTCA, KMMを活用した開発Tipsについてお話します。

これから新規アプリ開発を予定している方々にとって、技術選定やアーキテクチャ設計の参考としていただければ幸いです。

キーワード:
・iOS Deployment Target 16.0+での新規iOSアプリ開発
・swift-composable-architecture (TCA)
・Kotlin Multiplatform Mobile (KMM)
・kotlin-inject

3
レギュラートーク(20分)

SVVS:SwiftUIに適した新しいMVVMベースのアーキテクチャとその実践

wakakuuma wakakuuma

SwiftUIの導入と既存の不完全なMVVM改修による課題を解決するため、新しいアーキテクチャとしてSVVSを開発しました。
SVVSはStore、View、ViewStateから構成され、複雑な依存関係と大規模なリファクタリングの問題を解決する設計として採用しました。SVVSはSingle Source of Truthを考慮してMVVMにStoreを追加し、現代的なiOSアプリ開発においてシンプルでオーソドックスな構成を実現します。特にSwiftUIとの相性が良く、すぐに取り入れることができ、学習コストも低く、サードパーティのライブラリやフレームワークに依存しない点が魅力です。本トークでは、SVVSを他のアーキテクチャやフレームワークと比較しながら、実際に業務で取り入れた実例を交えて紹介していきます。

5
レギュラートーク(20分)

SwiftUIで始めるエンジニアのためのデザイン入門

touyou_dev touyou

WWDC23ではDesign with SwiftUIというセッションが公開されAppleがデザイナーのSwiftUI習得を公式に推奨するようになり、またvisionOSの登場によりSwiftUI自体の使い道も広がりました。
もちろん、デザイナーがSwiftUIを書けるようになることは協業という面でも理想的な世界ですが、一方でそれはエンジニアの役割がなくなるということではありません。
デザイナーのデザインをエンジニアが実装するにしろ、デザイナーと同じSwiftUIのコードベースを触るにしろ、今後よりエンジニアのデザイン理解度の重要性は高まってくると思います。

そこで本トークではSwiftUIを通してデザインの基本的な知識や考え方、エンジニアが知っておくべきことなどを紹介することで、エンジニアとデザイナーの協業をスムーズにし、より高品質なアプリを開発できるようになることを目指します。

5
採択
2023/09/02 11:00〜
Track B
レギュラートーク(20分)

法改正を乗り越えるiOSアプリのリリース戦略

slightair Tomohiro Moro

iOSアプリで提供しているサービスの内容や機能を、法改正施行のタイミングとともにパッと切り替える必要があったとしたら…
そんなことを考えたことはありますか?私たちのサービスではそれが必要となりました。
施行前後でサービスの利用条件は変わります。どう変わったのかユーザにわかりやすく伝えて、安心安全にサービスを利用してもらいたい。混乱を少なくしたい。サービスも可能な限り止めたくない。
そんな要求や想いを実現するために、考えたことや計画し実行したことをお話しします。

  • 施行日に向けたリリースのきざみ方
  • スムーズに法改正後にサービスを利用してもらうための工夫
  • アプリ内の表示や機能切り替えの実現方法
レギュラートーク(20分)

実践!Swift API Design Guidelinesに基づいた簡潔明瞭なAPIの作り方

jrsaruo_tech 西 悠作

自分や同僚の作ったメソッド、何が起きるか分かりづらい…コードが読みにくい…そんな経験ありませんか?

本トークでは、SwiftのAPI Design Guidelines(ADG)が示すAPIの理想像を整理したうえで、実際のコード例をもとに

  1. 改善点の分析
  2. 適用できるADG項目の解説
  3. 2に基づいた書き換え(ADGにはない工夫も!)

を繰り返し、API設計での大事な観点をまとめます。
ADGに沿ってAPIを改善する過程とその効果を体感し、今後のコーディングやコードレビューにご活用ください。

メソッド名から引数ラベル、返り値型に至るまで、APIの構成要素すべてを洗練させ、簡潔明瞭で美しいAPIをデザインしましょう!

こんな方におすすめ:

  • ADGを読んだことがない/活用できていない
  • コードの可読性についてよく指摘を受ける

やらないこと:

  • ADGを全て読む
8
レギュラートーク(20分)

アプリの複数運用を支える技術 〜証明書やライブラリの一元管理〜

aomathwift あおい

iOSアプリ開発では、機能そのものの開発以外に気にかけることが多々あります。
例えば、各種証明書の有効期限、ライブラリの選定・バージョンアップなどです。

さらに、社内にiOSアプリが数多くあるとどうでしょう。
例えば証明書の有効期限が切れていたり、脆弱性を含んだバージョンのライブラリを使い続けていたり、といった問題が各所で起きる可能性があります。
社内にある全てのアプリで、これらの問題に漏れなく対応できる状態を作るのは、複数アプリを管理する上での大きな課題です。

これを解決するために、社内全てのアプリについて、証明書や依存ライブラリなどの情報をまとめて管理するツールを作りました。
本トークでは、これを実現するにあたって利用したApp Store Connect API利用の際のTipsやライブラリの情報収集の方法、これによってアプリの複数運用がどのように便利になったのかを紹介します。

4
採択
2023/09/02 15:40〜
Track A
レギュラートーク(20分)

モバイルアプリの行動ログの運用つらさ解消法

aomathwift あおい

アプリの行動ログの運用が辛いという話は、どのアプリでもよく聞く話だと思います。
では、ログ運用の「辛さ」とは一体何なのでしょう?

たとえばログを分析する人の目線だと、欲しいログが欲しいときに用意されていない状態は辛いと思います。
あるいはログを実装する人の目線だと、毎度命名に悩まなければいけなかったり、パラメータに型がなく実装ミスの可能性があったりする状態は辛いといえるでしょう。
私が携わるアプリもまた例外ではなく、アプリの行動ログの運用がつらい状況のときがありました。

このトークでは、実際に体験した行動ログ運用の辛かったエピソードと、それにどのような対処・対策をしたかをお話します。
この発表で、ログの辛さに悩む人が一人でも元気になるとうれしいです。

レギュラートーク(20分)

Swift Foundation の主要 FormatStyle 解説 - これまでの ○○Formatter から移行できるか?

treastrain treastrain / Tanaka Ryoga

日付・時刻・時間・数値・測定値・名前などの情報を、ローカライズ済の String との間で変換してくれる Formatter。有名なのは DateFormatter・NumberFormatter でしょうか。

iOSDC Japan 2021 では、当時のすべての Formatter を紹介しました。あれから2年、今年は iOS 15+ で使用できる FormatStyle を使用した formatted メソッドを、使用機会の多いと思われるものを中心に紹介します。これは Formatter の強力な機能はそのままに、自分でインスタンスを作る必要がなく、より Swift らしく書け、さらに iOS 17 ではパフォーマンスも向上します。

まだまだ Web 検索での情報が乏しい FormatStyle の使い方をこのトークでマスターし、従来の Formatter から移行しましょう。

8
レギュラートーク(20分)

ABEMAではiOSに留まらないモバイルアプリアーキテクチャをどのように考えているか

akkyie Akio Yasui

ABEMAでは、iOSアプリとAndroidアプリのアーキテクチャの統一を図っているだけでなく、コード自体も共通化されている状態を目指して一部実装にKotlin Multiplatformを採用しています。これらの取り組みの中で、両プラットフォームで共通して採用できるアーキテクチャとはどのようなものか、どの実装が共通化できてどの実装はそれぞれ実装すべきかなど、OSの境界を跨いで多くの議論を行ってきました。

このトークでは、こうした議論を経た現在、ABEMAがモバイルアプリのアーキテクチャをどのように議論し、どのように定義して、どのように運用しているのかを実例を交えてご紹介します。

6
レギュラートーク(20分)

SwiftUIを駆使して複雑なカレンダーUIの設計と実装をしました

satoryo

STORES 予約アプリは店舗などの管理者様向けの予約管理アプリで、2021年にiOS版をSwiftUIでフルリニューアルしました。
その後も追加機能の開発をし続け、今年の4月には待望のカレンダーUI (https://x.gd/GwDja) をリリースしました。

カレンダーUIとは「予約の入り具合や空き状況をカレンダーで閲覧するための画面」で、実装にあたり3つの壁に直面しました。
・既存ライブラリは使用せずにSwiftUIフルスクラッチで実装する
・予約スケジュールの時間の重複を可視化する
・予約情報の取得処理をKMMを利用してiOS/Android版で共通化する

本トークでは、カレンダーUI検討の背景から本実装、リリースに至るまでの過程をソースコードを交えながら解説します。
トークを聞いてくださった皆さんにSwiftUIで複雑なレイアウト画面を実装するためのヒントとなれば幸いです。

1
採択
2023/09/03 11:00〜
Track A
レギュラートーク(20分)

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

y0shikei_ Keisuke Yoshida

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

▼ 内容

  • Live Activitiesとは?
  • Live Activitiesの実装方法
  • 具体的な活用事例
レギュラートーク(20分)

SwiftUIでアニメーションを活用したカスタマー体験の向上

y0shikei_ Keisuke Yoshida

▼ 概要
私たちは「あたらしい旅行を、デザインする。」をミッションに旅行アプリ「NEWT」を日々開発しています。
旅行の予約から準備、旅行中の旅程の確認やサポートなど、直感的なUI/UXでストレスフリーな旅行体験をカスタマーに提供することを目指しています。
そのため、プロダクト開発において機能要件はもちろんのこと、非機能要件についても重視しています。
その中でも今回は、カスタマーに楽しく快適にアプリを利用してもらうために必要となるアニメーションに関するお話をできればと思います。

▼ 内容

  • SwiftUIにおけるアニメーションの種類
  • iOS17で追加されるアニメーションのあれこれ
  • アニメーションの活用事例
レギュラートーク(20分)

プライバシー設定とSwift Concurrency

Nao_RandD Nao-RandD

ヤプリではSwift Concurrencyを適用していく試みを継続して取り組んでいます
最近ではプライバシーを扱う処理にも適用しており、その時に発生した問題やその後に得られたメリットを紹介します

個人情報の保護を担うプライバシー設定は、アプリ開発者において大きな関心ごとの一つです。アプリ機能に制限がかからないよう、適切な説明をしてプライバシー設定のダイアログを表示するなど、柔軟な呼び出しに対応できる実装とする必要があります。ただ、プライバシーの種類によっては、表示に必要なAPIがasync/awaitで提供されるものもあれば、位置情報やBluetoothのようにDelegateパターンで提供されるものもあります。それらを独自に同一のAPIから好きなタイミング・順序で制御できるように対応しました
本トークで対応実装とその時の課題を解説し、それによって新たに実現できたことをお伝えします!

2
レギュラートーク(20分)

ChatGPTを使ったUnitTest自動生成の検証 〜僕はもうテストを書きたくない〜

Shunta

複雑なアプリケーションが増えた近年ではバグを生まないためや検証コスト削減のために自動テストの導入が重要です。
テスタビリティを考えたアーキテクチャや知見も浸透し、テストを導入することの大切さが広まってきました。
しかし開発スケジュールやリソースの都合上、どうしても「テストが書けない」「カバレッジが低い」「テスト自体のメンテナンスができない」等の問題が出てきてしまいます。
一方、ChatGPTをはじめとするLLMやGithub Copilotなどの開発支援ツールの登場は、開発速度や体験を大きく向上させることが期待されています。
そこで本セッションではChatGPTのAPIを使用し、UnitTestの実装コストを下げる方法や限界について検証していきます。

2
レギュラートーク(20分)

ChatGPTやStable DiffusionなどのAI技術を使ってサービス開発をして気づいたこと

henteko07 henteko

https://cha-chat.henteko07.com/
ChaChatという、かわいいキャラクターと楽しくお話ができるアプリを開発しました。
感情表現豊かなキャラクターと楽しくお話しすることで、日頃仕事で疲れた心を癒すことができます。

このChaChatは、ChatGPTやStable Diffusion、midjourneyなどのAI技術を使って作られています。
そんなChaChatを開発してみて気づいた、Promptエンジニアリングや、Stable Diffusionを使って同じキャラクターによる表情差分の作成方法などをご紹介します。

レギュラートーク(20分)

共有コードで開発効率を爆上げするKMM&Composeクロスプラットフォーム開発

akkiee76 akkie76

このセッションでは、Kotlin Multiplatform Mobile(KMM)とCompose Multiplatformを活用したiOSアプリのクロスプラットフォーム開発について紹介します。KMMの基本的な設定方法、共有コードの記述、モジュール構成、プラットフォーム固有の実装と共有に加え、Compose Multiplatformの特徴や共有コードを利用したマルチプラットフォーム対応の開発の効率化についても詳しく紹介します。

  1. Kotlin Multiplatform MobileとCompose Multiplatformの紹介
  2. KMMの基本的な設定方法と共有コードの記述
  3. モジュールの構成と管理
  4. プラットフォーム固有の実装の分離と共有
  5. Compose Multiplatformの特徴
  6. マルチプラットフォーム対応UIの開発効率化
  7. まとめ
2