採択
2022/09/10 16:40〜
Track A
レギュラートーク(20分)

ノートアプリのテキストエディタの解体新書

fromkk かっくん

note の iOS アプリのテキストエディタはテキストや画像、埋め込みなど様々な要素を入力できます。
また、今年には V4 エディタと呼んでいるエディタの拡張も行い、箇条書きや罫線などのサポートも追加しました。
スクロールする画面に複数の UITextView を入れる UI を作る時に、みなさんはどのように設計するでしょうか?
note の iOS アプリでは伸び縮みする画面を作る方法として、UIScrollView の中に UIStackView を入れて、その中に UITextView を含むビューを配置するように実装しました。
このセッションでは UIKit を活用して、伸び縮みするような画面を作る際の考え方と実装する際に困ったことなどをお話しします。

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

SwiftでのErrorの使い方、

shichimi_0_o keisukeYamagishi

Swiftでのエラーハンドリングの方法を考えてみました。
下記にAppleのErrorのクラスがありますが、これをよしなに使いエラーを便利にしてみたらどうでしょうと考えてみました。
https://developer.apple.com/documentation/swift/error

少し検索してみますと、様々な記事を見かけましたが私なりの方法を検討してみました。

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

依存問題・ルーティング問題をneedleを使って解決する話

kamui_project かむい

DIのOSSであるneedleを使い、マルチモジュール構成におけるモジュール間の依存問題・画面遷移問題に対応した話をします。
依存過多になりがちなSingleton Managerクラスからの依存脱却を行いつつ、導線ごとに必要なインスタンスのスコープを切れるneedleの特徴を活かした画面遷移時の依存解決のお話をしたいと思います。

4
採択
2022/09/12 10:15〜
Track E
レギュラートーク(20分)

ホーム画面を無効化しアプリの切替えを抑止する技術

oishi oishi

iOS端末を業務利用する場面では、ときおり「開発するアプリ以外を使わせたくない」「ホーム画面に遷移させたくない」という要望に出くわすことがあります。例えば、キオスク端末としてiPadを使うような場合です。

本トークでは、そうした要望を満たすiOSの仕組みを3つ紹介します。

  • Guided Access
  • Single App Mode
  • Autonomous Single App Mode (ASAM)

それぞれの前提条件やメリット・デメリット、設定方法や使いどころを比較しながら解説します。3つ目のASAMは、アプリ内から Single App Mode のON/OFFを制御できる興味深いモードで、その実装方法についても紹介します。

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

SwiftUIの時代到来!UIKitは不要!なのだろうか…?

noppefoxwolf noppe

今、iOSアプリの入門者には冬の時代が到来しています。
Appleが自信満々に公開したSwiftUI。果たして、これを学べばiOSアプリエンジニアとして食っていけるのでしょうか?
一方のUIKitは覚えることが沢山あります。AutoLayoutやUICollectionViewを覚えた頃にはUIKitなんて使われていないかもしれません。
そんな不安を少しでも減らせるように、iOSアプリ開発歴12年の私がSwiftUIがどんな立ち位置のフレームワークなのか、UIKitとの使い分け・共存などを徹底分析します。
このセッションを見れば、SwiftUIの使い所や、開発におけるハマりどころを理解できることでしょう。

参考)https://qiita.com/noppefoxwolf/items/7940f5b8b132b825c545

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

あなたの知らないCore Dataの世界

coffeegyunyu 日向強

複雑なユーザーデータを扱うには、アプリ内データベースを使うことは避けられません。
皆さんはどんなデータベースをお使いでしょうか?

iOSで用意されているCore Dataは、OSのバージョンアップごとに、SwiftUIやDiffable Data Sourceを使う上でとても便利で強力な機能が追加されているなど、iOSアプリを開発する上でとても便利です。
しかし、その一方であまりフィーチャーされてない機能、「これどうやって使うんだ」な説明不足な機能があるのも事実です。
「何となく使いづらそう」「他のもので十分」な人も多いかと思います。

そんなCore Dataに関して「こんなこともできますよ」な魅力に溢れた様々な機能を説明していくトークになります。
「へー、こんなことができるんだ」や「使えそう」などとちょっとでも思っていただければ幸いです。

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

SwiftUIにRealmを導入するとViewとModelだけでアプリが作れる話

tomsan96 とむ

iOSアプリで使うデータベースとしては、RealmやCoreDataが有名です。
特にRealmを使ったことがある方は多いのではないでしょうか。
本トークではSwiftUIにRealmを導入して実装する上での知見をお伝えし、みなさんがこの構成でアプリを作るまでの第一歩をサポートします。

昨年、RealmはアップデートでSwiftUIとの親和性が高くなりました。
その結果、データ・バインディングを行うViewModelを開発者が実装しなくても、ViewとModelさえあればアプリを作ることができるようになっています。
どのようなアップデートがされたのか、なぜViewModelに相当するものが不要なのかを解説します。
新しくなったRealmを活用するととても便利なのですが、現状注意しなければならない問題もあるためその回避方法も合わせて説明します。

