iOSDC Japan 2021 トーク一覧

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

StoreKit のこれまでとこれから

uzzu uzzu uzzu

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

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

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

DateComponentsと仲良くなる

sankakuButton sato-shin sankakuButton

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型に苦しめられるのとはおさらばしましょう。

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

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

log5 log5 log5

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

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

3
採択 レギュラートーク(20分)

シームレスな体験を実現する本人確認フローの構築 〜家計簿プリカB/43でのeKYC開発実例〜

chickmuuu nakamuuu chickmuuu

従来、金融や通信サービスの契約における本人確認では、実店舗に行ったり、身分証の写しを送付するなどの煩雑な手続きが必要でした。それらの対面や郵送での本人確認に代わり、オンラインで完結する本人確認が身近な存在になってきています。すでに何らかのサービスで実際に体験された方も多いのではないでしょうか。

「eKYC」と呼ばれるオンライン形式での本人確認では、複数のベンダーさんが高い品質のSDKを提供しています。しかし、僕らはアプリ内でのより統一されたユーザー体験を実現するために自前での構築を選びました。

このセッションではiOSアプリでのeKYCの実装において得られた知見をお話しします。身分証や顔写真の撮影におけるVision.framework / ML Kitの活用など、体験を向上させるための技術面での工夫やTipsも紹介していく予定です。

【内容(予定)】

・eKYCの簡単な概要(社会的背景や従来の本人確認の課題)
・B/43での本人確認フローについての前提
・シームレスなユーザー体験を実現するためのプロダクト設計
・iOSアプリでのeKYCの実装における技術面での工夫
・自前で構築したeKYCを運用して得られた効果と今後の課題

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

エンジニアもSwiftUIでお手軽アニメーションすっぞ!!

eitarox Eitaro Yamatsuta eitarox

アプリ開発をしていて、ちょっとアニメーションが入ったらオシャレになるのになぁというときありますよね。
調べて出てくるチュートリアルは、四角や丸が動き回るだけでアプリ内の実装例としては実感が湧きません。かといって、AfterEffectで動画を組んでLottieで載せるまではしたくない。
アニメーションまでマルっと設計してくれるイケUIデザイナーが隣に居ればいいのにーー。

でも実は、あのアプリのおしゃれっぽい動きも簡単な動作の組み合わせなんです!

本公演では、
「そもそもどう動かしたらカッコいいのか」というところから、
皆さんよく目にするアニメーションなどを参考に、簡単なコードの組み合わせでサンプルを実装していきます。

この20分でおしゃれ実装できるようになりましょう!!

  • アニメーションのデザインの基礎
  • アニメーションの基本動作
  • アニメーションで使うSwiftUIの基本コード
  • SwiftUIでの実装方法
  • その他
1
採択 レギュラートーク(20分)

MDMを使って業務用アプリの初期設定を自動化する技術

oishi oishi oishi

iOS端末の業務利用現場では、MDMを使ってアプリ配布やOSレベルの設定を遠隔で行います。しかし実際にはそれだけは不十分で、配布したアプリの設定がそれぞれ必要になります。例えば、接続先サーバなど各アプリ固有情報の入力です。大量のiOS端末を配布する場合、その設定作業だけで途方も無い労力を要します。

これらを自動化する方法はないのでしょうか。

その期待に応えてくれるのが「Managed App Configuraiton」です。Managed App Configuration を使えば、MDM上で登録する key-value を Dictionary としてアプリと一緒に配布できます。その情報を使ってアプリは起動直後の初期設定を自動で行えるというわけです。

Managed App Configuration は少しのコードを追加するだけでどんなアプリでも使えます。ADEPによるInHouseアプリはもちろん、AppStore申請する公開アプリやカスタムAppでも利用可能です。

現在、多くのMDMが Managed App Configuration に対応していますが、残念ながら業務用アプリの多くは対応していません。本トークでは業務用アプリで Managed App Configuration をどのように使えるのか、具体的な実装や設定の仕方、活用方法をご紹介します。

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

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

yhkaplan ジョシュア・カプラン 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のさらなる進化
9
採択 他イベントOK レギュラートーク(40分)

React Nativeにおける状態管理サバイバルガイド

kfurumiya 古都こと kfurumiya

