iOSDC Japan 2019 トーク一覧

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

iOSアプリのリジェクトリスクを早期に発見するための取り組み

Kesin11 Kesin11
iOSアプリ開発は年々複雑化しています。次々と追加される新デバイスや新しいAPIへの対応など技術的な要因はいくつかありますが、それ以外にも更新され続けているApp Store Reviewガイドラインやその他のApp Storeに提出できるアプリの要件を遵守する必要があるのもその要因の1つです。

ガイドラインや提出できるアプリの要件は日々修正、追加されているため常に最新情報を把握することは難しいです。ですがこれを怠ってしまうと、いざリリースという段階になってリジェクトされてしまい、思わぬ対応コストとスケジュールの変更を余儀なくされる可能性があります。

この問題を解決するため、ビルドされたアプリに対してガイドラインやApp Storeに提出できるアプリの要件を遵守できているか機械的にチェックするツールを作成しました。このツールはFastlaneプラグインとして提供され、Fastlaneによるビルドパイプラインに簡単に組み込むことが可能です。ツールによるチェック結果はコンソールログ以外にHTMLレポートとして出力が可能で、検証を担当されているQAチームと連携してリリース前の段階でアプリに問題が無いことを確認しています。

本発表では以下の内容をお話しします

- このツールを開発した経緯
- 実際にどのような項目をチェックしているのか
- チェック機能の実装方法
- QAチームとの連携
- ガイドラインを追い続けるための情報源

iOS開発においてApp Store ReviewガイドラインとApp Storeに提出できるアプリの要件を満たすために気をつけるべき注意点と、今回紹介するチェックツールと同様のものを自作するために必要な知識を持ち帰ってもらいたいと思います。
2
採択 レギュラートーク(30分)

テストケースで Ambiguous Layout を発見する

tarunon tarunon
我々の開発において「アプリケーションのパフォーマンス」というものは非常に重要であるにも関わらず、優先順位は常に最下位に位置づけられがちです。顧客の体験を最も確実に向上させる手段の一つが、パフォーマンスの改善なのですが、我々は常に新規機能を開発しています。
メモリリークやAutolayoutのエラーというものは一度発生すると永劫そこに留まり、アプリケーションのパフォーマンスを蝕んでいきます。
どのようにこれらを防ぐのでしょうか。コードレビューで発見できるでしょうか。或いは発生したそれを修正するための時間を確保出来るでしょうか。
これらの問題は、コンパイラでは発見出来ません。コンパイラで発見できないものを防ぐ最も賢い手段の一つは、テストケースを書くことです。コードレビューではありません。それでは世界は救えません。

メモリリークに関しては"try! swift 2019"で伝説の失敗に終わった私のデモとともに追放されました。(されたはずです)
今回は最高峰の黒魔術を以て、我々の世界からAmbiguous Layoutを駆逐します。ご期待下さい。
22
採択 レギュラートーク(30分)

SwiftのStringの文字数の数え方を完全理解する

Takanori Hirobe taka1068
SwiftはUnicodeの扱いに非常に長けた言語であり、絵文字を含む文字列でも正しい文字数を計算してくれます。
その反面、Unicodeの複雑さに引きずられてしまい、直感的な操作ができない時もあります。たとえば、 string[2] と書いても3番目の文字を取得することはできません。

そんな複雑なところのあるSwiftの文字列処理ですが、複雑なものを受け入れてきちんと理解するのはそこまで難しいものではありません。

このトークでは、Unicodeとの関係を意識しながら、Swiftの文字数の扱い方とその裏にある考え方を解説します。
採択 レギュラートーク(30分)

iPhoneのカメラで写真撮影から現像までの技術を紐解く

satoshin21 satoshin21
iPhoneやスマートフォンにおける「カメラ」という機能。
写真を撮る、という日常的に行われている行動ではありますが、その実撮影という機能を実現するために様々な技術的処理が使われています。

