WWDC25:Optimize SwiftUI performance with Instruments

Instruments を用いた SwiftUI のパフォーマンス改善。スクロール時などに発生するラグ(hangs and hitches)について、SwiftUI の描画更新ロジックを図示しながら、ケースとその因果関係を説明してくれていて、解決方法も含め非常に参考になった。シンプルな作りのアプリでも、調べてみると実は似たような状況が眠っているのではないかと思った。


0:00 – Introduction & Agenda

  • パフォーマンス問題の症状(Hitch or Hang):レスポンシブ性の低下、アニメーションの停止・ジャンプ、スクロール遅延
  • Instruments での分析:SwiftUI コードがボトルネックとなっているケースに焦点

2:19 – Discover the SwiftUI instrument

  • SwiftUI テンプレートの構成
    • SwiftUI Instrument:SwiftUI 固有のパフォーマンス問題を特定
    • Time Profiler:CPU での作業をサンプリング
    • Hangs and Hitches instruments:アプリの応答性を追跡
  • SwiftUI Instrument トラックの構造
    • 調査時はまずここのトップレベルの内容を確認する
    • Update Groups:SwiftUI が作業している時間を表示
      • ここが空いていて、Update Profiles のグラフが跳ねている場合は、SwiftUI 外が原因の可能性
    • Long View Body UpdatesViewbody プロパティが長時間実行されている場合を強調
    • Long Representable UpdatesViewViewControllerRepresentable の長時間更新を特定
    • Other Long Updates:その他の長時間 SwiftUI 更新を表示
  • 色分け:オレンジと赤で hitch や hang への寄与度を示す
    • まずは赤の更新箇所から確認することが出発点
  • 要件:Xcode 26 のインストールと最新 OS での SwiftUI traces サポート

4:20 – Diagnose and fix long view body updates

  • Command-I で リリースビルド+Instruments 起動、SwiftUI テンプレートを選択し、記録ボタンをクリック、アプリを操作
  • 問題の特定:トップレベルの 長い更新レーンを調査
    • Long View Body Updates のオレンジや赤に注目
  • Time Profiler での分析
    • View body 実行中の CPU 使用状況をコールスタックを展開して確認
    • 例:distance プロパティでの MeasurementFormatterNumberFormatter の重い処理を特定
  • レンダーループ
    • 正常な場合:イベント処理 → UI 更新 → フレーム期限前に完了 → レンダリング → 表示
    • hitch の場合:UI 更新が期限を超過 → 次のフレームが遅延 → 前フレームが長時間表示
  • パフォーマンスを高める上で、長くかかるビューの更新以外にも注意すべきこと
    • 更新が無駄に多い場合:多数の比較的高速な更新でもフレーム期限を逃す可能性

19:54 – Understand causes and effects of SwiftUI updates

  • SwiftUI の宣言的性質:UIKit のバックトレースとは異なり、SwiftUI では更新原因の特定が困難
  • AttributeGraph の動作
    • View protocol への準拠と body プロパティの実装
    • 親→子へ、属性 (attribute) を受け渡し、状態管理と依存関係の定義
      • ビュー構造体は頻繁に再作成されるが、属性がIDを維持し状態を維持する
    • state 変数変更時のトランザクション作成と期限切れのマーキング、依存関係チェーンで期限切れの更新伝播
    • 期限切れの依存関係がないものから更新を開始し、依存関係を追って逐次的に更新
  • 「なぜビュー本体が実行されたのか」→「何がビュー本体を期限切れとマークしたのか」を理解する → Cause & Effect Graph(原因と結果グラフ)
  • Cause & Effect Graph
    • 更新の原因と効果の関係をグラフで視覚化
    • 青いノード:自分のコードやユーザーアクション
    • 矢印:update や creation の関係を表示
  • ビューのデータ依存関係を細分化し、必要な箇所のみが更新されるようにするべき
    • 例:ビューがコレクションの表示する配列すべてへの依存関係を持つのではなく、ビューごとに @Observable な ViewModel を持たせる
  • Environment の考慮事項
    • EnvironmentValues 構造体への依存による更新伝播
    • 頻繁に変更される値(geometrytimer など)の environment 保存を避ける

