採択
2021/09/18 14:10〜
Track C
レギュラートーク(20分)

100日間AR表現を実装して見つけた面白い実装を全力解説

shmdevelop 服部 智

ARKitは進化を続けていて表現できる内容も年々増えています。
LiDARセンサーやiOSの機能と連動して、少し工夫することで面白い機能が実現できます。

私は100日間AR表現実装チャレンジを通して多様なAR表現を実装してきました。
その中で「これは面白い!」と人に伝えたくなる実装がいくつか出てました。

  • LiDARで認識した世界にカラーボールをぶつけて色付け
  • リアルタイム顔ペイント
  • BlotterMedia風身体エフェクト
  • AR謎解き
  • 視線トラッキング

眠らせておくにはもったいない実装の数々を熱く紹介していきます!
聞いた人がワクワクするような内容になるはず。

Swift、ARKit、SceneKit、Metal Shader Languageなどを中心にした実装。
デモとコード解説を軸に、AR表現に興味を持った人がさらに興味を持つようなセッションです。

採択
2021/09/18 14:10〜
Track D
レギュラートーク(20分)

バーチャル背景を導入しよう

BOBG1018Vi ぼぶ

新しい生活様式になってから約二年が経とうとしています.その中で,アプリやサービスを通して人とお話する機会が非常に増えてきました.これに伴い,通話アプリの種類は会議からタレントとの交流まで多岐に渡るものとなりました.そしてこれらのアプリには,「背景を隠せるようにしたい」「専用の背景を提供したい」「コラボコンテンツを提供したい」といった機能のニーズがあるかと思います.

本トークでは,バーチャル背景の実現方法を2つご紹介いたします.また,これらの方法は,既に本番プロダクトに導入済みであり,実現方法に加えて,本番導入に伴うtipsもご紹介したいと思います.

具体的には,

ARKitを使った方法

  • バーチャル背景の実現方法
  • パフォーマンス周り
  • 他の手段とのメリデメ
  • 副次的に得られそうなメリット

CoreMLを使った方法

  • バーチャル背景の実現方法
  • パフォーマンス周り
  • 他の手段とのメリデメ

本番プロダクトに導入する際のtips

  • 開発
  • 申請

皆様の体験向上に貢献できれば,幸いです.

採択
2021/09/18 14:10〜
Track E
レギュラートーク(20分)

知られざる課金ステータス

ohayoukenchan OhayouKenchan

自動更新サブスクリプションを提供するAppでは、初めてサブスクリプションを行うユーザーに対して、
無料トライアルなどの割引お試し価格をオファーをすることができます。
また、以前サブスクリプションを利用したことのあるユーザーに対してはプロモーションオファーを通して同じように無料トライアルなどのオファーを利用することができます。

アプリ側でこれらのオファーを実装することは比較的難しくありません。
しかし、お試しオファーの利用中にプロモーションオファーを適応した場合、ユーザーの課金状態(レシートの中身)はどうなっているのでしょう?
お試しオファーの無料期間中にプロモーションオファーを受けた場合、お試しオファーの無料期間は破棄されプロモーションオファーの無料期間が即時適応されます。

ではプロモーションオファーの無料期間中に新しいプロモーションオファーを受けた場合はどうなるでしょう?
さらに、
1ヶ月自動契約更新のサブスクリプションで課金中のユーザーがプロモーションオファーを受けた場合と、
12ヶ月自動契約更新のサブスクリプションで課金中のユーザーがプロモーションオファーを受けた場合はどうなるでしょう?
ちょっと変数が増えてきてややこしくなってきましたね。( ^ θ ^ )

このトークでは、オファーを受け取ったときの課金状態に応じてどのように課金ステータスが変わるのかについてお話したいと思います。

採択
2021/09/18 15:50〜
Track B
レギュラートーク(20分)

Finder Sync Extension で Mac 向け便利ツールを作ろう

Kyomesuke Kyome

デスクトップ上やファイル上で右クリックをするとコンテキストメニューが開きますよね。
そのコンテキストメニューに並ぶコマンドを選択すると、ファイルの制御や共有をしたり、特別な操作を行うことができます。

今回はそのコンテキストメニューのコマンドを自作できる Finder Sync Extension について紹介したいと思います。
具体的な実装例の説明を踏まえながら、便利ツールの作り方を学びましょう!
・Finder Sync Extension でできること
・常駐型アプリの作り方
・Finder Sync Extension の実装
・Finder Sync Extension のデバッグ方法

