iOSDC Japan 2021 プロポーザル一覧

他イベントOK レギュラートーク(20分)

CI/CDを使ってTestFlightで開発中のアプリをバンバン配布しよう

saten_work saten saten_work

Apple Developer Enterprise Programの審査も通り辛くなった昨今、Apple Developer ProgramのAdhocのみだとiPhone登録数最大100台の制限がありTestFlightを利用したりすることも増えたのではないでしょうか。
しかし、TestFlightで配布するために、アップロード済みのビルドバージョンを意識して修正したり、ローカルのXcodeでアーカイブしたり、テストの詳細を入力してどのテストのアプリかわかるようにしたり手間でないでしょうか。
今回は、CI/CDを使ってビルドバージョンを修正、TestFlightでの配信、TestFlightのテストの詳細の入力を自動で行うことで、開発中のiOSアプリもバンバンTestFlightで配信し、
QAや企画、Webエンジニア、デザイナーなどへの簡単なiOSアプリ提供を実現する方法を紹介します。

4
他イベントOK レギュラートーク(20分)

StoreKit のこれまでとこれから

uzzu uzzu uzzu

StoreKit はアプリ内課金を実現するためのフレームワークです。StoreKit の API は取り扱いが難しく、難しいが故に 3rd party のライブラリを介して利用したり、いざアプリに組み込んだ際には考慮漏れや原因の特定が困難な不具合に苛まれる事があったかと思います。

そんな中、 WWDC21 にて Apple より StoreKit 2 の発表がありました。 API は刷新され、非常に取り扱いやすくなりました。本セッションでは、これまでの StoreKit の API の取り扱いの難しさを振り返りながら、 StoreKit 2 でどのように変わるのかを解説します。

他イベントOK LT(5分)

Using Eigen from Swift (via C)

taketo1024 さのたけと taketo1024

Eigen は高速な行列計算を行うための C++ ライブラリで、ヘッダのみで構成される純粋なテンプレートライブラリです。

現時点では Swift は C++ と直接連携できないので、Swift から Eigen を使うには C または Obj-C でブリッジする必要がありますが、 Linux でも使えるようにするには Obj-C は選択肢から外れます。

また Eigen はテンプレートライブラリなので、「Swift 側の Wrapper 型も係数に関して generic にしたい」(× EigenIntMatrix, EigenDoubleMatrix, … / ○ EigenMatrix<Int>, EigenMatrix<Double>, …)という欲求も生まれます。

この LT では、両立が難しそうな二つの課題:

  • Eigen を Swift から C を経由して使うこと
  • Wrapper の行列型を generic に実装すること

の解決法を紹介し、私が数学の研究のために行っているホモロジー群の計算を高速化した事例を紹介したいと思います。

他イベントOK レギュラートーク(40分)

こんな時代だからこそCoreDataを見直そう

coffeegyunyu 日向強 coffeegyunyu

WWDC 21ではSwiftUIの更なるサポートやCloudKitの連携など、Core Dataに関する多数のセッション動画が掲載されました。
これはもうCoreDataを始める機運に他なりません。

本セッションでは、iOSにビルドインされているCoreDataならではの数々のメリットを挙げていって、ローカルデータベースとiOS間の開発を楽にするための説明を行います。

  • 画像データなどを、モデル上はDataで保存して、中身はファイルで保存するAllows External Storage
  • SwiftUIとの連携
  • Diffable Data SourceをサポートしてUITableView/UICollectionViewの実装を楽にする
  • mergePolicyを使って、スレッド間のデータベース変更に対応する

などなど、他のフレームワークとは異なる、iOSのために用意された機能を説明して、CoreDataに対する皆さんの誤解を解くためのセッションになります。

1
他イベントOK レギュラートーク(20分)

さまざまなプラットフォームでのSign in with Appleのセキュリティ

coffeegyunyu 日向強 coffeegyunyu

WWDC19で発表されたSign in with Apple。
レビューのガイドラインにも要件によっては実装必須と追記され、実装した人も多いのではないでしょうか?

