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

空間オーディオを活用しよう!

Ridwy なめき ちはる

2021年、AirPodsにヘッドトラッキング機能が付いた際「空間オーディオ」という単語が注目を浴びました。頭を動かしても音源の位置が変化せず、あたかも現実世界に存在するかのような自然な体験…今思えばこれはApple Vision Proへの布石だったのかもしれません。
Appleによる空間オーディオは、ハードウェアとソフトウェアを組み合わせた統合的な体験であり、そのベースには映画館でもお馴染みのオブジェクトベースの音のレンダリング技術、Dolby Atmosなどが利用されています。

今一度、空間オーディオとは何かを技術的に捉え、どんなAPIがあるのかを詳しく見て行きましょう。
visionOSの話?いえいえ、実はiPhoneはiPhone XSからDolby Atmosをサポートしています。アプリやサービスに空間オーディオを活用できないか、その可能性を一緒に探ってみませんか?

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

ADEPの更新審査が始まった!非公開の業務用iOSアプリ(InHouse配布)の移行を考える

oishi oishi

非公開の業務用iOSアプリには、長らくADEP(InHouse配布)が使われてきました。しかし、2020年にADEPの新規契約は事実上受付停止となり、2022年からはその更新が審査制に変わりました。

InHouse配布を使ってきた企業はこれから毎年、

  • 現状を維持し、次年度の更新可否を気にかけるのか
  • 早めに動いて、Appleが推奨する配布方式に移行するのか

という選択を迫られることになります。こうした背景をふまえて本トークでは、ADEP更新の審査基準や更新拒否された後のアプリ挙動、カスタムApp移行の手順や留意点、メリット・デメリット、カスタムApp以外の選択肢(AdHocや非表示Appなど)についてご紹介します。

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

正規表現を"微分"する!?爆速で自作できる正規表現エンジン

ta_ka_tsu ta_ka_tsu

昨年の「正規表現って結局何なのさ?〜エンジニアのためのコンピューターサイエンス入門〜」では主に理論の面から正規表現が何なのか話をさせて頂きました。
対して今年は実際に正規表現エンジンの実装に関する話をします。

正規表現エンジンの実装ではオートマトン型と仮想マシン型が主流です。
前者は正規表現から決定性有限オートマトンを、後者は、正規表現をバイトコードにコンパイルし仮想マシンを作成する方法です。
いずれの方法でも正規表現からオートマトンや仮想マシンを生成しなければならず、その実装はそれなりに大変です。

しかし正規表現が文字列にマッチするかどうかの判定であれば正規表現を"微分"するという方法があるのです。
本セッションではその原理と簡易的な実装を紹介します。
またオートマトン型、VM型との比較も可能な限りお伝えします。

採択
2023/09/02 16:50〜
Track C
レギュラートーク(20分)

君だけのGFMエディタを作ろう!

FromAtom FromAtom

NSAttributedStringとSwiftUIのMarkdown対応により、
誰もが1度は「僕の考えた最強のMarkdownエディタ」を作る夢を見たでしょう。

エディタには、見出し・太字・リストなどの記法を簡単に入力できるボタンが欲しくなります。
その時に「正規表現で実現できそう」と考える人がいるかもしれません。
そう、過去の私です。
しかし、正規表現を用いた実装は失敗に終わります。

このセッションではその失敗をもとに、

  • 正規表現で入力補助機能の実装が困難な理由
  • apple/swift-markdownとcmark-gfm
  • SourceLocation をUITextViewで扱う方法
  • Syntax Highlightの自作方法

について話します。

このセッションを聞くことで、みなさんもオリジナルのMarkdownエディタが作れるようになります!

採択
2023/09/02 16:50〜
Track D
レギュラートーク(20分)

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

Li Jierong

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

本トークでは、以下のトピックについて紹介します。

  • バックグランドURLSessionとは
  • メリットと活用方法
  • 実装の具体例
  • 使用上の注意事項
採択
2023/09/02 17:05〜
Track A
ルーキーズLT(5分)

7カ国語、各ファイル1200行を超えるローカライズを安全に運用する方法

_kzumu Shimomura Kazumasa

私たちのチームで開発しているアプリは7カ国向けのローカライズを対応しています。
ローカライズのテキストは外部へ依頼して翻訳してもらった後に、手作業でスプレッドシートからLocalizable.stringsへコピペをする必要があったため
人的ミスが発生する原因となっていました。