エンジニアに「状態管理うまくいってますか」という言葉を投げつけるのは、心に深い傷を刻む結果になると一般に知られています。

宣言的UIの流行により、GUIアプリケーションにおける支配者は状態(データ)となり、表示コンポーネントは状態の落とす影に過ぎない存在となりました。これにより「開発者は状態管理だけをうまくやればいい」という仕組みが出来上がるのですが、我々は次の現実に直面することになります。そもそも状態管理をうまくできない、と。

私がウェブ技術を17年間触れてきた中で、状態管理というのは最も難しい技術に分類されると感じています。そしてウェブ技術をベースにしているReact Nativeではその問題が直撃します。

密結合にすると変更に対して硬直化する、疎結合にすると流れが把握できなくなる、綺麗にするために状態管理ライブラリを入れたのに逆に散らかってきた、公式サイトに書いてある方法でやっても改善しない、ベストプラクティスを実践しているはずなのに結果が出ない。何も思い通りにならない。チームが技術に振り回されてる気がする。状態管理だけうまくいけば開発はスムーズにいくのに、状態管理ができない!

実際に状態管理の設計に取り組むと「管理と言いつつもほとんどの状態は管理できない場所にある」ことに気づきます。HTTP通信、デバイスのセンサ、回線の状況。つまり状態管理というのは、根本的に管理できないものを管理する技術でもあります。

このトークでは、そもそも状態とは何なのかという基本的なところから、状態をいかにコントロールして、アンコントローラブルな状態に対してどう立ち向かえばいいのかという実践的なところまで、私が今まで開発に携わってきたtoBのシステムや音声ライブサービスなどから得られた経験をもとに知見を共有したいと思います。

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

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

trickart4121 trickart trickart4121

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

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

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

機能ごとに動作するミニアプリでプレビューサイクルを爆速にした話

aomathwift あおい aomathwift

開発規模の大きなアプリは、得てしてビルド時間が長くなってしまいがちです。 ビルド時間を改善する手法の1つとして、アプリを複数のモジュールで構成することで部分ビルドを可能にする「マルチモジュール化」を進めているプロジェクトも増えています。

一口にマルチモジュール化といっても様々な分離の仕方がありますが、1機能に関連するいくつかの画面を1つのモジュールとして切り出すことで、その分けられた機能毎に単体ビルドが可能になります。 このモジュールを単体でアプリケーションとして利用できるようにしたのが、開発時の動作確認用のミニアプリです。

これにより、開発途中の画面を確認するのにアプリ全体をビルドする必要がなくなり、動作確認の効率が大いに改善されました。
本セッションでは、このミニアプリの構築にまつわる以下のようなトピックについてお話します。

・単体起動可能なモジュール構成とは
・ミニアプリそのものの仕組みと導入のメリット
・チーム全体で利用してもらうための工夫
・より使いやすい仕組みを目指した諸改善

このトークを聞いて、あなたのプロジェクトでもプレビューサイクルを爆速に改善してみませんか?

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

大規模リファクタリングの極意

Yosuke Imairi

事業の成長とともにアプリに求められる機能は日々拡張され、その実装は複雑化していきます。サービス拡大に伴いアプリ開発に関わるエンジニアの数も増え、当初の設計や実装では今後の開発・運用に支障をきたすケースもあります。そうした場合、リアーキテクチャなど大規模なリファクタリングによる設計変更が必要となります。

このトークでは、JapanTaxi と GO アプリにおける二度のリアーキテクチャの経験から得られた知見を話します。

・なぜリアーキテクチャを行う必要があったのか
・案件開発と並行して大規模なリファクタリングをどのように進めたのか
・リファクタリングに向けた 2ヶ月におよぶ下準備について
・機械的な作業を自動化し、リファクタリング自体に集中する仕組みの構築
・リファクタリング時のコーディング Tips
・リリースに向けた取り組み

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

あらゆる情報を楽に正しく String にフォーマットする - 令和2021年から脱却せよ

treastrain treastrain / Tanaka Ryoga treastrain

私たちは常日頃、日付や時刻、時間、数字、名前などを表示するために、最終的に様々な情報を String に変換しています。
その際に便利な API が Formatter です。Date を String にする DateFormatter が良く使われる一例ですが、実は真の力はそこにとどまりません。

