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

複雑なインタラクションを伴うフリックカード機能を、SwiftUI化かつコンポーネント化した話

Sossui_Swift sosuiiii

[はじめに]
UIKitで作られた画面や既存機能をSwiftUI化する際に、
GeometryReaderや描画パフォーマンス、イベントの伝搬・連携、状態管理などで困った経験はありませんか?
この問題と正面からぶつかり、誰でも再現可能なシンプルなI/Fでコンポーネント化した経験を踏まえたお話をさせてください。
※Introspectなどのライブラリは未使用

[背景]
10年続く弊社プロダクトでは、InterfaceBuilderを使ったフリックカードの構成が限界を迎えていました。
「施策に追従するための実装コスト」や「AIを使った最適化」のハードルはエベレスト級で、
若手の多い弊チームでは尚更難易度が高いものとなっていました。

[主題]
このトークセッションでは、主に次の2点についてお話しします。
①設計について

  • UIKitからSwiftUIへのリプレイス
  • SwiftUIの思想に合わせたシンプルなI/F設計
  • 複雑なインタラクション管理
    これを踏まえて「若手でも再現可能な状態」にするために、どのように実装したのか

②SwiftUIについて

  • 描画パフォーマンスが落ちないように工夫したこと
  • 親Viewと子Viewのイベント連携

などなど..数ヶ月以上に渡る壮絶なバトルについて、色濃くお話しできたらと思います。
よろしくお願いいたします!

4
LT(5分)

Agoraを用いた1on1ビデオ通話機能の開発と品質向上への取り組み

本発表ではAgoraを用いた1on1ビデオ通話機能の開発について、その実装方法と品質向上への取り組みを紹介します。
Agoraの基本的な使い方について紹介し、iOSアプリからAgora機能の呼び出し方、映像のViewへの出力などのビデオ通話機能の実装について解説します。
特に、通信環境の不安定さが品質に及ぼす影響と、それをどのように克服するかに焦点を当てます。具体的には、AgoraAPIを活用して通信品質を最適化する方法を紹介します。
さらに、ビデオ通話中に他の作業を同時に行うためのPicture in Picture(PiP)機能の導入についても触れます。PiP機能を利用することで、ユーザーエクスペリエンスを向上させるとともに、作業効率を上げることが可能となります。
このプレゼンテーションを通じて、ビデオ通話機能の開発に関心がある方々に、具体的な開発方法と品質向上への取り組みを理解していただき、それを自身のプロジェクトに活かしていただければ幸いです。

2
LT(5分)

What's Changed in App Review 2023-2024

monolithic_adam Adam Henry

App Store Review Guidelinesは長くて難解だと感じている方はいませんか?この5分のライトニングトークでは、一緒に最新のガイドラインを解読し、重要な変更点を理解しましょう!

このトークでは、以下のポイントに焦点を当てます。

  • 2023-2024年における主な変更点
  • 新しいガイドラインが誰のアプリに影響を与えるのか
  • 開発者が注意すべき具体的なポイント

このトークに参加することで、App Review Guidelinesの最新情報を把握し、アプリ開発におけるリスクを軽減する方法を学べます。ぜひ、一緒にApp Review Guidelinesを理解しましょう!

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

大規模コードベースのSwift 6.0 対応への歩み

皆さん、Swift 6.0のリリースに向けた対応は順調ですか?
年数が経ち肥大化していったプロジェクトや、開発速度の要求が高いプロジェクトほど、対応が難しい課題だと思います。

私たちのプロジェクトであるタップルは、3000以上のファイルと24万行以上のコードからなる11年目の大規模サービスです。
完全に対応が完了したわけではありませんが、日々の対応を進めることで、Strict Concurrency Checkingを

  • 新規の機能に関してはほぼ100%
  • 既存の機能に関しても約半数

まで前進させることができました。

本トークでは、大規模なコードベースでどのように段階的に取り組んでいくかについて以下の事例をお話しします。

  • Fluxベースの旧アーキテクチャからSwift Concurrencyベースの新アーキテクチャへの段階的移行の方法
  • Module単位での段階的なStrict Concurrency Checking対応の事例とロードマップ

また、下記の組織としての取り組み方についても触れ、皆さんのプロジェクトでどのように推進していけば良いかについての知見を提供します。

  • チームでのSwift Concurrencyの知識の学習方法
  • 移行時の組織とのコミュニケーション
    • どのように工数を確保するか
    • どのように便益を説明するか
7
LT(5分)