iOS 13ではAuthenticationServicesフレームワークのASAuthorizationAppleIDProviderで簡単に実装できるSign in with Appleですが、iOS 12にはASAuthorizationAppleIDProviderがありません。
また当然AppleプラットフォームではないAndroidなどにもSDKのサポートはありません。

このセッションでは、iOS 12以下や他プラットフォームなど、SDKのサポートがない環境でどのようにSign in with Appleを実装するか、またセキュリティに気をつけるためにはどのような実装をすればよいかを考察していきたいと思います。

  • さまざまなプラットフォーム対応
    • iOS 12
    • Android
    • Web
  • stateの実装
  • nonceの実装
他イベントOK レギュラートーク(20分)

自動プッシュ通知エコシステムをAWSと連携させて1からつくる

西川 哲矢

アプリ溢れる昨今、プッシュ通知はユーザーにコンテンツを届けるために重要な機能です。魅力的なプッシュ通知のためには、ユーザーに最適化させた内容であることは重要で、サーバー上のデータと連携したプッシュ通知が望まれます。

ですが、サーバー上のコンテンツやユーザーのデータは膨大で完全人力の実現は困難。エンジニアの自分は自動化したくなります。

そこで私たちは、AWSを起点にした、イベント駆動型アーキテクチャの自動プッシュ通知システムを構築しました。本トークでは、設計面での技術選定のポイント、テスト戦略、そしてグロースに必要な追跡/分析/異常検知のシステムについての工夫についてお話しします。

他イベントOK レギュラートーク(20分)

SwiftUI で実プロダクトを音速リリースした話

AkkeyLab AkkeyLab AkkeyLab

寄付体験を身近にすることを目指して開発されたアプリ「dim.」

・SwiftUI 95%以上
・エンジニア1人
・開発期間2ヶ月
・リリース前に大きな仕様変更を2回行う
実はこんな条件下で生まれたアプリです。

皆さんご存知の通り、SwiftUI はまだ実用レベルに達していないと言っても過言ではありません。が、実体験を元に「実用レベルに達していない」と口にしているエンジニアはどれほどいるでしょうか。
SwiftUI が未熟だという周りの声を鵜呑みにして逃げているだけではないですか? SwiftUI を採用しない理由を明確に説明できることは非常に重要です。なぜなら、 SwiftUI が適している要件にも敏感に反応できるようになるからです。
このトークでは主に以下に関して実例と共に SwiftUI の現状をご紹介いたします。

・SwiftUI 採用の理由
→キーワード:チーム開発, デザイナー
・2回もの大型仕様変更への高速対応を可能にした SwiftUI レイアウトテクニック
→キーワード:Modifier, XcodePreviews
・粘ったけど、UIKit に浮気せざるを得なかった TextField
→キーワード:最小限に抑えた UIKit 利用術
・油断禁物! SwiftUI 未対応ライブラリ達
→キーワード:Firebase, 計測ツール

このトークにより、SwiftUI をチームで採用するための説得材料を手にすることができます。また、 SwiftUI による開発方針を「チーム」という広い視野で考える“きっかけ”になるでしょう。

他イベントOK LT(5分)

今更人には聞けないSwiftのSyntax sugar

417_72ki 417.72KI 417_72ki

Syntax sugar(糖衣構文)とは、同じ処理をより分かりやすい記法で書いたコードです。
例: if let と Optional chaining

Swiftも年々更新されていく中で、様々なSyntax sugarが生まれています。

ここでは、そんなSyntax sugarを頻出度・役立ち度の観点から時間の許す限り紹介します。

1
他イベントOK レギュラートーク(20分)

アプリのアクセシビリティを向上させるには何をしたらいい?網羅的なチェックと実践方法を紹介

RyoAbe RyoAbe RyoAbe

