SwiftUIの登場により、iOS開発はUIKitのEvent-DrivenからState-Drivenのパラダイムへと進化しました。しかし、まだ多くの開発者はState-Drivenに慣れるのに苦労しています。本トークでは、State-Drivenなマインドセットを手に入れるための方法を解説します。
本トークは以下の内容をカバーします:
このトークでは、State-Drivenのマインドセットををダンジョン攻略に例えて学び、Event-Drivenからの脱却を目指します。初心者から中級者まで役立つ内容を提供します。
サービスの成長は喜ばしいことですが、それに伴いチームも拡大し、アプリケーションの複雑性が増してしまいます。
複雑性が増すと、企画者やエンジニア、デザイナーが他人の領域を触りづらくなり、新しい機能を追加する際にはまるで針の穴に糸を通すように施策をねじ込むことになります。
画面遷移も分かりづらくなり、画面自体も複雑化し、エンジニアとデザイナーが同じUIを異なる名前や概念で語ることが増えます。
さらに、古い施策の担当者が退社すると知識の断絶が生じます。
このトークでは、混沌としたアプリケーションの構造を解明し、チーム間のコミュニケーションを改善するための具体的な方法を紹介します。
具体的な事例を交えながら、開発プロセスをどのように円滑に進めるかを解説します。
このトークは、エンジニアやUIデザイナーだけでなく、プロジェクトマネージャーやプロダクトオーナーも対象としています。
アプリ開発を行っていると、週1回、月1回など決まったタイミングで定期的にアプリを配布したい場面がしばしばあります。
近年登場したXcode Cloudにはスケジュール配布機能が備わっており、手軽に定期配布することが可能です。
しかし、頻度のカスタマイズ性に乏しく、例えば月に1回の定期配布を行うことはできません。
BitriseやCircleCIをはじめとする素晴らしいCI/CDサービスを使用する方法もありますが、実は私たちiOSエンジニアは既にこの問題を解決する手段を持っています!
本トークでは毎月1回アプリを定期配布するのに試行錯誤した末に辿り着いたベストプラクティスとSwiftの可能性についてお話いたします。
Swiftでこんなことができるという驚きと感動をお届けできれば幸いです。
Apple Vision Pro を装着すると顔が一部見えなくなってしまうため、そのままでは未装着の人とのコミュニケーションやオンラインミーティングに支障が出てしまいます。
この問題を解決する機能の1つとして Persona が visionOS には搭載されています。
Persona は自身の顔をスキャンすることによって作成された 3D データを利用したアバターで、 Apple Vision Pro に搭載された複数のセンサーによって得られた顔の動きがリアルタイムで反映されます。
この Persona は現時点でβ版として提供されており、開発者向けの API がほとんど公開されていません。
唯一、 AVFoundation の AVCaptureDevice を経由することで2Dの映像として Persona にアクセスすることが可能です。
しかし、基本的にカメラにアクセスできないという制約の関係で、映像を View に表示するだけでも少し工夫が必要で、具体的にはパラパラ漫画の原理を活用することになります。
このトークでは、 Persona にアクセスする方法を解説するとともに、映像の表示・録画・活用法をご紹介します。
visionOS 向けのアプリを開発している方はもちろん、これから挑戦してみたい!と思っている方にとっても創造的なアイデアを生み出すきっかけになることでしょう。
Apple は空間コンピュータという新しいジャンルの製品、 Apple Vision Pro を発売しました。これには、類似の他社製品に比べて、ゲーム以外での活用幅が広いという特徴があります。
それを象徴する機能の一つが Mac Virtual Display で、これは Apple Vision Pro に macOS の画面を投影することを可能にします。
このように、 macOS との連携は Apple が重要視しているポイントの1つです。ただし、注意すべき点として、連携手段がネットワークもしくは Bluetooth のみであることが挙げられます。
なぜなら、 Apple Vision Pro には開発ツールを除いて通信用ケーブルを装着する手段が準備されていないからです。
このトークでは、 Multipeer Connectivity Framework を利用して複数の端末をローカルネットワークを通して連携させるためのノウハウをご紹介します。
ここでは、 visionOS から macOS に映像をシームレスに転送するアプリの実装事例を取り上げます。
visionOS 向けのアプリ開発に興味がある方はもちろん、 Multipeer Connectivity Framework を活用したデータの送受信について学びたい方にとっても貴重なトークとなることでしょう。
機械学習関連技術は日々進化を遂げており、特にLLM等は毎日のように話題になっている今日ですが、一方でソフトウェア開発者でもその概念や技術が難しく感じられることが少なくありません。
iOS開発者においても決して例外とは言えず、例えばApple公式のCreateMLなどをXcodeでいきなり使い始めるのは、少しハードルが高いと感じる方も多いようです。
しかし、このCreateMLにはGUIで操作できる「アプリ版」のようなものがあるのをご存知でしょうか?
知らなかったという方は、ぜひお手持ちのMacで /Applications/Xcode.app/Contents/Applications/
を開いてみてください。
そこには Create MLというアプリが鎮座しているはずです!
このトークでは、Xcode内に隠された(?)CreateMLアプリを活用し、iOSでも使えるモデルを作成する方法を紹介します。
CreateMLを使えば、GUIにより写真や音声、テキストの自動判定モデルを手軽に作成できますので、初心者の方でもお手軽に機械学習の世界に足を踏み入れることができるでしょう。
機械学習に興味はあるけれど、なんだか難しそうで手が出せなかった皆さま、この機にCreateMLアプリを使ってその第一歩を踏み出してみませんか?
興味が湧きましたらぜひ本トークにお越しください!
Xcodeの機能言えたなら 言われた機能もうれしい!
iOS開発にほぼほぼ必要不可欠なものってな〜んだ?
──── それは、Xcode!
みなさんはXcodeをどのくらい使いこなせていますか?
昨年リリースされたXcode 15ではBookmarks機能が新登場し、年々進化しています。
あるとき「私全然Xcode使いこなせてないじゃん!」と自覚し、改めてXcodeにどんな機能があるのか調べてみると知らなかった機能がたくさんありました。その中からXcodeにおけるアプリ開発で便利な機能をまとめてご紹介します!
トピック
Xcodeの機能言えたかな? だいたい言えればいいかんじ!
Xcodeの機能言えたなら 言われた機能もうれしい!
iOS開発にほぼほぼ必要不可欠なものってな〜んだ?
──── それは、Xcode!
みなさんはXcodeをどのくらい使いこなせていますか?
昨年リリースされたXcode 15ではBookmarks機能が新登場し、年々進化しています。
あるとき「私全然Xcode使いこなせてないじゃん!」と自覚し、改めてXcodeにどんな機能があるのか調べてみると知らなかった機能がたくさんありました。その中からXcodeにおけるアプリ開発で便利な機能をまとめてご紹介します!
トピック
Xcodeの機能言えたかな? だいたい言えればいいかんじ!
SwiftData は、Appleが WWDC 2023 で発表した新しいデータ永続化フレームワークです。
SwiftData を使うことで、明確で効率的なデータ操作を行うことができます!
このトークでは実際に SwiftData × iCloud を採用したアプリを作った際の経験を元に、どのようにプロダクトに導入し役立てることができるのかを実際のコードをベースに紹介します!
<トピック>
このトークを通じて、皆さんがSwiftDataの魅力を理解しプロダクト開発に役立てたいと思っていただければ幸いです。
皆さんはプログラミングやiOSアプリ開発をどのように習得しましたか?
私は、頼れる人が周りにいない状況で、独学でプログラミングとiOSアプリ開発を学んできました。
このセッションでは、iOSアプリ開発を始めた理由から、当時のメモやソースコード、開発したアプリを紹介しながら、技術習得のための取り組みや歩み等をお話しします。また、独学での学習を続けるためのメンタル管理の方法等についても共有します。
具体的なトピックは以下の通りです。
iOS 17.0より、RealityKitを使用してObject Capture APIが利用可能になりました。
このAPIにより、デバイス上で対象物のスキャンから3Dオブジェクト生成までできるようになりました。
しかし、現行のサンプルコードでは、撮影者が対象物の周りを自ら移動してスキャンを行う必要や、精度を高めるためには多くの写真が必要です。
このため、スキャンの環境と撮影時間(枚数)が課題と感じます。
そこで
ことで解決できるのではと考えました。
本トークでは、Object Captureの基本概念から、上記の課題に対してハードウェア(自動回転するターンテーブル)とソフトウェア(少数の写真でも精度の良い3Dオブジェクトを生成する)の両面からアプローチした事についてデモを交えたながら解説したいと思います。
このトークを聴き終えた後にはきっとObject Captureの基本を理解し、自身でも3Dオブジェクトを生成したくなるでしょう!
Swift 6.0 への対応を進める中で、Combine の実装を async/await に置き換えたいと感じる場面が増えてきたのではないでしょうか。2022年にAppleが公開したOSSである Swift Async Algorithms を使用することで、時間経過に伴う処理を async/await で記述できるようになりました。
Swift Async Algorithms は、 Combine のように様々なオペレーターを利用しつつ、非同期処理を for-in ループで実装することができる強力なライブラリです。これにより、より直感的で Swift らしいコードを書くことが可能になります。
本LTでは以下の内容について紹介します。
・Swift Async Algorithms と Combine の比較
・Swift Async Algorithms を用いた時間経過処理の結合方法
・Swift Async Algorithms の便利な API の活用法
スマートホームとは、家の中の家具や家電をインターネットに繋いで可視化・操作できるようにする技術です。AppleはiOS 8でこれを実現するための「ホーム」アプリと「HomeKit」を発表しました。
照明をはじめとしたHomeKit対応アクセサリは、「ホーム」アプリに簡単に追加でき、操作が容易であるという魅力があります。
しかし、発表から数年が経過しても、国内のHomeKit対応のアクセサリの数は依然として少ないままです。最近では、複数のメーカーがそれぞれのアプリで操作するスマートホーム製品を発売しています。
HomeKit対応製品の少なさや各メーカーの専用アプリに依存してしまうことから、「ホーム」アプリによるスマートホームの導入を諦めてしまった方も多いのではないでしょうか。
このLTでは、「ホーム」アプリによるスマートホーム環境の構築を諦めきれない一人のApple信者が、HomeKit非対応アクセサリでも「ホーム」アプリに追加して操作するためのOSS"Homebridge"と新しいスマートホーム規格"Matter"を紹介します。
またそれぞれの技術の実際の使用例を交えながら、現状できることや得意・苦手なことを説明して、今からスマートホームを始める際のおすすめの方法を解説します。
これを聴けば、Appleのスマートホームに関する最近のトレンドや課題が分かるようになります。
突然ですが、皆さんはSNSアプリケーションを3週間の短い期間で作り上げる挑戦をしたことはありますか?
私が所属する某企業では、新卒研修の一環として、この「SNSアプリケーションの開発」が出題されました。
しかし、Firebaseなどのサーバーレス開発ではなく、クライアント、サーバー、インフラ、ML/DSの職種を活用した開発です。
私が所属する某企業では、新卒研修の鬼門として「SNSアプリケーションの開発」が出題されました。
開発期間が短いため、戦略として「機械的反復的なコードは自動生成に任せ切ろう!」という方針のもと最新技術を積極的に採択していきました。
本セッションではより短い期間で品質を担保しつつアプリケーションを開発するための技術的tipsを紹介します。
具体的には、以下の導入からメリット、デメリットと苦戦したことについて解説し、短期間でのアプリ開発でとるべき技術戦略を紹介します。
本セッションを通じて、個人開発や小規模開発におけるを最適解を見つけましょう。
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
を更新する具体的な方法についてお話しします。
近年、CocoaPodsからSwift Package Manager(SPM)に移行したプロジェクトが増え、Firebase iOS SDKでもSPMでのみ利用可能なバージョンがリリースされました。新規開発においても、CocoaPodsを使わずにSPMのみでパッケージ管理を行うケースが増えています。
SPMの利用頻度が高まる中で、初めて自作ライブラリをSPMで導入する方法について解説します。具体的な手順やコード例を交えながら、SPMの利便性と自作ライブラリの開発プロセスを理解することで、開発効率をどのように向上させるかについて詳しく説明します。
本トークでは、以下の内容を話します。
・ 自作ライブラリを開発するメリット
・ 初めての自作ライブラリをSPMで導入する方法(具体的な手順とコード例)
・ 開発中に直面した課題とその解決方法
iOSでの多言語対応といえば、Localizable.stringsやString Catalogを利用してApp内のテキストや文言をkey-valueのペアで記述し、keyをもとにローカライズする必要があります。しかし、プロダクトがiOSだけでなくマルチプラットフォームに対応している場合、どのように作成や管理を行えば良いでしょうか?
このトークでは、マルチプラットフォーム(iOS, Android, Web, macOS, Windows, Quest)に対応しているメタバースプラットフォームclusterの多言語対応における具体的な取り組みや、そこで直面した課題、そしてそれらを乗り越えるための運用方法について詳しく紹介します。
具体的には以下の項目について解説します
私が個人事業主として開発を手伝っているアプリは、UIKitとStoryboardをベースにした既存の実装があり、かなりレガシーなものとなっています。
このアプリの一部機能を作り替える際に、SwiftUIとTCA(The Composable Architecture)を用いたモダンな設計を導入しようと試みました。
しかし、パッケージ側からアプリ側の既存画面を呼び出す必要があり、多くの課題に直面しました。
このトークでは、開発中に発生した具体的な問題と、それにどのように対応したのかを以下のポイントに分けてお話しします。
依存関係の管理: モジュール間の依存関係をどのように整理したか。
画面遷移の実装: SwiftUIからUIKitの画面を呼び出す際の具体的な方法とその課題。
iPadやMacのような大画面のアプリを開発する際に重要なポイントの一つに、空白をどのように作るかがあります。
UIKitでiPadアプリのレイアウトをするときは、 readableContentGuide
という便利な機能がありました。
これを利用することで、Appleが定義した読みやすい幅を基準にレイアウトを組むだけで、イイ感じに作ることができました。
SwiftUIが登場して5年になり、成熟してきた感も出てきましたが、まだまだ大画面レイアウトに関するベストプラクティスはまだ確立されていません。
このセッションでは、個人事業主として手伝っているSwiftUIベースのアプリをiPadに対応させるためにどのようにしたかをお話しします。
トランクベース開発では、細かいコミットを頻繁にマージし、コードの安定性を高め、コンフリクトを早期に解決することで、迅速なリリースが可能になります。この手法において、未完成機能やバグのある機能をオンオフするためにFeature Flagを利用することが重要です。
Feature Flagを導入することで、開発中のコードを安全にマージし、複数の機能開発を並行して進めることが可能となり、チーム開発を加速させるメリットがあります。しかし、機能のリリース後にFeature Flagの定義や分岐箇所を削除する際、不要なファイルや定義の削除漏れが発生することがあります。
この問題を解決するために、Swift Macroを活用して削除漏れを防ぐための@粉砕アノテーションを作成しました。このアノテーションにより、Feature Flagの定義が削除された際にビルドエラーを発生させることで、削除漏れを防止します。
このトークでは、メタバースプラットフォームclusterでの具体的な事例をもとに、Feature Flagを利用したトランクベース開発の運用方法と、Swift Macroを活用した@粉砕アノテーションによる削除漏れ防止の方法について紹介します。