CI/CDにおけるビルド時間RTA〜2024年版〜

皆さん自動テストやアプリ配布の待ち時間に満足していますか?
その待ち時間をいかに短縮するか?がやはりCI/CD上でのキャッシュ戦略だと思います。
また、今日様々なCI/CDサービスがある中でも、ライブラリ管理やビルド環境の組み合わせは限定されており、
キャッシュ可能なポイントはある程度絞られています。

本トークでは、以下のポイントを含む幅広いユースケースで有効なCI/CD上でのキャッシュポイントとその方法について、5分間で紹介します。

  • SwiftPM
  • Ruby製ツール(CocoaPods、 fastlaneなど)
  • homebrew管理のツール(Mint、 rbenvなど)
  • Kotlin Multiplatformなどを利用した際のビルドキャッシュ

これらの情報を通じて、明日からあなたのCI/CDの実行時間が一分一秒でも短くなる知識を提供します。

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

Unlisted App Distribution を使ってアプリを限定的に配信する

ry_itto 伊藤凌也

アプリを取り巻く要件の中にはUIデザイン、機能仕様、リリース要件などさまざまなものがあります。この中でもリリース要件は選択肢が少ないため、自由度がかなり低いと言えます。

そんなリリース要件の中で、限定されたユーザーにだけアプリを配布し、利用できる仕組みが必要な場合があります。そんな要件を受けたときに、どのような選択肢があるでしょうか?
Firebase App Distribution、TestFlight、Apple Business Manager など、さまざまな手法がありますが、私の所属するチームでは、その中でも Unlisted App Distribution を採用しました。

このセッションでは、数ある手法の中からUnlisted App Distributionを選択するに至った経緯と、他の配信方法との比較検討の結果についてお話しします。また、Unlisted App Distributionを選択した際に気をつけるべき点についても詳しく説明します。

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

認証エラーハンドリング百人一首

みなさん、認証機能のエラーハンドリングはどのように行っていますか?
近年のアプリの認証機能は、自社のサーバーだけでなく、Firebase Authorizationなどの認証系SaaSを活用していたり、Apple、Google、LINEといったSNSアカウントを利用した外部システムと連携したものがほとんどだと思います。

それに伴い、私たちがハンドリングしなければならないエラーの種類はどんどん増えており、

  • ユーザーに適切なエラーダイアログを出すことが困難
  • エンジニアの不具合の原因特定の難易度が高い

といった課題があります。

本トークでは、タップルが認証機能を刷新する中でおよそ140ものエラーを分類し向き合った経験をもとに、
上の句、下の句を扱う百人一首のように

  • 「エラーコード」に対してどんな「エラーダイアログ」を出すべきか
  • 「ユーザーからの問い合わせ」に対してどんな「回答」をすべきか

を “問題解決までのスピード” に着目してお話しします。

本トークを通じて、いままで雰囲気で扱っていたエラー分類への解像度が上がることで、
皆さんのサービスでユーザーが自己解決できる認証エラーが増え、認証の突破率やユーザーの獲得数が増加すること、そして今まで時間を使っていた不具合調査の時間が短縮されることを目指します。

4
ルーキーズLT(5分)

SwiftUIとSPMを使ったマルチモジュール構成の依存関係をたった5行のコードで解決する方法

ush109rock 植松 俊

SwiftUIでSwift Package Manager(SPM)を使用したマルチモジュールプロジェクトにおいて、循環参照を回避するための依存関係解決方法を紹介します。本LTは、循環参照の問題にフォーカスし、具体的かつシンプルな解決策をお伝えすることを目指しています。

具体的には、以下の構成でトークします。

  1. 循環参照の発生例の紹介
  2. 循環参照を回避するためのモジュール構成を考える
  3. 依存解決するためのコードを5行で実装

依存関係解決にお悩みのそこのあなた、即実践可能な解決策をお届けします。

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

iOS 6 の影を慕いて: スキューモーフィズムの消失とデザインの進化

log5 log5

みなさんは iOS 6時代のデザインをご存知ですか?ーーあるいは、覚えていますか?
最も特徴的だったのは、光沢のある美しいガラス箱のようなアプリアイコンではないでしょうか。
しかし、iOS 7を境にフラットデザインへと移行し、アイコンを含むあらゆる外観が一新されました。
それでも、「過度に単純化」される前のデザインは、今なお忘れがたい輝きを放っています。

