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

ユーザ個別にアップデート可能なMLモデルを活用した筋トレ自動計測アプリの開発

tabinnpo Naoya Matsuda

Appleが提供する機械学習フレームワークであるCoreMLと、そのモデル生成に使用されるCreateMLを用いて、ユーザ個別に最適化された筋トレ自動計測アプリを開発しました。

一般的な流れでは、データセットとXcode付属のCreateML(GUIツール)を使用してモデルを作成し、CoreMLを用いてiOSアプリに導入することが一般的です。

しかし、以下の方法を用いることで、アプリ内でモデルの新規学習や追加学習を完結させることが可能です。

  • 新規学習: 一部のモデルは、アプリ内でCreateMLから直接学習可能です。
  • 追加学習: Updatableなモデルは、アプリ内でCoreMLのMLUpdateTaskを使用して追加学習が可能です。

これらの方法は、特に”ユーザ依存性の高いコンテンツ”の開発に有効です。今回は、Updatableなモデルを使用して、端末のセンサーデータを基にユーザ定義の筋トレメニューの実行回数を自動計測するアプリを開発しました。

このテーマは開発だけでなく、研究的な要素も含んでいます。以下の内容についてお話しします。

  • アプリ内部でのCoreMLモデルの追加学習の手法
  • センサーデータ(時系列データ)を用いたモデルにおける判定精度向上の研究
    • 学生時代に近しい研究をしていた際のノウハウ
2
レギュラートーク(40分)

iOSアプリ開発における非同期処理の歴史と現在

enomotok_ Kenta Enomoto

非同期処理は、プログラミングにおける難題の一つとしてよく挙げられます。これはiOSアプリ開発においても同様です。黎明期から非同期処理は存在し、また開発者の頭を悩ませ続けてきました。

本トークでは、iOS開発における非同期処理のこれまでの歴史と進化について紐解きます。非同期処理のパラダイムがどのように進化してきたかを知ることで、最新のSwift ConcurrencyによるAPIが過去の課題をどのように解決しているかを深く理解することができるでしょう。

まず、非同期処理の基本概念とその重要性を簡単に紹介します。次に、iOS開発における非同期処理の歴史を振り返り、Grand Central Dispatch、操作キュー、Promiseなどの主要な技術の導入と進化を時系列で説明します。その後、現在主流となっているSwift Concurrencyに焦点を当て、その特徴と利点を過去の技術と比較しながら解説します。

このトークを通じて初学者や中級者の方が様々な非同期処理のパラダイムに触れる機会を作り、新鮮な視点でSwift Concurrencyに向き合うきっかけを提供します。

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

AVFoundationでiOS標準風の操作感を持つカメラアプリの自作方法

LabosPiyoko 実験室のピヨコ

皆さんはカメラアプリを実装したことがありますか?
iOS標準の操作感を持つカメラを簡単に実装するなら、UIImagePickerControllerが便利です。
一方で、シンプルに撮影する機能だけで良い場合や、カスタマイズが必要な場合、AVFoundationを選択することが多いでしょう。

SPIDERPLUSでは、UIImagePickerControllerで実現できない要件があり、AVFoundationを使用してiOS標準風の操作感を持つカメラを自作しました。
本トークでは、AVFoundationでiOS標準風の操作感を持つカメラを実現するまでの過程について詳しくお話しします。

<トピック>

  • iOS標準風の操作感がなぜ重要か?
  • UIImagePickerControllerで実現できなかったこと
  • iOS標準風に感じる操作感の具体的な機能とは?
  • AVFoundationを使ってiOS標準風の操作感を実装する方法
3
ルーキーズLT(5分)

Spotlight上でアプリを見つけやすく!CoreSpotlightとINAlternativeAppNameの強力コンビ

Mike_Regain 近藤米功

皆さん、iPhoneのSpotlight機能をご存知ですか?

