採択
2023/09/02 16:15〜
Track A
レギュラートーク(20分)

ソーシャルログイン機能のデバッグ地獄をくぐり抜けてリファクタリングした話

taka1068 Takanori Hirobe

今日のモバイルアプリはログイン機能を持つものが多いですが、プロダクトの成長に伴って複数のソーシャルログイン機能を導入することは少なくありません。私たちが担当する出前館アプリもその一つです。
我々の今後の開発予定を考えると、ソーシャルログイン機能の改修が必要でした。しかし、その仕様に関するドキュメントやデバッグ方法のナレッジが不足している、という大きな課題がありました。そこで我々は各ソーシャルログイン機能に対してデバッグ作業を地道に進めつつ、ドキュメントの整備を進めました。

本セッションでは我々が取り組んだソーシャルログイン機能リファクタリングに関する苦労話とそれによって実現できた機能改善事例のご紹介をします。プラットフォームの特性上、iOSアプリはソーシャルログイン機能が増えやすい事情があると思います、同じような悩みを持つ方々の参考になれば幸いです。

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

C++ interoperabilityはC++をSwiftに書き換えられるか?

himeshi_tech ひめし

Xcode15から搭載のSwift5.9において、C++ interoperabilityがついに正式にサポートされました。この機能によって、SwiftとC++を単一プロジェクトに混在させることが可能になります。今こそあなたの既存のC++コードを、読みやすく安全なSwiftコードに書き換える時だと言えるでしょう。
しかし現在のC++ interoperabilityには、継承および参照タイプのメモリ管理方法に対して制約が存在します。これは、現状仮想関数およびmove関数を扱うことができないことによるものです。
そこで本トークでは、現状どのようなケースであればC++ interoperabilityでSwiftへの段階的移行が可能であるかを解説します。現在の制約がC++からSwiftへの書き換えに与える影響を分析するとともに今後この制約がどうなっていくのかを考察していきます。

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

UIKitのアプリにSwiftUIを導入する実践的な方法

noppefoxwolf noppe

SwiftUIは、iOSアプリを簡単に作成することができるフレームワークで、最近ではiOSアプリ開発の主流となりつつあります。
SwiftUIを使うことで、コードの可読性が高くなり、アプリ開発の効率も上がります。

このトークでは、SwiftUIをUIKitで作られたアプリに上手に取り込んで、より簡単にアプリ開発を行う方法を紹介します。

トークの内容は、スピーカーの開発しているSNSアプリ「Nightfox DAWN for Mastodon」の実際の開発を通して得た情報をベースにしています。
そのため、データのバインディングや、ビューやレイアウトの共存などの基本的なところから、SwiftUIを使うべきで無い部分などの実践的を具体例を踏まえてお話しします。

質疑応答では、あなたの作っているアプリに関してSwiftUIをどのように取り込めば良いのかをディスカッションします。

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

一つのリポジトリから複数アプリの動的ビルド・リリースを実現する手法

marcy731 marcy731

「STORES ブランドアプリ」は、アパレルショップやコーヒーショップなど、各ブランド毎のオリジナルアプリを構築・提供するサービスです。
毎月複数の新規アプリ作成を行いリリース、また新機能を実装するたびに既存のアプリのアップデートを頻繁に行なっています。
これらを自動化するために、XcodeGenに環境変数を用いることで一つのリポジトリからアプリ毎のxcodeprojファイルを動的に作成しビルドする仕組みをCI/CDパイプライン上に構築しました。

このトークでは、一般的なアプリ開発にも応用できるXcodeGenとCI/CDを駆使した効率的なアプリ開発・リリース手法を解説します。

内容:

  • XcodeGenと環境変数を用いた複数アプリの動的ビルド手法
  • Bitriseパイプラインを利用した複数アプリの並列配布
  • AppStoreConnectAPIKeyのような秘密鍵の安全な管理
4
採択
2023/09/01 18:45〜
Track A
レギュラートーク(20分)

ステートマシンを活用したWebView-ネイティブ間連携へのアプローチ

marcy731 marcy731

「外部のECサイトをアプリに組み込んで、会員情報・認証情報をアプリと同期させたい」
上記は「STORES ブランドアプリ」で実際に行ったEC連携の事例ですが、WebViewとネイティブ間のデータ連携は珍しくない要件だと思います。
このような場合、WebView内の特定アクションや遷移をネイティブ側でフックする必要があります。
登録・ログイン・SNS連携などの挙動ごとのハンドリングに加え、バックエンドとの連携も重なると、とても複雑な状態管理が求められます。