採択
2021/09/18 15:50〜
Track C
レギュラートーク(20分)

App Size Optimizationへの挑戦

皆さん、こんな経験はありませんか?

  • App Storeのアプリページに流入するユーザがインストールしてくれない
  • インストール後に何故かアプリを起動してもらえない

ネイティブアプリの広告業界にはApp Store Optimization(ASO)という言葉がありますが、App Size Optimization=アプリサイズの最適化は1つの重要なファクターになっています。

大容量プランが出てきたとはいえ、マスユーザーは常に低速回線、ギガ数の残りと戦ってるのです。

このセッションでは実際にリリースから7年経ってFat IPAとなってしまったアプリを25%以上のサイズ圧縮を行なっていった中で実際に挑戦して効果があったこと、なかったことをお伝えします。

また、App Size Optimizationは圧縮してから始まるといっても過言ではありません。実際に大きな機能をリリースする中で徐々に太っていくことを防ぐことはできるのでしょうか?

アプリサイズが大きくなっていくことを防ぐために私たちが考えたこと、運用上で効果的なアイデアもお伝えします

採択
2021/09/18 15:50〜
Track D
レギュラートーク(20分)

僕たちが『Appのプライバシーに関する質問への回答』そして『ATT』に対応するまでの物語

FromAtom FromAtom

2020年末、僕たちは「Appのプライバシーに関する質問への回答」の準備に追われていた。この情報が出た当時「アプリ担当者が、収集データと使用目的を調べれば良いよね」と呑気に構えていた僕は、同僚の発言で目が覚めた。

「集めたデータを別チームが分析に使っていたら、どうすれば良いんでしょう?」

弊社の提供する6つのiOSアプリから収集された様々なデータは、BigQueryとLookerが完璧に整えられた社内を縦横無尽に飛び交っていた。このデータ全ての流れを、利用目的を、利用部署を知っている人はいるのか。このトークでは1つ目のトピックとして、この調査プロジェクトについて話そう。


年は明けて2021年、なんとか「Appのプライバシーに関する質問への回答」を終えた僕たちは、広告SDKの更新やATTモーダルの実装を終え、iOS14.5にあわせて無事にリリースしていた。そして数週間後、一通のリジェクト通知が届く。

「XXXをトラッキング目的で使っているなら、ATTで許可をとりなさい。」

そのときようやく気がついた。世間ではATTについて「IDFAを取得できなくなる」点のみ語られていたが、実際はすべてのトラッキング用データに関係していた。普通に考えればApp Tracking Transparencyという名前から分かることだ。同時に思い出した。弊社のBigQueryやLookerには、iOSだけでなく、Android、Webのデータが混在して収集されていることを。そして、一体どれがATTで許可を得たデータなのか、誰にもわからないことを。

このトークでは2つ目のトピックとして、ATTにちゃんと対応するために始まった横断プロジェクトについて話そう。

※このトークでは『この場合はこの対応をすれば正解』といった具体的な例は話しません。

採択
2021/09/19 10:50〜
Track A
レギュラートーク(20分)

ランタイムデバッグのススメ

noppefoxwolf noppe

開発者のあなたや、チームメンバーがadhocビルドを使うことは良く見る光景です。
全員がサービスに向かい合い、より良い体験を作ろうとします。
しかし、パフォーマンスに関してはどうでしょうか?
ネットワーク状態や、CPUの使いすぎに対しては開発者であるあなたが気にかけるしかありません。
そんな状態を打開するのが、ランタイムデバッガーです。
画面に常に情報を表示することで、アプリを使う全員がパフォーマンスに対して視覚的に関心を持ち始めます。
それはクラッシュを伴わない問題を解決する糸口にもなるでしょう。
この手法は、AppleやGoogleでも採用されています。
このセッションでは自作のランタイムデバッガーを元に、ランタイムデバッグのコツや運用の仕方を解説します。

採択
2021/09/19 10:50〜
Track B
レギュラートーク(20分)

バックグラウンドでアプリがキルされても怖くない!アプリの状態を元に戻すリストア機能の全て

coffeegyunyu 日向強

iOSではたびたびバックグラウンドにいるアプリがOSによって終了させられます。
作業途中のアプリに戻ったら、途中までやっていた作業がパーになった、という経験は誰にでもあるかと思います。

こんなことを未然に防ぐために、iOSには状態を保存し、アプリが終了されていても元に戻す、リストアの機能が備わっています。
本セッションでは、あまり知られていないであろうリストアの機能について説明するセッションになります。

  • Storyboardを用いたリストア
  • SceneDelegateを用いたリストア
  • SwiftUIでのリストア

