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

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

pihero13 Koki Hirokawa

アプリ開発の中でも、アプリ内課金はとりわけ高品質が要求される領域です。
課金に関するトラブルは、ユーザに対し不安や混乱を抱かせるとともに、お問い合わせなど面倒なアクションを要求します。また、事業への信頼値の低下やお問い合わせへの対応コストの増加など、ビジネスにも多大な影響を及ぼすため、可能な限り抑えたいところです。(開発メンバーのメンタルも健全に保ちたい…!)

私が開発に携わっているアプリでは、ユーザがアプリ内商品を意図せず重複購入してしまいお問い合わせが多発する問題に悩まされてきました。本トークでは、この問題を解消するに至った取り組みについて、仮説立てから設計、より良いアプリ内課金体験を提供するための考え方をお伝えします。

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

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

taka1068 Takanori Hirobe

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

本セッションでは我々が取り組んだソーシャルログイン機能リファクタリングに関する苦労話とそれによって実現できた機能改善事例のご紹介をします。プラットフォームの特性上、iOSアプリはソーシャルログイン機能が増えやすい事情があると思います、同じような悩みを持つ方々の参考になれば幸いです。

採択
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: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/03 10:25〜
Track A
レギュラートーク(20分)

顔写真メイクアップアプリの開発におけるプライバシー保護とコスト削減のための手法

AkkeyLab akkey

顔写真に化粧を施すアプリ、皆さんはどのように作りますか?
写真をサーバに転送し、バックエンドで加工する方法も考えられますが、顔写真は個人情報の一部となるため、ユーザに抵抗感を与える可能性があります。そこで、顔の分析から加工までを端末内で行う方法を検討しましょう。これならユーザのプライバシーが保護され、自社サーバでのコストも削減できます。

  1. CoreML モデルを活用した顔検出を行う
  2. Vision Framework を使用して、化粧対象の顔パーツを正確に分離する
  3. CIFilter を用いて顔パーツにメイクアップ効果を適用する

このトークでは、上記3ステップを使ったメイクアップ機能の実装方法を紹介します。メイクアップに限らず、Vision Framework や CIFilter の応用方法にも焦点を当て、幅広い実装に役立つ情報を提供します。

採択
2023/09/03 10:25〜
Track B
レギュラートーク(20分)

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

satoshoco Shoko Sato

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

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

External Accessory入門 - 公式Frameworkを使ってレシートプリンターを制御する!

trickart4121 trickart

「自分のiPhoneで外部機器を自由自在に制御できたらなぁ」と考えてことはありませんか?

私が所属する株式会社ユビレジでは、Appleが提供するFrameworkであるExternal Accessoryを使ってPOSレジアプリのレシート印刷機能を実装しています。

本セッションではExternal Accessoryについて、External Accessoryを使った外部機器(レシートプリンター)の制御方法ついて解説します。

  • External Accessoryについて
  • External Accessoryと(NS)Stream
  • レシートプリンターについて
  • レシートを印刷してみる
  • アプリのリリースとPPIDについて
採択
2023/09/03 10:25〜
Track D
レギュラートーク(20分)

Human Interface Guidelinesから読み解く標準アプリの素晴らしい体験

k_torishima Koji Torishima

みなさんHuman Interface Guidelines読んでますか?
HIGにはAppleのプラットフォームで優れた体験を生み出すための豊富な知識が詰め込まれたガイドラインです。
2022年6月以降内容をアップデートしさらにパワーアップしております。WWDC2023ではついに日本語にも対応しました。
そんなHIGですが、なかなか量が多く、読むのに時間がかかります。忙しい開発者の方々は呼んでる時間なんてないよ😭という人も多いでしょう。
そんな方に向けて本稿では特に私が大事だと感じた部分を抜粋し標準アプリの実例を備えて解説させていただきます。
・ 標準アプリの実例を踏まえて大事だと思ったところを説明します。
・ すぐにでも明日の開発に役立つよう業務に役立つ内容に焦点を当てます。
・ 実際にアプリケーションを開発する上で役に立った点などを説明いたします。

採択
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の実装方法
  • 具体的な活用事例
採択
2023/09/03 11:00〜
Track B
レギュラートーク(20分)

StoreKit2を使った課金システムのフルリニューアル

Yuhei Ito

マッチングアプリの「タップル」がリリースされてから今年で10年目。
課金システムをフルリニューアルした経験についてお話しいたします。
StoreKit2への移行を検討している方々に、この情報が少しでもお役に立てれば幸いです。

主な内容

  • フルリニューアルの背景
  • フルリニューアルまでの長期プラン
  • StoreKit2にしてよかったこと
  • StoreKit2のお試しオファーとプロモーションオファー
  • バックエンド側の対応
  • リリース時に対策してよかったこと
  • リリース後に明らかになった失敗...
