ハイライト
ほとんどの iPad と iPhone アプリは、変更なしで visionOS 上で動作します。システムは iPad 版(横向き)を優先表示し、ウィンドウのスケーリング、回転、ジェスチャマッピング、Optic ID 認証を自動処理します。開発者は Info.plist の向きと機能宣言が正確かどうかを確認するだけで十分です。
主要内容
すぐに使えるシステムサポート
(00:29) visionOS は iOS の上に構築されています。iPad と iPhone アプリはウィンドウとして表示され、ライトモードのスタイルを使用します。システムは iPad 版を優先し、横向きで表示します。アプリが iPhone のみ対応の場合は、縦向きの比率で表示されます。
ウィンドウの操作はシステムが管理します:
- 複数の向きに対応している場合、ウィンドウ右上に回転ボタンが表示されます
- 角をドラッグしてリサイズすると、システムがアスペクト比を維持します
- 最小/最大サイズに達すると、角が弾性フィードバックを返します
(03:05) ユーザーは自然な入力でコンテンツと対話します: 視線+指タップで選択、直接手を伸ばしてタッチ、Bluetooth トラックパッド、またはゲームコントローラー。これらのシステム定義の操作はすべてアプリが既に扱うイベントタイプに変換されるため、慣れ親しんだイベント処理技術をそのまま使えます。
システムが自動適応する機能
(03:34)
- システムビュー: ドキュメントピッカー、フォトピッカーなどのシステムビューはプラットフォームの外観に自動的に合わせます
- 生体認証: Touch ID / Face ID は LocalAuthentication 経由で Optic ID に自動転送され、追加作業は不要です
- Look to Dictate: 検索バーの新しい入力方式で、ユーザーはマイクアイコンを見つめて音声入力します。iPad/iPhone アプリではデフォルトで無効で、明示的に有効化する必要があります
プラットフォームの違いと対処法
(04:02)
向きの制御: visionOS にはデバイス回転の概念がありません。アプリの向きはデバイスの向きで決まりません。新しい UIPreferredDefaultInterfaceOrientation Info.plist キーで向きの設定を表現します。このキーは visionOS でのみ有効で、他のプラットフォームには影響しません。
// Info.plist キー
UIPreferredDefaultInterfaceOrientation
その他の重要な Info.plist キー:
UISupportedInterfaceOrientations: システムが回転ボタンの表示要否を判断するために使用しますUIRequiredDeviceCapabilities: App Store Connect がアプリとデバイスの互換性を判断するために使用します
(05:49) ジェスチャの違い: 最大2つの同時入力(片手1タッチ)をサポートします。システムジェスチャ(2本指以下)はシームレスに動作します。カスタムジェスチャ認識もサポートされますが、自然な入力に合わせた調整が必要な場合があります。
ARKit の変更: 既存の ARView と ARSession は visionOS では利用できません。新しい API に基づいて AR 体験を再構築する必要があります。
カメラ: デバイスには複数のカメラがあり、使用前に利用可能性を確認する必要があります。
Look to Dictate の有効化
(07:59)
// SwiftUI
@State private var searchText = ""
var body: some View {
NavigationStack {
Text("Query: \(searchText)")
}
.searchable(text: $searchText)
.searchDictationBehavior(.inline(activation: .onLook))
}
// UIKit
let searchController = UISearchController()
searchController.searchBar.isLookToDictateEnabled = true
キーポイント:
- SwiftUI では
.searchDictationBehavior(.inline(activation: .onLook))修飾子を使用します - UIKit では
searchBar.isLookToDictateEnabled = trueを設定します - iPad/iPhone アプリではデフォルトで無効で、動作を確認してから有効化できます
- iOS と iPadOS では no-op で、条件付きコンパイルは不要です
デプロイの流れ
(09:30) xrOS SDK をインストールすると、Xcode は iOS SDK を使用するプロジェクトに「xrOS Device (Designed for iPad)」実行ターゲットを自動追加します。スキームが別のプラットフォームや auto SDK を設定している場合は、手動で Designed for iPad ターゲットを追加できます。そのターゲットを選択して直接ビルド&実行します。
互換性のあるアプリはすべて App Store に自動的に表示されます。利用できない機能に依存する場合は、App Store Connect で利用可能性を管理できます。
詳細
availability チェックでプラットフォーム差異を処理
(08:12) プラットフォーム差異を処理する最善の方法は、これまで通り availability チェックを使うことです。
if #available(xrOS 1.0, *) {
// visionOS 固有のコード
}
// またはフレームワーク提供のチェックメソッドを使用
if AVCaptureDevice.default(.builtInWideAngleCamera, for: .video, position: .back) != nil {
// カメラ利用可能
}
キーポイント:
- フレームワークを呼び出す前にサポートを確認します
- 多くのフレームワークには便利なチェック関数が組み込まれています
- 特定のハードウェアに依存する設定にアクセスする際もチェックが必要です
- これらの手法により、各デバイスでアプリがより堅牢になります
Designed for iPad と Designed for visionOS
(10:24) 2つの SDK 選択肢:
iOS SDK(Designed for iPad):
- アプリはウィンドウとして表示され、iPad のようにライトモードを使用します
- 既存の外観と体験を維持します
- SpriteKit と Storyboard をサポートします
- Volume、Immersive Space、Ornament などの新機能は使用できません
xrOS SDK(Designed for visionOS):
- システム外観を使用: ガラス素材の背景で、色彩バランスとコントラストを動的に調整します
- Volume で 3D オブジェクトを表示できます
- Immersive Space で没入型体験を作成できます
- Ornament API でサイドツールバーを作成できます
- ARKit と RealityKit の全機能を利用できます
選択の目安:
- 没入型体験、新しいフレームワーク機能、システム外観を求める → xrOS SDK
- 既存の体験を維持したい → iOS SDK
フレームワークの利用可能性に関する注意
(10:34) iOS SDK のみがサポートする2つの重要な技術:
- SpriteKit
- Storyboard
アプリがこれらの技術に依存する場合は、iOS SDK を使い続ける必要があります。
ARKit、RealityKit などのフレームワークは xrOS SDK で進化した機能を持ち、Designed for visionOS アプリでのみ利用できます。
重要ポイント
1. 変更なしで visionOS App Store に公開
- やること: 既存の iOS アプリの互換性を確認して直接公開する
- 価値がある理由: ほとんどのアプリはコード変更が不要です。システムがウィンドウ管理、ジェスチャマッピング、認証転送を処理します。新しいプラットフォームのユーザーに届ける最速の方法です
- 始め方: Info.plist の
UISupportedInterfaceOrientationsとUIRequiredDeviceCapabilitiesを確認し、Xcode で xrOS Device (Designed for iPad) ターゲットを選択してテスト実行し、クラッシュがないことを確認してから提出します
2. 既存アプリに Look to Dictate を追加
- やること: 検索機能で Look to Dictate を有効にし、ユーザーが目と声で素早く入力できるようにする
- 価値がある理由: visionOS 固有の操作で、iOS/iPadOS には影響しません。アクセシビリティが向上し、タイピングが不便なときに素早く検索できます
- 始め方: SwiftUI で
.searchDictationBehavior(.inline(activation: .onLook))を追加し、UIKit ではisLookToDictateEnabled = trueを設定します
3. Designed for iPad から Designed for visionOS への移行を検討
- やること: xrOS SDK で再構築する価値があるか分析する
- 価値がある理由: xrOS SDK は Volume、Immersive Space、Ornament などの機能を解放します。ガラス素材の背景でアプリがプラットフォームのスタイルに溶け込みます
- 始め方: SpriteKit や Storyboard に依存しているか確認します(これらは iOS SDK のみ)。依存していなければ、「Meet SwiftUI for spatial computing」と「Meet UIKit for spatial computing」から学習を始めます
4. ARKit アプリの移行判断
- やること: ARKit アプリを Designed for iPad のままにするか、完全に再構築するか評価する
- 価値がある理由: 旧 ARKit API は visionOS では利用できませんが、新しいプラットフォームはより強力な空間コンピューティングを提供します。システムが World Map を継続的に永続化し、ハンドトラッキングがネイティブ機能になります
- 始め方: 「Re-imagine your ARKit app for spatial experiences」を視聴して新機能を学び、再構築のコストと利益を評価します
関連セッション
- Enhance your iPad and iPhone apps for the Shared Space — visionOS Shared Space 向けに iPad/iPhone アプリを最適化する
- Meet SwiftUI for spatial computing — 空間コンピューティング向け SwiftUI の入門
- Meet UIKit for spatial computing — 空間コンピューティングプラットフォーム向け UIKit の適応
コメント
GitHub Issues · utterances