جميع حزم المصدر المفتوح
المنصةSwift

VisionOS-UI-Framework

تخطيطات مكانية (spatial layouts)، وcarousel، ومعالجة immersive space، وmanipulation محدود لـ visionOS، باستخدام SwiftUI وRealityKit.

3النجومآخر إصدار: v2.0.0 · آخر تحديث: 15 أكتوبر 2026
الأنظمة الأساسية:visionOS 2iOS 18macOS 15

الترخيص: MIT

حزمة Swift بلا اعتماديات (الوحدة VisionUI) لـ visionOS 2 وiOS 18 وmacOS 15. خمسة layouts تضع views من SwiftUI وentities من RealityKit في ثلاثية الأبعاد (3D) من البيانات نفسها، وcoordinator يفتح ويُغلِق immersive spaces بطلب واحد في كل مرة، وstate من نوع قيمة (value-type) يحافظ على الأجسام المسحوبة والمُقرَّصة (pinched) والمُدارة ضمن الحدود التي تضعها. على iOS وmacOS تُرسَم الـ layouts كما تُرى من الأمام، لذا يعمل الكود نفسه هناك أيضًا.

الميزات

  • خمسة layouts (arc وring وgrid وsphere وhelix) تُرجِع موضعًا بالمتر واتجاهًا (orientation) لكل عنصر، لـ views من SwiftUI عبر SpatialLayoutView، ولـ entities من RealityKit عبر arrangeChildren(using:)
  • SpatialCarousel: حلقة من views تُدار بسحب (drag) وتستقر على أقرب view، مع binding للاختيار (selection)، وإجراء VoiceOver قابل للتعديل (adjustable action)، ودعم Reduce Motion
  • ImmersiveSpaceCoordinator يرفض طلبًا ثانيًا أثناء transition، ويُغلِق space واحد قبل فتح آخر، ويتجاهل الإجابات المتأخرة للطلبات المُستبدَلة، ويتبع النظام عندما يُغلَق space بـ Digital Crown
  • ManipulationState يحافظ على جسم داخل صندوق ونطاق تحجيم (scale range)، مع دوران حر أو عمودي (upright) أو مقفول، وyaw snapping، وقيمة بداية واحدة لكل gesture
  • SpatialCard، وtoolbar يتحول إلى ornament على visionOS، ومناطق لمس (hit targets) بأحجام تتبع إرشادات Apple (60 pt على visionOS، و44 على iOS، و28 على macOS)
  • فحوصات مدخلات على كل API عام: الأعداد محدودة بسقف 4096 عنصرًا، والأطوال بسقف 10 كم، ووسيطات NaN أو اللانهائية (infinite) تعود إلى قيم افتراضية موثَّقة
  • 97 اختبار Swift Testing تعمل على macOS ومحاكي iPhone؛ 87 منها، أي جميعها باستثناء اختبارات البكسل (pixel tests)، تعمل أيضًا على محاكي visionOS
  • كتالوج DocC بأربع مقالات وتطبيق المثال SpatialGallery لـ visionOS وiOS وmacOS؛ أمثلة README تُترجَم (compiled) من كلٍّ من التطبيق والاختبارات

البدء السريع

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: خمس بطاقات زجاجية (glass cards) باسم كواكب على arc ينحني نحو المُشاهِد، البطاقات الخارجية أقرب ومُدارة نحو الوسط
صفحة الـ carousel: بطاقة Mountains في المقدمة، وبطاقتا Arctic وCity مُدارتان بعيدًا على الجانبين، ونص Showing Mountains أسفلها
صفحة المكوّنات: بطاقتان زجاجيتان، ونجمة صغيرة بمنطقة لمس أكبر، وtoolbar بأزرار رجوع وتشغيل وتقديم مُلحَق أسفل النافذة
الـ immersive space: كرات زرقاء وخضراء مزرقّة (teal) منتشرة حول الغرفة بارتفاعات مختلفة، مع نافذة المعرض (gallery) تعرض زر Hide Orbit
رسوم بيانية (diagrams) لـ layouts arc وring وgrid وsphere وhelix من الأعلى ومن الأمام، بنقاط للعناصر وأسهم لاتجاه كل عنصر
نفس رسوم layouts البيانية على خلفية داكنة

الجدول الزمني

  1. فُتح المستودع؛ معظم شهره الأول ذهب إلى صفحات دوكيومنتيشن وworkflows

  2. وُسم v1.0.0؛ أعلن manifest الخاص به .visionOS(.v1_0)، إصدار منصة غير موجود، لذا لم يتمكن Swift Package Manager من حلّه (resolve)

  3. أُزيلت المكوّنات واختُزِل الحزمة إلى كود placeholder

  4. v2.0.0: أُزيلت الـ placeholders وأُعيدت كتابة الحزمة من الصفر باسم VisionUI، بخمسة layouts مكانية، وcoordinator لـ immersive space، وmanipulation محدود، و97 اختبارًا، وDocC، وتطبيق مثال لثلاث منصات

الروابط

مقالة ذات صلة

قراءة المقالة (English)