このセッションでは、「カメラが光を取り込む仕組み」から「iOSで取り込んだデータを画像化する」という所を深掘りし
写真撮影という技術を皆さんと一緒に紐解いていければと思います。

以下、アジェンダ(仮)

1. そもそもの「写真撮影」における仕組み
2. 写真の表現を決める3つの値 F値・シャッタースピード・ISO感度
3. iPhoneにおける「被写界深度撮影」とは
4. iOSでマニュアル撮影アプリを作る
5. RAW画像とは
6. iOSでRAWを加工してみる
4
採択 レギュラートーク(30分)

スナップショットテスト実戦投入

imaizume imaizume
SnapshotTestingやiOSSnapshotTestCaseなど、
スクリーンショットによる差分検知フレームワークが近年注目されています。
これらは指定した画面のスクリーンショットを自動撮影し、
予期せぬ表示上のデグレを検知してくれる画期的なツールです。

一方私のプロダクトでは、状態再現の手間から来るQAコストの増加や
新しいUI作成時の仕様認識のズレなどが課題となっていました。

そこで改善のためSnapshotTestingを導入しQAコストの削減に取り組むことにました。

しかし当然ながら、単純にViewを渡すだけではうまくいきません。
なぜなら導入までに、下記のような下準備が必要なためです。

- API通信をモックする
- 必要な状態をモックできるレスポンスを考える
- アプリ内フラグやログインをモックする
- UIのモックが可能な設計にする
- 自動テストとの連携

なかなか一筋縄ではいかない導入でしたが、
結果として画面のカタログを作成しデグレ検知に成功しました。
本トークではスナップショットテストの導入にあたり、
注意すべき点や知っておくと良い点についてお話します。
導入のメリットに見合うかどうか、自身のプロダクトが抱えている課題を解決できそうか、
その参考となる情報を提供できればと思います。
4
採択 レギュラートーク(30分)

Advanced Segue (2019年のSegue事情)

所友太 tokorom
Segueでできること、できないこと、とにかくSegue(UIStoryboardSegue)について凝縮して紹介します。
通常の使い方からUnwindSegueを使うメリット、Xcode 11から利用できるようになったIBSegueActionまで。
Segueを愛して7年の私が、これまでSegueを避けてきた皆さんにもSegueの魅力を知っていただけるようなトークができればと考えています。
11
採択 レギュラートーク(30分)

実践 CallKit/PushKit ときどき🐛退治

monoqlo monoqlo
みなさんは音声通話機能を実装したことがありますか?

iOS 10 から導入された CallKit を使うと、純正電話アプリのような見た目の着信画面や通話中画面を表示することができます。また、割込通話や割込通話による保留と保留解除なども簡単に対応できます。

そんな素晴らしいフレームワークですが、いつまにか Apple 公式サンプルコードは提供されなくなり、ドキュメントや Web 上の記事などを頼りに試行錯誤する必要があるのが現状です。

このトークでは、バックエンドに Twilio を用いて、PushKit と CallKit を使用して通話機能を実装する過程で得た知見を共有します。
具体的には、CallKit および PushKit の概要および使い方、効率的なデバッグ方法に加え、Twilio のワークアラウンドや、気づきにくい致命的な CallKit のバグと、それにどう対処したのかについてもご紹介します。
4
採択 レギュラートーク(60分)

ライブラリのインポートとリンクの仕組み完全解説

Kishikawa Katsumi k_katsumi
現代のアプリ開発では、ライブラリやフレームワークをまったく使わないということはほとんどありません。
OSが提供するUIKitやSwift標準ライブラリを使用しますし、サードバーティの便利なライブラリを使用することもあります。

そして、誰もが1度はリンクエラーや重複したシンボル、パッケージマネージャが出力するエラーメッセージに悩んだことがあることでしょう。
リンクエラーの解決が難しいのは、問題の原因がプロジェクト設定、ライブラリの種類・配布方法、実行先(デバイスやシミュレータ)の環境など多岐にわたるためです。