ひょっとしたらユーザーの離脱を防げるかもしれない、リストアを実装するためのポイントについてお話しできればと思います。

採択
2021/09/19 10:50〜
Track C
レギュラートーク(20分)

LiDARを活用したARアプリを作ろう

jugemjugemjugem TokyoYoshida

LiDARという技術をご存知でしょうか?

LiDARとは、レーザー光を当てることで、対象物までの距離や方向を測定するセンサー技術のことです。自動運転の分野でも活用されている注目の技術で、高い精度でスキャンできることが特徴です。

つまり、この技術を使うと現実世界を緻密にスキャンすることができるようになるのです。そのLiDARが、昨年iPad ProやiPhone 12 Proに搭載されました!

そしてARの分野では、早くもLiDARを活用したさまざまなアプリが登場しはじめています。

私はこのLiDARを使ったアプリがさまざまな現実世界をスキャンする様子をTwitterなどで目撃し『自分もやってみたい!』と思いました。それからLiDARに取り組んで数ヶ月、LiDARを使った様々な機能を引き出すことに成功しました。

このトークでは、このLiDARを使うと何ができるのか?そして、どうやってiOSからLiDARの機能を利用するのかについて解説します。

採択
2021/09/19 10:50〜
Track D
レギュラートーク(20分)

実践 SharePlay / Group Activities

tokorom 所友太

iOS 15 の目玉機能であるSharePlay / Group Activitiesについて解説します。
SharePlayでできることを知っていただくところからはじめ、3種のSharePlayを実際にアプリに組み込む方法までを解説予定です。

Agenda

  • SharePlay入門
  • 実践 画面共有
  • 実践 動画共有
  • 実践 カスタム共有
採択
2021/09/19 10:50〜
Track E
レギュラートーク(20分)

自己管理の夢と Screen Time API

yujif_ yujif

皆さん、iOSの「スクリーンタイム」機能を使っていますか?「スクリーンタイム」では、アプリや Webサイトごとにどのくらい時間を費やしているのかレポートで確認でき、使用に制限を設けることもできます。

iOS 15 で Screen Time API にアップデートがあり、開発者にとってできることが増えました。

私は最近、自身のタスクと時間管理に課題を感じ、それを解決するためのアプリを趣味で開発しています。その中で Screen Time API にも注目し、活用できる部分を探っていました。

本トークでは、その過程で得られた知見などを以下の流れでお話しします。

  • 背景:自己管理のために実現したいこと
    • スクリーンタイムあるある
    • タイムトラッキング系アプリの課題(手動・半自動・自動記録)
  • Screen Time API でできること
    • あなたのアプリで対応するなら
  • Screen Time API の課題・気になること
    • 「保護者ー子ども」向け……?自分自身を管理するのは?
    • macOSでは……?
採択
2021/09/19 13:30〜
Track A
レギュラートーク(20分)

ケースに応じたUICollectionViewのレイアウト実装パターン

to4iki to4iki

UICollectionView を利用してレイアウトを実現する際の選択肢は下記のように複数存在します。

  • UICollectionViewFlowLayout
  • UICollectionViewDelegateFlowLayout
  • UICollectionViewCompositionalLayout

また、アニメーションの複雑度やセルの更新頻度によっては、
DataSource実装に DiffableDataSource やサードパーティー製の RxDataSource を利用したいことがあります。

これらをレイアウト実装と組み合わせて要求されたデザインを実現することになりますが、
複数の選択肢があるため要求を満たすための最適な組み合わせに悩む場合があるかと思います。

そこで、本トークでは具体的なレイアウトの事例を基にケースを明文化した上でそれぞれの最適な利用パターンを提供します。

採択
2021/09/19 13:30〜
Track B
レギュラートーク(20分)

MultipeerConnectivityを使った動画のリアルタイム端末間共有 〜料理動画撮影アプリの事例〜

mrimjn いまじん