35:01 – Next steps

  • ベストプラクティス
    • View body を高速に保つ
    • 不要な View body 更新の排除
    • データフローの設計で必要時のみ更新
    • 頻繁に変更される依存関係への注意
    • 開発中の定期的な Instruments 使用
  • 重要なポイントView body が高速かつ必要時のみに更新されることを保証する

WWDC25:Meet WebKit for SwiftUI

とうとう WebView が SwiftUI に登場、WKWebViewUIViewRepresentable でラップして作り込んだり SFSafariViewController を使うべきか否か悩まなくて良くなるはず。JavaScript との連携や、特定位置スクロールなどもしっかりサポートされていて心強い。


0:00 – Introduction

  • WebKit は Safari, Mail、そして iOS, iPadOS, visionOS, macOS の無数のアプリの中核を担うブラウザエンジン
  • WebKit for SwiftUI の登場:全く新しい SwiftUI API により、Web コンテンツをアプリに統合することがより簡単に
  • 美しい Web コンテンツの表示が WebView を作成して URL を提供するだけで可能
  • WebKit がサポートする全プラットフォームで動作

1:54 – Load and display web content

  • WebView API の基本
    • 新しい SwiftUI ビューで Web コンテンツを簡単に表示
    • URL を提供するだけで自動的にロードして表示
    • 複数の URL の切り替えにも自動対応
      • WebView(url: toggle ? URL1 : URL2) で条件が切り替わるたびに自動的に新しい Web ビューが読み込まれる
  • WebPage クラスの活用
    • 新しい Observable クラスで Web コンテンツを表現
      • e.g. .navigationTitle(webPage.title) でタイトルを常に追従させる
    • Swift と SwiftUI と完璧に連携するよう設計
      • Web コンテンツの読み込み、コントロール、通信を行え、完全に単独で利用可能
      • WebView と組み合わせることで豊かな体験を構築
  • 多様なコンテンツロード方法
    • Loading URL requests:URLRequest を使用した load API
    • Loading HTML strings:HTML 文字列とベース URL を直接提供
    • Loading data:Web アーカイブデータ、MIME タイプ、文字エンコーディング、ベース URL を指定
  • URLSchemeHandler プロトコル
    • カスタムスキームの処理でアプリバンドル内のコンテンツやローカルファイルにアクセス
    • 独自の Scheme Handler を実装し、カスタムスキーム URL のナビゲーションを処理(e.g. lakes://
    • URLSchemeHandler プロトコルに準拠する型を作成し、reply 関数で URLSchemeTask 結果の async sequence を返す
      • URLResponse を含む URLSchemeTaskResultyield し、その後 Data を提供(同期的)
    • AsyncSequence により非同期データストリーミングも可能

9:37 – Communicate with the page

  • ナビゲーションイベントの観察
    • WebPagecurrentNavigationEvent プロパティでナビゲーション状態に簡単アクセス
    • Observable により SwiftUI と完璧に連携
  • ナビゲーションイベントタイプwebPage.currentNavigationEvent):
    • .startedProvisionalNavigation:ナビゲーション開始
    • .receivedServerRedirect:サーバーリダイレクト時
    • .committed:メインフレームのコンテンツ受信開始時
    • .finish:ナビゲーション完了時
    • .failed / .failedProvisionalNavigation:失敗時
  • Observations API との連携
    • Swift 6.2 の新しい Observations API を使用
    • currentNavigationEvent から async sequence を作成
    • for-await ループでイベント変化を観察
  • WebPage の observable なプロパティ
    • title, currentURL, estimatedProgress, themeColor など
  • JavaScript 通信
    • callJavaScript API で直接 JavaScript を評価
    • JavaScript 関数を記述し、callJavaScript で実行
    • 戻り値は optional Any なので、適切な Swift 型にキャスト
    • 引数辞書を提供可能:キーは JavaScript のローカル変数として表現
  • カスタムナビゲーションポリシー
    • WebPage.NavigationDeciding プロトコルでナビゲーションポリシーをカスタマイズ
    • ナビゲーションの異なるステップ(開始前、レスポンス受信時、認証時)でポリシー(allow / cancel)を指定
    • NavigationActionNavigationPreferences を使用してナビゲーションを制御