このトークでは、WebView-ネイティブ間連携を必要とする多くのアプリの複雑な状態管理の荒波を、ステートマシンという羅針盤を駆使することで乗り越える指針を示します。

内容:

  • WebView-ネイティブ間連携の基礎知識
  • WebView-ネイティブ間の認証同期の課題
  • ステートマシンを活用した状態管理
  • 具体的な実装方法
レギュラートーク(20分)

デザイントークンことはじめ〜カラートークンの命名設計とアプリへの組み込み方法〜

gaussbeam HANYU, Koji

デザイントークンは、色やタイポグラフィなど、UIを構成する最小単位となるものである。
デザイントークンを用いることで、職種やプラットフォームの壁を越えて、アプリUIの設計・実装を円滑に進めることができる。

本トークでは、デザイントークンの概要とその構造(Global tokenとAlias token)について説明する。
また、Asanaにおけるデザイントークンの運用を参考に、カラートークンの設計方法についても述べる。
加えて、実践的な内容として、Token Studio for Figma と Style Dictionaryを用いた、アプリ開発への組み込み方法と注意点についても解説する。

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

Snackbar on iOS ~VIPERアーキテクチャにおける実装のポイントと改善効果~

gaussbeam HANYU, Koji

SnackbarはMaterial Designでも定義されているコンポーネントである。一方でHuman Interface Guidelines には定義されていない。
Snackbarには、ユーザの操作に応じた短いメッセージを素早く表示するのに適しているといった利点があり、iOSアプリにも組み込むことで、操作完了時やエラー時のメッセージのやり取りをスムーズに行える効果が期待できる。
本トークでは、Snackbarの基礎や効果を整理して解説するとともに、VIPERアーキテクチャをベースとしたiOSアプリにおけるSnackbarの設計・実装のポイントについて解説する。

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

iOS Simulatorを使ったUIテスト(XCUITest)を分割・並列実行して高速化させよう

根本 征

iOSアプリケーション開発において、ソースコード・自動テスト・開発規模が大きくなっていくと、CI/CD におけるビルド・テストの実行時間は長くなってしまい、結果として開発スピードを低下させてしまいます。
特に XCUITest などのUIテストでは、iOS 実機や iOS Simulator を動かしてテストを実行する必要があるため、実行時間が長くなりがちです。
このセッションでは、iOS Simulator を使ったUIテスト(XCUITest)をCircleCIで分割・並列実行することによって、実行時間を大幅に短縮する方法についてご紹介します。
・UIテスト(テストピラミッド) / XCUITest とは?
・UIテストをメンテナンスする上での課題とは?(環境、実行時間、不安定、メンテナンスなど)
・CircleCIを使って UIテスト(XCUITest) を分割・並列実行する方法

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

君は完璧で究極のエディター 〜NeovimでSwiftを書く〜

the_uhooi uhooi

「エディタを好きになることなんて私分からなくてさ」
嘘か本当か知り得ない
そんな言葉にまた一人堕ちる
また好きにさせる

誰もが目を奪われてく
君は 完璧で究極の

エディター!!!!!


「Neovim」とは、Vimから派生したテキストエディタです。
素晴らしいエディタですが、SwiftをNeovimで書いている人は世界的にも非常に少ないです。

私はNeovimが好き過ぎて、SwiftをNeovimで書くことに挑戦しています。
そこで見えてきたXcodeとの違いを紹介しつつ、Neovimの魅力を思う存分に語ります。

【話すこと】
・Neovimの概要と魅力
・Xcodeとの比較
私のNeovim環境紹介とライブコーディング(ここがメイン)


Neovimは私にとってのアイドルです。
この気持ちは絶対嘘じゃない!

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

iOS開発初心者のチームリーダーがアプリ開発を理解するために勉強会で翻弄した話

inakam00 inakam

ニフティ株式会社でニフティニュースというサービスの開発リーダーをしている中村です。
ニフティニュースというサービスではアプリ開発も行っているのですが、自分自身は機械学習のエンジニアリングが専門のため、アプリ開発は本職の別のエンジニアにずっと任せていました。
しかし、ある時に一念発起して「アプリ開発を理解できるようになりたいな。まずはiOSアプリ開発なのかな。」と思い立ち、最新のiOSアプリ開発を社内勉強会で勉強し始めました。

今のモダンなアプリ開発とは何なんだろうか?
MVVM、リアクティブプログラミング、SwiftUI、TCAなど、アプリエンジニアではなくWebエンジニア出身のエンジニアがどのようにしてアプリ開発を理解していったのか、その過程を発表します。

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