そこで、ローカライズファイルの静的検査ツールである、L10nLintというコマンドラインツールを開発し、
実際に自分たちのチームで運用がされています。

このツールには、Baseファイルと比較したときのkeyの抜け漏れ検知や、並び順のチェック、
簡体字と繁体字が混合していないかなどのチェックなどの様々なルールが含まれています。

また、Danger経由でPull Requestへコメントを行うためのプラグインもリリースしています。

本トークではこのツールのご紹介を予定しています。

採択
2023/09/02 17:05〜
Track B
ルーキーズLT(5分)

ShazamKitの魔法を解き明かす: 音楽認識技術「オーディオフィンガープリント」の探検!

shzero5 Shogo Yoshida

カフェのような喧騒の中でも、Shazamがどのようにして音楽を精度良く認識しているかご存知ですか?
このライトニングトークでは、WWDC2023でアップデートが発表されたShazamKitの核心となる技術、オーディオフィンガープリントに焦点を当て、その神秘を解き明かします。
わずか数秒のフレーズから全曲を特定し、騒々しい環境でも音楽を正確に認識する方法を、その驚くべき技術と共に掘り下げます。
5分間の発表で、楽曲を視覚化するスペクトログラムから始まり、音楽の「指紋」となる時間と周波数の2次元の星座図について説明し、そして、この「指紋」がどのようにデータベース内の楽曲とマッチングし、最終的に特定の曲を見つけ出すのかを明らかにします。
普段あまり触れることのない音楽認識技術の面白さを共有し、皆さんに新しい発見をしていただけることを期待しています。

採択
2023/09/02 17:10〜
Track A
ルーキーズLT(5分)

Swiftコードのパフォーマンス悪化 - 6つのケースでの実験結果を報告

akihiro_kokubo Akihiro Kokubo

パフォーマンスにネガティブな影響のあるコードは、意図せず簡単に書けてしまいます。
例えば、配列の中で条件に合う最初の要素を取得する場合はどうでしょうか?
配列に対し filter を適用した後に first を適用するよりも、first(where:) を用いる方が速いでしょう。
ならば、どのくらい速いのでしょうか?
このトークでは、パフォーマンスが悪化しうる6つのケースを挙げ、どのくらいの差が出るのかを実験・検証します。

実験の対象とする6つのケース

  • コレクション内のオブジェクトの存在確認
  • コレクションが空かどうかの確認
  • 文字列が空文字かどうかの確認
  • コレクション内の条件に合う最初のオブジェクトの取得
  • コレクション内の最小のオブジェクトの取得
  • コレクション内の全てのオブジェクトが条件を満たすことの確認

対象者

  • “Swifty” なコードを書きたい人
採択
2023/09/02 17:10〜
Track B
ルーキーズLT(5分)

iPadだけで完結させるiOSアプリ開発の全て

ryosuke_tamura Ryosuke Tamura

「せっかく買ったiPadを活用できないまま放置している」、「SwiftUI触る機会がない」、「Macは持ってないけどiPadならある」、「iPadでプログラミング学習をしたい」
そんな方にオススメしたいのがiPadでアプリ開発です!
ついこの前まで私自身もiPadを活用できずに放置ぎみで、SwiftUIも書いたことがない状況でした。
このままiPadをろくに使わずに手放すのは悔しかったので、iPadだけでアイコン作成、スクリーンショット作成、アプリの開発・公開まで全てを完結させるチャレンジをしてみました。
使用したツールや難所の紹介、得られた学びをお伝えできたらと思っています。
これを見て是非皆さんにもチャレンジしてみていただきたいです。

採択
2023/09/02 17:15〜
Track A
ルーキーズLT(5分)

実践CoreBluetoothプログラミング〜BLEの基礎から距離推定までをわかりやすく解説!〜

RioFujimon 藤門 莉生

CoreBluetoothは、Appleが出しているiOSアプリでBLEを利用するためのフレームワークです。
BLEを利用することで、消費電力を低く抑えつつ、様々なWebサービスやアプリ、ハードウェアと連携したiOSアプリを開発できます。
しかしながら、BLEに関する用語や概念がわかりにくいと感じることがあるかもしれません。

今回のLTでは、CoreBluetoothを活用したデモアプリのコードを用いて、
BLEプログラミングの基礎から距離推定までをわかりやすく解説します。

まずは、BLEの基礎となる用語や概念を説明します。
その後、デモアプリのコードを用いて、実際にBLEプログラミングを行う方法を解説します。
更に、RSSIとTxPowerからの距離推定についても説明します。