採択
2023/09/03 11:00〜
Track C
レギュラートーク(20分)

Swiftでりんごを育ててみた

u5_03 すぎー

最近コロナの影響もあって最近話題の家庭菜園ですが、私もベランダで小規模に始めました
しかしいざ挑戦してみると以下の課題に直面しました
①水やりなどの管理が大変
②生育状況が把握しにくい

そんな困った時はテクノロジーで解決するのがエンジニアです!

今回はAppleの株だけでなく、Apple(りんご)の苗木まで買ってしまったiOSエンジニアがSwiftをベースにラズパイを使ったAppleなどの作物の家庭菜園IoT化への取り組みを共有します

具体的には…
①ラズパイを使って、対象の作物の画像を撮影する
②ラズパイで取得したセンサー情報を取得する
③作物への水やりの省力化
④ラズパイからFirebaseにデータを保存する
⑤作物の生育状況をiOSアプリ上から、Chartsなどを使用して、確認できるようにする

ぜひ皆さんもこれを機にiOS開発だけでなく、家庭菜園にもチャレンジしてみましょう!

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

SwiftでゼロからRTMPライブラリを実装してみた

huiping192 郭輝平

Real Time Messaging Protocol (RTMP) とは、Adobe が開発している、Adobe Flash プレーヤーとサーバーの間で、音声・動画・データをやりとりするストリーミングのプロトコル。
YouTube LiveやTwitchなどのライブストリーミングサービスで広く使用されています。

AppleのプラットフォームではRTMPプロトコルがネイティブにサポートされていないため、librtmpライブラリの使用が一般的ですが、私はSwiftでの実装に挑戦しました。
このトークでは、Swiftを用いてRTMPライブラリをゼロから設計し、実装した経験を共有します。
特に難しかった挑戦、それにどう対処したか、そしてプロジェクト全体を通じての学びを詳しく紹介します。

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

iOSではじめるフォトグラメトリ

shu223 堤 修一

フォトグラメトリは写真から3Dモデルを生成する技術です。町並みの3Dモデル化や、物体の3Dモデル化等に利用されます。消えゆくものを三次元データとして保存できることから、文化財の記録や考古学分野でも活躍しています。今やLiDAR搭載iPhoneも登場し、スマホ1台でフォトグラメトリが楽しめる時代になっています。個人的には、「空間の記念撮影」として泊まったホテルや住んでいたアパートの部屋を撮っておいたりしています。

本トークでは、iOS/iPhoneを用いたフォトグラメトリの手法や、Object Capture API、RoomPlan、ARKit等々のAPIについて解説します。フォトグラメトリの「中身」を知ることで、フォトグラメトリ with iOSをもっと楽しめるようになるでしょう。現実世界からの3Dモデル生成をマスターし、来るべきSpatial Computing時代に備えましょう。

採択
2023/09/03 13:55〜
Track B
レギュラートーク(20分)

こういうのは標準APIいいよね

WorldDownTown Keisuke Shoji

iOSアプリ開発者の多くが、あらゆる問題に対する解決策としてOSSライブラリに頼りがちですが、実はFoundation 等の標準APIだけで十分なケースも多いことをご存知でしょうか?
本発表では、44個ものOSSライブラリに依存していたアプリが、いかにしてその数を15個まで削減し、そのプロセスでiOSの標準APIの力を再発見したかを具体的に解説します。

具体的な事例とともに、標準APIで十分に解決可能だった問題や、ライブラリ削減によるアプリのパフォーマン向上について共有します。
さらに、全てのライブラリを排除すべきではないことも強調し、どのライブラリを選択し続け、どのライブラリを削除したのかを明示します。

採択
2023/09/03 13:55〜
Track D
レギュラートーク(20分)

認証体験向上のためにpasskeys(パスキー)に対応する 〜 メリット・対応方法について

kotetu 栗山 徹

「passkeys」は、従来のパスワード認証の欠点(使い回しや漏洩の問題等)に対応し、パスワード認証を置き換えるべく開発された新しい認証技術です。

passkeysは、セキュリティ面だけでなく、ユーザビリティ面でも導入のメリット(パスワード入力が不要、端末間での認証情報の共有、など)があります。

2023年の5月にGoogleのログインシステムがpasskeysに対応したことで、今後、より多くのサービスでpasskeysを採用する可能性が拡がってきました。

本セッションでは、passkeysに興味のある方やプロダクトでのpasskeys対応を検討している方を対象に、passkeysの概要、セキュリティ・ユーザビリティ面での対応のメリット、アプリ側・サーバー側それぞれの対応方法についてご紹介します。

本セッションを通じ、多くの方がpasskeysに興味を持っていただけたら幸いです。