アプリのアクセシビリティを向上させるためには何をすればいいでしょうか?
VoiceOver、Dynamic Type、コントラスト比の確保...どこから手を付けたらいいか、どのように修正を入れたらいいか難しいですよね。
本セッションでは「モバイル版アクセシビリティチェックリスト」という50項目以上にもなる網羅的にアクセシビリティチェックが可能なシートについてご紹介します。これはfreeeアクセシビリティー・ガイドラインをベースに作成したシートで、「チェック内容、優先度、修正方法、ガイドライン等」がリスト化されており、順にチェックすることで修正が必要な箇所の洗い出しと、チェック項目ごとの具体的な修正方法が分かります。

実際にチェックしたアプリのチェック結果も交えながら、チェックリストの利用方法はもちろん、今から始められるアプリのアクセシビリティ向上のテクニックもご紹介いたします。

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

オーディオ波形を表示するために知っておくべきこと

yaso_san 八十嶋祐樹 yaso_san

オーディオのデータは時間に対しての量が多いので何も考えずに波形を表示しようとすると、綺麗に表示されなかったりパフォーマンスが十分に出なかったりメモリを簡単に使い切ってしまったりします。

単に一つの短い数秒のオーディオの波形を表示するだけでも気にすべきことはありますが、大量のファイルの波形を表示したかったりリアルタイムにスムーズなスクロールをしたいとなると、より一層の工夫が必要です。

このトークでは、オーディオ再生アプリを実装した時の知見を元に、場合に応じてオーディオ波形表示をどのように実装すべきかのヒントとなるお話しをします。

以下のような内容を予定しています。

・オーディオデータの仕組みついて
・様々なアプリの波形表示方法を比べてみる
・波形表示のためのオーディオデータの間引き方・扱い方
・パフォーマンスを考慮した波形表示

2
LT(5分)

Swiftのソートアルゴリズムの特徴を5分できちんと知る

taka1068 Takanori Hirobe taka1068

Swiftの標準ライブラリには数多くのアルゴリズムが用意されていますが、その中で最も頻繁に使われているものの1つはソートであると言えるでしょう。

そんなSwiftのソートアルゴリズムですが、具体的にどのようなアルゴリズムが採用されているかご存知でしょうか。
また、ソートアルゴリズムの重要な指標である時間計算量、空間計算量、安定性はどのような特徴を持っているでしょうか。

もし知らなければ、知っておいて損はないでしょう。5分で解説します。

1
他イベントOK レギュラートーク(40分)

日本語でもいい感じに改行したい!!

trickart4121 trickart trickart4121

iOSアプリ実装中、「単語の途中で改
行されてしまう…」といった経験はありませんか?
そういったとき、英語の文章であればlineBreakModeに.byWordWrappingを指定してあげれば単語中の改行は起きなくなりますが、日本語の場合は効果がありません。

このセッションでは日本語の文章でも単語中の改行をさせない方法を解説します。

  • NSLineBreakModeについて
  • 日本語の扱い
  • 制御文字について
  • どう単語を検出するか?
  • MeCabによる形態素解析
  • MeCab for Swift Package
他イベントOK レギュラートーク(40分)

Combine を使ったコードのテストを Scheduler で操る方法とその仕組み

kalupas0930 アイカワ kalupas0930

WWDC は async/await で盛り上がっていて Combine ロスなので、Combine について発表したいと思います。

Combine は複数のイベントを扱うのが楽だったり、debounce operator などを利用した時間を制御するような処理も容易に記述できるので、有用なシーンはまだまだあると個人的には思っています。
しかし、Combine を使って時間の制御などを行い始めるとテストが難しくなっていきます...

このトークでは、そんな Combine を使ったコードのテスト方法と仕組みについて以下のような内容で発表したいと思っています。

・ViewModel 内で Combine を利用するコードの基本的なテスト方法
・combine-schedulers というライブラリによって Combine の時間を操りテストを劇的に改善する方法(より正確なテスト・テストの実行時間の削減が可能)
・combine-schedulers の仕組み

