iOSDC Japan 2020 プロポーザル一覧

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

SwiftUI時代の Functional iOS Architecture

稲見 泰宏 inamiy
この発表は、2016年のiOSDCで登壇した「Reactive State Machine」の続編です。
https://speakerdeck.com/inamiy/reactive-state-machine-japanese

前回お話しした Redux / Elm Architecture について簡単におさらいした後、
Swiftコミュニティが新たに開発した各種フレームワークについて紹介します。

- https://github.com/inamiy/Harvest
- https://github.com/pointfreeco/swift-composable-architecture
- https://github.com/bow-swift/bow-arch

これらのアーキテクチャを理解する上で重要な鍵となるのが「Optics」と「Comonad」です。
関数型プログラミング(とちょっとだけ圏論)の知見が、
iOSに限らずフロントエンド開発全般でどのように役立つのかを見ていきます。

また、これらの概念が Web (React) の世界でどのような類似点を持つのかについても、
合わせて比較検討を行います。
9
他イベントOK レギュラートーク(20分)

実装したくなる音声編集

ようせい fairy_engineer
# 発表内容
近年音声サービスが続々と登場しています。
iOS開発でも音声の収録や再生周りの情報は見受けられますが
音声ファイルを編集したり、音声の波形の取得やUI表示になると情報が少ないように感じます。
そこでRadiotalkという音声配信サービス内にある音声編集の部分で用いている部分から
以下の方法を紹介したいと思います。
1.音声の波形の取得方法
■ 収録時に取得する方法
- AVAudioRecorder編
- AVAudioEngine編
■ 音声ファイルから取得する方法
- AVAudioEngine編
- AVAssetReader編
2.音声編集の方法
- トリミング方法
- 結合方法
3.音声波形の表示方法
- 簡単な波形UIの作り方
- 音声編集のUIの構成
5
他イベントOK レギュラートーク(20分)

Composition Rootから考える煩雑になりがちな依存関係を解消する仕組み

shiz stzn3
DIはデザインパターンの一つであるDependency Injection(依存関係注入)の略として使われることが多く
あるオブジェクトに必要な他のオブジェクトへの参照を外部から与えることで
オブジェクト同士が密になることを防ぎ
テストのしやすさや変更のしやすさなどを保つことができると言われています。

しかし
このDIを徹底すると
例えば1つ依存関係を追加するだけで

- 多くの箇所に引数を追加しなければならない
- あちこちにimportを書かなければならない
- 再びビルドが成功するまでに時間がかかる
- チームメンバーとのコンフリクトが頻繁に起きる
- オブジェクト自身の本来の役割とは関係のない記述をして無駄だと感じる

といったことが起きてしまう可能性もあります。

こういった問題を解決する方法の1つに
Composition Root
という考えがあります。

この考えを導入することで

- 依存関係の変更による修正箇所を減らすことができる
- 依存関係の管理を集約できる
- 依存関係が理解しやすくなる
- オブジェクトから本来は関係のない記述を減らすことができる

などの効果があります。

さらに
もう1つのDIであるDependency Inversion(依存関係逆転の原則)や
その他のデザインパターンも併せて活用することで

- DispatchQueueなどのスレッドの管理
- ログやアナリティクスのの送信
- キャッシュなど特定の場合にのみ必要な機能の追加

なども
個々のオブジェクトから分離させることができます。

普段とはちょっと違った考え方や手法かもしれませんが
新しい世界に触れることで
より良い設計や実装方法を考える上での何かのヒントになれば幸いです。
7
レギュラートーク(20分)

Xcode Preview でUIKitベースのアプリ開発を効率化する

kenmaz kenmaz
iOSアプリ開発の大部分の時間はViewの実装に費やされます。Viewはアプリの状態によって表示内容やレイアウトが動的に変わります。そのためViewの開発中は、頻繁にiOS Simualtorを起動し、実際にアプリを操作して期待通りの表示内容になっているかを確認する必要があります。また、小さい画面の端末での表示時、ダークモード有効時、Dynamic Typeで文字を大きくした際などに、レイアウトが崩れてないかを確認する作業も面倒なものです。何か変更するたびにiOS Simulatorを起動して動作確認する必要があるので非常に大変です。