MacのSpotlight機能は多くの方が利用していますが、iPhoneにもSpotlight機能が存在します。
Spotlightを活用することでユーザーにとってアプリを見つけやすくすることができます。
そしてアプリの検索性を高めるために重要なのがCoreSpotlightとINAlternativeAppNameです。
例えば、レシピアプリを開発している場合、ユーザーが「美味しい料理」と検索することで、あなたのアプリがSpotlight上でヒットするように設定できます。

このトークでは以下の内容をカバーします:

  1. CoreSpotlightとINAlternativeAppNameの概要と基本的な実装方法の説明
  2. 検索キーワードの種類を増やし、Spotlight上でアプリの表示頻度を上げる方法を実際の実装例を交えて説明します
  3. CoreSpotlightとINAlternativeAppNameの利点・欠点の比較

このセッションを通じて、CoreSpotlightとINAlternativeAppNameを駆使し、皆さんのアプリをより多くのユーザーに届けましょう!

6
LT(5分)

ローカルプッシュ通知で実現するスマートアラーム機能

_nkmrh nkmrh

iOS アプリにおいてユーザーエンゲージメントを向上させるためには、ローカルプッシュ通知の活用が重要です。
ローカルプッシュ通知は、デバイス上で直接スケジュールされるため、即座に実装でき、効果的に使用することで、ユーザー体験を大幅に向上させることができます。
このトークでは、具体的なスマートアラーム機能の実装方法と、その効果を高めるための戦略を紹介します。

トーク内容

  • ローカルプッシュ通知の基本概念と仕組みを理解する
  • スマートアラーム機能の概要
  • 具体的な実装方法
  • 効果を高めるための戦略
LT(5分)

「UIは英語なのにアプリ内リンクを開くと日本語サイトだ!」を防ぐコツ

FromAtom FromAtom

スマホアプリでは利用規約やプライバシーポリシーなど、静的URLを利用することがよくあります。
多言語対応をしないのであれば、URLをベタ書きしてしまえば良いのですが、言語によってURLを変更したい場合には翻訳機能を利用するでしょう。

しかし、翻訳の実装を間違えてしまうと英語設定のアプリで日本語ページのURLを開いてしまい、ユーザー体験を損ねてしまいます。
URLの指定ミスは見た目ではわかりにくく、クラッシュやエラーも発生しないため、問題に気づきにくいです。

このトークではString Catalogを利用して静的URLの翻訳を管理し、
さらにそれをUnitTestで検証することで、ユーザー体験を損ねないようにする方法についてお話します。

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

Explore Swift Code Generation

_rockname 岩名勇輝

Swift5.9ではSwift Macrosが導入され、マクロによるコード生成が可能になりました。

また、マクロの実装時に用いるSwiftSyntaxは、それ単体でコード生成の仕組みを提供しており、Build Tool Pluginと組み合わせればビルド毎にマクロよりも自由度の高いコード生成を行うことも可能です。

