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

iOSエンジニアからの生存戦略:20年の経験から学ぶ実践的ヒント集

nakajijapan nakajijapan

みなさんは、iOSエンジニアとして成長する中で、キャリアについて多くの選択肢を考えることになるかと思います。マネージャー、専門職、大企業、スタートアップ、フリーランスなど、これらはすべて重要な決断です。

私はエンジニアとして20年のキャリアを積んできました。その中で、iOSDCに関わったことが私の人生とキャリアの大きな転換点となり、モバイルエンジニアとして貴重な経験をして、今もエンジニアとして色々な経験をさせていただいています。このトークでは、私のキャリアの軌跡を基に、iOSエンジニアとしてキャリアを築き、さまざまな組織との関わりを経て、どのようにして失敗や挑戦をしてきたのか、そして、働き方の考えがどう変わっていったのかの経験や教訓を共有します。これからの皆さんの成長と生存戦略に役立つ具体的なヒントをお伝えします。なるべく一般的な話だけではなく発表ギリギリの泥臭いところを皆さんに共有していければと思います、、

発表内容:
・モバイルエンジニアとしての生存、そして成長
・大企業とスタートアップで考えるべきこと
・スタートアップでの経験、そして失敗(ポジション、報酬、組織)
・CTOになるということと会社との関わり
・成長戦略と生存戦略
・今後の展望

このトークが皆さんのエンジニアとして生存していくためのヒントとなり、次のステップに進むための道標となることを願っています。

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

Flutterでもネイティブアプリだと思われたい

touyou_dev 藤井陽介

Flutterは、単一のコードベースでiOSとAndroidの両方に対応するアプリを作成できるクロスプラットフォームフレームワークです。しかし、ネイティブアプリと比較すると、ユーザーエクスペリエンスやパフォーマンスに違いが生じることがあります。

多くの開発者はデザインを一つに統一して省エネを図るかもしれませんが、iOSネイティブの魅力に惚れ込んでいる自分としては、できる限りiOSネイティブに近づけたいと思っています。

このセッションでは、FlutterでiOSとAndroidのネイティブ感をどのように演出するかについて具体的な例を用いて説明します。具体的には、それぞれのプラットフォームに適応したウィジェットの作成方法や、プラットフォームチャネルを使ったネイティブコードの統合方法などを取り上げます。そして試行錯誤の過程で得た難しかったポイントやTips、Flutterでできること・できないことについて共有します。

ネイティブ好きだけどFlutterを使わないといけないとなっている方々にぜひ聞いてほしい発表です。

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

Appleの公式APIから読み解くAPI設計のベストプラクティス

Li Jierong

API設計に悩んだことはありませんか。例えば、以下のような点で困ることがあるでしょう。

• ネーミングが自然でわかりやすいか
• どのプログラミング言語やフレームワークの機能を利用すべきか
• 汎用性に過不足があるか
など

ガイドラインが存在するものの、全てのケースをカバーできているわけではありません。そのため、参考にしてもなかなか明確な答えが得られないことが多々あります。
そんな時に頼りになるのが、公式APIです。

本トークでは、Appleの公式APIを参考にし、具体的なAPI設計の悩みを解決する手法を解説します。この手法を活用すれば、API設計の悩みを解消するだけでなく、公式APIに対する理解も深めることができるでしょう。

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

Button Styleのすべて

Li Jierong

SwiftUIで独自のボタンを実装したことがあれば、ButtonStyleを使ったことがあると思いますが、標準のスタイルはPrimitiveButtonStyleで実装されていることをご存知ですか。

本トークでは、この二つの似て非なるプロトコルについて解説します。
まず、ButtonStyleとPrimitiveButtonStyleの基本的な違いを説明し、それぞれの使い方と具体的な例を紹介します。次に、PrimitiveButtonStyleの活用方法に焦点を当て、以下のポイントについて詳しく説明します。

• Styleの組み合わせ 
• Labelのカスタム
• Actionのカスタム