本セッションでは、iOS 6が主流だった2012年版と現行の2024年版のHuman Interface Guideline (HIG) を比較し、デザイン思想の違いについて探ります。
美的完成度に一貫性、数々のコントロールーー
スキューモーフィズムに彩られたデザインがどのように生まれ、今どう変化したのかをHIGや関連資料を用いて辿っていきます。

といっても、デザイン哲学を40分で説明するのは無謀ですから、今回のトークはiOSインターフェースデザインの本質に少し近づく程度になるでしょう。
とはいえ、現代の「フラットなデザイン」の価値を再認識し、未来のデザインの方向性を見据える機会になりうると信じています。

今とは異なる美学と思想を持つリッチなデザインは、すでに過去のものであるとは言え、iOSの進歩の過程で生まれたかけがえのないものです。
過去や現在のiOSデザインに少しでも興味がありましたら、ぜひ本トークにお越しください。

3
採択
2024/08/23 15:05〜
Track D
レギュラートーク(20分)

空間ビデオフォーマット、MV-HEVCが写し撮る世界

Ridwy なめき ちはる

Apple Vision Proで空間ビデオを見るのは、まるでその場にいるかのようなリアルで素晴らしい体験です。この空間ビデオの記録にはMV-HEVC(Multiview High Efficiency Video Coding)という規格が用いられています。「Multiview」とは左右の目それぞれのフレームを指し、視差まで再現できるため、平面的なディスプレイにはないリアルさを感じられるようになっています。

では、どのように撮影を行えば良いのでしょうか?配信時に注意すべき点は?さらに、Vision Pro以外のユーザーにはどのように対応するのでしょうか?本トークではこれらの疑問に答えつつ、MV-HEVCに焦点を当て、この規格を理解し、空間ビデオの持つポテンシャルと具体的な活用方法について考察します。

規格自体のリリースは2014年と古く、両目の視差を利用した立体視に関してはさらに前から研究が行われており、ステレオスコピック動画の撮影のコツや、どんな表現に向いているのかについてはそれらを参考にできます。AVFoundationとVideoToolboxのAPIを使って2台のカメラで撮った動画から空間ビデオを作成する方法も紹介します。
このトークが、空間ビデオを活用した新しい魅力的な体験を構築する一助となれば、非常に嬉しく思います。

採択
2024/08/22 19:20〜
Track D
レギュラートーク(20分)

Server-Driven UI入門: 画面のStateを直接受け取るアプローチ

SwiftUIの登場によって、画面のStateを使ってUIを構築するState-Drivenなアプローチが可能になりました。
クライアントでは、バックエンドからいくつかのAPIをコールし、それらを組み合わせて画面のStateを構成し、SwiftUIのViewに渡すことでUIを表示することができます。

では、画面に一つのAPIで画面のStateをそのまま受け取れる場合、クライアント側にはどのようなロジックが残るでしょうか?
if文やSwitch文のような分岐を持たないアプリは実現できるのでしょうか?

本トークでは、BFF(Backend for Frontend)と呼ばれるクライアント用の中間サーバーを活用し、
可能な限りロジックをバックエンドに寄せたServer-DrivenなUI構築を実務で取り組んだ経験を通して

  • 要件に合わせたResponse構成の工夫
  • Server-DrivenなUI構築が上手くハマる具体的な事例

といった、クライアントが可能な限りプレゼンテーションロジック以外を持たない構成とその活用について紹介します。

さらに、本トークでは実際にBFFの導入が難しい方に対しても、極端な事例を通じて

  • どこまでのロジックをバックエンドで持つべきか
  • バックエンドとのシステム境界をどう考えるべきか

といった疑問への一つの指針を提供します。

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

iTunes・おぼえていますか 〜ScriptingBridge今昔物語〜

417_72ki 417.72KI

手塩にかけて育てたミュージックライブラリがぶっ壊れた経験はありますか?私はあります。

5年前、OSX Catalinaの登場時にiTunesが廃止され機能ごとにアプリが分かれました。
その後、新しいミュージックアプリでは様々な問題が起こりました。

  • アルバムアートワークが消えた
  • 読み仮名のコピーができない
  • ジャンルが勝手に書き換わる

(※全部筆者が経験したことです)

万単位にのぼる楽曲を1個1個精査して正しい状態に復旧するのは当然ながら非現実的です。
更にミュージックアプリの使い勝手の悪さも相まって泣き寝入りを余儀なくされました。

ですが、そこに救世主が現れました。そう、 ScriptingBridge です。
しかし ScriptingBridge はObjective-CがベースなのでSwiftで扱うには一工夫が必要です。