数字を3桁おきに 「,」を入れた表示をしたい
「0.85」を「85%」と表示したい
「-1700」を「(1,700)」と表示したい
1日前を「昨日」、1ヶ月後を「来月」と表示したい
[“Apple”, “Banana”, “Orange”] の Array を「Apple, Banana and Orange」と表示したい

…これらを実現するために独自で実装を行っていませんか?
コーディングのトレーニングのために独自実装する分には問題ありませんが、実プロダクトでは工数がかかり、考慮漏れがあると問題になります。しかし大抵は対応する Formatter が標準で用意されています。

日付、時刻、時間、%、通貨、指数表記、バイトサイズ(MB、GB…)、人の名前、加速度、角度、面積、体積、質量、濃度、期間、電気、エネルギー、周波数、燃費、照度、長さ、圧力、速度、温度…

これらの Formatter は i18n 対応を含めて強力にサポートしてくれますが、1つの言語のみに対応する場合でも Formatter を使うべきです。言語は同じでも地域によって適切なフォーマットが違う場合があるからです。
このセッション(40分版)では標準で用意されている Formatter のすべてと、その使用例、絶対にしてはいけない使い方を紹介します。

誤った使い方をすると、あなたも「令和2021年」に飛ばされますよ…

Happy Formatting!

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

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

_chocoyama Takuya Yokoyama _chocoyama

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

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

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

コンテンツ

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

聞き手の想定

  • SwiftUI, GraphQLを用いた新規プロダクト開発の実例を知りたい方
  • SwiftUIアプリを長期で運用した経験がない方
  • これからSwiftUIで効率的なUI設計をしていきたい方
1
採択 他イベントOK レギュラートーク(20分)

Appleプライバシー保護の最新事情と適応戦略

iKichiemon Terasaka iKichiemon

> At Apple, we believe that privacy is a fundamental human right.
(WWDC 2021 Apple’s privacy pillars in focus より)

プライバシーは基本的人権であると、Appleは明言します。

WWDC 2021の中でもプライバシーに関わるアップデートやセッションがありました。
昨年は App Storeにおける「プライバシー表示」が開始され、iOS14.5から開始されたATT(App Tracking Transparency)は、現在進行形で巷を騒がせています。

このように年々重要性が高まっているプライバシー保護ですが、私たちアプリ開発者は一体何を行えばよいのでしょうか。
また、数ある制約の中でどのようなユーザー情報を活用していけるのでしょうか。

幸いにも、私たちはAppleというプラットフォーム上で生きています。
そこには多くの制約がありますが、裏を返せば、私たちはその制約によってユーザーのプライバシーを侵害してしまうリスクから守られています。

ユーザーの利益を損なわないために、また、私たち自身を守るためにも、まずはAppleが示すプライバシー保護について学びましょう。

本トークでは、アプリ開発に関わるプライバシー保護についてお話します。
WWDC 2021 にて発表された最新情報に触れつつ、Appleが重要視するプライバシー保護の4本柱について説明します。
そして、私たちアプリ開発者が対応しておくべき事項を紹介した上で、変化していく環境にどのように適応していくか、について考えます。

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

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

Kyomesuke Kyome Kyomesuke

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

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

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

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

coffeegyunyu 日向強 coffeegyunyu

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

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

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

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

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

実践 iOS オープンソースプロジェクトの始め方

niw Yoshimasa Niwa niw

iOS で使えるライブラリを作ったからみんなに使って欲しい、仕事の成果をオープンソースで公開したいということはよくあると思います。
Swift Package Manager の登場や Xcode への GitHub の統合などでオープンソースのライブラリの利用はとても簡単になりました。
しかし、そういったオープンソースのライブラリを提供するのはまだ簡単ではありません。

実際に使いやすいライブラリを提供するには、ライブラリそのものの API のデザインだけでなく、
ライブラリを運用するためのバージョンの管理、CI の設定、ドキュメントの作成や、内部のレポジトリと外部のオープンソースのレポジトリの差異、
Issue の管理のなど多岐にわたる問題への対応が必要になります。

このセッションでは、実際に業務の成果をオープンソースとして公開した「Twitter Text Editor」の経験を踏まえて、API のデザインから運用のためのツールの作成などをまとめていきたいと思います。