本トークを通じて、ButtonStyleとPrimitiveButtonStyleの違いを理解し、実際の開発でどのように使い分けるのが適切か明確になるでしょう。

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

Subscriptsの可能性

Li Jierong

Swiftのドキュメントによると、subscriptsを使って集合の要素にアクセスすることができます。この機能はシンプルで、他の多くのプログラミング言語と似たものです。私たちは皆、初心者の頃からこの機能を使いこなしてきました。

しかし、Swiftにおけるsubscriptsは他の言語とは少し異なる点があります。本トークでは、以下のトピックについて詳しく掘り下げ、subscriptsの可能性を探ります。

• オーバーロード:一つの型に複数のsubscripts
• 複数の引数:単一のインデックスやキーだけではない
• ジェネリクス:whereをさらに向こうへ
• セッター:計算プロパティのように振る舞う
• 他の言語機能との組み合わせ:構文の改善

これらのトピックを通じて、subscriptsの可能性を把握、より創造的かつ効率的にsubscriptsを活用できるでしょう。

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

「コンポーザブル」とは

Li Jierong

このような経験はないでしょうか。

• 共通化せずに変更が発生するたびに、全箇所を変更する必要があったり、変更漏れが出たりする
• 共通化したものの、変更が発生する際に破綻し、実装し直す羽目になる

共通化しても、しなくても適切ではない場合があり、結局経験次第と思われがちです。

ただ、共通化するかしないかの問題よりも、コンポーザブルになっていないことが問題になるかと思います。

本トークでは、以下のトピックについて紹介します。
• 「コンポーザブル」とは何か
• 単純な共通化との違い
• コンポーザブルにするための具体的な手法

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

敬意を持ったブランディング

Li Jierong

競合との差異化などの理由でブランディングデザインが広く行われています。その結果、アプリの世界は多彩で魅力的なものとなりました。しかし「このアプリはiOSアプリっぽくない」と感じた経験はありませんか。それは独特性を追求するあまり、プラットフォームの文化やユーザーの習慣を尊重できず、「形無し」のデザインになってしまっている可能性があります。

このトークでは、プラットフォームの根本的な精神を見失わずにブランディングを行い、ビジネスとユーザー体験がウィンウィンの関係を築く方法を探ります。

具体的には、以下のトピックについてお話しします。

• 見逃しやすい文化や習慣
◦ 外観のバリエーション
◦ 画面遷移
◦ アクセシビリティ
• 文化や習慣を発見する方法
• 敬意を持ちながらブランディングする手法

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

Flexible Online Computer Science Education While Working: the UoPeople

kent_strong_dev Kent Strong

Are you an iOS engineer without a formal CS(Computer Science) background and a degree? Learn how the University of the People(UoPeople)'s online program, designed for working professionals, can bridge the gap. I'll share my own experience of managing coursework alongside my job, applying new knowledge immediately, and advancing my career. In order to get jobs as an engineer worldwide, it is the basic to hold regular Computer Science Degrees and to be able to communicate with others in English. Discover how you can balance work and study with UoPeople’s flexible schedule.

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

友達に似てる有名人を探し出せ!顔の類似度判定器の開発とその技術

akihiro_kokubo Akihiro Kokubo

ある日、友達からユニークな相談が舞い降りた。
「自分に一番似ている有名人を見つけてほしい」
どうやら、ファッションやヘアスタイルの参考にするようだ。
100人の有名人の中から、友達に最も似ている人を探し出すミッションはこうして始まった!


友達に似ている有名人を特定し期待に応えるために、顔の類似度を判定するツールをSwiftで作ったので、技術的な裏側を解説します。
iOSのオンデバイスAPIを用いてランドマークを取得し、2つの顔のランドマーク同士の類似度を行列計算により算出しています。

