LT(5分)

space vs padding vs Spacer

y0shikei_ Keisuke Yoshida

▼ 概要
私たちは「あたらしい旅行を、デザインする。」をミッションに旅行アプリ「NEWT (ニュート)」を日々開発しています。
NEWTは初期の開発初期段階からSwiftUIの導入を行なっており、開発開始から3年が経ちました。
みなさん、SwiftUIでの記法のルールは定めていますか?
宣言的UIの登場で開発のしやすさが増すと同時に、複数人で開発を行うと自由度が高いがゆえに記法揺れが起きると思います。
その一例としてStack.space/padding/Spacerをどのように利用しているか、ルール化しているかをお伝えします。

▼ 内容

  • SwiftUIにおけるスペースの付け方の種類について
  • スペースの付け方を間違えることで起きうる問題
  • 記法揺れを防ぐために具体的に定めているスペーシングのルール
8
ルーキーズLT(5分)

ロケールごとにフォントを使い分けてUXを改善しよう

Hiroma Tsuchiya

海外で作られたアプリで、デザインのクオリティは高いのに日本語フォントが残念でチープな見た目になっているアプリを見たことはないでしょうか?

グローバルに展開するアプリではローカライゼーションはもちろんのこと、現地に馴染みがあるフォントを選ぶこともアプリの魅力度を上げる1つの手段です。
本セッションでは各言語ごとに異なるフォントをどのように管理しているかについてご紹介します。

【ポイント】
・ロケールごとに異なるフォントを用意するべきケースとは?
・メリット&デメリット
・iOSプロジェクトでフォントの使い分けを簡単に管理するには

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

「品質」と「スピード」を両立させるためのGraphQL戦略

ryu1sazae Rick

▼ 概要
私たちは「あたらしい旅行を、デザインする。」をミッションに旅行アプリ「NEWT」を日々開発しています。
その中で、カスタマーに届ける「品質」と「スピード」を両立させるための手段の1つとして、「GraphQL」・そのクライアントとして「apollo-ios」を利用しています。

カスタマーは、「予約時に知りたい人気ツアーやホテルの情報」・「実際の旅の途中で必要な自身の予約情報」など、場面ごとに最適な情報を、最速で閲覧・利用したいと考えています。私たちは、カスタマーに旅行の出発前から帰国後まで、一生の思い出となるような最高の体験を提供する責任があります。そこで、そうしたニーズに応えるための有効な手段の1つとして、実際にどのようなキャッシュ戦略を駆使しているのかをご説明します。

また、高速なデリバリースピードは高い品質維持の上で成り立ちます。GraphQLを用いた開発過程おいて、スピードを落とさずに品質を高め続けるために、どのようにして土台を整えているかの具体的な方法についてもお話しします。

▼ 内容
・ NEWTはなぜGraphQLを採用しているのか
・ apollo-iosを用いたキャッシュ戦略
・ GraphQL Schemaから自動生成されたSwiftコードを、TestDoubleとして利用するための自動生成戦略

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

MPEG構造を把握し、VideoToolBoxを使った特殊再生の実装方法を理解する

k2_moons k2moons

VideoToolBoxは、AVPlayerなどが属するAVFoundationのさらに低位のレイヤーで、動画の圧縮(エンコード)や伸張(デコード)を行います。AVPlayerは非常に優秀なため、ほとんどの場合、VideoToolBoxを直接利用する必要はありません。しかし、MPEGの構造を理解し、VideoToolBoxを使って特殊再生を行うことで、AVPlayerがどれほど複雑な処理を行っているかを垣間見ることができます。

このトークでは、カメラで撮影した映像ファイルをVideoToolBoxで再生し、スキップ、シーク、倍速再生などの特殊再生を行う方法を解説します。また、なぜそのような処理が必要になるのか、MPEGフォーマットの重要なポイントについても説明します。

1
ルーキーズLT(5分)

WebからiOSへ:SwiftUIのファーストインプレッションと他フロントエンド技術の比較

takumi_3025 Akashi Takumi

Webフロントエンド開発からiOSアプリ開発への移行は、技術的な視点のシフトが必要となります。例えば、Webフロントは主にDOMベースの操作が中心ですが、iOS開発ではユーザーのタッチ操作など直接的なインタラクションが求められるため、iOSのネイティブAPIなどに対して知見が必要です。
このようににSwiftUIとWebフロントエンド技術(Next.js)の比較を通じて、SwiftUIの特性とWeb開発者にとっての利点・欠点を掘り下げます。

本トークでは以下の三点について重点的に取り上げます。