導入したライブラリがインポートできない、リンクエラーで難しいエラーメッセージが表示されている、ビルドは成功しても起動時にクラッシュしてしまう。
誰もが一度はこのような問題に直面し、解決のために長い時間の試行錯誤をしたことがあるでしょう。

モジュールのインポート・リンクがどのように解決されるのか、リンクとはいったい何をしているのかを学ぶことで、システマチックに問題を切り分け、解決できるようになります。

この講演ではライブラリとフレームワーク、スタティックとダイナミックの違い、それぞれのメリットとデメリット、Swiftからインポートするために必要なこと
を知り、外部のライブラリがどのようにして自分のアプリから利用できるようになるかという仕組みを解説します。

リンクの仕組みを知ることで悩ましいリンクエラーを論理に解決できるようになるとともに、CocoaPods、Carthage、Swift Package Managerといったライブラリ管理ツールもより高度に使いこなせるようになります。
29
採択 レギュラートーク(60分)

色の難しい話に負けない体づくり60分

しもとり S_Shimotori_pub
カラーコードとUIColor (or SwiftUI Color) さえわかれば色の話は十分だと思っていませんか?残念ながら違います!私たちが色に関するガイドラインを覗いたとき、謎の数式と用語も私たちを覗き返してくるのです。そこから逃げ出して曖昧な理解のままアプリを作ったら、きっと使いにくいものになってしまうでしょう。

本セッションでは、知っておくと心強い光と色の知識をみなさんと一緒に確認していきます。
色の決まりや仕組みを理解することで、ドキュメントやガイドラインの意図を正しく掴むことにつながり、私たちが気をつけるべき点をしっかり抑えることができるようになります。小難しい話の並んだドキュメントももう怖くありません。
もちろん、色のお話はiOSやiPhoneだけのものではありません。他のアプリやスライド資料などを作るときにも役立ちます。読みにくいスライドで聴衆のみなさんをがっかりさせてしまった……ということがないように、この機会に色への意識を変えていきましょう!

【対象】

- RGBカラーコードまではわかるぞ!という方
- 発表資料の質をワンランク上げていきたい方
- ガイドライン中の謎の用語と英語で手が止まっちゃう方
- 色に関する注意事項の丸暗記が苦手な方、卒業したい方

【取り扱うテーマ】

- で、コントラスト比って何でしたっけ?
- HIG Colorに載っている謎の虹色画像は何者?
- 色覚異常の方は何色の区別が苦手なんだっけ……?
- ダークモードっていうのが最近の流行りなの?なんで?
- イラレにiPhoneのスクショを配置したらヤバイ色になった助けて!

また、これらの問題の理解に必要となる光の仕組みや色の定義の説明、関連するガイドラインの紹介も行います。
8
採択 レギュラートーク(60分)

Heart of Swift

Yuta Koshizawa koher
Value SemanticsとProtocol-Oriented ProgrammingはSwiftの根幹をなす概念です。Swiftの言語そのものや標準ライブラリ、SwiftUIの設計とも密接に関わっており、Swiftという言語を特徴づけるHeart(心、中心)と言えます。

Value SemanticsとProtocol-Oriented Programmingについては、WWDC 2015でのSwift Core Teamメンバーによる解説がよく知られています。しかし当時はSwift 2ベータの時期で、解説に用いられたコードには現在Swift 5で動作しないものも多いです。

また、Swift 5.1で導入されるOpaque Result Type(ORT)や、その後を見据えて議論されているリバースジェネリクス、Generalized Existential、any修飾子との関係など、現在ではより広い視野でValue SemanticsとProtocol-Oriented Programmingを考えることができます。

iOSアプリ開発についても、WWDC 2019で発表されたSwiftUIによって、iOS 13以降状況が大きく変化しそうです。これまではUIKitを用いたクラスベースの開発が必須でした。しかし、SwiftUIではprotocolとstructが中心になり、ORTが多用されます。それらを使いこなすために、Value SemanticsとProtocol-Oriented Programmingの理解がますます重要になるでしょう。

