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

オフライン編集もできる複雑なデータ構造を端末間で同期するために

496_ rokuroku

皆さんも開発をしていて端末間のデータ同期システムが必要になったことはありませんか。
この発表ではオフライン編集可能なテキストエディタのバックエンドとして作った、テキストファイル同期システムの設計やその構成、開発環境についてお話しします。
同期システムはiOS / Android / WebだけではなくWindowsなどのデスクトップOSへの展開も見据え、iCloudに依らない実装が必要でした。また作成するアプリの特性上、同期の仕組みをユーザーに十分説明できるように同期の仕組みを全て実装することにしました。

  • サーバー構成と開発環境(今回はAzure Functionsを中心に設計したのでその話)
  • 採用したシステムとFirestoreを使った場合の比較
  • 複雑な系において、アプリのCIにもDockerなどでサーバーを立てるメリット
  • オフライン編集を前提とした同期のためのデータベース設計のコツ(ローカル・サーバー両方)
  • iOSのファイルアプリに同期対象のファイルを露出させる方法などプラットフォーム固有の話
採択
2021/09/19 14:50〜
Track E
企画(80分)

hak & tomzoh 特別企画

hak hak
hak

hakさんと実行委員長tomzohでコンピュータのおもしろい話をするYouTubeチャンネル "hak & tomzoh" で進行中の企画「パタヘネを学ぼう」とiOSDC Japan 2021のコラボ企画です。

hak & tomzoh
https://www.youtube.com/c/haktomzoh

視聴者から寄せられたご質問にhakさんとtomzohがお答えします。

コンピュータサイエンス的なものからよもやま話まで、iOSDC Japan 2021の参加者のみなさんが聞いて楽しい内容になると思います!

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

SceneKitを使ってアプリのクオリティを劇的に上げる

ahiru___z ring

SceneKitはUIViewやCALayerでは難しい3Dやパーティクルの表現を非常に簡単に使用できるフレームワークです。

「3Dモデルのレンダリングなどで使用するフレームワークだから私には関係ない」
「AR系のアプリ開発に携わっているわけではないので使用する機会はなさそう」

このように思っていませんか?

これは大きな間違いです。

SceneKitはUIKitと非常に親和性が高くUIKitにそのままViewとして統合できます。
そして何より、UIKitだけでは実現が難しいリッチな表現(アニメーション)がとても簡単に実装できるのです!

本トークでは「SceneKit × UIKitの導入事例を軸にアプリのクオリティを上げるtips」をご紹介します。

具体的には下記の話を予定しています。

  • SceneKitとは何か
  • どのような表現ができるのか
  • どのように実装するのか
  • 実際の導入事例

「個人開発でアプリをリリースしていてアプリのクオリティに磨きをかけたい方」や「デザイナーからの無理難題に少しでも立ち向かいたい方」にはぜひ聞いてほしい内容となっています。

明日からすぐに使える強力な武器、手に入れませんか?

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

async/awaitの性能をDartとSwiftとの比較で読み解く

tamapppe Tamappe

iOS 15からSwiftで念願のasync/awaitが使えるようになりました。
これでSwiftでAPI通信を書くときにコールバック地獄の悩みが解消されるようになります。

Flutterでのアプリ開発でもasync/awaitを標準で使用することができます。
Flutterの場合はDartで書く必要があります。

Swiftの場合はiOS 15から使用できるという制限を突破できれば、その柔軟な言語仕様から痒い所に手が届く書き方が可能になります。
Dartの場合はenumの貧弱さなど「Swiftだったらこう書けるのに」という場面が多いです。

このように、Flutterとネイティブアプリとでもasync/awaitの使い心地が変わります。
本セッションではFlutterアプリとネイティブアプリの差からasync/awaitの違いを比較していきます。

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

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

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のサポートを行うアプリが少しでも増えるきっかけになれば嬉しいです。

採択
2021/09/19 16:30〜
Track A
LT(5分)

ほんの一瞬だけでもConcurrencyの計算理論に触れてみませんか?

banjun ばんじゅん🍓

非同期のコードはよく書くものの、その振舞いを把握できているか不安になることもありますよね。
 
そのようなとき、オートマトンや状態遷移系のような知識は役に立つのでしょうか?つまりそれ自体を使ってコードを書くことはないものの、基礎的な考え方になるようなものです。並行計算の分野ではCCS(Calculus of Communicating Systems)やpi-calculusのような理論が提唱されていました。このLTではCCSを中心に計算理論の例をみていきます。
 
CCSで記述することで、並行計算を状態遷移として捉えることができます。状態を数えることができれば、非同期に惑わされずに振舞いを把握できます。そこでは同期通信とインターリーブという抽象化された計算過程があります。何を抽象できるかのインスピレーションが得られるでしょう。
 
async/awaitなどの実際的な機能も重要ですが、ここらでちょっと理論面にも目を向けてみようかな?というきっかけになればと思っています。たった5分で、「それ聞いたことがある」状態になれることをサポートします。

採択
2021/09/19 16:35〜
Track A
LT(5分)

NDIとARKitを連動させた新しい映像表現

shmdevelop 服部 智

Network Device Interface(NDI)はIP ネットワークを経由し映像を伝送する方式の1つです。
現在世界で最も利用されているIP伝送テクノロジーで、高画質な映像を無線で送受信できます。

iOSからでもSDKを通じて使用可能です。
(SwiftからNDIを使うのは少し大変でした!)

シンプルに映像送信するところから始め、
フレーム単位でメタデータを付加できることを利用しARの新たな映像表現に活用してみました。

送信アプリ実装、受信側設定、作った表現と工夫点など。

デモ、ソース解説を中心に、ARと映像の新しい形態を解説します。

採択
2021/09/19 16:40〜
Track A
LT(5分)

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