この問題を解決してくれるのが、Xcode11で導入されたXcode Previewです。Xcode Previewは、様々な状況下におけるViewの表示結果をエディタ上でプレビュー表示する機能です。

Viewの実装を変更すると即座にプレビューに反映されるため、確認のためにiOS simulatorを何度も起動する必要はありません。 そして、Xcode PreviewといえばSwiftUIのための開発支援機能というイメージがありますが、実は従来のUIKitベースのアプリ開発にも使うことができます!あなたの既存のアプリ開発を効率化するための道具として、今日からXcode Previewを使い始めることができるのです。SwiftUIの普及を待つ必要はありません。

このトークでは既存のUIKitベースのアプリ開発にXcode Previewを導入する方法とその活用方法を、デモを交えながら紹介します。
7
レギュラートーク(20分)

API Design Guidelines を 20 分で振り返る

熊谷友宏 es_kumagai
型名は大文字から? この機能は単独の関数に切り出すべき? — コードを書いていると時折、小さなところで迷ったりします。そんなときには Swift が公式で用意している文書「API Design Guidelines」が役に立つかもしれません。書き方の指針を示すガイドライン、今いちど 20 分で振り返ってみましょう。
4
他イベントOK レギュラートーク(40分)

iOSアプリ開発で理解するドメイン駆動設計

ロクネム _rockname
みなさんはドメイン駆動設計についてご存知でしょうか。
ドメイン駆動設計とは、ソフトウェアを実装していく上で、特定の技術を中心に設計するのではなく、そのソフトウェアを適用する対象領域、すなわちドメインを中心に設計していくソフトウェア設計手法の一つです。

...と、言葉にしてみてもよくわからないですよね。
本トークでは、例として一つのiOSアプリを開発する上で、要件を整理してドメインを抽出するところから初め、実際にiOSアプリをDDDの設計パターンを適用しながら実装することで、ドメイン駆動設計とはどのようなものかを最終的にみなさんが理解できるところを目指します。

【アジェンダ】
1. ドメイン駆動設計とは
2. お題となるアプリについて
3. 要件を整理し、ドメインモデルを抽出する
4. クラス図に落とし込み、集約を切る
5. 戦術的設計を適用しながら実装していく
・Entity
・Value Object
・Service
・Repository
・etc...
6. 最後に
6
他イベントOK LT(5分)

Xcodeテンプレート + クリーンアーキテクチャ + RxSwift で創る青空な世界

山崎謙登 satoru_pripara
アプリには「データの保存・読み出し」「データの成形・ビジネスロジック」「UIへの描画」といった各工程が必要不可欠です。
これらの機能の大半を一つのファイルに書いてしまい可読性・メンテナンス性が悪化するという「Fat View Controller」という問題が存在し、開発するiOSアプリの規模が大きくなるにつれ問題が激化していきました。

この問題に対し、
・各種の役割を複数のファイルに細かく分割していく「クリーンアーキテクチャ 」
・データの流れの記述を一箇所にまとめて書けるようにする事で可読性を向上させる「RxSwift」
・必要なファイル群を1クリックで作成するXcodeテンプレート
を駆使し取り組んだ軌跡を5分間でご紹介します。
他イベントOK レギュラートーク(20分)

「スコープ」を意識して「思いやりのあるコード」を書こう!

uhooi the_uhooi
みなさんは実装時にどの程度「スコープ」を意識していますか?
「スコープ」は直訳すると「範囲」という意味であり、本トークでは「コードにおける様々な範囲全般」を指すことにします。

例えば、自クラスのみで呼ばれているのに `private` 修飾子が付いていないメソッドがあるとします。
このメソッドの修正時、影響範囲を調べるために他から呼ばれていないか確認しますが、 `private` が付いていればその範囲を自クラスのみに絞れます。
逆に、普段からスコープを意識していると、 `private` が付いていないときに「このメソッドは自クラス以外から呼ばれているんだな」と推測できるようになります。