普段なら便利なライブラリを探し続けネットをさまよう自分が、自らアルゴリズムを実装する道を選び、試行錯誤した経験を共有します。
特に難しかったポイント、それをどう解決したのか、そしてこのプロジェクトを通した学びをお伝えします。

今回の作戦

  • Visionフレームワークで、顔写真から顔のランドマークを取得する
  • 点群同士の類似度を算出するための作戦を定める
    • 2つの点群の重心を原点に移動する
    • 2つの点群のスケールを正規化する
    • 二乗誤差が最小になるように回転する
  • Accelerateフレームワークで、行列の演算や特異値分解を行う
1
レギュラートーク(20分)

Apple Vision Proは言語の壁を超えられるか

noppefoxwolf noppe

Apple Vision Proは、両手が自由で、相手の目を見ながらアプリを使う事ができます。
この特性により、アプリを使いながら、自然にボディーランゲージを使用することができるのです。
つまり、Apple Vision Proは英語と相性が良いのでは無いでしょうか?

この技術の進化により、英語が苦手な私がApple Vision Proを使って英語を話せるようになる日は来るのでしょうか?
自作のアプリを通して、同僚のネイティブスピーカーのエンジニアと、英会話を試みます。

このトークでは、英会話のサポートをするアプリの開発手法について紹介します。
そして、それらを通して、Apple Vision Proならではのアプリとは何かについても考察します。

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

ローカルLLMをiOSで「実用的に」動かしたい

shu223 堤 修一

ローカルLLMは、その名の通りローカルで動作する大規模言語モデル(LLM)です。OpenAI社のGPT-4などのモデルはクラウドベースで動作しますが、ローカルLLMは手元のデバイスで動かすことができます。データを外部サーバーに送信しないためデータのプライバシーが確保でき、APIの従量課金が発生せず、通信環境に左右されることもありません。

なにより我々iOSエンジニアにとって、クラウドベースのLLMは「APIの向こう側」の話でしかなく技術的にはHTTPリクエストを投げるだけですが、ローカルLLMにはオンデバイスで動かすロマンがあります。

では、これらローカルLLMをiOSデバイスで動かすには、どのような手段があるのでしょうか。そして精度や速度の面で「実用的に」動かすことはできるのでしょうか。

どのようなモデルをチョイスし、どう動かし、どう最適化していくのか。本セッションではローカルLLMをiOSデバイス「実用的に」動かすための全知識について解説します。

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

TextKit2を活用したカスタムTextViewの作成

noppefoxwolf noppe

iOSには、テキストを表示するためのコンポーネントが複数存在します。例えば、UILabel、UITextView、SwiftUI.Textなどです。
これらのコンポーネントを利用することで、私たちは簡単にテキストを表示することができます。
しかし、セルフサイジングやビューアタッチメント、リンクの表示など、複数の要求が重なると、適したコンポーネントが存在しないことが分かります。

このトークでは、TextKit2を使って理想のTextViewを作成する方法について解説します。

具体的には以下の内容をカバーします:

  • TextKit2での文字列描画: TextKit2を使ってテキストを直接描画する方法を紹介します。
  • ビューアタッチメントの実装: テキスト内にビューを埋め込むための手法を説明します。
  • セルフサイジングの実現方法: テキストの内容に応じて自動でサイズを調整する方法について解説します。
  • リンク表示とインタラクションの実現方法: リンクの表示やインタラクションを実現する方法を説明します。

これらのトピックを通じて、TextKit2の強力な機能を理解し、カスタマイズ可能なTextViewを作成できるようになります。

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

このSwiftUIの迷宮(ダンジョン)にState-Drivenのマインドセットを!

lovee 星野恵瑠

