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

StoreKit 2によるモダンなアプリ内課金

0si43

2024年4月、note iOSアプリはアプリ内課金機能をリリースしました。本セッションでは、StoreKit 2の導入、実装、テストについて説明します。これからアプリ内課金を実装しようとする方にとって、参考になる情報を提供できれば幸いです。
具体的には以下の内容を扱います。

  • noteアプリのポイント課金仕様
  • StoreKit 1とStoreKit 2の比較
  • StoreKit 2による実装
    • async/awaitによる非同期処理の簡略化
    • レシート検証の簡素化
  • テスト方法
    • sandbox環境とTestFlightを使ったテスト
    • StoreKitTestの活用
採択
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つ先の利用方法
採択
2024/08/22 17:20〜
Track D
レギュラートーク(40分)

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

k2_moons k2moons

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

このトークでは、カメラで撮影した映像ファイルをVideoToolBoxで特殊再生する方法を解説します。

  1. PTS (Presentation Time Stamp) と同期処理の基礎:
    PTSの役割と、時間同期ついて説明します。
  2. GOP (Group of Pictures) の基礎:
    Iフレーム、Pフレーム、Bフレームの圧縮方式とその制約について説明します。
  3. 特殊再生の実現方法:
    スキップ、シーク、倍速再生などの特殊再生を行うために、どのようにVideoToolBoxをどう利用すれば良いのかを具体的なコードを交えて説明します。

このトークを通じて、参加者はMPEGフォーマットの重要な仕組みを理解し、VideoToolBoxを用いた特殊再生の実装方法について学ぶことができます。

採択
2024/08/23 13:00〜
Track B
レギュラートーク(40分)

SMBファイル共有をSwiftで実装する

岸川克己

Appleプラットフォームのファイル共有にはSMBプロトコルが利用されています。しかし、ファイルが非常に多いフォルダを開く際に接続が不安定になるなどの問題があります。OSに含まれるライブラリの不具合なので対処は難しいですが、SMBファイル共有を自分で実装すれば問題を根本的に解決でき、快適なファイルブラウジングが実現できます。

SMBファイル共有を実装すると一口に言っても何から始めたらいいかわからない方も多いでしょう。SMBプロトコルはHTTP通信ではなく、URLSessionは使えません。データ構造もJSONなどのなじみのある形式ではありません。

難しそうですが、実は道具が違うだけで通信はHTTPではなくTCPソケットを、データ構造はJSONのデコード/エンコードのかわりにバイナリのシリアライズ/デシリアライズを用いるだけです。TCPソケット通信を理解すると、Bitcoinやメールなど、他の通信プロトコルの実装にも簡単に応用できます。

この講演ではSwiftでTCPソケット通信を行う場合の複数の選択肢の比較、プロトコルに従ったバイナリのシリアライズ/デシリアライズの方法など、SMBクライアントを実装する手順について解説します。最終的にiOSとmacOSの両方で動作し、音楽や動画ファイルをストリーミング再生できる、速くて使いやすいネットワークファイルブラウザを作成します。

採択
2024/08/23 13:00〜
Track D
レギュラートーク(40分)

アプリ内課金と自社の認証認可基盤を連携する複雑な課金ネットワークを構築する

shimastriper shimastripe

iOS 15から導入されたStoreKit2はアプリ内課金の実装を大幅に簡略化できます。オファー機能や複数のプラン提供を行いやすくするために導入・移行を検討している方は多いのではないでしょうか。
ただし課金機能がアプリで完結しない場合、StoreKit2と様々な基盤を連携する必要があります。たとえば有料機能の認証・認可API、課金ユーザー分析、iOSアプリ内課金以外の決済手段が挙げられます。

そのためのバックエンド構築にはApp Store Server APIやApp Store Server NotificationsというApple提供の仕組みが使えます。近年バージョン2といえる抜本的な改善がなされ、アプリ内課金の状態を自社サービスから詳細に分析できるようになりました。

本セッションでは、日本経済新聞社の電子版アプリで提供するサブスクリプションをStoreKit2ベースでフルリプレースして得た知見を紹介します。各種ツールの仕様・アプリ内課金全体の仕組みを理解、クライアントからバックエンドまでどのような手順で安全にアップデートしていくか注意点を確認しつつ解説します。クライアントだけでは把握しづらかった課金状態をAPIで把握したTipsも紹介していきます。