対象とする方:

  • オープンソースのライブラリを使った iOS アプリの開発の経験がある方
  • ライブラリの開発に興味がある方

前提とする知識:

  • Git
  • GitHub
  • Swift Package Manager
  • Xcode
7
採択 他イベントOK レギュラートーク(20分)

未知のファイル形式をCodableで読み書きするのに役立つテクニック 『Apple Watchの文字盤ファイル』

banjun ばんじゅん🍓 banjun

SwiftのCodableはすごく便利な機能です。しかしながら時にCodableが得意ではないフォーマットを扱うことはみなさんもあるはずです。もしAPIのJSONならCodable向きにスキーマを調整できるケースも多いはずなのですが、このトークではそのような調整がそもそも不可能な例として、Appleの独自ファイルフォーマット (Apple Watchの文字盤ファイル) を見ていきます。どのようにSwiftコード側でCodableを整えていくかのテクニックをお伝えします。

Apple Watchの文字盤ファイルでなにをするの?

文字盤ファイルを取り出して解析した人はおそらく世界に1人しかいないので簡単に説明します。アレには、文字盤の種類(写真とかSiriとか)や、左上には天気があり下にはカレンダーがある、といったデータが詰め込まれています。

そして、文字盤ファイルは取り出してシェアできます。それを解析して再合成してみました。1個の文字盤を1個のCodableなstructで表現し、Swiftらしさのある整った読み書きしやすいコードにします。そこで出てくるテクニックは他のファイルをCodableで定義するのにも役立つでしょう。

文字盤ファイルのここが難しい!

文字盤ファイルにはJSONの部分もありますが、その全体は複数のJSONやplistが画像リソースとともに詰まったフォルダ構造をしています。個別のJSONやplistには、変数名として使えないキー名が出てくるだけではなく、Unix Epochの日付とCore Data由来の2001年でオフセットされた日付の混在や、Objective-C時代のシリアライズなど、普段のCodableだったら扱いたくないような要素が次々に出てきます。これらをスマートに乗り越えていきましょう。

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

noteのiOSアプリで実装したアクセシビリティの全て

fromkk かっくん fromkk

noteのiOSアプリはここ1年間で大きな変化を遂げました。
元々30%程度だったSwift率が90%を超え、デバイスもiPhoneの縦画面のみの対応でしたがiPadの複数ウィンドウにも対応しました。
このように目に見えるカイゼンを進めてきた私たちですが、あるきっかけで目に見えない課題があることを知りました。
アクセシビリティ機能を駆使して私たちのアプリを利用してくれている方からお問い合わせをいただいたのです。
この方の日頃の利用方法についてインタビューさせていただくことになり、今まで見えていなかった課題に気づくことができました。
そこでアクセシビリティの有識者に力を借りながら、Voice OverやDynamic Typeといったアクセシビリティの助けとなる機能にも対応をはじめました。
・Voice Overを利用するとさわれると思っているUI要素にさわれない
・わかりやすいと思っていたボタンなのにVoice Overを通すと何のボタンなのか理解ができない
このトークではこういった課題を認知して、実際に対応したことをまとめてお話します。

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

iOSアプリ開発に入門して、いきなりUnity as a Libraryに挑戦してわかったこと。

i_kinopee Ikuhide Kinoshita i_kinopee

ある日フロントエンドエンジニアが、Unityを組み込んだiOSアプリの開発を行う業務が決まりました。そこからSwiftなどを習得し、先輩エンジニアの経験も伺いながら、Unity as a Libary (UaaL)を採用しました。

Unity as a Libraryは、フレームワークとしてUnityをネイティブアプリに組み込むことができる仕組みです。多彩な3D表現を得意とするUnityと、ユーザーフレンドリーで洗練されたUIを実現できるネイティブ実装のいいとこどりができます。

プロダクトとして、デザイン性と実用性が必要とされる中で開発した経験や、iOSアプリ初心者の視点からつまずいたポイントなどを意識して、以下のテーマをお届けします。

  • Unity as a Libraryを採用するべき条件
  • 巷にある先人方のUnity as a Libraryの実装方法を比較検討した結果
  • 実用面とUXを考えて採用した、Unityの組み込み方法
  • Unityとネイティブ(Swift)の間のやり取りについての検討と実装
  • UnityのBuildで必要な操作を自動化したTip
1