このように、スコープを意識することで実装の意図が伝わりやすくなり、可読性の高いコードが書けるようになります。
他人や明日以降の自分のためになるコードなので、私は「思いやりのあるコード」と呼んでいます。

【アジェンダ】
・アクセス修飾子( `private` や `internal` など)の意味と付けどころ
・ `final` 修飾子の意味と付けどころ
・プライベートプロパティよりスコープを狭くする
・プライベートメソッドよりスコープを狭くする
・ `@IBOutlet` と `@IBAction` のスコープ
・あえて最初からスコープを広げるケース

【ゴール】
・スコープを狭くすることのメリットがわかる
・アクセス修飾子や `final` 修飾子を適切に使える
・各修飾子を使わずにスコープを狭くできることがあるとわかる
・最初からスコープを広げることのメリットがわかる

みんなでスコープを意識した「思いやりのあるコード」を書き、優しい世界を作りましょう!
6
他イベントOK 原稿(2ページ)

図解で整理するCombineフレームワークの全体像

今城 善矩 yimajo
WWDC19でAppleにより発表されたCombineフレームワークはリアクティブプログラミングを宣言的に行うためのフレームワークです。しかしリアクティブプログラミングに慣れていない開発者にとって、このフレームワークで登場するPublisherやSubscriber、Subscriptionなどのさまざまなパーツをすんなりと理解することは難しいのではないでしょうか。

本原稿ではそのCombineフレームワークの全体像について図を用いて解説します。

RxSwiftなどのリアクティブプログラミングに慣れている開発者にとっても、自分の知っている概念とCombineフレームワークのパーツ名を一致させることで、さらに違いを整理できるはずです。
7
他イベントOK レギュラートーク(20分)

2020 今考える個人のiOSアプリを公開するための土台を考えて、公開までサポートした話

嶽雅也 azarashi1229
個人でアプリを作っていった後に、さてこれから公開となった際に何をやれば良いか混乱したことはないでしょうか。
アイコンの準備、プライバシポリシーURLの準備などから、初見殺しの証明書周り、パソコン変えるとRubyのバージョン違って動かないなどなど。

今回、非iOSエンジニアで初めてiOSアプリを作った友人にアプリ公開までに何をすれば良いのと聞かれた際に、最低限整える物を最速で教えるのも良いのですが、せっかくなら土台となるテンプレートを説明付きで教えて上げられると良いなぁと思いました。
また、その土台となるプロジェクトの公開とこんなところに気を使いましたというのを紹介していきたいと思います。
現時点でレクチャー中なのですが、最初の障害はFastlaneのdeliverでIPAをあげる際のAppleアカウントの2段階認証でした。。
レギュラートーク(40分)

CTIサービスを支える裏側 〜物理デバイスとの戦い〜

浅野 宏明
飲食店の予約台帳アプリであるレストランボードでは、電話応対業務をサポートする待望のCTIサービスをリリースしました。

このサービスでは、「CTI-BOX」と呼ばれる専用物理デバイスが店舗の固定電話とiOSアプリを繋ぐハブとなり、システム化を実現しています。
専用物理デバイスを採用したことで、iOSアプリとの連携や通話転送をするためのBLE/SIP/PSTNなど各種通信I/Fや、機器や設置環境の物理的な制約など、通常のアプリ開発とは異なる様々な困難がありました。

本セッションでは、CTIサービスを開発する上で発生したシステム・運用両面での課題と、それを解決するための技術的チャレンジについてお話しします。
他イベントOK レギュラートーク(20分)

あなたの知らない連絡先の世界