発表で紹介させて頂く予定の combine-schedulers は、最近話題になっている The Composable Architecture(TCA) や isowords の作者である Point-Free さんが作っているライブラリで、TCA との相性も良かったりします。

しかし、このライブラリは TCA には依存しておらず、TCA を利用していないコードでも十分に効果を発揮できるものになっています(本トークも TCA に依存しない形式にする予定です)。

さらに、このライブラリには他にも様々な機能があります。
特に UIKit や SwiftUI のアニメーションを操る機能もあるのですが、時間に余裕があれば紹介させて頂きたいと思っています!

6
他イベントOK レギュラートーク(40分)

tvOSで犠牲者を出さないためのAVPlayerViewController

coffeegyunyu 日向強 coffeegyunyu

iOSで動画を再生させるためには何をお使いでしょうか?
動画再生手段の一つであるAVPlayerViewControllerは、動画表示と動画用のコントロールパネルがビルドインされている、大変便利なクラスです。
そしてAVPlayerViewControllerはtvOSでも利用でき、さらにiOSに輪をかけて様々な機能が搭載されています。

その、搭載されている機能についてはまだまだ知見が少ないものが現実です。
そんなAVPlayerViewControllerの機能について、tvOS独自の機能を交えながらハマった罠などを挙げつつ解説していきます。

  • customOverlayViewController
  • contentOverlayView
  • externalMetadata
  • 動画にスキップできないCM部分を挟む

動画サービスの群雄割拠の時代、iOSおよびtvOSでの動画の扱い方を説明しつつ、少しでもtvOSアプリ開発者増加を目論むセッションです。

1
他イベントOK レギュラートーク(40分)

Mediapipeを使ったARアプリ開発事例〜カメラをかざして家の中で売れるものを探そう

Chica Matsueda

近年、高性能なサーバーではなくスマートフォンなどのモバイル機器上で機械学習モデルの推論を走らせる、EdgeAIと呼ばれる技術の開発が進んでおり、 TensorFlowLite/MLKit/CoreML/MediaPipe をはじめ様々なモバイル端末向けの推論ライブラリが開発されています。

メルカリでは、動画などストリーミングメディアの推論に特化した MediaPipe というGoogle製のOSSの活用して、カメラをかざすだけで家の中にあるアイテムがいくらで売れるのか知ることができる、「かざして売れるかチェック」という機能を提供しています。

このトークでは、この機能が開発されるまでに遭遇した困難とその解決方法を、大きく3つのトピックに分けてお話していきます。

  • BazelでBuildされるMediapipeをiOS Frameworkとして提供する方法
  • 推論の計算負荷を減らし、電池消費を抑える工夫
  • モデルサイズを小さくしてダウンロードサイズを抑える工夫
他イベントOK レギュラートーク(20分)

GitHubリポジトリを分割してらくらく新機能開発をFlutterでやってみる!

D_R_1009 Koji Wakamiya D_R_1009

既存のアプリをメンテナンスしつつ、新機能開発するのに苦心していませんか?
数ヶ月マージされず、コンフリクト解消がだんだんと辛くなる新機能ブランチ。数十から数百ファイルに影響が出てしまい、レビューするのも一苦労。フィードバックを貰うために配布したアプリも、緊急バグフィックスのために配信したアプリに流されて見つからない……。

Portoというアプリで追加した「新書籍ビューアー」はそんな問題を解決するため、GitHubリポジトリを分割し、社内向けUIライブラリとして新機能を開発する方法に取り組みました。
するとエンジニアチームもディレクターチームも満足、さらに社内で新たにFlutterに挑戦する機会を作る効果まで得ることができました。

このトークでは(Flutterをベースとしますが)新機能開発のつらみを整理しつつ、どのような方針を立て、そして対応したかを紹介します。

他イベントOK レギュラートーク(20分)

【TCA】書きやすくて分かりやすい!Reducerのテストの基本

k191k アマゾネスいけばた k191k

