VisionOS-UI-Framework
visionOS 向けの空間レイアウト、カルーセル、immersive space の処理、範囲制限付きの manipulation。SwiftUI と RealityKit を使用します。
ライセンス: MIT
visionOS 2、iOS 18、macOS 15向けの依存関係のない Swift パッケージ(module VisionUI)です。5つのレイアウトが、同じデータから SwiftUI の view と RealityKit の entity を3D空間に配置します。coordinator は immersive space を一度に1リクエストずつ開閉し、値型の state は、drag・pinch・回転されたオブジェクトを設定した範囲内に保ちます。iOS と macOS では、レイアウトは正面から見た形で描画されるため、同じコードがそこでも動作します。
機能
- 5つのレイアウト(arc、ring、grid、sphere、helix)は、項目ごとにメートル単位の位置と orientation を返します。SwiftUI の view には SpatialLayoutView、RealityKit の entity には arrangeChildren(using:) で対応します
- SpatialCarousel: drag で回転し、最も近い view に収まる view の ring で、selection の binding、VoiceOver の adjustable action、Reduce Motion への対応を備えます
- ImmersiveSpaceCoordinator は、transition 中は2回目のリクエストを拒否し、別の space を開く前に現在の space を dismiss し、置き換えられたリクエストの遅れた応答は無視し、Digital Crown で space が閉じられた場合はシステムに従います
- ManipulationState は、オブジェクトを box と scale の範囲内に保ち、free・upright・locked の回転、yaw の snapping、gesture ごとに1つの開始値を扱います
- SpatialCard、visionOS では ornament になる toolbar、そして Apple のガイドラインに沿ったサイズのヒット領域(visionOS で60pt、iOS で44、macOS で28)
- すべての public API に対する入力チェック: 件数は最大4096項目、長さは10kmまでに制限され、NaN や無限の引数はドキュメント化されたデフォルト値にフォールバックします
- 97件の Swift Testing テストが macOS と iPhone シミュレータで実行されます。そのうち pixel テスト以外の87件は visionOS シミュレータでも実行されます
- 4本の記事からなる DocC カタログと、visionOS・iOS・macOS 向けの SpatialGallery サンプルアプリ。README のサンプルはアプリとテストの両方でコンパイルされます
クイックスタート
1import SwiftUI2import VisionUI3 4struct ContentView: View {5 let planets = ["Mercury", "Venus", "Earth", "Mars", "Jupiter"]6 7 var body: some View {8 SpatialLayoutView(.arc(radius: 0.6, spacing: 0.17), planets, id: \.self) { planet in9 SpatialCard {10 Text(planet)11 .font(.title)12 }13 }14 }15}インストール
Xcode (File › Add Package Dependencies…)
1https://github.com/muhittincamdali/VisionOS-UI-Framework.gitSwift Package Manager
1dependencies: [2 .package(url: "https://github.com/muhittincamdali/VisionOS-UI-Framework.git", from: "2.0.0")3],4targets: [5 .target(name: "YourApp", dependencies: [6 .product(name: "VisionUI", package: "VisionOS-UI-Framework")7 ])8]スクリーンショット






タイムライン
リポジトリが公開されました。最初の1ヶ月の大半はドキュメントページと workflow の作成に費やされました
v1.0.0 がタグ付けされました。その manifest は存在しないプラットフォームバージョン .visionOS(.v1_0) を宣言していたため、Swift Package Manager は解決できませんでした
コンポーネントが削除され、パッケージは placeholder のコードに縮小されました
v2.0.0: placeholder を削除し、VisionUI としてゼロから書き直しました。5つの空間レイアウト、immersive space の coordinator、範囲制限付きの manipulation、97件のテスト、DocC、3プラットフォーム向けのサンプルアプリを備えます