1.SwiftUIのファーストインプレッション: Webフロントエンド技術者が初めてSwiftUIを使った際の直感的な感想と具体的な違いをまとめます。
2.機能比較: React.js, Next.jsとSwiftUIで開発した場合の違いを比較します。特にタッチ操作やジェスチャーの応答性、アニメーションの実装のしやすさなど、直接的なユーザーインタラクションが重要な要素としてどのように扱われるかを見てみます。
3.コミュニティサポート:それぞれの開発者コミュニティの規模感や活発さについて取り上げます。

本トークにより、Webフロント技術者以外にも今までiOS開発にあまり触ってこなかった方々がSwiftUIを利用した開発に興味を持つきっかけを提供できれば幸いです!

ルーキーズLT(5分)

実践!Flutter Add-to-app~既存アプリとの統合で見えたメリットと課題~

Yuta Hirakawa

モバイルクロスプラットフォーム技術でシェアを拡大しているFlutterですが、既存アプリを一気に乗り換えるのはコストがかかります。Flutterには「Add-to-app」という画面単位でFlutterを組み込む仕組みが用意されており、これを利用することでリスクを抑えつつFlutterを導入することができます。

「Add-to-App」を利用することで、コストを押さえつつクロスプラットフォームの導入を小さく始める事ができます。

しかし、良いことばかりではありません。例えば以下のデメリットも存在します。

・OS毎に別々のUIデザイン適応が困難
・Flutter(Dart)有識者不足
・サードパーティ製パッケージへの依存

Flutter 1.0がリリースされてから5年が経った今、実際に「Add-to-app」を使用してFlutterを導入する中で判明したメリットとデメリットを詳しく紹介します。特に導入時の課題や注意点についても触れ、Flutter導入を検討している開発者にとって役立つ情報を提供します。

5
ルーキーズLT(5分)

近距離撮影の新常識!iOSカメラアプリ開発におけるピンボケ対策の最前線

Yuta Hirakawa

カメラアプリを開発する際、広角カメラ(builtInUltraWideCamera)でQRコードやレシートなどの小さな被写体にピントを合わない問題があります。

従来のiPhoneでは最短撮影距離が10cmでしたが、最新のiPhone 15では15cm、iPhone 15 Proでは20cmと、カメラの進化に伴い最短撮影距離が増加しています。このため被写体に近づきすぎるとピントが合わずボケてしまいます。

Appleの標準カメラアプリは被写体との距離に応じて自動的に最適なカメラを切り替える機能を持っていますが、自作のカメラアプリではこの機能が自動で提供されません。そこで開発者が対策を講じる必要があります。

このセッションでは、小さな被写体を撮影する際の対応方法を紹介します。
具体的には最短撮影距離から被写体に最適なカメラ設定を行う方法を詳しく解説します。これによりカメラアプリ開発者がユーザーに高品質な撮影体験を提供できるよう支援します。

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

自動テストの信頼性を高めるミューテーションテストの活用

tarappo tarappo

iOSアプリ開発において自動テストは一般的になってきています。
しかし、どういった自動テストを用意すればいいのか、このテストは本当に価値を発揮できているのかと、不安に思うことはありませんか?

その不安を解消する手段として「ミューテーションテスト」を使ってみてはどうでしょうか。
ミューテーションテストは、プロダクトコードを意図的に変異させ、テストコードが適切に失敗するかを確認することで、自動テストの有効性を評価するテスト手法です。

とはいえ、多くのテストを実行するため、実行時間が大きな課題となります。
しかし、近年のマシンスペックの向上やXCTestを取り巻く環境の進化により、ミューテーションテストの実施が現実的になってきました。

本トークでは、ミューテーションテストの基本的な概念とその利点を説明し、さらに実行時間を短縮するための具体的なアプローチについて紹介します。

具体的には、「muter」というライブラリがおこなっているアプローチを元に、実行時間を短縮するための工夫を紹介します。
加えて、ミューテーションテストを実行した際の実行時間や出力結果を基に活用法を紹介します。

これにより、iOS開発における自動テストの価値を最大限に引き出す方法を学んでいただけることを目指します。

6
採択
2024/08/23 17:55〜
Track B
ルーキーズLT(5分)

メモリ最適化を究める!iOSアプリ開発における5つの重要なポイント

Yuta Hirakawa

その昔iPhoneのRAM容量は512MBや1GBしかなく、メモリ管理は非常に重要でした。しかし、近年では3~8GBの容量が一般的になり、メモリ不足に悩むことは少なくなりました。