10
採択
2022/09/10 18:10〜
Track B
レギュラートーク(20分)

CICD構築・自動化入門

kuroruri くろるり

プログラマーの三大美徳の一つと言われる怠惰さを一番発揮しやすい場所はどこでしょうか?
それはCICDを含む自動化の仕組みの構築にあると思います。

ソフトウェアの開発においてCICDはもはや必須です。
ではCICDで得られるものはなんでしょうか?
それは我々が余分な仕事をしなくて済む時間です。
例えば、アプリをビルドするのに自分のPCを何十分も専有され、その間コードは一行も触れないなんてのは嫌なのです。
そんな時間があるなら我々はもっと他にやりたいことがあるのです。
面倒なことは機械が勝手にやって欲しいのです。

本セッションでは今まで面倒な仕事を勤勉にこなしてきた人が明日から怠惰に過ごせるよう、普段の仕事を自動化していくための考え方と進め方についてお話します。
そして導入した仕組みをコスト的に効率良く運用するためにどうすればいいか、導入した後の改善法についてもお話します。

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

Notionを活用したユーザー行動ログと自動生成

satoshin21 satoshin21

我々はプロダクトをより成長させるために、我々は常にユーザーの行動ログを元に検証し、仮説をたて次の改善に繋げています。
ですが、ユーザーの行動ログを実際に運用し始めるとログに関する仕様書が作成、更新されていなかったり、各職種とログに対する認識齟齬が発生したりと様々な問題が発生します。

我々はこれらを解決すべく、普段ドキュメントやタスクの管理で使っているNotionを活用しログ仕様書の作成とコードの自動生成を実装し運用しています。今回はその実現方法と得られた恩恵についてお話します。

  1. 行動ログ管理の課題
  2. なぜログのドキュメント管理にNotionを選んだのか?
  3. Notion Databaseの設計
  4. SwiftPMで作るCLI Tool
  5. Notion APIとStencil
  6. ドキュメントの更新と自動生成フロー
3
レギュラートーク(20分)

iOSではじめるWebAR 2022

ikkou HEAVEN chan / ikkou

iOSDC Japan 2019、2020と続けて発表している『iOSではじめるWebAR』の最新版です!

そんなに毎年目新しい発表はあるの?と思われる方がいるかもしれませんが、例えばひとつ大きなトピックを挙げるなら『iOS 15.4でWebXR Device APIに“限定的に”対応』しました!さてそれでどうなったのか?それからどうなったのか?

この1年間の関連するアップデートを振り返りつつ、SafariにおけるWebARの動向をお伝えします。
具体的には次のようなトピックスを想定しています。

  • iOS 15.4で限定的に対応したWebXR Device APIのその後
  • iOS 15で追加された実験的要素<model>の実態
  • iOSにおけるWebARコンテンツ開発の最新動向
  • iOSでも動くWebARを用いた最新事例
7
採択
2022/09/10 18:45〜
Track D
レギュラートーク(20分)

令和時代のXML処理を考える 〜もしあなたが巨大なXMLと相見える(あいまみえる)ことになったら〜

coffeegyunyu 日向強

アプリがネットワークなど外部サービスを通じてデータをやり取りすることはもはや当たり前になっています。
そのデータの代表的な形式としてJSONがあり、これはSwiftではCodableを通して簡易に変換することができます。

しかしデータ形式というものはJSONに限らず様々なものがあり、例えばXMLもその一種です。
「iOSにはXMLParserというものが用意されているから、ドキュメント見ながら実装すれば余裕っしょ」
もし、そのドキュメント通りに動作しなかったらどう思いますか?

このトークは、XMLを処理するにあたって、XMLParserを中心に、iOSでできること、できないことを洗い出していかに効率的に処理ができるかを突き詰めるトークとなります。

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

M1対応プロジェクトと非対応プロジェクトを行き来するためのRosetta 2切り替え術

417_72ki 417.72KI

M1 macの登場から1年半が経過し、今ではストアのラインナップからIntel macが消えました。
しかし未だにM1対応されていないライブラリやプロジェクトが多々あります。
M1環境でもそういったプロジェクトで開発するために出てくるのがRosetta 2ですが、現状このRosetta 2の切り替えはGUI上でしか行なえません。
これでは複数の開発が同時進行している場合非常に不便です(え?そんな状況は無い?)。

本トークでは、Appleの非公開APIと黒魔術を利用してRosetta 2のオン/オフを切り替えるツールの開発を通じて得た知見を紹介します。

話す内容

  • Rosettaについて
  • Objective-CとSwiftの混合パッケージの作成方法
  • Rosettaのオン/オフを切り替える非公開API
  • LaunchServices.plistについて
8
レギュラートーク(20分)

SwfitUI時代の状態管理アーキテクチャの新潮流を捉える!

kara_mage karamage

SwiftUIのアプリ開発において、状態管理をどうするか、という問題があります。


宣言的UIであるSwiftUIの登場により、SwiftUI時代に合った状態管理アーキテクチャを検討する必要があると感じています。