ぜひこの機会にBLEプログラミングを学び、日々の開発に役立てていただけると幸いです。

採択
2023/09/02 17:15〜
Track B
ルーキーズLT(5分)

無料で使えて意外と凄いMapKitの世界

saikei718 Keisuke Saito

Apple標準フレームワークでお馴染み「MapKit」ですが、
「ただ地図にピンを立てるだけ」ではなく様々な機能がいくつもあることを、みなさん知っていますか?

実はMapKitには毎年新機能が追加され、年々出来ることも増えてきています。

  • スポット名での検索&サジェスト
  • A地点からB地点への経路探索
  • 緯度経度と住所の相互変換(ジオコーディング)
  • ピンのカスタマイズやクラスタリング
  • 地図上のスポットアイコン(POI)のフィルタリング
  • マップ上への図形の描画

など、このLTでは実際にプロダクトに導入した経験も踏まえ、
MapKitを使い無料で実現できる様々なカスタマイズや機能についてご紹介します!

採択
2023/09/02 17:20〜
Track A
ルーキーズLT(5分)

新メンバーのキャッチアップコストを下げよう!チュートリアルプロジェクトの紹介

oskmr_ miseri

オンボーディングでこのような課題に直面したことはありませんか?

  • オンボーディングがトレーナーに依存してしまい、適切なタスクを考えるコストが高い
  • プロダクトコードが大規模なためキャッチアップが難しい

私たちのチームではこれらの課題を解決するために、本番のプロジェクトに近いアーキテクチャと構成を持つチュートリアルプロジェクトを作成し、実際の開発に近いフローでのオンボーディングを行なっています。

また、新メンバー向け以外にも課金やCI/CDなどの難易度の高い知識のキャッチアップや新しく公開されたAPIのPlaygroundとしても活用しています。

本トークでは、技術のキャッチアップを促進するためのチュートリアルプロジェクトの具体的な活用方法を紹介します!

このトークが少しでも皆様のチームのオンボーディングの参考になれば幸いです。

採択
2023/09/02 17:20〜
Track B
ルーキーズLT(5分)

iOS16で変わった画面の向きを操作する方法

ras0q Ras

iOS15以前では、画面の向きを制御するために shouldAutorotate を設定したりUIDevice.current.setValueを使用して強制的に値をセットする方法が取られていました。iOS16では shouldAutorotate が非推奨になり、
公式から setNeedsUpdateOfSupportedInterfaceOrientations という新しいメソッドが登場しました。本発表では、以下のような注意すべき点・変更が必要な点を主に解説した上で、このメソッドを使って新しい画面の向き操作について紹介します。

  • AppDelegateで画面の向きを管理する方法
  • iOS15以前と16以降でのInfo.plistの書き方の違い
  • ViewControllerの設定やメソッドを呼ぶタイミング
採択
2023/09/02 17:25〜
Track A
ルーキーズLT(5分)

マウスポインターを掴む?! 〜標準フレームワークで作る非接触でMacを操作する技術〜

rei_nakaoka なかおかれい

WWDC23でApple Vision Proが発表されました。Vision Proでは手の動きや音声でUIを魔法のように操作していました。しかし高精度なカメラやセンサーがなくとも手元のMacと標準フレームワークだけでも同様のことは可能です。

皆さんもご存知の通り、Swiftには画像認識、音声認識などが簡単に行えるフレームワークが充実しています。これらを使いユーザの行動を認識しそれに応じてCGEventを発生させることで「非接触でMacを操作する」といったことが実現できます。

本LTでは以下のようなフレームワークを使いMacを非接触で操作する技術を実際のデモを交えながら紹介します。今日から皆さんのMacも未来に近づくこと間違いなしです。

・Visionフレームワーク
・Speechフレームワーク
・Core Motionフレームワーク

採択
2023/09/02 17:25〜
Track B
ルーキーズLT(5分)

スクロールを制する者はセクションを制す〜Compositional LayoutにおけるUISegmentedControlの活用〜

Daue_Ueda23 おじおじ

UI作成において、Compositional Layout(複数のセクションを一つのUICollectionViewインスタンスで管理するためのレイアウト)を使用すると、特定のセクションだけのスクロールイベントを取得するのが難しいという問題があります。
これは、通常の方法(デリゲートメソッド)では全体のスクロールイベントは取得できるものの、セクションごとのスクロールイベントを直接取得することはできないためです。