日向強 coffeegyunyu
「iOSから連絡先をサーバーに同期させたい」
用件を受け、iOSにはContact APIがあるから楽勝でしょ、と思ったあなた。
しかしながら連絡先の構造はそんなに簡単なものではありません。
ミドルネーム?Suffix?振り仮名?旧姓?
そんなハマりやすい連絡先処理の説明やVCard変換など、
サーバーのテーブル設計にも役立つiOSのContact APIについてお話しします。
(Androidの連絡先にも若干触れる可能性あり)
2
他イベントOK LT(5分)

AWSとiOSのPush通知をiOSで構成する

DaisukeNagata dbank0208
iOS側の通信ロジックでAWS内のコンソールで作成する作業を実現しました。iOSではAPIを叩くだけ、簡単にいうとAPIを作成しました。これにより出来る事は、Push通知を許可したユーザーにPush通知を送ることでができます。詳細は、PythonでLambda関数を作成して、APIGateWay を利用して、APIを作成しています。iOS側ではデバイストークンをクエリに設定してAPI通信を行うだけです。本番のPush通知として使用できる詳細のプログラムは採択していただけたら、発表させていただきます、宜しくお願い致します。
他イベントOK レギュラートーク(20分)

SwiftUI_Tips

DaisukeNagata dbank0208
今年の1月より、業務案件でSwiftUIで開発を実施しました。結果的にはSwiftUIの方がUIkitより実装規模がコンパクトになりました。毎日開発を進める上で、様々な詳細に気付かされましたし、コツを掴んでしまえば、iOSの開発者はすぐに SwiftUIを扱えるようになります。

SwiftUIではデフォルト動作では表現しきれない場合に多くのカスタマイズが必要になってきますが、カスタマイズが比較的実施しやすいように構成されています。

SwiftUIでの今すぐ使えるサンプル、Tipsを発表、提供したいと思います。
今後、SwiftUIを使用して開発を進める上でのメリット、デメリットも合わせて共有できたらと思います。

発表の概要は
SwiftUIにおける考え方、UIKitとの違い。デフォルトでは専用のメソッドがなく、カスタマイズで表現する必要があるSwiftUIのカスタマイズサンプル、SwiftUIで開発をする上でのメモリー対策。以上の内容で20分の間にSwiftUIが魅力的に感じ、今後の開発で役立っていただけたらと思います。
他イベントOK LT(5分)

Foundationでお手軽多言語化

日向強 coffeegyunyu
2020年3月から、新たにアフガニスタン、ボスニアヘルツェゴビナ、ジョージアなど新たに20ヵ国でApp Storeのアプリ配信が行われるようになりました。
みなさま、グルジア語への対応はお済みでしょうか?

私のようにグルジア語についての知識がない人でも、iOSの標準フレームワークFoundationを使えば、ある程度の翻訳を行うことが可能です。
多言語化対応に役立つAPIを紹介したいと思います。
2
他イベントOK レギュラートーク(20分)

CoreDataを使って、よりiOSと親和性の高いアプリをつくる

日向強 coffeegyunyu
iOS3より導入されているCore Dataは、
単純なデータベースとしての機能のみならず、iOSと親和性の高い様々な機能が含まれています。

- データベースのUndo、Redo
- iCloudとの連携
- Combine/SwiftUIとの連携
- TableView/CollectionViewの実装、Diffable Data sourceの利用
- NSAttributeStringやCGRectなど、複雑なデータの取り扱い
- JSONをそのままモデルにマッピングする

これらの機能を組み合わせて、よりiOSらしく、ユーザーの体験を損なわないアプリを作成するための、CoreDataの使い方を紹介します。
1
他イベントOK レギュラートーク(20分)

詳解Storyboard

日向強 coffeegyunyu
2019年、SwiftUIという新しいUI記述方法が導入されました。
SwiftUIでは宣言型シンタックスを導入し、Appleの各プラットフォームに対し、シンプルなUIコードの記述ができるようになりました。
しかしながら、SwiftUIにない機能を使いたい、あるいはサポートするOSの関係でSwiftUIの導入ができないなど、他の手段でUIを構築することはまだあるかと思います。