本トークでは、それらの関係を示しながらSwift 5.1時代のValue SemanticsとProtocol-Oriented Programmingを解説し、SwiftのHeartを描き出します。
17
採択 レギュラートーク(60分)

めくるめくシェーダアートの世界

Youichi Takatsu ta_ka_tsu
シェーダアートとは各ピクセルの座標値と共通のデータからそのピクセルの色を決定し、様々なイメージをスクリーン上に表現する手法のことです。時にシェーダ芸と呼ばれることもあります。
これは主にシェーダと呼ばれるGPUで実行されるプログラムを記述することで実現します。

様々な手法が編み出され、そのシンプルな原理とは裏腹に実に多彩な表現が可能となっています。

Web上にはシェーダを閲覧/投稿できるGLSL SandboxやShadertoyといったサイトがあり、多くの驚くべき作品を目にすることができます。

もちろんWebに限らずiOSでもシェーダアートは実現できます。

本セッションではまずシェーダアートの動作原理を解説します。
次にstep関数やfract関数といったシェーダ用の組み込み関数をいくつか学んだ後、距離場・極座標など表現方法のヒントとなる概念に加えて、複製・ノイズなどの基本的なテクニックも紹介します。

また、共通データに時間を渡すことでアニメーションを行ったり、加速度センサーやマイクの音量を渡すことでインタラクティブな表現ができるデモも披露します。
さらにレイトレーシングの一種であるレイマーチングを用いた3次元的な表現も紹介します。

普段のプログラミングとはまた一味違う体験を、そしてあなた独自の世界を表現してみませんか?
3
採択 レギュラートーク(30分)

ソーシャルライブサービスにおけるデジタル化粧の仕組みと実装

noppe noppefoxwolf
デジタル化粧は、映像を加工することで実際にメイクをしているように見せる技術です。
昨今では物理的なメイクを再現するだけでなく骨格や目の大きさを調整したりすることも出来るようになり、セルフィーを投稿する敷居を下げている技術の一つでもあります。
そんな「顔のAR」とも呼べるデジタル化粧はソーシャルライブでは無くてはならない存在となりました。

このセッションではソーシャルライブサービスの実例を通して、デジタル化粧機能の需要の傾向や仕組みを学びます。
また、高価なデジタル化粧SDKを利用せずにMLやMetalを使って実装するにはどうすれば良いかを紹介します。
11
採択 レギュラートーク(30分)

Swiftクリーンコードアドベンチャー ~日々の苦悩を乗り越え、確かな選択をするために~

shiz stzn3
Swiftは多くのプログラミング言語の良い所を採用しており
多種多様な方法でコードを書くことが可能であるため
同じ問題に対しても人によってコードの書き方は大きく異なります。

そうした状況の中で

「これは正しい書き方なのだろうか?」
「もっと上手い書き方があるのではないだろうか?」
「いったい何が良いコードなのか?」

と悩むことは多いのではないでしょうか。

私は毎日悩み続けています。

そんな中
これが正解というものはありませんが
数あるコードの中でも
多くの方から良いコードと呼ばれている
いわゆる「クリーンコード」は存在します。

今回は
私が日々苦悩する中で出会ってきたコードを題材に

どのような状況で、どのような書き方がされ、なぜそう書かれたのか

を見ていき

「クリーンコード」とはどういうものなのか?
なぜ「クリーンコード」は必要なのか?
「クリーンコード」を書くためにはどうすればよいのか?

などについて
みなさまと一緒に
コードの世界を探検する中で発見していきたいと思います。

今回の発表を通して

「こういうときはこういう理由でこうすれば良い」

といった「確かな選択」ができる回数が増え
日々の苦悩を乗り越えるための一助になりましたら幸いです。
14
採択 レギュラートーク(30分)

FatViewControllerを安全に書き換える方法が見つからなかったので、どういう痛みを許容するか考えた

ダンボー田中 ktanaka117
安全にリファクタリングを行うには「お約束」があります。

「自動テストを書いてからリファクタリングする」