それでも開発者にとって適切なメモリ管理は重要です。メモリリークや不要なメモリ使用を避けることで、アプリのパフォーマンスを向上させることができます。
iOS開発ではARC(Automatic Reference Counting)によってメモリ管理が自動化されていますが、オブジェクトが解放されずに残ってしまうケースがあります。

このトークでは、特に注意が必要な5つのポイントについて解説します。

  1. クロージャ内self参照による循環参照
  2. 親子クラスの循環参照
  3. UIImage(named:)による画像呼び出し
  4. URLSessionConfiguration = .defaultの指定
  5. URLSessionDelegateのextension実装

これらのポイントを押さえて、アプリのパフォーマンスを向上させましょう!

LT(5分)

SwiftUIで異変を見逃さず最適解を選ぶ8パターン

ojun_9 ojun

【ご案内】

  • SwiftUIを使ってUIの異変を見逃さないこと
  • 異変を見つけたら、すぐにUIKitを利用すること
  • 異変が見つからなかったら、SwiftUIを使い続けること
  • SwiftUIとUIKitのメリットとデメリットを理解し、最適なアプローチを選ぶこと

iOSアプリ開発において、SwiftUIを利用することで直感的で効率的なUI構築が可能になります。
しかし、時にはSwiftUIに固執することで、開発が行き詰まることもあります。そんな時はUIKitの力を借りることが有効かもしれません。
本LTでは、上記の案内をもとに、SwiftUIとUIKitを使い分ける8つのパターンを解説します。

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

楽しく簡単に!QRコードの読み取り機能を実装しよう

penguinsan_pg ぺんぎんさん

iOSアプリには、カメラを使ってQRコードの検出・読み取りを行う機能がよく組み込まれます。
しかし、この機能をアプリ内で実装するには、AVCaptureSessionを用いた入力デバイスや出力データの管理、AVCaptureVideoPreviewLayerを用いたカメラプレビューの表示、AVCaptureMetadataOutputからQRコードの情報の取得...など、多くの関連するクラスを扱う必要があり、複雑な実装を行わなければなりませんでした。

そこで登場するのが、VisionKitフレームワークです。
iOS 16以降に利用可能なDataScannerViewControllerを使うことで、カメラを使った検出・読み取りの機能をシンプルかつ簡単に実装できます。

このトークでは、以下の内容についてお話しします。

  • VisionフレームワークとVisionKitフレームワークの概要
  • 従来のQRコード読み取り処理とその問題点 (AVFoundationフレームワークを利用した実装)
  • DataScannerViewControllerを用いた実装方法の紹介 (VisionKitフレームワークを利用した実装)

QRコードの読み取り機能に苦労していた日々は今日でおしまいです。
みんなで楽しくVisionKitフレームワークを学びましょう!

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

WebViewにおけるログイン状態の維持 - RequestHeader vs Cookies -

marcy731 marcy731

「WebView内でもログイン状態を維持してください」

アプリ開発をしていると、WebViewを使うことはよくあると思います。
WebView内でログイン状態を維持する方法には、大きく「RequestHeaderにAuthorizationトークンを使用する方法」と「Cookieを使用する方法」の2つがありますが、どちらがより良い方法なのでしょうか?

このトークでは、WKWebViewを用いてユーザーのログイン状態を維持する方法として、上記2つのアプローチについて徹底解説します。
両者を比較し、それぞれのメリット・デメリットを説明したのち、セキュリティ重視や実装の簡便さなど、具体的なケーススタディを通じて最適な選択を議論します。

これらの知識を通じて、参加者はWKWebViewでのログイン状態維持におけるベストプラクティスを学び、自分のプロジェクトに即座に適用できる実践的な知識を得ることができます。
初心者から中級者まで、幅広いレベルの開発者にとって役立つ内容を提供しますので、ぜひご参加ください。

内容:

  • WKWebViewとは
  • RequestHeader / Cookies の説明
  • RequestHeaderを用いたログイン情報の維持、そのメリット・デメリット
  • Cookiesを用いたログイン情報の維持、そのメリット・デメリット
  • まとめ
2
採択
2024/08/24 13:00〜
Track D
レギュラートーク(40分)

めざせ!WKWebViewマスター!

marcy731 marcy731

「ここはWebViewでいきましょう」
iOSエンジニアであれば、ネイティブで実装したい気持ちとビジネス要件との間で葛藤し、最終的にWebViewでの実装を選択した経験がある方も多いと思います。