現在、 SwiftUI開発でのデファクトスタンダードな状態管理アーキテクチャと呼べるような何かは存在せず、試行錯誤している段階なのかなと思います。

そこで、このセッションでは、SwiftUI時代における以下の4つの状態管理手法について比較検討し、状態管理の新潮流を捉えたいと思います。

・MVVM
・The Composable Architecture(TCA)
・ReSwift
・SwiftHooks & RecoilSwift

9
採択
2022/09/12 10:15〜
Track D
レギュラートーク(20分)

iOSにおけるWakeword検知機能の実装

iganin_dev 伊賀 裕展

株式会社エクサウィザーズが提供する介護記録アプリ「CareWiz ハナスト」は、
フォアグラウンド状態において有効な独自のWakeword検知機能と音声によるアプリ操作機能を備えています。

Wakeword検知を行うためには常時音声を取得する必要性があり、独特な実装を行い問題に対処する必要があります。
本セッションでは、Wakeword検知機能の実装を中心に下記の内容をお伝えする予定です。

Wakeword検知
・Wakeword検知の方法
・アプリでの実装
・SoundAnalysisを用いた精度向上

常時録音に伴う問題と対応
・イヤホンの脱着などの音声インプットの変更
・電話などによる中断

音声によるアプリ操作
・音声とアプリの操作の連携
・Wakewordから自由発話認識への連携

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

みんなが幸せになるErrorを考える

coffeegyunyu 日向強

iOSに限らず、アプリはいつもと同じように使っていても、ユーザーの環境はたまたアプリの状態など、様々な原因によってエラーが発生します。エラーハンドリングをアプリ側で行なった後、アラートやテキストなどでユーザーに伝えることは多いと思います。

  • 「エラーが発生しました」
  • 「原因不明のエラーです」
  • 通信に問題がないはずなのに「通信エラーです」

これらのエラーメッセージは、どうやったらエラーの状態から抜け出せるかわからず、お問い合せをいただいても解決できない場合がほとんどです。

このトークでは、エラーのハンドリングについて、どうやったらハンドリングしやすいエラーの仕組みが作れるのか、またErrorはどのように利用するのが望ましいのか、AppleのクラスやAPIデザインに着目し、ユーザー、サービス、開発者全てが幸せになる、簡単で鮮明なエラー作成をみんなで考えるトークになります。

12
採択
2022/09/12 10:50〜
Track C
レギュラートーク(20分)

SwiftUI in UIKit で開発する世界

hcrane14 Hiromu Tsuruta

【概要】
SwiftUIが登場してから3年が経とうとしています。

古いOS対応もあり、すぐに導入できなかったアプリも多かったでしょう。
そんな中、新規のアプリを全てSwiftUIで構成した例も増えてきました。

しかし、現実問題として既存の多くのアプリはUIKitで構成されています。
この資産を活かしつつ、どのようにSwiftUIと歩んでいくのかを考えていく必要があります。

今回はそんな悩みを抱えつつ、私達のプロダクトで行なってきた共存の仕方をご紹介していきます。

【目次】
1.SwiftUIとUIKit
-SwiftUIの強みと弱み
-実装判断の基準
-責務の分け方

2.アーキテクチャー
-既存のアーキテクチャー
-SwiftUIとUIKitのアーキテクチャー共存

3.課題
-共存の向き・不向き
-車輪の再発明
-実装において注意すべき点

※内容が前後する可能性があります

採択
2022/09/10 18:45〜
Track E
レギュラートーク(20分)

広まれSafari Web Extensions!Safari Web Extensions の始め方

base_front matsue

iOS 15 から Safari の拡張機能である Safari Web Extensions の開発が出来るようになりました。
すでに素晴らしい拡張機能がいつかかリリースされているものの、まだまだその数が少ないように感じます。
そこで今回は Safari Web Extensions の開発が広まるように、その始め方を紹介します。
具体的には、Safari Extension App のテンプレートの中身を解説しつつ、ある要素をHTMLから削除する拡張機能を作るまでの手順を紹介します。
Safari Web Extensions の持つ可能性を感じて頂ければと思います。

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

Core ML Toolsにコミットしつつ、Pytorch製深層学習モデルをCore MLで動かそう

fukafukatani 深谷

モノグサ株式会社では記憶アプリMonoxerを開発・リリースしています。
iOS版のMonoxerで深層学習モデルを使うために、Core ML Toolsを使ってPytorch製のモデルをCore MLで動作するモデルにコンバートする必要がありました。
Core ML Toolsを使ってみるとわかりづらいポイントや、モデルが未サポートの演算を含んでおりモデルをコンバートできないといったことがありました。
そこでこのトークでは、Core ML Toolsをスムーズに使う方法や未サポートの演算をどうすればサポートできるかをシェアします。

  • Core ML / Core ML Toolsの概要
  • Core ML Toolsの基本的な使い方
  • Core ML Toolsがうまく動かなかった時
  • Core ML Toolsに未サポートの演算を追加するには
6