言葉にしてしまえば簡単で「プログラマであれば当然のことだ」とおっしゃる方もいらっしゃるかもしれません。
でもそれを難しくするのがヤツの存在です。そう、iOSエンジニアならば切っても切れない関係のFatViewControllerです。

前述のお約束を守るために、こんな堂々巡りに陥ったことのある方は少なくないのではないでしょうか。
・「UIテストを書いた上で書き換えを行うか?」「時間がかかりすぎる、ダメだ...!」
・「ユニットテストを充実させて設計を変更しながら書き換えを行うか?」「先にプロダクトコードの変更が発生してしまう、ダメだ...!」

このトークではFatViewControllerの書き換えを「自動テストを書いてから」というお約束を守ってこなすのが難しかった話をします。
そのうえでなるべく安全に、現実的に書き換えていく方法にはどんなものがあったか、どんな部分で安全を切り捨てて痛みに耐える判断をしたのか話をします。
10
採択 レギュラートーク(30分)

BLEでiOS/Android間でそこそこ大きなサイズのデータ通信を実現する (L2CAPもあるよ)

日向強 coffeegyunyu
みなさん、iOSやAndroidなど、端末同士のデータ交換にはどのような方法を使っていますか?
ログインや登録を必要としない、パケット代もかからない、モバイルデバイスで広く採用されている、OSを問わない、
そんな理由でBluetoothを採用しようとした人は結構いらっしゃるのではないでしょうか。

しかし、いざ採用したとしても、一度に少量しかデータを送れない、機種によって安定しない、データを正しく受け取れない…
そんな経験から、BLEの採用を見送った方も多いのではないのでしょうか。

そんなBLEですが、
iOS、Androidの各OSで内部的に行われている処理を読み解くと、
データを送るための処理を最適化するための道筋が見えてきます。

このトークでは、BLEの処理に対して各OSで何が行われているのか?何ができるのか?
その上で最適なデータ通信を行うためには何をすればいいのか?を語りたいと思います。

また、iOS11より、通常のBLE通信とはまた違った選択肢「L2CAP」でのデータ通信が行えるようになりました。
こちらの方式はほぼ公式ドキュメントが存在しない状況ですが、Android Qにも採用される予定の技術であり、
そちらも合わせて語りたいと思います。
4
採択 レギュラートーク(30分)

画像処理における、UIImageとCGImageとCIImageの効果的な使い分け

栗山徹 kotetu
UIImage、CGImage、そしてCIImageは、いずれも画像情報を保持するためのクラス(以下、画像クラス)ですが、皆さんはこの3つのクラスの特徴を理解して使っていますか?

Web APIで取得した画像を縮小して表示できればよい、といった単純な要件であれば、何も考えずにUIImageを使うだけでも済みますが、リアルタイム処理や複雑な画像処理などのより高度な要件においては、特徴を知らずに使ってしまうと余計な処理を書いてしまって最悪性能低下を招くことになってしまいます。

本セッションでは、UIImage / CGImage / CIImageの各画像クラスの特徴を解説しながら、これら3つのクラスの画像処理における使いどころについてご紹介します。

また、OpenCVなどの画像処理ライブラリとの連携を考慮した画像クラスの使い方や、私が業務で実際に画像処理の性能改善に成功したエピソードもご紹介します。

本セッションが普段何気なく使っている画像クラスについて改めて考えるきっかけとなれば幸いです。

- 発表内容アジェンダ
1. UIImageとCGImageとCIImageの概要や特徴
2. 特徴を踏まえた各画像クラスの使いどころ
3. OpenCVなどの画像処理ライブラリとの連携を踏まえた画像クラスの使い分け
4. 業務で実装したリアルタイム画像処理の処理性能を改善した体験談
6
採択 レギュラートーク(30分)

Xcodeのコードカバレッジ計測ではなぜブランチカバレッジが取れないのだろうか?

kariad kariad_uu
テストコードを書いている場合、コードカバレッジを計測しているチームが多いのではないでしょうか。
私たちはXcodeの機能を使えば簡単にコードカバレッジを計測することが可能です。