皆さん、テスト書いてますでしょうか?
私は、「テストって何をすればいいかわらない」「なんだかめんどくさい」等の理由でテストを書く事から逃げていたのですが、TCAのReducerのテストを書いてみたところ、とても書きやすくて分かりやすいと感じたので、そのことについてお話しようと思います。

このトークでは、TCAのReducerのテストの基本的な実装方法や検証内容についての内容を知ることができます。

具体的な内容は以下です(変更の可能性あり)

  • TCAとReducerの簡単な説明
  • テストしたいことの説明
  • テストの書き方
  • テストがエラーになったとき
  • テストを書いてみた感想

ぜひ、TCAに興味がある方や、これからテストを書いていきたいと言う方に聞いていただき、何か参考になればと思っています。

2
他イベントOK レギュラートーク(20分)

SwiftUIで広告生活

coffeegyunyu 日向強 coffeegyunyu

iOS 13より実装されたSwiftUI。
すでにアプリのサポートもiOS 12を切ったのでUIKitから移行したいと思う方も多いんじゃないでしょうか。

そんな中ネックになるのがUIKitでの実装前提となっている広告周り。
巷にはSwiftUIで広告を実装する例などもちらほら見かけますが、広告は単なるバナー表示や動画広告表示だけでなく、
ユーザーに不要な広告をミュートにさせたり、なぜこの広告が表示されるかを説明する画面を新たに表示したり、
広告の機能は多岐にわたります。
そんな広告の機能を正しくSwiftUIで実装するにはどうしたらいいか、をAdMobを例にして説明するセッションになります。

  • 各種広告の種別ごとの実装
    • バナー
    • 動画広告
    • ネイティブ広告
  • SwiftUIでUIViewControllerを使う
    • UIApplication.shared.windows.first.rootViewControllerは使ってはいけない
  • Appendix
    • AdMobでATT対応
    • AdMobでGDPR対応
    • AdMobでCCNA対応

是非ともSwiftUIで広告を実装してガッチリ稼ぎましょう。
※広告収益を保証するセッションではございません

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

対話を頑張らなくても作れるSiri Shortcuts向けIntents App Extension

m_yamada0617 明渡麻衣花 m_yamada0617

WWDCの動画で紹介されているSiri Shortcutsのサンプル、Soup ChefのようにSiriと対話してアプリを操作する機能を作りたい―――
ところが担当しているアプリで「入れるならここしかない!」という機能、想定される入力パターンがとても多く対話設計が困難だった。

Studyplusの勉強記録入力機能にて、Siriとの音声対話により全てのパラメータ入力を受け付ける想定を捨て、利用頻度が多い見込みパターンに絞り込んだSiri ShortcutsのカスタムIntentを実装してリリースしました。
AppleがWWDCで推奨していた望ましい対話設計を途中で諦めて実装を進めたものの、リリースした機能は少なくない一定数のユーザーへ定着しています。

このトークでは、Studyplusの勉強記録入力機能での設計や実装を例としてあげつつ、ここさえ抑えておけばSiri ShortcutsのIntentsを用いたサポートを形にできると考える要点をお話します。

  • Siri Shortcutsで操作を受け付けるアクションの選定
  • アクション毎に入力を受け付けるパラメータ設計
  • 入力されたパラメータのエラー処理
  • アクション完了後、アプリに遷移してやりたいことがある場合の実装

1人でも多くのiOSユーザーが日頃利用するアプリをより快適に操作できるよう、Siri Shortcutsのサポートを行うアプリが少しでも増えるきっかけになれば嬉しいです。

他イベントOK レギュラートーク(20分)

SwiftUIでアクセシビリティを担保する

el_metal_ elmetal el_metal_

SwiftUIは「Dynamic Type、ダークモード、ローカリゼーション、アクセシビリティに自動的に対応する」と謳われていますが、コード上の対応が不要になったわけではありません。
このトークでは、Dynamic Type、ダークモード、VoiceOver読み上げを担保するためにSwiftUIでやるべきことをサンプルコードを使ってお伝えします。

2