このトークを通して、参加者は自社のシステムにアプリ内課金を連携するための実践的な仕様を理解することができるでしょう。

採択
2024/08/24 10:30〜
Track A
レギュラートーク(40分)

Swift 6のTyped throwsとSwiftにおけるエラーハンドリングの全体像を学ぶ

koher koher

Swiftがオープンソースになって以来、長年議論され続けてきたTyped throwsの提案がついに承認されました。これは、throws節にエラー型を指定できる新しい言語機能であり、Swift 6から導入されます。

Swiftにおけるエラーハンドリングの考え方は、Swift 2でthrows/tryが導入される際にまとめられた"Error Handling Rationale and Proposal"というドキュメントに基づいています。その後、Swift 5でResultが導入され、Swift 5.5でSwift Concurrencyが追加されました。これにより、それらの機能とエラーハンドリングを併せて考える必要が生じました。そして、Swift 6でTyped throwsが導入されます。

しかし、それらの変化は、Swiftにおけるエラーハンドリングの基本的な考え方を変えるものではありません。"Error Handling Rationale and Proposal"の理念は今も生き続けています。

本セッションでは、まずTyped throwsについて説明し、次に"Error Handling Rationale and Proposal"の内容を復習します。最後に、それらを踏まえた上でSwift 6でどのようにエラーハンドリングを行うべきか、その全体像を示します。

101
採択
2024/08/24 10:30〜
Track B
レギュラートーク(40分)

visionOSで空間演出を実現する方法

shmdevelop 服部 智

Apple Vision Proには、2D動画を再生するとその場面に応じて現実空間に対して演出効果が表示されるという、
とても面白い機能を持つアプリがあります。

例えば、突然飛行機が上空を通り過ぎたり、周辺がヨーロッパの街並みに変わったり、たくさんの風船が表示されたり。

グラス型端末の没入感と相まって、これまでとは一線を画した斬新な体験です。

この面白い機能はどうやって実装するのでしょう。
何がきっかけで演出が始まるのでしょうか?
演出はどう作るのでしょうか?
動画のスキップ、一時停止には対応しているのでしょうか?

これらの疑問に答えるため、このセッションでは、Swiftネイティブの環境でその機能をいくつか実装していきます。
作業手順を説明しソースコードを解説し、ライブデモを行います。

具体的には以下の内容をカバーします:

  • HLS動画へのmeta data埋め込み
  • OSCによる外部からの制御
  • 演出開始、任意発火、発火制御ボタンの実装と作法
  • 周辺を変える演出、戻る演出
  • Particleによる演出

このセッションを通じて、参加者は実際にvisionOSでの空間演出を実装するための具体的な手法を学び、自分で独自の体験を作り上げるスキルを身につけることができます。
visionOSの可能性を知り、今後も体験が進化していくワクワクを届けたいと思います。

採択
2024/08/24 10:30〜
Track C
レギュラートーク(40分)

Apple Siliconを最大限に活用する方法

EXCode013 mori

皆さん、Apple Silicon使っていますか?
ビルド時間の短縮によってその強力な性能を開発現場で実感している方も多いと思います。

このApple Siliconですが、実はCPUとGPU以外にも様々な機能があることを知っていますか?
例えば代表的な例として機械学習を高速化するNeural Engineが挙げられます。
実はその他にもVideo EncoderやML Acceleratorなど一部の処理を高速化するハードウェアが搭載されています。

またiPhoneに搭載されたAシリーズから始まり、近年Macに搭載されたことで全AppleプラットフォームでApple Siliconが搭載されています。
これによりMacを含めてWatchやTV、Vision ProでもiPhoneと同じアプローチで高速化することが可能になりました。
このトークではApple Siliconに搭載されている特殊エンジンの概要と、それらを効果的に利用するためのテクニックについて解説します。

  • Apple Siliconの各種専用エンジンの基本的な概要とその機能
  • 高速化を担当するフレームワークの概要
  • 実際にどれほど高速化されるのか
  • 高速化以外でのパフォーマンスへの影響
  • プラットフォームごとの違いとその影響