例えば、セクションごとにUISegmentedControlを設置するといったケースでは、この問題を解決するために工夫が必要となります。
その一つの方法として、visibleItemsInvalidationHandler(表示中のセルが変わった時に呼ばれるハンドラ)を利用する方法があります。
具体的な使用例とその効果について、このLTで解説します。

採択
2023/09/02 17:25〜
Track C
レギュラートーク(20分)

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

kntkymt kntk

みなさんはSwiftUIで非同期処理データの状態管理をどう行なっていますか?

  • enumを使う方法: enum DataState { case loading; case success(Value); ... }
  • コンポーネントを使う方法: LoadingContent(fetch: fetch) { Content($0) }

などがあると思いますが

  • リロード中は前回の結果を表示したい場合
  • ページングに対応する場合

等の要件で、微妙に異なるバリエーションがいくつか存在する上、それらの方法にはメリットとデメリットがあります。
パフォーマンス低下を引き起こしていることも...。

このトークは、このような状態管理方法を複数個、実装ケースと共に紹介・考察し
それぞれの方法がどのような実装ケースに適しているかを分析・分類していく内容となっています。

採択
2023/09/02 17:25〜
Track D
レギュラートーク(20分)

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

BOBG1018Vi ぼぶ

WWDC2020で発表されたStoreKit testingは,テスト用のフレームワークです.
UnitTestとして課金テストを実行することはもちろん,StoreKit testingに必要なStoreKit configurationを用いると様々な恩恵を得ることができます.

  • StoreKit2への置き換えを進めたい
  • MVPやハッカソン等のプロダクトで,課金デモを実装したい
  • AppStoreConnect上に具体的な商品・オファーを作成せず検証したい
  • トランザクションの挙動をステップ・バイ・ステップで確認したい
  • 決済に失敗したときの挙動を確認したい
  • Flutterでも同様の恩恵を受けたい

動作環境がiOS14以上なStoreKit Testing.
導入自体は簡単なため,サクッと皆様のアプリにも取り入れませんか?

採択
2023/09/02 17:30〜
Track A
ルーキーズLT(5分)

5分で分かるSwift OpenAPI Generatorの使い方

naoki_mrmt naoki-mrmt / ばくぷー

Swift OpenAPI Generatorとは、Appleから提供されているSwift Package Managerプラグインで、OpenAPIドキュメントからSwiftのクライアントとサーバーのコードを生成することができます。

他にもあるOpenAPIドキュメントからコード生成するツールとは違いSwiftPM製のプラグインなのでXcode内で利用することができます。

このLTでは、以下の内容を話します。

  • Swift OpenAPI Generatorとは?
  • Swift OpenAPI Generatorを使う上で気をつけなければならないこと
  • Swift OpenAPI Generatorを使った時のつまりどころ(あれば)
  • Swift OpenAPI Generatorの使い方
採択
2023/09/02 17:30〜
Track B
ルーキーズLT(5分)

手抜き3D音響レシピ

oinariman 三原亮介

iOSのオーディオ関連APIを本格的に触るのはしんどいですが、そのしんどさをラップしてくれるフレームワークもいくつか用意されています。2Dゲーム開発用のSpriteKitもその一つで、これを使えば非ゲームなアプリにも簡単に空間を感じる効果音を追加することができます。ゲームエンジン界ではやや日陰な存在のSpriteKitを使って手軽に3D音響をアプリに加える方法をコード例を交えて紹介します。

採択
2023/09/02 17:35〜
Track A
ルーキーズLT(5分)

2歳の娘に喜ばれる!親子で楽しめるレジスターアプリ開発術

tominagaaaaa 冨永拓弥

このトークでは、普段育児に忙しい父親が2歳の娘に向けて開発したレジスターアプリを紹介します。デザインや音声読み上げの工夫を通じて、子供たちが楽しく遊べるアプリを作る方法をご紹介します。具体的には、iOSのHIGを2歳児向けに解釈したシンプルで親しみやすいデザイン、タッチイベントの使い方や誤操作の防止、音声フィードバックの実装、数字や色の認識、その他の試行錯誤と娘の反応フィードバック集の紹介などを行います。最後には、実際に作成したレジスターアプリのデモンストレーションを行います。このトークを通じて、2歳児向けアプリのデザイン原則と音声読み上げの活用方法を学び、親子で楽しめるアプリ開発に役立つ知識を得ることができます。