みなさんMultipeer Connectivityをご存知ですか?Multipeer ConnectivityはAirDropでも利用されているWi-FiやBluetoothを利用した近距離でのpeer-to-peer通信を実現するフレームワークです。AirDropの登場とともに公開されたこのフレームワークですが、実践導入されている機会は少ないように思います。
私は現在Multipeer Connectivityを使って端末間で撮影している動画のプレビューや動画ファイルの転送をするモバイルアプリを開発しています。このトークではMultipeer Connectivityの概要や実践導入した理由、実際に開発を進めていくにあたって工夫した点、現在抱えている課題などについてご紹介したいと思います。

  • Multipeer Connectivityとは?
    • 概要と簡単なデモの紹介
  • Multipeer Connectivityを使ったサービス開発
    • なぜ撮影のライブプレビューや動画ファイルの転送にMultipeer Connectiviyを使ったのか
    • 動画を扱う難しさ
      • リアルタイムな動画共有の手法
    • スループットの限界や制約について
  • peer-to-peer近距離通信の現在と未来

何かと距離が求められる今だからこそ、近距離通信の世界を覗いてみませんか?

採択
2021/09/19 13:30〜
Track C
レギュラートーク(20分)

WidgetKitで良い体験を作るには

tanakasan2525 たなたつ

iOS 14で追加されたウィジェット機能により、ホーム画面でアプリの機能を直接提供できるようになりました。

ユーザーとの接点を増やせるウィジェットはとても魅力的で作りたいアイデアが色々と湧いてきますが、
現在のWidgetKitでは実現の難しい動作が意外にあり、期待する体験を提供できないことがあります。

また、WidgetKitは電池の消耗を抑えるためにウィジェットの更新タイミングに制限があります。
これを曖昧にして実装してしまうと、ウィジェットが更新されなくなったり、無駄な通信が行われたりしてしまうので注意が必要です。

このトークではいくつかのウィジェットを実装したり、仕様レビューをする中で見つけた、ウィジェットで良い体験を提供するために必要な知識とテクニックをウィジェットの動作のしくみとともにお話します。

採択
2021/09/19 13:30〜
Track D
レギュラートーク(20分)

DateComponentsと仲良くなる

sankakuButton sato-shin

Date型はとても原始的なクラスで地球上の時間の一点を表現します。
例えば、Date(timeIntervalSince1970: 1631836800)は

  • JSTでは 2021年09月17日09時00分00秒00ミリ秒
  • UTCでは 2021年09月17日00時00分00秒00ミリ秒
  • PDTでは 2021年09月16日17時00分00秒00ミリ秒
    を表します。

このようにタイムゾーンによって表示上の日付や時間は変わってしまいます。
なので、誕生日などを表すときやサマータイムなどを考慮した時間計算にDate型は適していません。
DateComponents型はこういった悩みを解決してくれます。

日付計算においてDateComponents型はDate型よりも直感的で、使いやすいものになっています。
DateComponent型の使い方を学び、Date型に苦しめられるのとはおさらばしましょう。

採択
2021/09/19 13:30〜
Track E
レギュラートーク(20分)

App Clips はどこから来たのか&何者か&どこへ行くのか

log5 log5

WWDC2020にて華々しくデビューしたApp Clipsですが、それから1年過ぎた現在においてはあまり見向きをされていないような印象があり、少し寂しく思うところです。
(というか、正直誰もApp Clips の話をしていない気がするのですが、私の周りだけでしょうか...)

そのようなわけで、この発表ではより多くの人に App Clips の魅力や伸び代をお伝えすべく
・App Clips が目指したかった(と思われる)もの
・App Clips にできること
のおさらいをしつつ
・App Clip をビルド、テストできるようになるまで
・iOS向けSDK の App Clip 対応時のTips
・App Clips が今後できるようになる(と思われる)こと
などについてもお話しします。

採択
2021/09/19 14:10〜
Track A
レギュラートーク(20分)

UICollectionViewの最新のAPIを使いましょう

yhkaplan ジョシュア・カプラン

UITableViewはもう捨てましょう!SwiftUIのGridビューはまだまだUICollectionViewの力に追いついていません!

近年、UICollectionViewが激変し、飛躍的なパワーアップをしているので、最新の機能と使い方をまずおさらいします。また、今までの技術背景を説明した上でSwiftUIのGridやListと比較して、どのときにどのAPIを使えば良いかがわかるように説明します。そして、UITableViewがなぜiOS 14から特に存在意義が薄れていて、そのUIKitのキープレーヤーだったビューに「さよなら」と言う時期がなぜ近づいていそうかについても解説します。