採択
2024/08/24 10:30〜
Track D
レギュラートーク(40分)

iPhone × NFC で実現するスマートキーの開発方法

oka_yuuji oka yuji

いきなりですが「自宅の鍵が公共交通機関の改札のようにiPhoneで開閉できたらなー」と思ったことはありませんか?

NFC(近距離無線通信)はセキュアでレスポンスが早く、環境に影響されにくいので、デジタル認証を行う上で非常に適した通信技術です。
iOSにもNFCをサポートするCore NFCというフレームワークがありますが、現状ではNFCタグやNFCカードの読み書き機能しかサポートしていません。
そのため、物理カードのように振る舞うカードエミュレーションや、双方向通信を行うP2Pモードは実装できません。
また、カードエミュレーションとして機能するNFC付きのPassの生成も現状では限りなく不可能に近い状態です。

これらの制限により、現状では個人でiOSとNFCを組み合わせてスマートキーを開発することは難しい状況です。
しかし、どうしてもNFCを利用して公共交通機関の改札レベルの体験を自宅でも味わいたい…と思い、NFC付きのPassを利用して開閉するスマートキーを作成しました。

このトークでは、NFCの基本的な話から、Core NFCでできることを簡潔に解説した上で、NFC付きPassを利用して開閉するスマートキーの作り方をデモを交えて紹介します。
基本的な概念から応用まで40分で学べる内容となっていますので、ぜひこの機会に今後のiPhoneとNFCの可能性に備えませんか?

採択
2024/08/24 13:00〜
Track A
レギュラートーク(40分)

Mastering AsyncSequence - 使う・作る・他のデザインパターン(クロージャ、Delegate など)から移行する

treastrain treastrain / Tanaka Ryoga

これまで、データが非同期かつ継続的に流れてくる処理や、いつ発生するか分からないイベントを受け取る処理には、クロージャや Delegate、オブザーバーなどが用いられてきました。また、Apple プラットフォームでは Combine、サードパーティの OSS では RxSwift などといった外部のフレームワークも使用されてきました。

これらのほとんどは、Swift 5.5 で追加された AsyncSequence を使用する方法へと移行できます。実際、Apple が提供するフレームワークでも、従来 Delegate が用いられてきたような非同期にイベントを伝える API について、最近新規に追加されたものは AsyncSequence を採用しています。他のデザインパターンから AsyncSequence に移行することで、Swift Concurrency が持つアクター分離などのさまざまなメリットを享受できます。一方で、非同期なシーケンスならではのメモリリークにも注意が必要です。

このトークでは AsyncSequence の基礎、他のデザインパターンからの移行方法、移行するメリット、注意点まで、UIKit・SwiftUI を用いたアプリの例を使いながら詳しく紹介します。

Delegate、今までありがとう。これからは AsyncSequence でやっていくよ。

採択
2024/08/24 13:00〜
Track B
レギュラートーク(40分)

StoreKit2によるiOSのアプリ内課金リニューアル

kangnuxlion 康 建斌

StoreKit2はiOS 15から導入された新しいアプリ内課金フレームワークで、より安全で効率的な課金実装が可能になります。2024年2月より、ABEMAではこれまでの「ABEMAプレミアム」に加えて、新たな課金商品の提供を開始し、同時にStoreKit2を用いた課金システムの全面的なリニューアルを実施しました。このセッションでは、新たな商品の検討からリニューアルの設計、実装、テストに至る全フローを詳細に解説します。

  1. ABEMAの既存の課金体系と商品追加によるユーザー体験への影響
  2. 課金システムのリニューアルに至る背景とその過程
  3. StoreKit2を使った具体的な設計・実装の詳細
  4. 新しいオファーの種類とユーザーの課金行動に与える影響の分析
  5. 課金システムへの変更点とアプリパフォーマンスへの影響
  6. リニューアル後のリリースフローと新商品の詳細

アプリ内課金はユーザー体験とビジネスに非常に重要ですが、その実装は複雑でエラー対策も多岐にわたります。このセッションでは、StoreKit2を用いて効率的にこれらの課題を解決する具体的な方法を示します。皆様のアプリ開発に役立つ情報提供を目指します。

採択
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...