本セッションでは、macで他アプリケーションと連携するための仕組みである ScriptingBridge をSwiftのみで扱う方法と、それを使ってミュージックライブラリから楽曲情報を取得・編集する方法を紹介します。

また、壊れた楽曲情報を半自動で復旧する為のガワとしてNowPlayingアプリを実装した話をします。

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

モバイルアプリ開発における『失敗学』の活用:効果的な再発防止策の立て方

yujif_ yujif

開発には失敗がつきものです。突然障害が発生したり、施策がうまくいかなかったりします。
そこで同じ過ちを繰り返さないように、失敗を振り返ってまとめることが重要です。
しかし、以下のような問題に直面したことはないでしょうか?

  • 例:過去事例のレポートを読んでも、しっかりと理解できない
    • 「何が起きたのかはおおよそわかるけれど……。原因は本当にこれだけ……?」
  • 例:自分もレポートを書こうとして根本対策を考えてみるが、ピンとこない
    • 「再発防止策はこれで十分だろうか……?もっと他にあるのでは……?」

失敗の振り返りが重要だとわかっていても、失敗を伝えることも理解することも難しいと感じることが多くあります。

本セッションでは、「失敗学」について紹介し、実際のプロジェクトで経験した事例を題材に「失敗の伝達に必要な記述」についても具体例を交えながら解説します。

トピック

  • 失敗学とは
  • 失敗情報は孤立しがち
  • 失敗は知識にしなければ伝わらない
    • 「失敗の伝達に必要な記述」

本セッションの想定対象

  • モバイルアプリの開発・運用に携わっている方
  • 失敗の振り返りの質を高めたいと思う方
  • 製品や現場を少しでも良くしたいと思っている方

参考図書

  • 畑村 洋太郎. 技術の創造と設計. 岩波書店, 2006.
レギュラートーク(20分)

UICollectionViewを活用した、快適で動的なレイアウト作成

shoryu927 tatsubee

SwiftUIが登場してからおよそ5年が経ちましたが、複雑なレイアウトを表現する場面では、依然としてUICollectionViewが力強い味方です。

特に、Compositional LayoutとDiffable DataSourceの導入により、App Storeのような複雑なレイアウトも簡潔に、かつ容易に実装することが可能になりました。
セクションの順番さえ決まっていれば、その特定のセクションに対してアイテムのグルーピング方法を適切に指定するだけで、複雑なレイアウトを表現することができます。

しかし、セクションが不定の場合はどうでしょうか?たとえば、セクションによっては大きな単体のCellを表示したり、複数のCellを横方向に並べてスクロールさせたいが、その順序がサーバーサイドの都合により変化するような場合です。
UICollectionViewCompositionalLayoutでは、セクションに対して直接表現方法を指定するため、順序が不定では実現が難しいかと思われがちです。
しかし、セクションのenumに一工夫することで、このような動的なレイアウト生成も実現することができました。

本セッションでは、このように「受け取るデータの種類によってCellを自由に出し分ける必要がある場面」での、我々の成功パターンについてお話しします。

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

AVAssetWriterで動画を作って学ぶグラフィックスの基礎

iOSアプリで動画を作成したことはありますか?
難しそうに思える画像生成や動画生成も順を追って理解していくことで意外とできるようになるものです

このトークではクライアント側での動画生成を試してみた経緯とそこで学んだ実際の動画の演出などについてお話しします。

  • なぜクライアント側で動画生成することになったのか?
  • AVAssetWriterによる動画生成の流れ
  • 動画で使われてる効果(移動・回転・拡大縮小・ドロップシャドウ・ブラー・フェードイン・アウト)の実装

このトークを通じて、AVAssetWriterを使った簡単な動画生成の流れとCore Graphicsを使ったレンダリングの基本を学ぶことができます。

LT(5分)

SwiftDataでPreview用のモックデータを実装

y_oh22 Yoji Ohara

SwiftDataを使用して1:Nの親子関係のモデルをPreviewする際にエラーが発生した経験はありませんか?本トークでは、SwiftDataを用いたモックデータの実装方法について解説します。

SwiftDataの基本概念: SwiftDataの基本的な使い方と、1:Nの親子関係のモデルの定義方法について説明します。
モックデータの作成方法: Preview用のモックデータを作成するための具体的な手法を紹介します。

ルーキーズLT(5分)

Xcodeのショートカットn連発

Gurrium