一方でコードカバレッジにはいくつか種類があり、Xcodeではその一つであるステートメントカバレッジしか計測できないということをご存知でしょうか。
カバレッジの種類によりどこまで厳密網羅されているかが変わってきます。
その中でも分岐の網羅までチェックするものがブランチカバレッジと呼ばれます。

お隣を見渡せばAndroidのJaCoCoではブランチカバレッジも計測することができます。

ではなぜ私たちの扱うXcodeではブランチカバレッジを計測することができないのでしょうか?
そもそもSwiftでブランチカバレッジを計測することができないのでしょうか?

本トークではそんなXcodeでのコードカバレッジ計測でブランチカバレッジを計測できない理由はなぜなのか、本当に計測することができないのか。
それをSwiftのカバレッジ計測の仕組みから解き明かしていきます。
6
採択 レギュラートーク(30分)

Swift Playgrounds でタートルグラフィックスしよう!🐢

Tomoki Kobayashi temoki
みなさん LOGO というプログラミング言語はご存知でしょうか?私は中学生の時にこの言語のタートル・グラフィックスという機能でプログラミングの楽しさを知り、現在 iOS のエンジニアをしています。

2016年7月、その LOGO とタートル・グラフィックスの生みの親であるシーモア・パパート氏の訃報をきっかけに、Swift 製タートル・グラフィックスの開発を始めました。同年の WWDC で発表された Swift Playgrounds で動かすことができれば、子どもたち(私の息子も含め)に iPad で私の中学生時代と同じ体験をしてもらえるかもしれないと思ったからです。

このトークでは、私が作っている Swift Playgrounds で動くタートル・グラフィックスについて、次のような構成でお話しする予定です。

- LOGOとタートル・グラフィックスについて、そして後世に与えた影響
- Swift, CoreGraphics, CoreAnimation によるタートルグラフィックスの実装
- Playground Book の作り方と、Subscriptions による配布方法
- Swift Playgrounds 動くタートル・グラフィックスを配布して起きたこと
2
採択 レギュラートーク(30分)

クロマキー合成を使い透過動画をAR空間に表示する

satoshi0212 shmdevelop
動画を現実の風景に重ね、その一部を透過させて再生する実装について説明します。

AR(Augmented Reality)空間でシンプルに動画再生するのはそれほど難しくありません。
しかし一部透過させようとするとリアルタイム画像加工をする必要があり難易度が高まります。

表示のガタつきを抑え、一部を透過させた動画を再生するには。
60fpsかつ音声付きで再生するにはどうしたら良いのでしょうか。

クロマキーシェーダーと再生処理の工夫により実現した実装とその他Tipsを共有します。

この発表では以下の内容について話す予定です:
- クロマキー合成シェーダーの実装
- 60fps音声付きでの透過動画のスムーズな表示
- リアルタイム配信映像の受信について
5
採択 レギュラートーク(30分)

サービスにおけるデザインシステムの構築

nakajijapan nakajijapan
モバイル開発をしている上でデザインとの関係性は切手は切れない関係だとお思います。
また、プロダクト自体も成長に伴い複雑性がましてきました。そのときに私はデザインシステム
に注目して様々なアプローチしてきました。

本発表ではあまり馴染みではない「デザインシステム」はどういうものなのかという基本的な話から
ではどのようにしてプロダクトにデザインシステムを導入し、どこまで何をしていったのか
エンジニアリングを持って何を解決していったのかを解説します。

概要
- デザインシステムの基礎
- 導入にあたって
- エンジニア側からできること
- カラー管理・自動化
- 画像管理
- インタラクション
4
  • 1 (current)
  • 2
  • 3
  • 4
iosdc-japan-2018 sponsors iosdc-japan-2018 potential-sponsors 開催後請求
ブースWL 要支払確認 要モノクロロゴ
仮採択 採択しない Rookie
仮採択 採択済 保留 情熱加点 採択しない