近年の追加内容は以下のとおりですが、日々の開発でなかなか覚えきれないほどたくさんの機能やきめ細かな設定があるので、簡単に紹介して、UICollectionViewを保守しやすい形で最大限に活用できるように支援します。

  • iOS 9以前
  • iOS 10
    • DataSourcePrefetching
  • iOS 11
    • drag and drop
  • iOS 13
    • DiffableDataSource
    • CompositionalLayout
  • iOS 14
    • cell configuration
    • リストスタイル
    • DiffableDataSourceとCompositionalLayoutの進化
  • iOS 14.5
    • UIListSeparatorConfiguration
  • iOS 15
    • cell configurationの進化
    • DiffableDataSourceとCompositionalLayoutのさらなる進化
採択
2021/09/19 14:10〜
Track B
レギュラートーク(20分)

SwiftUI+GraphQLで新規プロダクトの継続的破壊(Continuous Destruction)に立ち向かう

_chocoyama Takuya Yokoyama

私たちのチームは、SwiftUIで実装したPOSレジアプリ「STORES レジ」を今年6月にローンチしました。

「SwiftUIは破壊と再構築を繰り返すプロダクトに強い」
これは、リリースまで1年以上何度もプロトタイプのUIを刷新し続けてきた今だからこそ実感する、SwiftUIの大きなアドバンテージの1つです。

また、モバイルアプリはUIデザインだけでなく、外部要因により変更を余儀なくされる部分が多数存在します。
本トークではこういった課題に対して、主にSwiftUIやGraphQLが「変更」に対してどう効果的に働いてきたのかを、実例を交えて紹介します。

コンテンツ

  • 連続する大規模リニューアルをSwiftUIでどう対応できたか
  • UI実装を効率化するコンポーネント化の実例
  • GraphQL関連タスクの自動化による、変更検知やコードジェネレートの実例
  • もしUIKitをメインで使っていた場合どうなっていたか

聞き手の想定

  • SwiftUI, GraphQLを用いた新規プロダクト開発の実例を知りたい方
  • SwiftUIアプリを長期で運用した経験がない方
  • これからSwiftUIで効率的なUI設計をしていきたい方
採択
2021/09/19 14:10〜
Track C
レギュラートーク(20分)

ローカライゼーションマネージメント プラットフォーム導入の話

Byungjun Park

ローカライゼーションを念頭に置いてAppを構築することは重要ですが、規模が大きくなればなるほどデザイナー・プロダクトマネージャー・デベロッパー間の莫大なコミュニケーションコストがかかります。Xcodeでアップルが提供する標準的なローカライゼーション方法は優秀ですが、大規模なアプリ開発はそれだけでは解決できない様々な問題が存在します。
 「GO」を開発しているMobility TechnologiesのiOS開発チームでのレガシーな文言管理でぶつかった課題と、プロダクトチームメンバー間のコミュニケーションコストを減らすため、より専門的なローカライゼーションプラットフォームを導入することになった経緯を紹介します。

そして
 1. Japantaxiアプリのローカライゼーション(with Poeditor)、GOアプリでのローカライズ課題
 2. Lokaliseとは、 OTA配信、Rest apiよる文言連動
 3. Phraseとは、文言のFigma / Sketch 連動
 4. GOで導入することになったプラットフォームの話と、それによりできること・メリット・解決できた課題

採択
2021/09/19 14:10〜
Track D
レギュラートーク(20分)

App Extension のスタックトレース情報からクラッシュを解析/集計する

_naru_jpn 千吉良 成紀

クラッシュが発生して、原因が分からないとかなしくなりますよね。
このトークでは、配信アプリで使用している Broadcast Extension 上で発生したクラッシュの詳細について、クラッシュ発生時のスタックトレースを取得して解析し、複数のクラッシュの修正に繋げた話をしようと思います。
クラッシュが発生した際、以下のようなスタックトレースを取得することができます。

0 broadcast 0x0000000100fa8b6c broadcast + 183148
1 libsystem_platform.dylib 0x00000001f8a0a290 73F3E459-0F82-3377-A7D1-EF05CAE41C0A + 21136
2 AVFAudio 0x00000001bf5e9e18 53161832-5A1C-3C33-AF53-6816B1D1C2C5 + 441880
...

スタックトレース、クラッシュした端末のアーキテクチャの情報、対応する dSYM ファイルを組み合わせると、クラッシュが発生した箇所を詳しく調べることができます。
この集計は Command line tools for Xcode を使用するのですが、手作業では1行づつしか解析できず、処理も時間がかかります。そこで、キャッシュによる高速化や解析結果の集計のために、専用の mac アプリを SwiftUI で作成しました。
上記の取り組みにより明らかになったクラッシュ情報を用いて、発生していた3割のクラッシュを修正し、プロダクトの改善に繋げることができました。