SwiftUIの登場により、iOS開発はUIKitのEvent-DrivenからState-Drivenのパラダイムへと進化しました。しかし、まだ多くの開発者はState-Drivenに慣れるのに苦労しています。本トークでは、State-Drivenなマインドセットを手に入れるための方法を解説します。

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

  • 背景:
    • SwiftUI導入の背景とState-Drivenマインドセットの重要性
    • SwiftUIとUIKitの違いを具体例で説明
  • State-DrivenとEvent-Drivenの違い:
    • 記述方法の本質的な違い
    • Single Source of Truthの重要性
  • State-Drivenのマインドセット:
    • 機能要件をState-Drivenに落とし込むアプローチ
  • 実践例:
    • よくある機能の実装方法とベストプラクティス
    • 逆によく見かけるアンチパターン

このトークでは、State-Drivenのマインドセットををダンジョン攻略に例えて学び、Event-Drivenからの脱却を目指します。初心者から中級者まで役立つ内容を提供します。

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

巨大なアプリの構造を整理し、開発チームの効率を最大化する方法

noppefoxwolf noppe

サービスの成長は喜ばしいことですが、それに伴いチームも拡大し、アプリケーションの複雑性が増してしまいます。
複雑性が増すと、企画者やエンジニア、デザイナーが他人の領域を触りづらくなり、新しい機能を追加する際にはまるで針の穴に糸を通すように施策をねじ込むことになります。
画面遷移も分かりづらくなり、画面自体も複雑化し、エンジニアとデザイナーが同じUIを異なる名前や概念で語ることが増えます。
さらに、古い施策の担当者が退社すると知識の断絶が生じます。

このトークでは、混沌としたアプリケーションの構造を解明し、チーム間のコミュニケーションを改善するための具体的な方法を紹介します。
具体的な事例を交えながら、開発プロセスをどのように円滑に進めるかを解説します。

このトークは、エンジニアやUIデザイナーだけでなく、プロジェクトマネージャーやプロダクトオーナーも対象としています。

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

Persona を活用した創造的な visionOS アプリ開発術

AkkeyLab akkey

Apple Vision Pro を装着すると顔が一部見えなくなってしまうため、そのままでは未装着の人とのコミュニケーションやオンラインミーティングに支障が出てしまいます。
この問題を解決する機能の1つとして Persona が visionOS には搭載されています。
Persona は自身の顔をスキャンすることによって作成された 3D データを利用したアバターで、 Apple Vision Pro に搭載された複数のセンサーによって得られた顔の動きがリアルタイムで反映されます。

この Persona は現時点でβ版として提供されており、開発者向けの API がほとんど公開されていません。
唯一、 AVFoundation の AVCaptureDevice を経由することで2Dの映像として Persona にアクセスすることが可能です。
しかし、基本的にカメラにアクセスできないという制約の関係で、映像を View に表示するだけでも少し工夫が必要で、具体的にはパラパラ漫画の原理を活用することになります。

このトークでは、 Persona にアクセスする方法を解説するとともに、映像の表示・録画・活用法をご紹介します。
visionOS 向けのアプリを開発している方はもちろん、これから挑戦してみたい!と思っている方にとっても創造的なアイデアを生み出すきっかけになることでしょう。

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

機械学習を身近に!マウスでも出来るCoreML活用術

log5 log5

機械学習関連技術は日々進化を遂げており、特にLLM等は毎日のように話題になっている今日ですが、一方でソフトウェア開発者でもその概念や技術が難しく感じられることが少なくありません。
iOS開発者においても決して例外とは言えず、例えばApple公式のCreateMLなどをXcodeでいきなり使い始めるのは、少しハードルが高いと感じる方も多いようです。

しかし、このCreateMLにはGUIで操作できる「アプリ版」のようなものがあるのをご存知でしょうか?
知らなかったという方は、ぜひお手持ちのMacで /Applications/Xcode.app/Contents/Applications/ を開いてみてください。
そこには Create MLというアプリが鎮座しているはずです!

このトークでは、Xcode内に隠された(?)CreateMLアプリを活用し、iOSでも使えるモデルを作成する方法を紹介します。
CreateMLを使えば、GUIにより写真や音声、テキストの自動判定モデルを手軽に作成できますので、初心者の方でもお手軽に機械学習の世界に足を踏み入れることができるでしょう。

