🍏
Platforms State of the Union 2023 ざっくりまとめ
WWDC23のPlatforms State of the Unionをざっくりまとめたメモです。詳細、正確な情報についてはこちらの動画をご覧ください。
SwiftMacro
- 定型的なコードを書く手間が省ける
- Xcodeの右クリックメニューに「Expand Macros」が追加される
- コンパイル時にマクロに沿っているかチェックされる
- ライブラリのように、他人が作ったマクロを使用したり、自分が作ったマクロを共有したりできる
SwiftUI
- アニメーションの改善に重きを置いてる
- durationとcounceというパラメータで設定できるspringベースのモーションがデフォルトに
- マルチパートアニメーションが必要な場合はAnimationPhaseという新しいAPIを使う
- アニメーションさせたいViewをPhaseAnimatorで囲む
- キーフレーミングを完全サポート
- アニメーション内の特定の時間に複数のプロパティ値を設定し、中間値を設定できる
- データフローが簡略化され、StateとEnvironmentに集中すれば良い状態に
SwiftData
- 新しいCore Dataみたいなもので、Swiftのために完全に再設計された
- マクロを使ってCore Dataよりスッキリ書ける
- 永続化、iCloud同期、undo/redoをサポート
WidgetKit
- ほんの少し手を加えるだけで既存のウィジェットがStandByで見栄えするようになる
- インタラクティブ機能をサポートすることでより便利に使うことできる
- iPhoneのウィジェットをMac上にシームレスに表示することができる
- iOS 17からウィジェットのpaddingが提供されるようになった
- Xcodeのプレビューでウィジェットのタイムラインを確認することができる
- 新しいiPadのロック画面やStandByでの見え方もXcodeプレビューで確認できる
App Intents
- インテントをApp Shortcutにまとめると、Spotlightの結果でアプリアイコンのすぐ隣に表示される
TipKit
- 吹き出しで新機能をアピールしたりできる
- テンプレートがいくつか用意されており、カスタマイズもできる
- ある端末で表示したら、他の自分の端末では表示させない、といったこともできる
AirDrop
- 共有シートを開くことなく、近くのデバイスに素早くコンテンツを送ることができる
- SwiftUIでShareLinkを使用するか、UIKitのViewControllerでactivityItemsConfigurationを使用する
ゲーム
- Windowsやゲーム機向けにゲームを開発しているデベロッパーは、新しいGame Porting Toolkitを使えば3つの簡単なステップでMac対応ができる
- 既存のWindowsゲームがMac上でどの程度動作するか、エミュレーション環境上で評価できる
- Game Porting Toolkitには新しいMetal Shader Converterが含まれており、これを使うとシェーダーの変換とコンパイルを行うことができる
- Metalを使ってグラフィックスコードの変換とゲームの最適化を行える
カメラ
- AVCaptureのパフォーマンスが大幅に向上した
- シャッターラグが0に
- カメラが勢いよく押されたときに画質を動的に調整
- 高品質な画像をバックグラウンドで処理できる
- 今年後半にはボリュームボタンでシャッターが切れるようになる
写真表示
- iPhone 12以降で撮影された写真はHDRになっている
- HDRビデオには業界標準があったが、HDR写真の保存と表示には標準がなかった
- Appleが写真のエンコードと表示に関する仕様を策定し、国際標準化機構で承認された
- iOS、iPadOS、macOSでAPIとして利用できるようになった
動画
- オーバーレイエフェクトなどができる
- ScreenCaptureKitの画面共有とカメラ機能がアップデートされている
- 複数のウィンドウやアプリを一度にキャプチャできる
- 単一のウィンドウを共有するときにより映りの良い解像度にしてくれる
- iPadが外部カメラをサポート
- tvOSにカメラとマイクの機能を追加
- Continuity Cameraを使えば、iPhoneやiPadを利用してビデオ、オーディオ接続ができる
watchOS
- Vertical TabViewsでページサイズを変えることができ、アプリ内でスクロールができる
- 新しいcontainerBackgroundを使えばタブごとにグラデーションで色を変えることもでき、ユーザが今どのにいるのか把握しやすくなる
- 新しいToolbarItemではコーナーを有効に活用でき、必要に応じて自動で中央配置もできる
- NavigationStackをNavigationSplitViewに置き換えるとより柔軟に表現できる
- 新しいCustom Workout APIではアプリからフィットネスプランを共有できる
- 新しいCoreMotion APIならゴルフやテニスのスイング解析が捗る
アクセシビリティ
- アニメーションや点滅する光に敏感なユーザーへのサポートを拡充
- アニメーション画像の一時停止
- SafariやMessagesなどのアニメーションGIFの動きを停止できる
- 環境変数にaccessibilityPlayAnimatedImagesがあるので、それによってアニメーション画像と静止画像の切り替えができるよう実装できる
- 点滅光を暗くする
- 明るく点滅する光を自動的に暗くできる
- AVFoundationに点滅する要素を識別して暗くする機能が追加されている
- メディア再生にAVFoundationを使っている場合は特に追加対応はいらない
- カスタムメディアプレイヤーを使っている場合は、Dim Flashing Lights APIを使って点滅するビデオコンテンツを識別し、自動的に暗くなるようにする
プライバシー
- カレンダーのアクセス許可
- 多くの場合、カレンダーの読み取り許可は必要なく、イベントを書き込むだけで良いことが多い
- カレンダー書き込みだけの新しいパーミッションを追加した
- 写真のアクセス許可
- 今までは選択した写真のみ許可かライブラリ全体への許可かの2択だった
- ユーザーがアプリで共有する写真をより簡単に選択できるようにしたいと考え、新しいフォトピッカーを追加した
- アプリのプライバシー
-
ユーザーが自分のデータがどのように保護されているかを理解することは重要
-
App StoreアプリにPrivacy Nutrition Labelsを追加
- アプリがどのようなデータを収集し、それをどのように活用しているのかをユーザーに理解してもらう
- アプリの中にはサードパーティーのSDKがユーザデータをどう扱っているかはっきりわからないために正確にラベルをつけられない可能性がある
- プライバシーマニフェストを導入(privacyinfoファイルの導入)
- Xcodeが使っている全てのサードパーティSDKを1つのレポートに集約してくれる
- サードパーティSDKの署名を導入
- サードパーティーSDKの新しいバージョンが出たとき、Xcodeが同じ開発者によって署名されているかチェックしてくれる
- プライバシーマニフェストを導入(privacyinfoファイルの導入)
-
Communication Safety
- iOS 15ではMessagesにCommunication Safety機能を導入して子供達を守った
- Sensitive Content Analysis frameworkを使えば数行書くだけでヌードを含む写真や動画を検出することができる
- センシティブコンテンツ警告によって誰もが敏感なコンテンツもぼかせるようになる
- このフレームワークではユーザがCommunication Safety、Sensitive Content Warningのどちらを有効にしているのかわかるようになっているので、それによってアプリの体験をカスタマイズすることができる
-
App Store
- アプリ内課金を提供する場合、ユーザーが十分な情報を得た上で購入できるように価格や購読期間などの重要な詳細を提示することは重要
- とはいえ多くの開発者がこれを正しく理解するのに苦労していた
- ので、StoreKitを進化させて、アプリの商品化UIを強化する新しいビューを提供
- ProductView:App Store Connectで定義したデータを使って商品を表示することができる
- SubscriptionStoreView:1行書くだけでサービスの説明、価格、期間を提示できる
- これらのビューはすべてのプラットフォームに対応しているし、アクセシビリティやローカライズにも対応している
- シミュレータで購入までの流れを確認することができる
- ユーザーの購入履歴や購読状況に基づいてオファーを提示するのは難しいと知っているので、SubscriptionStoreViewでは自動的に適切なオファーを表示できるようにした
広告(SKAdNetwork)
- プライバシーを守りながら、広告キャンペーンがアプリのダウンロードにどれだけ効果があったか計測するお手伝いをする
- SKAdNetwork 5ではダウンロード後のコンバージョン測定だけでなく、広告をタップしてアプリを開いた後のコンバージョンも測定できるようになる予定
- SKAdNetwork 5はiOS 17リリースとともに利用可能になる予定
Xcode
- 最も関連性の高い補完から表示されるようになる
- アセットカタログリソースのシンボルを自動的に生成するようになるので、コード補完が効くようになる
- Swift Macroによって、SwiftUIのプレビューは#Previewで囲むだけでよくなった
- プレビュー
- 異なるプラットフォームのプレビューもよりスムーズに確認できるようになった
- SwiftUIだけでなくUIKIt、AppKitでもプレビューを確認できるようになった
- gitのステージング機能が使えるようになった
- テスト
- 同じアサーションメッセージを持つものなど、共通の失敗パターンを含むものがまとまって表示される
- デバイスや言語など、さまざまな構成のテストがどのように実行されたかを包括的にまとめ、パターンを発見するのに役立つレポートが出てくる
- 失敗したテストのUIキャプチャを見ることができる
- テストタイムラインを見ることによって、「検索フィールドをタップした瞬間」などのUIも確認することができる
- 動画のような形で記録されているので、アニメーションやジェスチャーなどのレビューもできる
- アクセシビリティフレームも見ることができる
- Xcode Cloud
- パフォーマンスを向上させた
- TestFlightに配布する時、テスターノートを作成して共有できるようになった
- ユーザーと共有する前に、アプリに悪意のあるコンポーネントがないか自動的にチェックできる
- コンパイラを最適化したことによって、リンク速度が5倍になった
- 新しいリンカーは、デバッグバイナリのサイズを最大30%削減している
- Mac App Storeでは、Xcodeのサイズが50%小さくなった
- すべてのシミュレータがオンデマンドでダウンロードできるようになった
visionOS
- SwiftUI、RealityKit、ARKitは、visionOSのために拡張された
- アプリは基本的に共有スペースにて起動される
- 共有スペースは、Macのデスクトップと同じように、アプリケーションが並んで存在する場所
- ウィンドウ
- アプリは1つ以上のウィンドウ(SwiftUIのシーン)を開くことができる
- 従来のビューとコントロールを含むことができる
- 3DオブジェクトとRealityViewsがサポートされており、3Dコンテンツと2Dコンテンツの共存もできる
- ボリューム
- 三次元オブジェクトを表示することができる
- ボリュームは移動させたりあらゆる角度から見ることもできる
- フルスペース
- ユーザがゲームをするなど没入感をコントロールしたい場合は、専用のフルスペースを開いて3Dオブジェクトだけをユーザーの視界に表示させることができる
- 既存のiPadやiPhoneのアプリをサポートしていて、スケーラブルな2Dウィンドウとして使用できる
- SwiftUIとUIKitでUIを、3Dコンテンツ、アニメーション、視覚効果のためにRealityKitを、ユーザの周りの空間を理解するためにARKitを使用する
visionOSアプリの作り方
- XcodeでvisionOSデスティネーションを追加する
- offset(z:) Modifierを使えば奥行きがあり浮かんでいる状態を表現できる
- オフセット値を高くすると、低いビューの前に表示される
- SwiftUIとRealityKitのAPIを簡単に混ぜることができる
- オーナメントを使えば、ウィンドウなどのエッジにUIコンポーネントを貼り付けることができる
- ユーザーの視線に応じてホバーエフェクトをつけてUI要素を強調表示することもできる
RealityKit
- 照明を自動的に調整して床やテーブルに影を落とすことで、体験をよりリアルにすることができる
- Dynamic foveationによってレンダリングがさらに効率化されている
- アイトラッキングを活用してユーザーが集中している領域を選択的に非常に高い忠実度でレンダリングできる
- 周辺部のコンテンツのレンダリングコストを削減できる
- 画像ベースの照明アセット(IBL)を利用して、デフォルトの照明から変更することもできる
- MaterialXを採用したことによって、シェーダーを書くのが非常に簡単になった
- Houdini、Mayaのようなツールを使えば独自のカスタムシェーダーを作成することもできる
- RealityViewと呼ばれる新しいSwiftUIビューが提供されていて、好きな場所に3Dコンテンツを配置することができる
- 3Dコンテンツに2DのSwiftUIビューを埋め込むこともできる
ARKit
- ユーザーの周りの空間を理解して、空間との相互作用を可能にする
- ユーザーの許可があれば、ARKitの機能をフルスペースアプリで直接利用することができる
- 既存のARKitアプリをvisionOSに簡単に移行できる
- visionOSではSkeletal Hand Trackingにもアクセスできるようになった
- ハンドトラッキングを使用してカスタムジェスチャーを作成したり、ユーザーの手をデジタル情報で補強したりすることもできる
アクセシビリティ
- 身体や運動に障害のあるユーザーでも目、声、またはその両方を組み合わせて体験することができる
- 代替ポインターとしては人差し指、手首、頭などがある
- visionOSにもアクセシビリティインスペクタがある
- visionOSアプリをアクセシブルにするために、オブジェクトの物理的な外観などの情報を伝えるラベルや説明を設定したり、ダイナミックタイプテキストを採用したりすることができる
Developer Tools
- Xcode Previewsを使えば、エディタを離れることなく見た目の確認ができる
- キーボード、トラックパッド、または互換性のあるゲームコントローラーを使ってシミュレータを動かすことができる
- シミュレータには昼夜と照明条件を組み合わせたシミュレーションシーンが用意されている
- Mac Virtual DisplayでXcodeを含めたMacの全機能を使うことも可能
- アプリのコンテンツが現実世界のコンテンツと衝突したり、現実世界のシーンを理解するのに役立つデバッグ機能もある
- Reality Composer Proを使えばvisionOSアプリ用の3Dコンテンツをプレビューすることができる
- 3Dモデル、アニメーション、画像、サウンドなどのアセットをインポートして配置できる
- コンテンツをVision Proに送信して、プレビュー、サイズ調整、回転を簡単に実行できる
- Vision Proでも従来と同じ感覚でTestFlightが使える
Unity
- Unityで作成した既存プロジェクトをVision Pro向けに再構築することができる
- Unityアプリを共有スペースで他のアプリと一緒に表示することもできる
コア技術
- Vision Pro用のアプリを作成するためのフレームワークは2つの目標を念頭に置いて設計されている
- 最小限の労力でハードウェアとソフトウェアを活用できるようにすること
- ユーザのプライバシーを保護すること
- 現実の世界では音は壁などにぶつかって跳ね返り、人の耳に届くまで空間内で反響するわけなので、これと同じようにする必要がある
- visionOSにはユーザの周囲を高度に理解する技術が整っている
- RealityKitを使えば、どこから音を出すかを決めるだけでvisionOSが自然に現実の世界に溶け込ませてくれる
- SwiftUIやRealityKitを使って作られたUI要素には、ホバーエフェクトが自動的にレンダリングされる
- ユーザがボタンを見た場合、タップする前にハイライトされる
- ユーザが指をタップすると、選択したことがわかるようになっている
- シェアとコラボレーションがVision Proの体験の中心的な部分
- FaceTime通話でどんなアプリのウィンドウも他のユーザと共有できる
- GroupActivities APIを採用すると、通話中の全員に対して自分が使っているアプリを起動するオプションが表示される
- SharePlayを使うとユーザ間でアプリの変更を同期させることもできる
- Spatial Personasの開発者向けプレビューは今年後半に公開する予定
今後の予定
- visionOS SDK、アップデートされたXcodeとSimulator、Reality Composer Proは、今月末に利用可能になる予定
- 今年の夏、Apple Vision Pro Developer Labsを開設し、Vision Proのハードウェアでアプリをテストできるようにする予定
- このラボは世界中のいくつかの場所に設置予定(東京含む)
Discussion