そのUIの構築方法の一つであるStoryboardは、GUIベースでのUIデザインツールとしてのイメージを持たれている方が多いと思いますが、UIデザインツールとしての側面だけでなく、様々な機能が盛り込まれています。

- リストア機能を使って、バックグラウンド状態からKillされても元の状態に戻し、ユーザー体験を損なわない
- FirstResponderを使って、手軽にUndo、Redoなどを実装する
- 言語だけではない、ロケールごとの画面遷移方法の設定
- コードとデザインを分離し、iPhone、iPadなどの様々な画面サイズや、tvOSなどのプラットフォームでコードを共通化する
- OSバージョン別にUIをデザインする
- Objectを使って、ViewControllerにコードをFatに書かない、あるいはViewControllerを全く用意しないアプリを作る

など、UIの作成にとどまらない、あなたのコードライティング時間をより多くビジネスロジックに回せるようなStoryboardの活用法をお伝えします。
4
他イベントOK LT(5分)

Firebase Cloud Functionsを利用してUDIDをお手軽に収集する話

knchst knchst0704
Appleプラットフォームでの面倒な作業の一つで開発デバイスの管理があります。
登録したいデバイスをXcodeやiTunesに接続しUDIDを確認する。そしてそれをApple Developerにアクセスして、UDIDと名前を入力して登録する。
これが自分のデバイスなら割とすぐにできますが、もしこれが例えば社内の方の端末だった場合はコミュニケーションコストも時間的なコストも一気に上がります。
今回はこの登録作業を、なるべくiOSエンジニアの手間をかけずにかつ、登録者にとってもXcodeやiTunesにデバイスを接続することなくUDIDを取得し、Apple Developerに登録する仕組みをFirebase Cloud Functionsで実現した話をします!
2
他イベントOK レギュラートーク(20分)

GitHub Actions + Danger-Swiftで快適なコードレビューを

417.72KI 417_72ki
コードレビューを実施していてこういう経験は無いでしょうか?

- Pull Requestの向き先が間違ってるよ〜〜
- Pull Requestに説明文書いてくれ〜〜
- typo残ってるよ〜
- これlint引っかかってない?

Dangerはこのような本質的でない指摘を機械的に実施してくれるツールです。
元々はrubyで書かれたツールですが、色々な言語に移植されています。

従来はこのDangerを導入するのに一癖ありましたが、GitHub Actionsの登場でとても簡単に導入できるようになりました。

本トークでは、Swift製のDanger-SwiftをGitHub Actionsで導入するための手順と、それに伴って踏んできた地雷についてご紹介します。
8
他イベントOK LT(5分)

こんなに簡単でいいの?Magic PodでUIテスト自動化入門

かっくん fromkk
XcodeのUITestは年々進化しており実際に業務で使っている方も多いと思います。
しかし、UIテストを担当のプログラマー以外が書こうとすると障壁になるポイントがいくつもあります。

- Gitでコードをクローンしておく
- Xcodeをダウンロードしてビルドが可能な環境を構築する
- Swift/Objective-Cでテストを実装する
- 都度ビルドが走るので時間がかかる
- コードに変更があったらpullしてデグレの確認
- ライブラリのアップデートの追従

などの問題があります。
これらは普段の開発で慣れているiOS開発者であればまだ良いですが、非プログラマーの人にとってはどれも高いハードルです。
そこでMagic Podというツールを利用することでプログラマーでなくても日々UIテストを改善していくことが可能です。
Magic Podはほぼプログラミング不要のUIテストツールです。
GUIでテストを構築し、実行することができます。
テストに失敗した時も何故失敗したのかスクリーンショットが残っているので一目瞭然です。
まだ試したことの無い人は騙されたと思ってMagic Podを試してみませんか?
5
2019 スポンサー 2019〆切後 資料請求
オンライン対応未決定 削除予定 オンライン対応検討中 要ロゴ 要PR 要支払
仮採択 採択しない スピーカー採択
仮採択(原稿) 採択済 採択しない 仮採択 要審議 ニッチ企画? LT向き加点