すべてのオープンソースパッケージ
プラットフォームSwift

VisionOS-UI-Framework

visionOS 向けの空間レイアウト、カルーセル、immersive space の処理、範囲制限付きの manipulation。SwiftUI と RealityKit を使用します。

3スター数最新リリース: v2.0.0 · 更新日: 2026年10月15日
対応プラットフォーム:visionOS 2iOS 18macOS 15

ライセンス: 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 のサンプルはアプリとテストの両方でコンパイルされます

クイックスタート

swift
1import SwiftUI
2import VisionUI
3 
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 in
9 SpatialCard {
10 Text(planet)
11 .font(.title)
12 }
13 }
14 }
15}

インストール

Xcode (File › Add Package Dependencies…)

text
1https://github.com/muhittincamdali/VisionOS-UI-Framework.git

Swift Package Manager

swift
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]

スクリーンショット

Apple Vision Pro シミュレータ上のサンプルアプリ: 惑星の名前が付いた5枚の glass card が、視聴者側に曲がる arc 上に並び、外側のカードほど近く中央側を向いています
カルーセルのページ: 手前に Mountains のカード、側面には外側を向いた Arctic と City のカード、下部に Showing Mountains というテキスト
コンポーネントのページ: 2枚の glass card、より広いタップ領域を持つ小さな星、ウィンドウ下部に取り付けられた back・play・forward のボタンを持つ toolbar
immersive space: 青と teal の球体が異なる高さで部屋の周りに広がり、ギャラリーのウィンドウには Hide Orbit ボタンが表示されています
arc、ring、grid、sphere、helix の各レイアウトを上から見た図と正面から見た図。項目は点で、各項目が向く方向は矢印で示されています
同じレイアウト図をダーク背景にしたもの

タイムライン

  1. リポジトリが公開されました。最初の1ヶ月の大半はドキュメントページと workflow の作成に費やされました

  2. v1.0.0 がタグ付けされました。その manifest は存在しないプラットフォームバージョン .visionOS(.v1_0) を宣言していたため、Swift Package Manager は解決できませんでした

  3. コンポーネントが削除され、パッケージは placeholder のコードに縮小されました

  4. v2.0.0: placeholder を削除し、VisionUI としてゼロから書き直しました。5つの空間レイアウト、immersive space の coordinator、範囲制限付きの manipulation、97件のテスト、DocC、3プラットフォーム向けのサンプルアプリを備えます

リンク

関連記事

記事を読む (English)