逆引きKotlin Multiplatform 〜Swiftに対応するKotlinの機能と、KMMによる変換後の実態〜

marty_suzuki marty-suzuki

Kotlin Multiplatformは、Kotlinで記述したAndroid・iOS向けの共通ソースコードからiOSのFrameworkを出力でき、iOSアプリプロジェクトに取り込むことで利用できます。
しかし、Kotlinで実装しなければならないため、試してみようと思ってもハードルがあるかと思います。

本トークでは、Swiftの任意の機能からKotlinの対応した機能を逆引きして解説しながら、それらの機能がFrameworkとして出力されるとSwiftからどのようにアクセスできるのかについても解説します。
例として、「SwiftのenumのAssociated Valueは、Kotlinだと何になる?」「それがFrameworkとして出力されるとどうなる?」などを話していきます。
皆さんがKotlin Multiplatformに触れるきっかけとなるトークになれば幸いです。

5
採択
2023/09/03 14:30〜
Track A
レギュラートーク(20分)

iOSのKeyboard Extensionで日本語入力できるキーボードアプリを作ろう!

miwa_ensan Miwa

iOSのKeyboard Extensionは、ソフトウェアキーボードを独自に開発し、配布できる機能です。
キーボードを自作する上で大きな問題が日本語入力です。標準のAPIはないので、自力でどうにかする必要があります。

私はキーボードアプリ「azooKey」をiOSでリリースし、2年以上にわたって開発・運用を続けてきました。azooKeyでは日本語入力機能をSwiftで独自に実装しています。
さらに、「学習」「ユーザ辞書」「ライブ変換」「着せ替え」「キーのカスタマイズ」など、さまざまな便利な機能を実装し、多くの利用者に実用してもらえるレベルのアプリに仕上げています。

本トークでは、このazooKeyの開発・運用の経験から、日本語入力の仕組みやSwiftによる実装、さらにキーボードアプリにして配布する方法までを解説します。皆さんも日本語入力できるキーボードアプリを作ってみませんか!?

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

時短勤務のエンジニアがひとりで10万ユーザのSNSアプリのiOS開発を3年間続けた方法

sakiyamaK 崎山圭

入れ替わり立ち替わりのフリーランスエンジニアの方々が残してくれた画面ごとに共通化されていない実装!
肥大化していったUIKitのプロジェクト、複雑化するViewModel!
レイアウトを調整する度に発生するビルドの待ち時間!
それらの様々な課題にどう立ち向かい乗り越えてきたか!?
サービスはどんどん成長していく中で、時短勤務のエンジニアがSwiftUIやSwift Concurrencyのような最新技術を調査して取り入れて必ず起きるトラブルに対応する暇はない!
WebやAndroidチームに遅れを取らないよう既存資産をなるべく活かすよう試行錯誤していって出来上がったプロジェクト構成とは!?
まだまだSwiftUIを取り入れられないUIKitのプロジェクトの現場も多いでしょうし、そんな現場で開発ペースをあげるためのきっかけになると幸いです

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

デリバリーアプリ「出前館」が取り組んできたデザインシステム構築のトライ&エラー

_mhashimoto ハシモト

長らくユーザにご利用いただいている弊社アプリは、これまでの長い歴史の中で多くの追加開発が行われてきました。
その結果、アプリ全体のUI・UXに統一性がない、というデザイン面での課題に直面しました。
そこで私たちは昨年からデザインシステムを導入するプロジェクトを進め、その課題へのアプローチを始めています。

本セッションでは、その構築の過程で見つけた知見を共有させていただきます。
社内でデザインシステムを一緒に作る仲間集めをしていた際の苦労や、実際に作業を始めた際に陥ったデザイントークンの設計に関する落とし穴など、プロジェクトマネジメントやチームビルディング、そしてデザインシステム設計時に試行錯誤した事例をお伝えします。

デザインの話が好きな方、デザインシステムに興味のある方、そしてこれからデザインシステムを作ることを検討している方の参考になれば幸いです。

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

2年前のiOSアップデート内容を振り返ろう!

ynoseda 野瀬田 裕樹

今年のWWDCでもiOS17の各種アップデート内容について色々と発表され、大いに盛り上がりました。
しかし、その発表内容の多くがiOS17+のAPIのため、実際に実務で開発しているプロダクトへの導入はまだまだ先だなと感じている方も多いでしょう。

しかし、古いiOSをサポートしているプロダクトでも、まだまだ活用しきれていない一昔前の革新的な機能や改善点があるはずです。
このセッションでは、少し前のiOSアップデートにフォーカスし、そういった未発掘のポテンシャルを探ります。
具体的には、iOS 14やiOS15あたりのバージョンにスポットを当て、どういったアップデート内容があったのかを振り返ります。