機械学習に興味はあるけれど、なんだか難しそうで手が出せなかった皆さま、この機にCreateMLアプリを使ってその第一歩を踏み出してみませんか?
興味が湧きましたらぜひ本トークにお越しください!

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

Xcodeの機能言えるかな? 2024

ioco95 Ryomm

Xcodeの機能言えたなら 言われた機能もうれしい!


iOS開発にほぼほぼ必要不可欠なものってな〜んだ?
──── それは、Xcode!

みなさんはXcodeをどのくらい使いこなせていますか?
昨年リリースされたXcode 15ではBookmarks機能が新登場し、年々進化しています。

あるとき「私全然Xcode使いこなせてないじゃん!」と自覚し、改めてXcodeにどんな機能があるのか調べてみると知らなかった機能がたくさんありました。その中からXcodeにおけるアプリ開発で便利な機能をまとめてご紹介します!

トピック

  • ブレークポイント
  • けんさく
  • デバッグナビゲータ
  • テストナビゲータ
  • ソースコントロール
  • ブックマーク
  • レポートナビゲータ
  • エディターオプション

Xcodeの機能言えたかな? だいたい言えればいいかんじ!

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

SwiftDataの強みを知ってプロダクトで活用しよう!

saikei718 Keisuke Saito

SwiftData は、Appleが WWDC 2023 で発表した新しいデータ永続化フレームワークです。
SwiftData を使うことで、明確で効率的なデータ操作を行うことができます!
このトークでは実際に SwiftData × iCloud を採用したアプリを作った際の経験を元に、どのようにプロダクトに導入し役立てることができるのかを実際のコードをベースに紹介します!

<トピック>

  • SwiftData の概要
  • Core Data や Realm Swift などの他手法との比較
  • SwiftUI との連携
  • Attribute を用いたプロパティ属性のカスタマイズ
  • iCloud 連携を用いた複数端末でのデータ同期と、その際の制限事項

このトークを通じて、皆さんがSwiftDataの魅力を理解しプロダクト開発に役立てたいと思っていただければ幸いです。

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

Cloud Functions for Firebaseを使ったLive Activityのリアルタイム更新

fromkk かっくん

iOS16.1で追加された Live Activity ですが、実装されているアプリはまだまだ少ないような気がします。
Live Activity の実態はWidgetなので、SwiftUIを書くことができれば Live Activity をすぐに実装することができます。
ただ、 Live Activity に掲載する情報をリアルタイムに更新しようとすると、少し話がややこしくなります。
Live Activity を遠隔で更新するにはPush通知を活用します。
しかし、Firebase Cloud Messaging(FCM)を使用することができないので、独自で通知の送信ロジックを作成する必要があります。
このセッションでは、 Live Activity の振り返りと、Cloud Functions for Firebaseから Live Activity を更新する具体的な方法についてお話しします。

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

Go Global! マルチプラットフォームでの多言語対応の実践と運用

TAAT626 TAAT

iOSでの多言語対応といえば、Localizable.stringsやString Catalogを利用してApp内のテキストや文言をkey-valueのペアで記述し、keyをもとにローカライズする必要があります。しかし、プロダクトがiOSだけでなくマルチプラットフォームに対応している場合、どのように作成や管理を行えば良いでしょうか?

このトークでは、マルチプラットフォーム(iOS, Android, Web, macOS, Windows, Quest)に対応しているメタバースプラットフォームclusterの多言語対応における具体的な取り組みや、そこで直面した課題、そしてそれらを乗り越えるための運用方法について詳しく紹介します。

具体的には以下の項目について解説します

  • 多言語キーと翻訳文言の管理方法
  • プレースホルダーを用いた柔軟な多言語リソース定義
  • マルチプラットフォーム向けに多言語リソースファイルを生成する方法
  • CIでの定期実行による多言語リソースファイルの生成作業負担の軽減
1