このトークでは、iOSアプリ開発における強力なWeb表示コンポーネントであるWKWebViewのAPIについて徹底解説します。
WKWebViewには多くのAPIが存在し、その中にはあまり知られていないものもあります。
主要なAPIだけでなく、できるだけ普段あまり使われないAPIも含めて説明することで、参加者がWKWebViewで実現可能な機能を幅広く理解できるようになります。

具体的には、私が日々のWKWebViewを用いた開発の中で得られたノウハウを交えながら、各APIの役割や使用例、効果的な活用方法について解説します。
初心者から中級者まで、幅広いレベルの開発者にとって役立つ内容を提供しますので、ぜひご参加ください。

めざせ!WKWebViewマスター!

内容:

  • WKWebViewとは
  • WKWebViewの各APIの紹介
    • 基本的なウェブページの表示
    • HTTPリクエストのカスタマイズ
    • Cookie/キャッシュの管理
    • JavaScriptからネイティブコードへのコールバック
    • ナビゲーションの管理
    • etc...
レギュラートーク(20分)

アラートでユーザーの操作を止めたくない、でもトーストやバナーの独自実装は気が乗らない。何か良い案はないか!

_ski_u さかいゆうのすけ

私は事業用クレジットカードを提供するサービスに携わっており、カードや利用明細を閲覧・管理するiOSアプリを開発しています。
自社でも導入しているため、自分もそのアプリのユーザーです。

アプリではカード番号等をコピーでき、決済ページへの情報入力の際に便利です。
しかし各情報をタップしてコピーする度に「コピーしました」というアラートが表示されます。
アラートはOKボタンをタップして消えるため、カード番号コピー→OKタップ→名義人コピー→OKタップ、とユーザーの連続した動きを中断させてしまいます。

開発時は気にしていませんでしたが、ユーザーの自分は「このアラート邪魔…作ったの誰…」と私自身の実装に対し文句を言うのでした。
そうしてこのアラートが不要だと気づいた私は、ユーザーの操作を妨げずにコピーしたことを伝えようと決めました。

このトークではそのようなユーザーへのフィードバックに、不要なアラートを使わないためのアイデアをお話しします。

はじめに、Apple社製のものをはじめとした様々なアプリにおいて、類似した状況で用いられるフィードバックを調査した結果をまとめます。SwiftUIに無い一時的に表示するバナーの実装や、その為のライブラリの使用は大仰に感じ、まずは事例調査をしました。
その後、プロトタイプの実装やデザイナーとの相談を経て冗長なアラートを取り除くまでの流れを紹介します。

3
ポスターセッション

SF Symbols.appを活用してカスタムシンボル(オリジナルアイコン)をデザインする

emim emim

SF Symbolsが発表されてからしばらく経ちますが、私の所属組織ではいまだPDFでのアイコン作成/iOSアプリへの取り込みが主流でした。また開発観点から見ても、5,000以上の多様なアイコンをあらかじめ揃えたSF Symbolsの活用は、スピードの求められるグロース開発とも相性がいいことがわかっているのに、適用の下準備が整っていませんでした。

そこで今年、開発側のSF Symbols利用の土台作りとともに、デザイン側のカスタムシンボル作成のワークフロー整備をおこないました。

このポスターセッションでは、カスタムシンボルを使ったオリジナルアイコンの作成方法や、SF Symbols.appへのSVGデータの取り込み/加工のデザインワークフローの作成、更にデザイナーとエンジニア間のデータのやり取り方法を整備した事例を紹介予定です。

実際にデザイナーがSF Symbols.appを利用してみると思わぬ落とし穴にハマったり、想定外の動きをしたりしました。また、アイコン作成者(デザイナーごと)に依存する形状のブレが生じないよう、Adobe Illustratorのガイド機能を利用したプロセス調整なども行っています。これらの整備をする上で、SF Symbolsに込められたVariablesの思想なども見えてきたため、Tipsもまとめます。

2
採択
2024/08/22 17:20〜
Track C
レギュラートーク(40分)

実践 Advanced CallKit 〜快適な通話の実現に向けて〜

h1d3mun3 h1d3mun3

CallKitで音声通話機能を実現したことはありますか?

CallKitはiOS 10 / iPad OS10から利用できる音声通話機能を実現するためのFrameworkで、様々なアプリがCallKitを利用して音声通話機能を実現しています。
おそらくアプリを利用して音声通話機能を実現する場合、1対1の通話を実現が実現できればアプリのユースケースのほとんどを十分にカバーできると思います。
ですが、CallKitを使えば、1つのアプリで友達のAliceとの1体1通話はもちろん、その通話中に友達のBobとの1体1通話に切り替えるといったような、一歩進んだ音声通話機能を実現できるのはご存知でしたでしょうか?