taka1068 Takanori Hirobe

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

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

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

19
採択
2021/09/19 16:45〜
Track A
LT(5分)

Using Eigen from Swift (via C)

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 に実装すること

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

採択
2021/09/19 16:50〜
Track A
LT(5分)

5分でわかるIDFA / ATT

koooootake 神武

みなさん、IDFAとは何者か知っていますか?ATTはどのように表示していますか?

2021年4月末にリリースされたiOS14.5から、AppTrackingTransparency(ATT)のリクエストをしない場合、IDFAの共有がデフォでオフになる仕様に変更されました。これはユーザがプライバシー情報の開示をコントロールするために欠かせない変更となりますが、ATTはどのように表示すべきか、代替手段はあるのか悩む人は多いはず。

そこで、このトークでは
・IDFAとは
・ATTの表示タイミングや事前確認ポップアップを試行錯誤して実装した結果Appleにリジェクトされた戦績
・代替手段のSKAdNetworkの解説
を5分で面白くお伝えしようと思います。

採択
2021/09/19 17:20〜
Track A
LT(5分)

アプリの終活

kuritatu18 久利龍義

新機能開発を絶賛開発していてもうすぐリリース。1ヶ月後・3ヶ月後にリリースする機能も決まっている。将来に向けてリファクタリングや自動化のタスクとやりたいことがいっぱいある状況。

しかし、終わりは突然やってきます。

会社の統合によって、担当していたアプリはサービスを継続するが最終的には他のアプリに統合することに。

近い将来に終わりが見えてる状況で、長年保守開発してきて様々な思い出が詰まったアプリの終活についてこの1年間でどんなことを思い、どんな視点でどんな対応をしたかをご紹介したいと思います。

  • 進んでる開発をどうするか
  • 利用されない機能の削除
  • 保守しやすい状態を作る
採択
2021/09/19 17:30〜
Track A
LT(5分)

今、改めて振りたいiPhone搭載のセンサとその使い道

rirex5 Atsushi Otsubo

便利なWebサービス・APIが増えている昨今ですが、 デバイスの進化にも目を見張るものがあります。
iPhone 12 Pro / Max では新たにLiDARセンサが搭載されて話題になりましたが、そもそも iPhone は高性能なカメラから、加速度、気圧センサなどあらゆる入出力に対応した優れたデバイスということは言うまでもありません。
これらのセンサを自在に操れることは、サーバサイドやWeb開発とは異なる、クライアントアプリケーション開発の魅力の一つだと考えています。

ということで、

  1. どんなセンサ・プロパティにアクセスできるのか
  2. どんな用途に利用されている・できそうか

これらについて改めて整理し、センサを使ったユニークなアプリ開発につながるヒントを共有できれば幸いです。

採択
2021/09/19 17:35〜
Track A
LT(5分)

Kyash iOSアプリのQAの歴史

konifar konifar

Kyash iOSアプリは2017年4月にリリースされてから4年が経ちました。
リリースしてから品質とどう向き合い、変化してきたかを話します。
Unitテストを書く指針を決めたり社内でBugBashを行ったり外部にQAを委託したり、思えば色々ありました。最近ではAutify for Mobileを使ってE2Eテストの自動化に取り組んだりもしています。今でも完璧にできているとは言えませんが、チームでアプリを運用する中でどういう課題に直面し何をしてきたかの実例として、シュッと共有していきます。

10
採択
2021/09/19 17:40〜
Track A
LT(5分)

Hey Siri!マルチプラットフォームでのSiriショートカットの地雷を教えて

monoqlo monoqlo

Siriショートカット、みなさん使っていますか?
乳幼児の世話で手が離せない時やゲームのプレイ中など、手や目を離せない時に意外と便利な機能です。

例えばiOSアプリでショートカットを実装した場合、シンプルなものであれば、iPhoneだけでなく、Apple Watch、さらにはHomePodでも利用することができます。家の中でも外でもどこでも手軽に使えてとても便利ですね。

さて、遡ること約1年、とあるiOSアプリにアプリ内でショートカットを登録できる機能を追加しました。
機能としてはシンプルで、「数字を入力として受け取り、一定の範囲内の数字であれば保存、それ以外はエラーを返す」というものでした。
iPhoneでちゃんと動いてるし問題なし!リリース!
めでたしめでたし。

ではありません。そうです。我々は対応している全てのプラットフォームで、できる限り動作確認をすることになるわけです。新しいOSがリリースされたら差分も確認します。

すると、次々と見つかるこれらの問題…

「iOSとwatchOSで応対が違う…だと…」
「iOS 13とiOS 14で挙動が…」
「watchOS 7だとそうなるの…」
「HomePod自動アップデートでいつの間にか応対変わってるやん…」
「英語と日本語でなんか違う…」

このLTでは、このような地雷特徴をいくつか紹介します。

実はこれらは知らなくてもそういうものだと割り切れば困りません。
ですが知っていれば、開発時やQA、あるいは問い合わせ対応の動作確認時間をちょっぴり節約できるかもしれません。

採択
2021/09/19 17:45〜
Track A
LT(5分)

2段階認証実装の勘所

corori_22 ころころ

ユーザのセキュリティへの意識は上がってきています。
近年、パスワード流出や認証欠陥等のセキュリティインシデントによるニュースが増えてきており、ユーザにとって重要な情報を扱うサービスへのダメージは計り知れません。
このLTでは、

  • RFC6238によるTOTP(Time-Based One-Time Password Algorithm)の定義
  • ネイティブアプリ上でのTOTPによる2段階認証の実装の概要
    • 認証設定時の状態管理
    • ログイン時の状態管理
  • iOSエンジニアが気をつけるべき勘所

をお伝えし、みなさんが明日サービス側に導入を提案してもらうことを目指します。