15:44 – Customize content interaction

  • スクロール動作のカスタマイズ
    • .scrollBounceBehavior modifier で標準的なスクロール動作を制御
    • 垂直・水平軸のバウンス動作を個別に設定可能
    • basedOnSize オプションでコンテンツサイズに基づくバウンス制御
  • visionOS での Look to Scroll
    • .webViewScrollInputBehavior modifier で Look to Scroll を設定
    • デフォルトでは無効、enabled に設定することで有効化
  • Find-In-Page サポート
    • 既存の .findNavigator modifier が WebView と完璧に連携
    • iOS/iPadOS:オンスクリーンキーボード表示時または WebView 下部に表示
    • macOS/visionOS:WebView 上部に表示
  • スクロール位置の制御
    • .webViewScrollPosition modifier でスクロール位置を WebView に関連付け
    • scrollTo を使用して特定の位置にスクロール
    • JavaScript と連携してセクション位置を計算
  • スクロールジオメトリの監視
    • .onScrollGeometryChange modifier でスクロールジオメトリの変更を監視
    • コンテンツオフセットやサイズなどの変更に対応
    • 変換関数を使用して特定の値の変更時にクロージャを実行
    • 選択されたセクションとスクロール位置の同期が可能

WWDC25:Meet SwiftUI spatial layout

SwiftUI による 3D レイアウトについて。


0:00 – Introduction

  • visionOS 26 で SwiftUI の新しい Spatial Layout 機能について紹介
  • 既存の 2D レイアウトツールとアイデアを使って 3D アプリケーションを構築可能
  • アニメーション、リサイズ、状態管理の組み込みサポートを活用

2:47 – 3D views

  • visionOS では全ての View が 3D になり、width, height に加えて depth, Z position も計算される
  • カスタムの debugBorder3D modifier を用いて解説
  • Model3DImage と同様に固定の width, height, depth を持つ
  • Image, Color, Text などは depth が 0 で iOS と同様の動作
  • RealityViewGeometryReader3D は利用可能な depth を全て使用
    • 従来の SwiftUI と同じレイアウトシステム
  • scaledToFit3D モディファイアでアスペクト比を維持しながら 3D 空間にフィット可能
    • Window では width-height のアスペクト比はユーザー操作によって代わるが、奥行きの提案はウインドウで固定されている
    • Volume は深さもサイズ変更可能
  • ZStack の挙動