皆さんもご存知の通りXcodeにはショートカットがあります。
タブの移動、ビルド、コンソールの表示/非表示、シミュレータの選択、カーソルの移動などなど…。
いちいちトラックパッドやマウスまで手を動かさなくてもキーボードだけで完結できるのではないかと思えるほど多様です。
手間を減らすだけでなく、Xcodeの機能を深く知るきっかけにもなります。

そんな素敵なショートカットを時間の限り紹介します。

ルーキーズLT(5分)

ビジネス影響と戦うiOS15サポート終了戦記

ystg1302 Antony

タップルでは、毎年最新技術への対応とセキュリティ向上を目的に、一定の閾値を任意の数値が下回った場合、下位iOSバージョンのサポートを終了してきました。
しかし、iOS15のサポートを終了すると、iOS16にアップデートできない端末が複数あるため、アプリが使用できなくなるユーザが発生してしまいます。
都度課金でもなくフリーミアムでもない、課金ユーザからの売り上げがほとんどを占めているタップルにとって、iOS15のサポート終了は"売り上げに大きく関わる"決断です。

当然ビジネスチームからは、「売上に大きな影響が出るのでは?」という懸念が出ました。
今回私たちは、ビジネスチームと一方的に対立するのではなく、ユーザの利益、会社の利益、そしてiOSチームの利益のバランスを考えながら、適切な決断を行うために協力しました。

本LTでは、我々がどのようにビジネスチームや分析チームとコミュニケーションを行ったのか、また、その過程でどのような解決策を提案し、どのようにしてiOS15のサポートを終了するに至ったのかをお伝えします。
目次

  1. ビジネスチームとの売り上げ影響に関する議論
  2. 売り上げ影響を可能な限り下げるための提案と実践
  3. 結果と改善点
採択
2024/08/23 15:05〜
Track A
レギュラートーク(20分)

iPhoneの外部センサーを使わない位置測定 --測定誤差を添えて--

mrs1669 しろくま

iPhoneの進化により、位置測定技術は著しく向上しています。

GPSをはじめ、Wi-Fi、Bluetooth、そしてLiDARを利用した位置測定機能が搭載されています。 しかし、GPSは屋内で正確に計測することが難しく、Bluetoothは事前に機器の設置が必要です。LiDARなどの深度センサーはレーザー光を飛ばして反射光を計測するため、センサーを常に外部に向けておく必要があります。

今回は、これらの外部信号を用いずに、iPhone内蔵のジャイロセンサーと加速度センサーのみを使用して位置測定と距離測定を行う方法についてお話しします。 具体的には、xyz方向の3軸加速度データと3軸角速度データを用いて位置測定を行います。

このトークでは、以下の内容について詳しく説明します。

  1. 加速度データと角速度データを用いた位置測定の方法
  2. 実際の計測結果とその測定誤差についての解析
  3. 測定誤差を抑えるためのキャリブレーション方法とその効果

特に測定誤差に関する部分では、実際に計測をしたところ、大きな測定誤差が発生して大変苦戦しました。 どのような誤差が発生したか、そしてそれにどのように対処したかについて具体的な事例を交えて説明します。 これにより、同様の技術を利用しようと考えている方々にとって有益な情報を提供できると思います。

採択
2024/08/23 16:50〜
Track C
レギュラートーク(20分)

ゼロから始めるiOSセキュリティ ~ OWASP Mobile Top10から学ぶ脆弱性対策

soh_satoh Soh Satoh

あなたのアプリは本当に安全に作られていますか?

Webアプリに比べて、おろそかになりがちなネイティブアプリのセキュリティ。
脆弱性診断を行うセキュリティエンジニアは、セキュリティに関するオンラインコミュニティ「OWASP」が発行する検証基準「MASVS」などをもとに、脆弱性診断を行っています。
また、彼らは、開発者が特に気をつけるべきセキュリティリスクを「OWASP Mobile Top10」として公開しており、これらを理解することは、セキュアなアプリケーション開発を行ううえで非常に重要です。

このセッションでは、実際にiOSアプリの脆弱性診断を行っている筆者が、OWASP Mobile Top10の中から特によく見かける脆弱性を紹介します。

そのうえで、それらに対する対策方法を解説し、各種脆弱性への理解を深めることを目的とします。

内容

  • 安全でない内部ストレージへの情報保存 (M9: Insecure Data Storage)
    • 機微情報の適切な保存方法
  • 安全でない暗号化 (M1: Improper Credential Usage)
    • 暗号鍵のハードコードと難読化の有効性