私が開発したSword (https://github.com/rockname/sword) というDIコンテナのライブラリでは、この両者のコード生成の仕組みを併用しています。

本トークではSwordの開発から得られた知見をもとに、Swift MacrosおよびSwiftSyntaxにおけるコード生成にはそれぞれどのような特徴があるのか具体的なコードを交えながら説明し、それぞれが活きる利用パターンについて体系的にお話しします。

本トークを通じて聴講者のみなさまが、コード生成によりどのような課題を解決できるのかより鮮明にイメージできるようになり、プロダクトやライブラリの開発へすぐに活かすことができるようになることを目指します。

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

iOSアプリ開発におけるDIへの理解を深める

_rockname 岩名勇輝

Dependency Injection(DI)とは、オブジェクトに必要な依存関係を外から注入する設計パターンです。オブジェクト間の依存を疎に保つことで、コードを再利用しやすくなり、保守性を高めることができます。

Androidアプリ開発ではDagger(Hilt)というDIライブラリの使用が推奨されていますが、iOSアプリ開発においてはまだまだデファクトスタンダードと呼べるDIライブラリは存在しません。

そこで私はSword (https://github.com/rockname/sword) というDaggerライクなiOS向けのDIライブラリを開発し、Swift Macros等の言語機能を活用したコード生成による静的なDIのアプローチを探求しました。

本トークでは、そもそもDIとはどのような設計パターンであるかを説明しつつ、Androidアプリ開発におけるDaggerによるDIのアプローチについて具体的に紹介します。その上でiOSアプリ開発においてはどのようなDIのアプローチが考えられるのか、Swordの開発から得られた知見をもとにお話しします。

本トークを通じて、iOSアプリ開発における最適なDIのアプローチについてみなさんの考えるきっかけやヒント、あるいは答えを提供できれば幸いです。

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

Webバックエンドと仲よくするためのiOSアプリの書き方

cockscomb 加藤 尋樹

現代のiOSアプリ開発において、Web APIとの連携は避けて通れない重要な要素です。本トークでは、HTTPの標準を上手に利用する方法を中心に、効率的で信頼性の高いWebバックエンドとの通信方法を探ります。また、RESTfulなアプローチだけでなく、GraphQLなどの新しい技術を活用したデータ取得の方法についても解説します。

主なトピックは以下の通りです:

・HTTPの基本と効果的な利用法
・RESTful APIの設計と実装のベストプラクティス
・iOSアプリでのエラーハンドリングとリトライ戦略
・GraphQLの基本概念とiOSアプリでの導入事例
・バックエンドに優しいアーキテクチャ

このトークは、iOSアプリ開発者がWebバックエンドとの連携をより円滑にし、アプリの信頼性とパフォーマンスを向上させるための具体的なアドバイスと実践的な知識を提供します。初心者から中級者まで幅広いレベルの開発者に役立つ内容となっています。

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

モバイルアプリ開発における新旧バージョンとの向き合い方

_rockname 岩名勇輝

モバイルアプリ開発では、たとえ新しいバージョンをリリースしてもいきなり全ユーザーが最新バージョンのアプリを利用するようになるわけではありません。旧バージョンを利用し続ける人も一定数いるため、我々は新旧バージョンにおけるデータの互換性や将来想定される仕様変更に対する拡張性を意識しながら設計していく必要があります。

例えば、アプリに永続化したデータの構造を新バージョンで変更する場合やサーバーから取得するレスポンスのフィールドに新しい要素を追加する場合、さらには旧バージョンで不具合が生じたときに新バージョンへの更新を促したい場合など、新旧バージョンと向き合わなければならないケースというものは多岐に渡ります。

すべてに対して丁寧に対応していくことも可能ですが、考慮しなければならないパターンが多く、ある程度折り合いをつけながら落とし所を探っていくことも重要です。

本トークでは、この新旧バージョンと向き合って開発していく上での戦略的な設計方針から、具体的に求められる戦術的な実装パターンまでを、体系的にお話しします。

2
ルーキーズLT(5分)

SwiftUIでの図形描画と手書き文字入力の実現方法

gurensouen オダギリ133

SwiftUIが発表されてから早5年が経ちました。皆さんのプロダクトにもSwiftUIが採用されているのではないでしょうか。

我々は2年前から、SwiftUIを用いて図形描画や画面に直接触れて文字を書くといった機能を実装してきました。
これらの機能は、ユーザーインターフェースの向上や特定のアプリケーションでの必須機能として求められているからです。
本LTでは、SwiftUIを使った図形や文字の描画を実装する際の勘所をメインにお話しします。特に、以下のトピックに焦点を当てます。
・図形描画の際に直面した技術的な工夫
・画面に直接文字を書く際の工夫

これらのトピックを通じて、皆さんがSwiftUIでお絵描きするのって簡単なんだと感じてもらえれば、嬉しい限りです。

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

古いiMacを再利用してCI/CDマシンとして活用する方法とその具体的な効果

パッタイ大好き

iOSでチーム開発をしていると、iMacやMacBookを数年おきに買い替えることが多いかと思います。
その際、使用しなくなったがまだ動作するMacマシンの使い道に困っている方はいませんか?

このトークでは、古くなったiMacの具体的な有効活用方法についてご紹介します。

弊社での活用事例としては、以下の方法があります。

  1. CI/CDマシンとしての活用
    古いiMacをCI/CD専用のマシンとして利用することで、新しい機材を購入するコストを削減できます。具体的な導入手順や設定方法についてもご説明します。

  2. QAチームでの不具合検証マシンとしての活用
    QAチームが不具合を迅速に検証できる環境を提供するため、古いiMacを再利用します。これにより、迅速な問題解決が可能となり、顧客満足度の向上にも寄与しました。

これにより、会社全体のコスト削減やリソースの有効活用が実現できました。

本トークを通じて、古くなったMacマシンの再活用のヒントを提供できればと期待しています。

2
ルーキーズLT(5分)

今すぐ切ろうiOS16サポート!? SwiftUIの進化でViewの作成がここまで楽になりました

小鷲純平

SwiftUIが登場して早くも5年が経ち、今や多くのプロジェクトでSwiftUIの導入が進められています。
しかし同時に多くの開発者がSwiftUIの限界を目の当たりにし、「このViewを簡潔にSwiftUIで作るのは難しい…」、「UIKitを使わないと作れない…」と嘆いてきました。

本セッションでは5年の月日を経て進化したSwiftUIの機能を紹介します。
そして、以前はUIKitの力を頼りつつ苦労していたが現在では新機能を使って楽に実装できるようになったViewの作成事例を紹介していきます。

皆様のプロジェクトのViewの見直しやリファクタリングに役立てば幸いです。

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

AVFoundationを活用したFAANSの動画機能実装と課題解決方法

shoma10170806 加藤祥真

ZOZOでは、ショップスタッフ向けの販売サポートアプリ「FAANS」を開発しています。FAANSアプリを利用することで、スタッフはコーディネートを投稿し、その閲覧数や売上などの成果を確認できます。これまでは画像のみの投稿が可能でしたが、新たに動画投稿機能が追加されました。私は、この動画投稿機能の開発を担当しており、AVFoundationを用いて動画の編集や再生機能を実装しました。本トークでは、FAANSにおける動画機能の開発過程で直面した課題と、それを克服するために用いたテクニックについて紹介します。

具体例として、FAANSではエンコードされていない動画と音楽を同期して再生する機能が求められました。単に再生を開始するだけでは動画と音楽のズレが発生するため、AVPlayerのreadyToPlayステータスを監視して、両者が再生可能になった時点で再生を開始するように実装しました。また、アップロードされた動画を再生する際には、動画が再生可能かどうかをObserverを用いて監視し、再生できない場合には適切なエラーハンドリングを行うことで、再生の待機やアラート表示を実現しました。

本トークでは、動画機能の開発における具体的な課題とその解決策について、実際のコード例を交えながら詳細に解説し、新たな知識と知見を提供します。

2
LT(5分)

SwiftUIにおけるTrailing Closureの効果的な使い方

hicka04 佐藤 光

SwiftにはTrailing Closureという強力な記法が存在しており、引数の最後のClosureを引数リストの外に展開して書くことができます。

SwiftUIでもTrailing Closureが積極的に利用されており、主に子のUI要素を構築する @ViewBuilder のClosureを最後に持ってくることで、UIの階層構造を表現しています。

一方でSwiftUIにおけるClosureは、タップなどのアクションを実行するためにも使われます。 @ViewBuilder なClosureがない場合、アクションのClosureを引数の最後に持っていきたくなってしまいますが、Trailing Closureは引数ラベルがないため、そのClosureがUIを構築しているのかアクションを実行しているのかはClosureの中身を読む必要があります。

本セッションでは私がおすすめするSwiftUIにおけるTrailing Closureの使い方についてご紹介します。誰もがわかりやすいSwiftUIのコンポーネントを作れるようになるために、まずは引数内のClosureの位置を意識してみるのはいかがでしょうか。

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

Mastering LLDB

kylezhao14 Kyle Zhao

Go on a deep dive into the commands of the Low Level Debugger

Understand from the ground level how Xcode uses LLDB under the hood:

Compile, Run, Attach, Detach, Breakpoint, Backtrace and more all from the Xcode console or Terminal command line.

Learn how to run expressions while paused in execution, reading variables in scope and printing the contents of registers

ルーキーズLT(5分)

Drag & Dropを理解しよう!

toshi_ios_jp Toshiyana

アプリ内でDrag & Dropは活用していますか?
Drag & Dropとは、コンテンツをある場所から別の場所にドラッグして移動したり複製したりする手段です。アプリ内である部分から別の部分へ、またはアプリから別のアプリへ転送することが可能です。

SwiftUI登場時点でDrag & Dropの実装はできましたが、カスタムタイプのコンテンツだと転送処理が複雑になるという課題がありました。しかし、iOS16から導入されたTransferableプロトコルを用いると簡単に実装できるようになります。

本トークでは以下の内容を解説します。

  • Drag & Dropの導入のプラクティス
  • SwiftUIによるDrag & Dropの実装方法
  • iOS16から利用可能なTransferableプロトコル
  • 実装上の難点とその対策

参加者の皆様が、Drag & Dropのプラクティスや実装の理解の手助けになることを目指します!

ルーキーズLT(5分)

iOSと外部機器連携

大栗

SPIDERPLUSは、外部機器で検査結果を計測する機能があります。
外部機器との接続にはBluetoothを利用しており、ハマりポイントなどを紹介します。

  • 機器の調達
  • お客さんのところでは再現するが
  • Bluetoothのバージョンアップ
  • 機器の不具合
    など
1
ルーキーズLT(5分)

XcodeGenを利用したベースアプリの作成と運用

MAMIKO

ある日、「UIは同じで、APIの向き先・アプリ内で使用するリソース・アプリの名前・BundleID等だけを変えたアプリをいくつか作りたい」といった要望が社内で上がりました。

同じようなUIなのに別々にアプリを作り、それを一つずつ運用していくのって面倒ですよね。
Targetで分けるにしても、xcodeprojファイルをレビューする必要が出てきて同じく面倒ですよね。

そんな課題をXcodeGenを用いて解決した(swiftファイルは共通で、makeコマンドで各アプリごとのプロジェクトファイルを作成し、必要な値を全て切り替わるように対応した)内容になります。
また、アプリ完成後の運用方法についても触れようと思います。

トークの構成としては、以下を想定しております。

  1. 概要の説明
    • トーク概要について説明いたします。
  2. 背景の説明
    • そもそもなんでこのような要望が社内で上がったのかについて、私が所属している企業の説明も交えて説明いたします。
  3. XcodeGen/実装内容の説明
    • XcodeGenとはなんぞやについて説明いたします。
    • makefile/project.yamlの中身を解説しながら、実装について説明いたします。
  4. 運用について
    • このアプリの運用方法について簡単に説明いたします。
ルーキーズLT(5分)

業務改善ツールをmacOSで作ってみよう!

kirio998877 Kirio

みなさんは、業務の効率化のためにちょっとしたツールを探していたのに、時間だけが過ぎてしまったという経験はありませんか?
また、やっと見つけても会社のMacに入れるには手続きが必要で、簡単には入れられなかったというような経験はありませんか?

そんな時は思い切って、自分でツールを作ってみてはいかがでしょうか!

普段iOSアプリを開発している方であれば、SwiftUIを使って簡単にmacOSアプリを開発することができます。
このトークでは、私が実際に業務改善のために開発したmacOSアプリを例に、開発の手順やiOSとの違いを詳しく紹介します。

業務改善ツールを開発しながら、macOSアプリについて知識を深めていきましょう!