7:18 – Depth alignments

  • visionOS 26 で DepthAlignments が追加され、既存の Layout タイプを 3D View に適応
    • VStackLayout などで depthAlignment モディファイアを適用して深度方向の配置を制御 (e.g. VStackLayout().depthAlignment(.center)  {…)
    • front, center, back の標準的な depth alignment を提供
  • Custom Depth Alignment で DepthAlignmentID プロトコルに準拠した独自の配置を定義可能
    • e.g. .alignmentGuide(.customAlignment) { $0[DepthAlignment.center] }

11:41 – Rotation layout

  • rotation3DLayout モディファイアで View の回転をレイアウトシステムに反映
    • 従来の rotation3DEffect は視覚効果のみでレイアウトには影響しなかったが、rotation3DLayout はレイアウトも変更
  • 任意の角度と軸での回転をサポート
  • 例:カスタム実装の RadialLayout と組み合わせて 3D カルーセルを構築可能
  • 複数の rotation3DEffect を組み合わせて複雑な 3D 配置を実現

16:28 – Spatial containers

  • SpatialContainer で複数の View を同じ 3D 空間に配置(入れ子人形方式)
  • 3D alignment(bottomFront, topTrailingBack など)で配置を制御
  • 選択状態の表示や UI 要素の重ね合わせに活用
  • spatialOverlay で単一の View を別の View と同じ 3D 空間に重ねる
  • debugBorder3D modifier の実装方法
    • spatialOverlay で実装

WWDC25:Set the scene with SwiftUI in visionOS

シーン復元や物理空間との連携について。Clipping Margins でボリュームの領域外部にコンテンツを描画できるようになったのはありがたい。システム許容のマージン領域としてどんな値が取れるのか(たとえば床より下、天井より上、壁より向こうは許容されない?)が気になっている。

ユーザーの視点移動に応じたコンテンツの変化(onVolumeViewpointChange)も具体的にどのような情報の取れ方や、コンテンツへの活かし方が可能か実験してみたい。


0:00 – Introduction

  • visionOS 26 で追加された新しいシーン機能の概要を紹介
  • Window, Volume, Immersive Space の シーンタイプに追加されたAPI の解説

2:11 – Launching and locking

  • シーンのロックと復元(locking, restoration)API が追加され、物理空間の特定の部屋にウインドウやボリュームを固定できる(イマーシブ空間は復元されない)
    • ほとんどのユーザーが復元できることを望むため、シーン復元を優先するべき
    • 一時的、コンテンツ依存なUI、ワンタイムアクションなどには .restorationBehavior(.disabled) で復元を無効化可能
  • defaultLaunchBehavior でアプリ起動時に表示するウインドウを柔軟に制御できる
    • e.g. ウェルカム画面の表示
    • Info.plist Preferred Default Scene Session Role と起動ウィンドウの役割との一致が必要
      • e.g. Window Application Session Role 指定はボリュームが無視される
    • .defaultLaunchBehavior(.supressed)でアプリ再起動時の再表示を抑制
  • Unique Window で重複しないウインドウを作成可能
    • WindowGroupWindow

8:15 – Volumetric enhancements

  • surface snapping(物理環境へのスナップ)の対応
    • ウインドウは壁など垂直面に
    • ボリュームは机など水平面に
    • ウィジェットは垂直水平どちらも
    • surfaceSnappingInfo environment でスナップ状態を取得可能
      • isSnapped
      • ARKit によるスナップ表面の分類情報を取得可能
        • ユーザー許可が必要:Info.plist に設定
  • onVolumeViewpointChange modifier で、視点の切り替えに表示を追従
    • 例:視点を遮る壁を非表示にする
  • Presentations(popover, menu, sheet など)が Volume, RealityView, RealityKit でも利用可能に
    • presentationBreakthroughEffect で 3D コンテンツとの重なり方を制御
  • Clipping Margins API の追加
    • preferredWindowClippingMargins で、シーン境界外にビジュアル表現を拡張できる
    • 視覚のみでインタラクティブではない
    • windowClippingMargins environment で、システムによって許可されたマージンを取得

15:58 – Immersive space

  • Immersive Space で world recentering イベントや immersion style のカスタマイズが可能に
  • .onWorldRecenter でリセンタリングを検知(位置の再計算)
  • Progressive immersion style でのポータルのアスペクト比や範囲を調整可能に
    • .landscape, に加え .portrait
    • .portrait は iOS ゲームや多くの動きが含まれる体験に有効
  • Mixed immersion style で周囲環境に溶け込む
    • システム環境(e.g. 月)との共存も実現 .immersiveEnvironmentBehavior(.coexist)
  • Remote immersive space で macOS から Vision Pro へ Metal レンダリングを転送し、即時プレビューが可能
    • CompositorContentCompositorLayer に SwiftUI の環境変数やモディファイアを適用可能

22:16 – Scene bridging

  • UIKit アプリでもシーンブリッジングにより SwiftUI の Volume, Immersive Space を統合可能
    • Safari なども Spatial Browsing でこの仕組みを活用
  • UIHostingSceneDelegate を使い SwiftUI シーンを UIKit/macOS アプリに追加できる
  • configurationForConnectiong でホスティングデリゲートクラスを設定し外部イベントにも対応可能

WWDC25:Better together: SwiftUI and RealityKit

SwiftUI と RealityKit の相互連携に関するアップデート。盛りだくさんすぎた。オブジェクト操作を細かくハンドリングできるのは良い。ポップオーバー表示など自前でやっていたことも実装が楽になりそう。update クロージャーについては、無限ループの危険性を含めてかなり尺を使って解説しており、使いこなすのは難しそう。

CESや「モデル」の意味違いなど、アップデート以外の基礎的なテーマも網羅していて、情報量の多さをフォローする優しさを感じた。


0:00 – Introduction

  • SwiftUI と RealityKit の連携強化について紹介
  • 3D モデルと UI を組み合わせた新しい体験を実現

1:24 – Model3D enhancements

  • visionOS 26 で強化された二つの機能
    • Model3D にアニメーション再生
      • Model3D は SwiftUI ビューとして SwiftUIレイアウトシステムに従う
      • Model3DAsset でアニメーションリソースを読み込み、AnimationPlaybackController で制御(再生・停止・シーク)が可能
        • AnimationPlaybackControllerObservable に(例:time の変更監視)
    • ConfigurationCatalog からの読み込み
      • ConfigurationCatalogModel3D を初期化し、複数の外観やボディタイプを切り替えられる(@State で参照)

6:13 – RealityView transition

  • ParticleEmitter などのコンポーネント追加には Model3D が対応していないので RealityView への切り替えが必要
    • Model3D が intrinsic size に基づいてレイアウトされるのに対し、SwiftUI の与えたられたスペースを RealityView がすべて占有し、レイアウト崩れが発生
    • realityViewLayoutBehavior 修飾子:.fixedSize, .flexible, .centered で制御
      • make クロージャ実装後 1度だけ評価される
      • RealityView の原点を再配置するだけ
  • RealityKit の Entity に直接アニメーションやエフェクトを追加可能
    • ParticleEmitter で作成したエフェクトをコンポーネントに適用可能
    • RealityKit がプリセット値を提供し、Reality Composer Pro で調整可能
    • entity-component system
  • RealityView / Model3D の使い分け観点

11:52 – Object manipulation

  • visionOS 26 で Object Manipulation API が追加され、SwiftUI, RealityKit 双方で 3D オブジェクトの移動 回転 拡大縮小が可能
    • SwiftUI では manipulable モディファイア
      • orientation でサポートする操作
      • intertia で慣性(重さ)設定
    • RealityView では ManipulationComponent
      • メモ:hoverEffect.spotolight 指定
      • ManipurationEvents で ユーザー操作の開始終了、ハンドオフ(e.g. 右→左)などに応じた応答を実装可能(サウンド再生)
      • カスタムサウンド再生は、manipulationComponent.audioConfiguration = .none で無効化し、イベントサブクライブ内部で自前実装

15:35 – SwiftUI components

  • SwiftUI を RealityKit エンティティに統合するための3つのコンポーネント
    • ViewAttachmentComponent:SwiftUIビューをエンティティに直接追加
    • GestureComponent:エンティティに通常の SwiftUI ジェスチャをアタッチ、ジェスチャー値はエンティティの座標空間で報告
      • ジェスチャー対象のエンティティに、InputTargetComponent, CollisionComponent 両方を追加
    • PresentationComponent:RealityKit シーン内から SwiftUI ビューを popover のように表示

19:08 – Information flow

  • visionOS 26 で EntityObservable になり、SwiftUI との双方向データ連携が可能
  • Entity の位置、拡大縮小、回転など状態変化を SwiftUI View で監視し、UI に反映できる(withObservationTracking ブロック or SwiftUI 組み込みの監視)
  • SwiftUI と RealityKit の双方向連携
    • 従来:SwiftUI → update クロージャ → RealityKit
    • 逆方向も可能:RealityKit → Observable → SwiftUI
    • update クロージャの無限ループ回避策や、状態管理のベストプラクティス:
      • update クロージャで 監視対象のステートを更新しないこと
      • 更新する必要がある場合は、同値チェックを挟むこと
      • システムの更新関数(SwiftUIビュー本体評価外)から更新すること:e.g. gesture クロージャ
      • などなど
      • そもそも update クロージャを使わなければ避けられる

24:56 – Unified coordinate conversion

  • 新しい CoordinateSpace3D プロトコルで SwiftUI, RealityKit 間の座標変換が容易に(抽象座標空間)
  • GeometryProxy3D, Entity, Scene などが CoordinateSpace3D に準拠し、異なる空間間での距離計算や位置変換が可能
  • これにより 3D UI と 3D オブジェクトの連携がより直感的に

27:01 – Animation

  • SwiftUI のアニメーション API で RealityKit のコンポーネント(Transform, Audio, Model, Light など)を暗黙的にアニメーション可能
  • realityViewContent.animate()Entity.animate() で状態変化に応じたアニメーションを実装
  • Object Manipulation API と組み合わせてカスタムリリース挙動やバウンス効果も実現
    • 例:manipulation.releaseBehavior = .stay で無効化し、ManipulationEvents のイベント捕捉でアニメーションを自前実装

WWDC25:What’s new in visionOS 26

visionOS のアップデート。SwiftUI と RealityKit との親和性が高まったことが嬉しい。ハンドトラッキングの即応性が高まったのも嬉しい。あとは、AI、Speech-to-Text、ビデオ周り、エンタープライズ向けのアップデート。

触れる機会はなさそうだが、Enterprise API でウィンドウがユーザー追従してくれそうなのが気になる。


0:00 – Introduction

  • visionOS 26のリリースにより、アプリを次のレベルに引き上げる多くの新機能が追加
  • 本セッションでは、ボリュメトリック機能、システム機能、ゲーム・アクセサリ、共有体験、没入型メディア、空間Web、エンタープライズAPIなど、幅広い新機能を紹介

1:34 – Volumetric features

  • SwiftUIに3Dレイアウトを強化する新機能が多数追加 (Spatiall layout)
    • depthAlignment でZ軸方向の整列が簡単に
    • rotation3DLayout でレイアウトを意識した回転が可能に
    • その他多くの従来のモディファイアが3Dにも対応
  • Volume内でAlert, Sheet, Menu, PopoverなどのUIプレゼンテーションが可能に
    • Volumes, Ornaments, Attachments から表示可能
  • dynamic bounds restrictions で、アプリの境界を越えてコンテンツをレンダリングし、現実世界とシームレスに融合
    • .preferredWindowClippingMargins modifier
  • 新しいObject Manipulation API や RealityKit の ManipulationComponent で、3Dオブジェクトの直感的な操作を実現
  • SwiftUI, RealityKit, ARKit間の連携が強化され
    • 座標変換やジェスチャーハンドリングが容易に ( SwiftUI view → ARKit accessor anchor でさえも可能)
    • RealityKit の Observable entity が、SwiftUI のアップデートとも連携可能に
    • ViewAttachmentComponent: UIをRealityView のコードに対してインラインに実装可能に
    • Model3D to RealityView
      • アニメーションの再生制御が可能
      • .realityViewSizingBehavior: 3D content内に対しどうサイズ調整するか

10:28 – System features

  • Apple Intelligence 機能の利用
    • Foundation Models framework により、オンデバイスLLMへのアクセスが可能に
    • Image Playground が進化し、ChatGPT 連携や新しいスタイルを追加
  • 新しいSpeech-to-text API SpeechAnalyzer と新モデル SpeechTranscriber が登場。高速・高精度な文字起こしをオンデバイスで実現。
  • ウィンドウやシーン、Quick Look コンテンツが再起動後も同じ場所に復元されるように
    • SwiftUI の復元APIにより、どのシーンに対し復元を許容するか指定可能に
      • .defaultLaunchBehavior(.supressed)
      • .restorationBehavior(.disabled)
  • WidgetKitもvisionOSに最適化され、ガラスや紙のような質感調整や、ユーザーとの距離に応じた表示切替が可能に
    • levelOfDetail widgetTexture supportedMountingStyles

15:21 – Games and spatial accessories

  • ハンドトラッキングが最大3倍高速化(90Hz)し、ゲームの応答性が向上
  • 新しい空間アクセサリ (spatial accessories) に対応
    • Sony PlayStation VR2 Sense controller: 6DoFトラッキング可能なゲームコントローラ
    • Logitech Muse: 精密な描画や彫刻に適したクリエイティブツール
    • Shared space / Full space で有効
    • RealityKit / ARKit でトラック
  • ハイエンドiPadゲームの Vision Pro 対応
    • App Store Connect 経由で、既存のハイエンドiPadゲームをvisionOSに簡単に移植可能に
    • Progressive Immersion Styleが拡張され、既存のiOS/iPadOSゲームをvisionOSに最適化しやすく
  • Compositor Services
    • ホバーエフェクト: Metal immersive apps にも対応
    • 動的なレンダー品質 (Dynamic render quality) 調整に対応
  • macOS spatial rendering: Macのレンダリング能力を使って、高品質なイマーシブコンテンツをVision Proにストリーミング可能に
  • TabletopKit が進化し、カスタムデータやカスタムアクションを簡単に追加・同期できるようになり、共有ゲームの開発が容易に

23:00 – Shared experiences

  • SharePlayと 空間ペルソナ(Spatial Personas)により、遠く離れた人とも同じ空間でコンテンツを共有する魔法のような体験が実現
  • Nearby Window Sharing により、相手の実際の位置や動きを仮想空間上に再現し、より自然な共同作業や会話を可能にする

25:03 – Immersive media ecosystem

  • RealityKit の ImagePresentatinoComponent により、3D spatial content の生成が容易に
  • Apple Immersive Video(AIV)をサードパーティアプリに直接埋め込み可能に
  • 180度、360度、WideFov フォーマットへも対応
  • Apple Projected Media Profile(APMP)

31:04 – Spatial web

  • Spatial Browsing: Safari のナビゲーションバーからボタンを押すだけで体験可能
  • visionOSのSafariで、WebXRとmodel要素によるイマーシブなWeb体験をサポート
  • Webサイト上で3Dモデルを表示したり、VR/ARコンテンツを体験したりすることが可能に
  • Web Backdrop: 開発者用の新しいプレビューツール
    • ビジターにカスタム immersive environments を提供する際に使用
  • Look to Scroll: .scrollInputBehavior(.enabled, for: .look)

34:13 – New enterprise APIs

  • メインカメラのアクセスを shared space に活かすことができ、他の spatial app と同時にカメラ利用を伴う体験が提供可能
  • Stereoscopic Main Session: 左右のメインカメラ個別/同時にアクセス可能
  • ARKit の CameraRegionProvider : スタビライズされたビデオフィードにアクセス可能
  • 新しいAPI Protected Content: .contentCaptureProtected(bool) を指定することで、特定のビューをキャプチャーから保護することができる
  • Window Follow Mode: ユーザーの位置にウィンドウが自動的に追従する
  • Nearby Window Sharing for Enterprise
    • SharedCoordinateSpaceProvider