業務や個人開発を問わず、機能実装の準備段階や進行中に、GitHubに公開されているコードや動画プラットフォームで提供されるサンプル実装を参考にする機会は多いと思います。しかし、そのようなコードをただ動かして実装を見るだけでは、断片的な理解で終わってしまったり、応用可能なポイントを見逃してしまうことがあります。
私自身もそのような経験をたくさんしてきました。特にiOSアプリ開発において、UI実装や表現に関連する複雑な実装コードを読み解く際には、手書きノートを活用して理解を深めています。具体的には、重要な部分を「簡単な図解と説明を交え、自分の言葉で整理」する取り組みを行っています。
このトークでは、公開されているサンプル実装や私が自主的に取り組んだUI実装を題材に、書き起こした図解や説明を活用した事例を紹介します。これにより、業務や個人開発だけでなく、円滑なコミュニケーションの機会にも応用できる方法をお伝えします。
会場では、これまでにまとめたノートのアーカイブを持参する予定ですので、皆様とインプット術や複雑な実装に向き合う方法について意見交換ができれば嬉しく思います。具体的な事例を元にコードを紐解くアイデアも共有し、積極的なディスカッションを期待しています。
WWDC(Worldwide Developers Conference)はいつから始まったか知っていますか?
2010年…?2000年…?いえ、実はWWDCの始まりは1990年代まで遡ります。実はその前身となるイベントはさらに昔から開催されていました。
昔のWWDCの情報は簡単に得られるものではありませんが、今回、可能な限り昔のWWDCを中心に調べてみました。
A0サイズのポスターにWWDC創設期から現在までの各年のWWDCで、「どのような出来事があったか」「どのような技術が発表されたか」を年表でまとめます。
「そんなこともあったな」とか「あ〜!懐かしい…!」など、皆さんと一緒に振り返りながら楽しむことができればと思います。
依存関係が複雑なプロジェクトほど、Xcode Previewsビルドに時間がかかってしまいます。ビルド時間を短縮する方法として、Preview用のTargetを作成する方法があります。依存ファイルを減らすことでビルド時間の短縮を狙いますが、Targetを設定するだけでは期待通りに機能しないことが多いです。
例えば、Viewが依存関係が複雑なクラスを参照している場合、そのクラスが依存している全てのクラスをコンパイルする必要があり、更にそのクラスが…のように依存関係が続くと、結局膨大な量をコンパイルするため、ビルドに時間がかかってしまう問題があります。
本ポスターセッションでは、この問題に対する解決策を提案します。
ポスターに掲載する内容
私が担当しているプロジェクトでは、この方法を用いることで、約120秒かかっていた初回のPreviewビルドが約23秒になりました。本セッションを通じてTargetを活用したPreviewビルドの高速化について学ぶと共に、提案した解決策は適しているものなのか、もしくは別の解決策もあるんじゃないかなどを議論できればと考えています。
Visionフレームワークは、Appleが提供する画像処理ライブラリであり、このフレームワークを使うことで、顔認識・テキスト認識・物体検出・画像分類などの画像認識機能を実現できます。例えば、顔認識ではユーザーの顔を検出して認証に使うことができ、テキスト認識ではレシートや書類の文字を抽出することができます。
特にテキスト認識は、画像や動画内の文字を抽出することができ、正規表現という特定のパターンに一致する文字列を探索したり加工するための方法と組み合わせることで、より高度なデータの抽出に利用することが多いです。
みなさんは、賞味期限に様々なフォーマットがあることをご存知でしょうか。例えば、YYYY/MM/DD、MM-DD-YYYY、MM/DD-YYなど様々なフォーマットで商品の賞味期限が表現されています。
本セッションでは、正規表現とテキスト認識を組み合わせた応用例として、賞味期限を画像から抽出してアプリ内で表示・管理する方法を紹介し、実装コードの例も交えて説明いたします。
このセッションを通して、賞味期限をアプリ内で管理するための具体的なTipsや実装方法を共有します。興味のある方は、ぜひ一緒にお話ししましょう。
皆さんのプロジェクトのディレクトリ構造は綺麗な状態ですか?
ディレクトリ構造は、プロジェクト初期には綺麗に整理された状態でも、ルール化や継続的なメンテナンスがされなければ徐々に複雑化していきます。
私が開発しているiOSアプリのプロジェクトはリリースしてから10年以上経ちますが、機能追加やアーキテクチャの変更に伴い、ディレクトリ構造がカオスな状態になっていました。
本ポスターセッションでは、そんな10年以上続くプロジェクトのディレクトリ構造をどのように整理したか、その過程と得られた知見を詳しく説明します。
ポスターに掲載する内容
本セッションを通じて、あなたのプロジェクトのディレクトリ構造も整理するきっかけにしませんか?
皆さんのプロジェクトのディレクトリ構造は綺麗な状態ですか?
おそらくすぐに「YES」と答えるのは難しいかもしれません。ディレクトリ構造は明確なルールが無いと、時間とともに複雑化しがちです。私が担当しているプロジェクトもその一例で、基本的なアーキテクチャの方針に基づいた大まかなルールはありますが、具体的な配置は各開発メンバーの裁量に任されています。その結果、時間とともに複雑化してしまいました。
今回、そんな複雑化したディレクトリ構造を整理し、どのように配置すれば最適かを考えてみました。
現状の構造を俯瞰することで見えてきた課題や、実際に適用してみてわかったアンチパターン、未だに悩んでいる配置についても共有します。
ディレクトリ構造の配置については正解がないと思います。各プロジェクトに応じた最適解があり、個々の考え方も異なるでしょう。本セッションでは、私が担当しているプロジェクトを一例として取り上げ、「こんなルールもいいんじゃないか」、「そのルールだとこういう問題も出てくるんじゃないか」などを議論し、ディレクトリ構造の整理とルールについて深く考える機会にしたいと考えています。
Haptic Feedbackを使ったことがありますか?触覚を通じてユーザーに情報を伝える技術、それがHaptic Feedbackです。
現在、Haptic Feedbackはさまざまなアプリで使用されており、特に最近リリースされたアプリではその使用が急増しています。この技術はユーザーに高い没入感を提供しており、Apple Pencil ProにもHaptic Feedbackが導入されました。
本ポスターセッションでは、Haptic Feedbackを導入するメリットやAppleが推奨する使用方法、実際のコード例を交えて詳しく説明します。さらには、実際のアプリにおけるユースケースについても紹介します。
Haptic Feedbackは、ユーザーのアクションやUIアニメーションにほんの数行のコードを加えるだけで、簡単に没入感を提供することができます。ただし、乱用は禁物です。適切なタイミングと場面で使用することで、ユーザー体験を飛躍的に向上させることができます。
さらに、Core Hapticsフレームワークを使用すると、カスタマイズしたフィードバックを作成することが可能です。振動のパターンや強度を細かく調整することで、ユーザーに伝えたいメッセージを明確に伝えられます。
Haptic Feedbackを駆使して、ユーザーの心を惹きつけるインタラクションを実現しましょう。
このポスターセッションではWWDC24に現地参加した経験をもとに、現地ならではの細かな情報を共有します!
WWDC24への参加記事は多く見られますが「ご飯ってどこで何を食べたの」、「いつどのタイミングでどこに行ったの?」、「寒暖差どんな感じ?」、「時差ボケ大丈夫なの?」など、細かな情報はあまり存在しない印象があります
そこで、このセッションでは、A0サイズの大きな紙にWWDC24滞在中の情報を写真と言葉でまとめ、タイムライン形式で紹介します!
タイムラインを眺めながらワイワイできたら嬉しいです!
みなさん個人開発を楽しんでいますか?
このセッションでは SwiftUI が発表されてから5年間で私が作成した25個の個人開発アプリから 成功と失敗、そしてそれらがもたらした利益や学びを振り返ります!
ぜひこのポスターセッションに参加して、一緒に「ああでもない」「こうでもない」とざっくばらんに議論しましょう!
何気ない会話から新しいアプリのアイディアが生まれるかもしれません。
コンピューター上で3次元のオブジェクトを回転させるとき、3次元回転操作の表現としてクォータニオン(四元数)がよく使われます。数学ではベクトルや行列がよく使われますが、クォータニオンは行列よりもメモリ効率が良く、計算が高速です。
このポスターセッションでは、クォータニオンの有用性をiOSのAccelerateフレームワークに含まれるsimdモジュールを使って解説し、SceneKitで実際に描画する実例を示します。
• クォータニオンの基礎:19世紀に数学者ハミルトンが考案したクォータニオンの基礎を解説。
• simdモジュール:コード上でのクォータニオンの扱い方。
• 回転の補間:クォータニオンを活用した軌跡の補間、滑らかな回転アニメーションの実現。
• 3次元オブジェクトの回転:SceneKitで回転を描画する実例。
3次元グラフィックスの基礎を知りたいiOSアプリ開発者向けの内容です。
私たちのチームでは来たるべき超巨大アプリの開発に備え、向こう5年間は大規模なリファクタリングを必要としない堅牢な設計を目指してPoCを去年から開始しました。
PureなSwiftUIが全面的に採用され、基盤となるアプリアーキテクチャはどうするべきかという議論も重ねました。
本セッションではあまり聞き馴染みのないアーキテクチャである「MV State Pattern」について視覚的に分かりやすく解説しつつ、以下のポイントに的を絞ってお話しします。
【ポイント】
・MV State Patternとは
・なぜ採用したのか
・SwiftUIとの親和性
・実際の使用感はどうなのか
これらの知見が今後アプリアーキテクチャを考える皆さんの意思決定の一助となれば幸いです。
Appleの新しいデバイスVision Proの登場により、従来のiOSの平面的な表現とは異なる3次元的なUI戦略も進み、3Dモデルの需要が急増しています。その際、Apple独自の3Dファイルフォーマットである.usdzを利用する機会も増えていくと予想されます。
本セッションでは、usdzファイルの特性やメリットの説明から、作成方法、表示方法など、usdzを利用するために必要な知識を網羅的にまとめます。このセッションを通じて、参加者がusdzファイルを開発者として効果的に利用できるようになることを目指します。
さらに、Unityを用いてusdzファイルを利用する方法や、サーバー上にある3Dモデルをアプリケーションで描画する際のTipsなど、私がusdzファイルを使用して得た実践的な知見を共有します。
SwiftUIでのアプリ開発では、フォントの指定はText("Hello").font(.title)
のように簡単に行えます。
しかしこの方法では、SwiftUIフレームワークのフォントスタイルをそのまま使うため、特にAndroidアプリも開発するようなチームでは、デザインの一貫性を維持しつつ効率的に開発を進めることが難しくなります。
本セッションでは、カスタムのフォントスタイルとモディファイアを定義し、一貫性のあるUI実装をより効率的に進める方法を紹介します。
具体的には、以下の内容について、コードを交えて解説します。
これらの工夫により、iOSエンジニア以外のメンバーとのコミュニケーションが円滑になり、デザインの一貫性を保ちながら効率的にアプリ開発を進められるようになります。
本セッションを通して、チーム開発をより円滑に進めるヒントが得ることができます。
モバイルアプリにおいては、ユーザーの操作に応じた適切なフィードバックを提供することが重要です。しかし、UIAlertControllerを使ったアラートの表示は、時としてユーザーの操作を阻害することがあります。
本セッションでは、Material Designで定義されているSnackbarコンポーネントに着目します。
Snackbarは、ユーザーの操作に応じた短いメッセージを素早く表示するのに適しており、取り入れることで操作完了時やエラー時のメッセージ表示をスムーズに行える効果が期待できます。
本セッションではまず、Snackbarの基礎概念や利点、アラートとの違いを整理して解説します。
続いて、VIPERアーキテクチャのiOSアプリを例に、軽量なSnackbarを設計・実装するためのポイントを、具体的なコードを交えて紹介します。
Snackbarを活用することで、ユーザーとのコミュニケーションをより円滑にし、ユーザー体験を向上させることができます。
本セッションが、iOSアプリ開発におけるユーザーインタラクションの設計の選択肢を広げるきっかけになれば幸いです。
インライン展開は、iOSアプリのパフォーマンスを向上させるための重要な最適化技術です。
このトークでは、インライン展開が実際にどのように行われているのかを、アーティファクトや中間言語を通じて詳しく解析します。
また、実際に運用されているコードを用いて、インライン展開の効果とその背後にあるメカニズムを具体的に解説します。
あまり親しみがない機能かもしれません。このトークを通じてインライン展開の基本的な理解と実践的な知識を得て、ご自身のアプリに組み込むきっかけとなれば幸いです。
5月に発表されたように、Appleウォレットでマイナンバーカードを利用できるよう準備が進められています。
このトークでは、iPhoneにマイナンバーカードを搭載する際に重要となる以下の点について詳しく解説します。
これらの規格についての理解を深めるとともに、関連するAPIや実装方法についても紹介します。
このトークを通じて、iPhoneでのマイナンバーカードの利用に関する技術的な知識を習得し、
実際の開発や実装に役立てたり、デジタル身分証明書の未来を想像するきっかけになれば幸いです。
Predicate は true/false を返す論理条件です。
コレクションのフィルタ、検索に利用されます。SwiftDataのフィルタにも利用されています。
このPredicate論理条件の中身は &&, ||, =, <= など見慣れた論理式や、 allSatisfy() のようなシーケンスオペレーションが使えるため、ただの true/false を返すメソッドやクロージャのように思えてしまいます。
しかし、これをメソッドだと思って扱っていると思わぬ形でランタイムエラーに遭遇します。
このトークでは、PredicateマクロでPredicateの論理条件を書く時にはまった罠、注意点をお話しします。
Apple Vision Pro向けに「カレンダーを壁に貼り付ける」というだけのシンプルなアプリを作り始めました。
基本的には「カレンダーを表示する」だけですのですぐに実装できるものと甘くみていました。
しかしOSの言語設定に応じて「カレンダーをローカライズする」という要件を加えた途端、泥沼にハマることになりました...
このLTではカレンダーをローカライズするに際にぶちあたった予期せぬ問題とそれにどう対処し、もしくは諦めたかという苦しい戦いの経緯を赤裸々に語ります。
iOSDC Japan 2023でご好評いただいた「SharePlayの歴史と進化」の続編です。
このLTでは、iOS18でのSharePlayの進化や、今年ついに発売されたApple Vision ProでのSharePlayの利用方法について楽しく解説します。
アップデートされた内容を中心に、SharePlayの歴史と進化についてもさらっと復習する予定です。
具体的な内容は以下の通りです。
iOSDC Japan 2023でご好評いただいた「SharePlayの歴史と進化」の続編です。
このセッションでは、iOS18でのSharePlayの進化や、今年ついに発売されたApple Vision ProでのSharePlayの利用方法について詳しく解説します。
20分のセッションでは、SharePlayの歴史を振り返りながら、iOS18での新機能やアップデート内容、そしてApple Vision Proでの実際の利用シーンを紹介します。SharePlayの最新情報にどっぷりと浸かることができる内容です。
具体的な内容は以下の通りです。
このセッションを通じて、SharePlayの新しい可能性や利用方法について深く理解していただけることを目指しています。ご期待ください。