本トークでは下記観点などから、快適な通話の実現に必要なCallKitの実装方法についてタクシーアプリでの活用事例を踏まえつつご紹介します。

  • CallKitを使って1体1の音声通話を実現する方法
  • 音声通話とおやすみモードの関連性
  • 複数の音声通話を受ける方法・通話のグループ化といった1つ先の利用方法
13
採択
2024/08/22 18:10〜
Track D
レギュラートーク(20分)

GPSでどのようにして現在地が分かるのか

inonb ta.inoue

位置情報のCore Locationは、衛星電波の届く戸外ではかなり精確な現在地を得ることができ、多くのアプリで利用されています。フレームワーク内部では、いわゆるGPSと呼ばれる衛星測位をベースに、WiFiやセルラーのアクセスポイントも援用した、スマートフォンならではの測位手法が使われています。

GPS(GNSS)測位の基本的な原理は、いくつかの衛星と受信機を結ぶ三角測量といえ、非常にシンプルなものです。とはいえ、2万キロの距離を微弱な電波で結ぶための様々な工学的工夫があり、また、ネットワークの位置情報を効果的に参照することで、すばやく精確な測位を実現しています。

このトークでは、衛星からの電波にどのような情報が入っているのかを覗いてみて、私たちが普段便利に使っている位置情報がどのように求められているかを確認してみます。

32
LT(5分)

野菜で覚える API Design Guidelines

akihiro_kokubo Akihiro Kokubo

ここにトマトがあります。
このトマトを、幅を指定して切るメソッドについて考えてみましょう。

extension Tomato {
  public func slice(width: Double)
}

トマトを3cm幅でカットする際は、以下のように書けば良さそうです。

tomato.slice(width: 3)

さてここで、メソッドのシグネチャからwidthを省略したら、メソッドを使う側にどう伝わるでしょうか?

tomato.slice(3)

「トマトを3cm幅でカットする」ではなく、「トマトを3つにカットする」と伝わってしまうかもしれません。


Swift の API Design Guidelinesは、明確で一貫性のあるコードを書くための指針を教えてくれます。しかし、その抽象的な概念を理解し、日々のコーディングに適用するのは難しい場合があります。

本LTでは、身近な「野菜」を使って、これらのガイドラインの理解を深めていきます。野菜を使うことで抽象的な概念を具体的なイメージとして捉え、より実践的な知識として吸収し、より良いコードが書けるようになることを目指します!

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

快適なSwiftUI Previewドリブン開発に移行するためにしたこと

satoshin21 satoshin21

現在担当しているアプリはメインの導線に関してはSwiftUIに移行を完了しました。
SwiftUIへの移行とあわせてSwiftUI Previewを活用して開発とフィードバックのループを高速化し業務に活用しています。

iPadでのUIの活用やダークモードとライトモードの確認に非常に効果的なSwiftUI Previewですが、なかなかクセが強いところもあり
Previewがうまく実行されなかったり、実行に時間がかかってしまったりと、快適に使っていくためには工夫して使っていく必要があります。

それらを踏まえ、このトークでは我々が行っているSwiftUI Previewドリブンな開発、
SwiftUI Previewを快適に活用しながら実装していく為にしていることを紹介させていただきます

具体的なアジェンダは以下のとおりです

  • SwiftUI Previewドリブンな開発とメリット
  • マルチモジュールな設計とSwiftUI Preview
  • 徹底的に依存を排除する
  • 限りなく小さい単位でビルドする
4
ルーキーズLT(5分)

Amperを活用したKotlin Multiplatformプロジェクトの構成方法

yoppie_x yoppie

Gradleのプラグインとして開発されたAmperというプロジェクトを構成するためのツールが登場しました。
AmperはKotlin Multiplatform(KMP)のプロジェクトを構成することを前提としています。
従来のGradleファイルを用いて構成する場合と比べ、構成ファイルがシンプルになるため、特にiOSアプリ開発者への恩恵は大きいです。

本LTでは、Amperに関する知見を共有いたします。
以下の内容を中心にお話しします。

  • Amperの基本的な機能とその利点について
  • Amperを使ったKMPプロジェクトの具体的な構成方法
  • module.yamlの書き方とその役割
  • Fleetでのmodule.yamlに関するコードアシスタンスの利用方法
  • Kotlin MultiplatformおよびCompose Multiplatformプロジェクトの具体的な構成方法

このLTを通じて、参加者の皆様がAmperを使ったKMPプロジェクトの構成方法を理解し、実際のプロジェクトに活用できるようになることを目指します。