4
採択
2023/09/02 15:40〜
Track C
レギュラートーク(20分)

小さなバグが生んだ悲劇、そこから学ぶ耐障害性の高いアプリ設計

kamekiti Yosuke Imairi

概要

アプリの歴史が積み重なっていくと内部ロジックはどんどん複雑化していきます。

時として、予期せぬバグが生み出され、それが大きなトラブルに繋がることもあります。

突発的に発生しうるトラブルに対して、アプリとしてはどういった仕組みを準備しておけばよいのでしょうか。

我々のアプリで実際に発生した悲劇のエピソードとともに、トラブル時も適切に対処できるような、耐障害性の高いアプリの実現に向けてみなさんと考えていきたいです。

発表内容

  • 小さなバグが生んだ悲劇
  • より良いメンテナンスモードの設計
  • 強制アップデート機能の設計とその勘所
  • どうすれば障害を防ぐことができたのか
    • 目にみえないバグへのアプローチ
  • 現状の課題と今後の展望
採択
2023/09/03 11:00〜
Track D
レギュラートーク(20分)

SwiftでゼロからRTMPライブラリを実装してみた

huiping192 郭輝平

Real Time Messaging Protocol (RTMP) とは、Adobe が開発している、Adobe Flash プレーヤーとサーバーの間で、音声・動画・データをやりとりするストリーミングのプロトコル。
YouTube LiveやTwitchなどのライブストリーミングサービスで広く使用されています。

AppleのプラットフォームではRTMPプロトコルがネイティブにサポートされていないため、librtmpライブラリの使用が一般的ですが、私はSwiftでの実装に挑戦しました。
このトークでは、Swiftを用いてRTMPライブラリをゼロから設計し、実装した経験を共有します。
特に難しかった挑戦、それにどう対処したか、そしてプロジェクト全体を通じての学びを詳しく紹介します。

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

MetalとMorphologyを駆使した麻雀牌分類術

horita_yuya horita_yuya

AppleのGPU向けプログラミングインターフェースMetalと、画像処理で一般に用いられる形態学(Morphology)を駆使し、麻雀牌の画像からその種類を見分けることに挑戦します。

「分類」と聞くと、機械学習や学習データが必要なのでは?と思う方もいるかもしれませんが、今回はあくまで画像処理だけのアプローチにこだわります。 (学習データなどは使いませんが、いくつかの制約を課します。)

宜しくお願いします。

(本セッションを聞いて下さる方へ: 麻雀のルールを知らなくても全く問題ありません。)

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

iOSアプリでCore ML Stable Diffusionを使ったAIの組み込み方

tsuzuki817 Ryo Tsuzukihashi

このセッションを通じて、Core ML Stable Diffusionの利用方法を簡単に深く学び、iOS上でAIを活用することができるようになります!
わくわくするAIの世界を楽しく体験しましょう!

  1. Core ML Stable Diffusionとは何か?
     どのように機能するのかを、専門的な言葉をなるべく使わず基本概念やメリットを理解できるように解説します。
  2. 手順と実践例
     具体的な手順と実際のコード例を通じて、iOSアプリに組み込む方法を学びます。
  3. デモとエクササイズ
     参加者が自身のデバイスで手軽に試せるデモやエクササイズを用意します。
  4. ユーザーエクスペリエンスのアイデア
     Core ML Stable Diffusionを使って実現可能なユーザーエクスペリエンスのアイデアを共有します。
2
採択
2023/09/03 10:25〜
Track D
レギュラートーク(20分)

Human Interface Guidelinesから読み解く標準アプリの素晴らしい体験

k_torishima Koji Torishima

みなさんHuman Interface Guidelines読んでますか?
HIGにはAppleのプラットフォームで優れた体験を生み出すための豊富な知識が詰め込まれたガイドラインです。
2022年6月以降内容をアップデートしさらにパワーアップしております。WWDC2023ではついに日本語にも対応しました。
そんなHIGですが、なかなか量が多く、読むのに時間がかかります。忙しい開発者の方々は呼んでる時間なんてないよ😭という人も多いでしょう。
そんな方に向けて本稿では特に私が大事だと感じた部分を抜粋し標準アプリの実例を備えて解説させていただきます。
・ 標準アプリの実例を踏まえて大事だと思ったところを説明します。
・ すぐにでも明日の開発に役立つよう業務に役立つ内容に焦点を当てます。
・ 実際にアプリケーションを開発する上で役に立った点などを説明いたします。