规划你的 visionOS App

花点时间熟悉在开发适用于 Apple Vision Pro 和 visionOS 的 App 和游戏时可使用的工具和技术。Apple 提供了你入门所需的一切,visionOS 也能帮助你实现 App 的理想功能和性能。

    探索无限可能

    Apple Vision Pro 是首个从一开始就专为空间计算而设计的平台。用户可以使用 Apple Vision Pro 在与周围环境融为一体的无边画布上与 App 和游戏交互,也可以让自己沉浸在可以带他们进入新空间的单一体验中。了解如何构建 App 以充分利用 visionOS 的独有功能来重新定义沟通、效率和娱乐。了解如何使用现有框架 (如 SwiftUIUIKitRealityKitARKit) 将你的 App 移植到 visionOS:

    • 在共享空间中创建熟悉的窗口。打开一个或多个窗口。这些窗口是 SwiftUI 场景,并且在空间中显示为平面。它们使用传统的视图和控件,你可以打开其中一个或多个窗口来管理 App 的内容。你 App 的窗口与其他 App 的窗口并排显示,用户可以调整窗口大小并确定它们在周围环境中的位置。
    • 使用 3D 元素扩展你的界面。在窗口中添加 3D 对象或 RealityView,为窗口添加深度。如果你希望用户能够从各个角度查看内容,请考虑创建空间容器,它在共享空间中与 App 的其他窗口并排显示。
    • 增强沉浸体验。当你的 App 打开了全空间 时,它会占据整个 visionOS 画布。你可以将 3D 内容直接放置在用户的周围环境中,这会打开通往另一个世界的入口,或者完全取代用户的周围环境。打开全空间后,系统会显示你 App 的窗口和空间容器,并隐藏其他 App 的内容。

    在 visionOS 上构建 App 时,你可以随时在 App 中混合搭配使用窗口、空间容器和空间打造适合内容的时刻。在 App 中找到你可能想要增强沉浸体验的关键时刻,并保证沉浸体验能够有层次地自然过渡。

    用户还可以在 visionOS 中将现有的 iPadOS 或 iOS App 作为兼容 App 运行。你的 App 在用户的周围环境中显示为一个可缩放的窗口。

    从何处着手

    使用 Apple 的集成开发环境 Xcode 来启动软件开发流程。Xcode 提供一套齐全的软件开发工具,包括项目管理支持、代码编辑器、可视化 UI 编辑器、调试工具、面向不同设备的模拟器,以及用于评估性能的工具,等等。Xcode 还包含一整套系统代码模块 (称为框架),以辅助你开发软件。

    下载 Xcode

    为 visionOS 新建项目时显示的 Xcode 菜单的截屏。 为 visionOS 新建项目时显示的 Xcode 菜单的截屏。

    要在 Xcode 中创建新项目,请选取“File”(文件) >“New”(新建) >“Project”(项目),然后按提示操作来创建 visionOS App。所有新项目都使用 SwiftUI,它提供可用于创建 App 核心功能的现代声明式编程模型。

    SwiftUI 可与 Apple 的数据管理技术无缝协作,为内容创建提供支持。Swift 标准资料库Foundation 框架 提供了数组和字典等结构类型,以及字符串、数字、日期和其他常用数据值等值类型。对于你定义的任何自定类型,可以采用 Swift 的 Codable 支持 将这些类型持久保留在磁盘上。如果你的 App 管理大量的结构化数据,SwiftDataCore DataCloudKit 提供了面向对象的模型来管理和持久保留你的数据。

    你还可以使用 Unity 强大且熟悉的创作工具 来打造新的 App 和游戏。除了 AR Foundation 等熟悉的 Unity 功能之外,还可尽享 visionOS 带来的各种好处,例如透视和动态注视点渲染。

    向你的界面添加新的维度

    在构建 App 时,请首先创建一个窗口,然后视情况添加各种元素,帮助用户沉浸在你的内容中。添加空间容器以展示 3D 内容或利用全空间 增强沉浸体验。mixed 样式配置空间以显示透视效果,但是你可以应用 progressivefull 样式来增强沉浸体验和最大限度地减少干扰。

    • 在窗户中添加深度。将基于深度的偏移应用于视图,以重点展示窗口的各个部分,或者指示模态的变化。将 3D 对象 直接纳入到视图布局中,以与 2D 视图并排放置。
    • 为自定视图添加悬停效果。利用悬停效果在用户注视自定元素时使其高亮显示。自定悬停效果的行为,以获得所需外观。
    • 利用装饰元素实现菜单和工具栏。利用装饰元素 将常用工具和命令置于窗口的外侧边缘。

    RealityKit 在 visionOS App 中发挥着重要作用,你可以在 App 中使用它来管理 3D 对象的创建和动画效果。以编程方式创建 RealityKit 内容或使用 Reality Composer Pro 构建整个场景,其中包含你所需的所有对象、动画、声音和视觉效果。利用 RealityView 将这些场景添加到你的窗口、空间容器或空间中。此外,你还可以在 App 中充分利用其他 3D 功能:

    • 采用 MaterialX 着色器实现动态效果。MaterialX 是一项受到主流电影、视觉特效、娱乐和游戏公司支持的开放标准。利用现有工具来创建 MaterialX 着色器,然后利用 Reality Composer Pro 将它们整合到你的 RealityKit 场景中。
    • 将 3D 内容储存在 USDZ 文件中。使用你喜欢的工具构建复杂的 3D 对象和网格,并将其作为 USDZ 素材储存在项目中。在 Reality Composer Pro 中对素材进行非破坏性更改并将它们合并为更大的场景。
    • 在 Xcode 中创建 3D 内容预览。直接在项目窗口中预览包含 3D 内容的 SwiftUI 视图。为 Xcode 预览 指定多个摄像头位置,以便从不同角度查看内容。

    人机界面指南

    Apple 的《人机界面指南》提供了宝贵的信息,指导你设计 App 界面、操控内容,以及管理交互。在探索 visionOS 生态系统时,务必将阅读这些指南视为你的一项要务。

    设计简单直接的交互

    在 visionOS 中,用户主要依靠眼睛和手与 App 进行交互。在间接手势中,用户会注视某个对象,然后用其他手指与拇指轻点以选择此对象。在直接手势中,用户的手指与 3D 空间中的对象进行交互。在 App 中处理输入时:

    • 采用标准系统手势。依靠轻点、轻扫、拖移、按住、轻点两下、缩放和旋转这些手势来完成与 App 的大部分交互。SwiftUIUIKit 跨平台提供了对这些手势的内建支持,可以处理这些手势。
    • 添加对外部游戏控制器的支持。游戏控制器为 App 提供了另一种输入形式。系统会自动将来自所连无线键盘、触控板和辅助功能硬件的输入定向到 App 的事件处理程序代码。对于游戏控制器,请利用 Game Controller 框架 显式添加支持。
    • 使用 ARKit 创建自定手势。系统使用 ARKit 来推动与用户周围环境的交互。当 App 进入全空间时,你可以请求授予检索用户手和手指位置 的权限,并使用这些信息来创建自定手势。

    在全空间中,ARKit 会提供额外的服务来支持与内容相关的交互。在用户的环境中检测表面已知图像,并向其附加锚点。获取周围环境的网格 并将其添加到 RealityKit 场景中,以支持 App 内容与现实世界中的物体进行交互。确定 Apple Vision Pro 相对于周围环境的位置和方向,并添加现实场景锚点以放置内容。

    打造全新境界的音频和视频体验

    Apple Vision Pro 支持立体视频,以帮助使电影和其他娱乐内容跃然屏幕之上并融入到用户的周围环境之中。空间音频是 visionOS 的默认体验,因此请思考你想要如何充分利用这一体验。

    • 更新 3D 视频素材。在沉浸式 3D 环境中播放 3D 影片,将观影之夜提升到全新境界。QuickTime 文件格式支持添加看起来能够跃然屏幕之上的内容。利用 AVKitAVFoundation 播放影片。在影片文件中添加立体内容的原子
    • 支持空间音频。利用 AVFAudio 构建 App 的音乐播放器,其包含了 AVFoundation 框架中的音频相关类型。利用 PHASE 让你的音频提升到另一维度,它支持在你的游戏和 App 中创造复杂的动态空间音频体验。
    • 流播放直播或录制内容。了解如何利用 HTTP Live Streaming 创建流媒体内容并部署到你的服务器上。利用 AVFoundation 播放来自你的 App 的流媒体内容。

    采用包容性设计

    打造具有包容性的 App 可确保人人都能访问你的内容。Apple 技术以许多不同的方式助力实现包容性。务必在你的 App 中支持这些技术。

    • 打造国际化和本地化的 App。针对其他地区和语言打造本地化的 App,拥抱全球化市场。利用 Foundation 框架 准备你的 App,它可提供代码来根据不同语言和地区对字符串、日期、时间、货币和数字进行格式调整。确保你的 UI 对从左到右和从右到左 的语言都有良好呈现。将 App 资源本地化,并将它们添加到你的 Xcode 项目中。如需有关国际化和本地化流程的信息,请查看“本地化”
    • 选择包容性的词汇和术语。在开发内容时考虑社会和文化方面的差异,避免使用对你的部分受众隐含负面或贬损意义的图像和词语。有关更多信息,请参阅《人机界面指南》>“包容性”
    • 更新辅助功能标签和导航方式。Apple 将辅助功能支持直接内建到了其技术之中,但是屏幕朗读器和其他辅助功能依靠你提供的信息才能打造无障碍体验。检查辅助功能标签和其他描述,确保它们提供了实用的信息,并确保基于焦点的导航简约且直观。请参阅“辅助功能”
    • 支持通过其他方式访问各项功能。为用户提供选择和操作内容的其他方式,例如菜单命令游戏控制器。将辅助功能组件 添加到 RealityKit 实体中,以便用户可以利用辅助技术来浏览和选择实体。
    • 添加“旁白”播报。当“旁白”在 visionOS 中处于活跃状态时,用户可以使用手势来浏览 App。如果他们启用了直接手势模式来与 App 进行交互,则播报 可确保仍能跟上与内容进行交互的节奏。
    • 为音频内容添加字幕。虽然字幕对于某些人来说必不可少,但是在特定情况下,字幕对于所有人来说都非常实用。例如对于在嘈杂环境中观看视频的人来说,字幕非常有用。在你的 App 中,不仅要包含文本和对话的相应字幕,还要包含音乐和音效的相应字幕。确保你在自定视频引擎中呈现的字幕采用了系统外观
    • 考虑视觉和动态效果产生的影响。动态效果可能会令人感到厌烦,即使是对动态效果不太敏感的人也是如此。限制使用包含快速移动、弹跳或波浪状动态、缩放动画、多轴移动、转动或旋转的效果。当系统辅助功能设置指示最好减弱动态效果时,请提供合适的替代方案。请参阅《人机界面指南》>“动态效果”

    有关在 visionOS 中使 App 实现无障碍使用的更多信息,请参阅“改进 visionOS App 中的辅助功能支持”

    优先考虑隐私保护

    隐私非常重要,因此请告知用户你将如何使用他们的数据。如果你收集数据,请提供隐私声明来阐述你将如何使用这些信息。如果你使用会操作个人数据的 Apple 技术,请附上使用说明,以便系统在首次使用时显示。有关更多信息,请参阅“采用隐私保护和用户偏好设置方面的最佳做法”

    • 针对你收集的所有数据,说明收集它们带来的切实好处。当用户同意向你提供其个人信息时,请确保你的 App 能够提供真正有价值的回报。不要为了得到他人的个人数据而收集这些数据。
    • 清楚地说明你将如何使用收集的信息。透明地指出你将如何使用他人的数据。在请求针对隐私敏感技术获得相关授权时,请提供清晰的使用描述字符串 来帮助用户了解你为什么需要这些数据。在 App Store 上的 App 页面中对数据做出说明。
    • 保护你收集和储存的数据。如果你确实要收集数据,请务必保护这些数据免受恶意攻击。采用通行密钥,作为替代密码的一种保护方法。将个人身份信息、财务数据或其他敏感数据储存在用户的加密钥匙串 中。使用磁盘加密 或其他 Apple 安全技术 来储存其他个人数据。使用 Apple CryptoKit 对你储存在本地或发送到 App 外的数据进行加密。

    测试和优化 App

    在开发期间可以通过多种方式来测试你的 App,确保它可以在 Apple Vision Pro 上顺畅运行。

    • 全面测试和调试 App。在开发期间,使用内建 Xcode 调试器在出现问题时进行调试。使用 XCTest 构建自动化测试套件并在每次构建时运行,以验证新代码的运行是否与预期相符。在不同的系统负载下运行这些测试,以确定 App 的运行情况。
    • 注意把控工作量。确保 App 所做的工作能够带来切实的好处。优化算法以最大限度地减少 App 消耗的 CPU 和 GPU 资源。利用 Xcode 附带的 Instruments App,排查代码中的瓶颈和其他性能问题。请参阅“为 visionOS App 制定性能计划”
    • 采用持续集成 (CI) 工作流程。通过确保每次提交都能保证代码库的质量和稳定性,贯彻 CI 理念。运行测试套件中与性能相关的测试。使用 Xcode Cloud 的持续集成系统,实现自动构建你的 App、自动完成测试循环及向 QA 团队自动分发。

    如何更进一步

    当你的 App 准备就绪并能正常运行时,请探索更多方法来进一步完善用户体验。小小改变也能带来大不同 — 哪怕只是加入一个特定功能,或者换一种方式呈现你的内容。

    • 使用同播共享使用户保持联系。共享和协作是 visionOS 的重要组成部分,因此请集思广益,思考哪些 App 活动可通过 FaceTime 通话完成。使用 Group Activities 框架来添加对启动活动和管理更新的支持。
    • 为 spatial Personas 设计同播共享活动。确定在 App 中为 spatial Personas 提供同播共享支持的时刻,并同步保持共享情境所需的更多详细信息。例如,除了窗口的内容之外,你可能还要共享窗口的滚动位置。

    探索更多

    进一步了解各种技术,它们不仅带来独特的能力,还可与不同 Apple 平台紧密集成,形成一个无缝的生态系统来帮助 App 和游戏iOSiPadOSmacOSApple tvOS、visionOS 和 watchOS 运行。