View in English

  • Apple 开发者
    • 入门汇总

    探索“入门汇总”

    • 概览
    • 学习
    • Apple Developer Program

    及时了解最新动态

    • 最新动态
    • 开发者你好
    • 平台

    探索“平台”

    • Apple 平台
    • iOS
    • iPadOS
    • macOS
    • Apple tvOS
    • visionOS
    • watchOS
    • App Store

    精选

    • 设计
    • 分发
    • 游戏
    • 配件
    • 网页
    • Home
    • CarPlay 车载
    • 技术

    探索“技术”

    • 概览
    • Xcode
    • Swift
    • SwiftUI

    精选

    • 辅助功能
    • App Intents
    • Apple 智能
    • 游戏
    • 机器学习与 AI
    • 安全性
    • Xcode Cloud
    • 社区

    探索“社区”

    • 概览
    • “与 Apple 会面交流”活动
    • 社区主导的活动
    • 开发者论坛
    • 开源

    精选

    • WWDC
    • Swift Student Challenge
    • 开发者故事
    • App Store 大奖
    • Apple 设计大奖
    • Apple Developer Centers
    • 文档

    探索“文档”

    • 文档库
    • 技术概述
    • 示例代码
    • 《人机界面指南》
    • 视频

    发布说明

    • 精选更新
    • iOS
    • iPadOS
    • macOS
    • watchOS
    • visionOS
    • Apple tvOS
    • Xcode
    • 下载

    探索“下载”

    • 所有下载
    • 操作系统
    • 应用程序
    • 设计资源

    精选

    • Xcode
    • TestFlight
    • 字体
    • SF Symbols
    • Icon Composer
    • 支持

    探索“支持”

    • 概览
    • 帮助指南
    • 开发者论坛
    • “反馈助理”
    • 联系我们

    精选

    • 《开发者账户帮助》
    • 《App 审核指南》
    • 《App Store Connect 帮助》
    • 即将实行的要求
    • 协议和准则
    • 系统状态
  • 快速链接

    • 活动
    • 新闻
    • 论坛
    • 示例代码
    • 视频
 

视频

打开菜单 关闭菜单
  • 专题
  • 所有视频
  • 关于

更多视频

  • 简介
  • 概要
  • 转写文稿
  • 代码
  • 使用 Xcode 扩展 Reality Composer Pro 3 的功能

    探索 Reality Composer Pro 3 如何助你构建规模更大、更具雄心的空间项目。了解如何创建项目专属插件,以便编辑自定组件、运行自定系统,并构建自己的 ScriptGraph 节点,从而全面掌控你的空间创作工作流程。

    章节

    • 0:00 - Introduction
    • 2:00 - Extending the editor
    • 4:51 - Custom components and systems
    • 10:32 - Controlling the water surface
    • 13:19 - Custom animation actions
    • 17:12 - Custom Script Graph nodes
    • 21:16 - Next steps

    资源

      • 高清视频
      • 标清视频

    相关视频

    WWDC26

    • 使用 Reality Composer Pro 3 加速你的空间工作流程
    • 使用 Reality Composer Pro 3 加速空间场景迭代
    • 使用 Reality Composer Pro 3 设计无代码游戏
    • 探索 RealityKit 的新进展
  • 搜索此视频…

    大家好 我是Niklas 本次讲座将介绍如何 使用插件扩展Reality Composer Pro 让美术师和内容创作者 能够在编辑器中 直接处理资源 快速迭代并构建 出色的3D App和游戏 这项功能将在今年晚些时候推出

    这就是Reality Composer Pro 3 这是Apple为RealityKit打造的 游戏及3D内容编辑器最新版本 此更新版本支持更大型的场景 为美术师提供友好工作流 以便快速迭代内容 并支持在头显中预览场景

    你可以在以下讲座中了解 更多有关Reality Composer Pro 3的内容 「Iterate your spatial scenes faster with Reality Composer Pro 3」 另一个值得关注的讲座是 「Design no-code games with Reality Composer Pro 3」 该讲座介绍了如何不编写任何代码 来构建一款游戏 通过使用Reality Composer Pro的 可视化脚本工具Script Graph 在本次演讲中 我将展示 如何通过代码实现更多功能 我将介绍如何在Xcode中 构建插件 将你的项目专属内容 公开给Reality Composer Pro 3 你的自定义组件 将显示在编辑器中 美术师和设计师 可以在那里调整这些组件 例如 美术师可以调整水位高度 或旋转速度 并实时看到 大锅做出相应反应 无需构建和部署App

    我将先介绍 扩展编辑器的通用机制 然后我将展示如何使用它 在编辑器中运行 自定义组件和自定义系统 我还将展示如何添加 你自己的自定义动画 到序列器时间轴 最后 我将展示如何 创建自定义节点 用于Script Graph 我将从介绍通用机制开始 关于扩展Reality Composer Pro 以及在团队协作时 它是如何工作的 我将在Chaparral Village游戏中工作 这款游戏由开发者 美术师 和设计师团队共同制作 该游戏同时包含 Reality Composer Pro项目 和Xcode项目 编辑器项目通常由 美术师和设计师使用 用于创建体验内容 而Xcode项目由工程师使用 以构建最终App 以及让美术师在编辑器中 创建自定义数据的插件

    Reality Composer Pro项目 和Xcode项目相互关联 这样你就可以直接从 编辑器中启动App

    你可以为自己的项目设置此关联 使用窗口顶部的模拟工具栏 编辑器项目和Xcode项目 存放在同一个git仓库中 美术师和工程师在本地进行修改 然后提交并推送 以与团队其他成员共享

    当你将文件导入 Reality Composer Pro 3时 它会被转换为内部数据格式 并以JSON文件形式保存到磁盘 你可以使用git的内置工具 合并更改 但编辑器也附带 自定义合并工具 该工具合并文件时 冲突少于标准git合并 要将数据从Reality Composer Pro 3 导入App 你需要将其导出为Reality File 这是RealityKit的序列化格式

    这里有一张示意图 展示了这一切如何配合运作 Xcode项目用于 构建最终游戏App 以及Reality Composer Pro 3 的插件框架 Reality Composer Pro 3用于 设置游戏中的各种3D场景 和游戏对象 RCPCustomComponents.framework 使组件 和开发者创建的系统 在编辑器中可用

    这样美术师和关卡设计师 可以编辑它们 查看其工作方式 并交互式地改进内容

    最后 在Reality Composer Pro 3 中创建的场景 将被导出为Reality File 该文件被链接进App 并由App加载

    当代码更新时 开发者将构建 新的插件框架 供团队所有成员使用 以及新的App 当内容更改时 将导出新的Reality File 在最终App中测试 该Xcode项目已设置 了两个不同的Schema ChaparralVillage用于 构建实际App 和RCPCustomComponents 用于构建 Reality Composer Pro 3的插件 项目中所有自定义组件 和自定义系统 在这两个Schema之间共享 让我们看看它是如何工作的 我将使用插件系统 创建一个自定义组件 并将其公开给Reality Composer Pro 我想与美术师合作 为这口大锅创建一个效果 在游戏中 这口大锅 将用于混合药水 我希望能控制水位高度 这样当添加原料时 水位可以上升和下降 我还想添加一个漩涡效果 这样你就可以看到水在 混合药水时旋转 但让我们从设置水位开始

    我可以用Script Graph来实现 它看起来会是这样 在更新事件上 我获取 水面实体 并将其移动到特定位置 但如果我想做更高级的操作 使用自定义组件 可能更合适 而不是Script Graph Script Graph和自定义Swift代码 可以完成类似的功能 通常取决于个人偏好 你想使用哪种方式 但非常庞大的Script Graph 难以维护 这可能是切换到代码的 一个好理由 代码还允许你与 其他Apple API交互 这些API在Script Graph中不可用 例如SwiftUI 对于这口大锅 我最终希望水位能与其他系统关联 例如在水面上漂浮的原料 所以编写代码是合理的 为此 我先创建一个简单的组件 用于存储大锅的水位 它有一个属性 用于存储水位

    除了Component协议之外 Cauldron还实现了Codable 这是在 Reality Composer Pro 3中 表示此组件所必需的 并将其序列化为Reality File 对于更高级的组件 那些具有不应显示在 编辑器中的运行时属性的组件 实现CodingKeys 可能也很有意义 但对于这个简单的组件 我们只想序列化所有属性 所以不需要这样做 接下来 我将创建一个自定义系统 用于设置水位 在系统更新中 我找到 具有Cauldron组件的实体 然后 我查找 水网格子实体 并调整水网格的位置 基于Cauldron组件中 设置的水位 之后 我需要确保 Reality Composer Pro 3 可以使用我的自定义组件 和对应的系统 为此 我需要创建 一个插件类 实现RealityComposerProPlugin协议 该协议来自 RealityComposerPro Swift Package 当你在编辑器中关联Xcode项目时 此Package会自动添加到你的Xcode项目中 当你在编辑器中关联它时 使用模拟工具栏中的 「与Xcode一起运行」选项 在该类的setup方法中 我使用从 Reality Composer Pro获取的context 来注册我的组件和系统 这使这些组件和系统 可供编辑器使用

    我还需要确保 Reality Composer Pro 3 可以创建该插件 我通过实现 createRealityComposerProPlugin()函数来完成 该函数创建并返回我的插件 你会注意到此函数以 原始指针形式返回类 这是因为我需要此函数 在DLL接口中导出 我还需要将其标记为C函数 并为其指定导出名称 这样插件加载器 才能找到它 让我们看看这一切 在实践中如何运作 首先 我将创建包含 waterLevel属性的Cauldron组件

    然后 我将添加根据 属性值定位水面的系统 基于属性的值

    最后 让我们向 Reality Composer Pro注册 组件和系统

    现在 我可以构建插件Schema 以创建动态库

    现在我可以在编辑器中打开项目 由于此项目有插件 Reality Composer Pro会询问我 是否信任它 我选择「信任」以加载插件

    一旦我接受加载插件 编辑器将向我展示 已导入的组件

    如果我转到项目的构建设置 已导入的组件和系统 也会显示在那里 我还可以使用此设置面板 指定自定义插件目录

    已导入的组件位于 项目中的 自定义组件文件夹内 现在我已导入组件 且Reality Composer Pro 3已识别它 我可以将其添加到 Cauldron实体

    当我在编辑器中更改 水位属性时 你可以看到水面做出反应 我的自定义系统 正在编辑器内部运行 通过插件机制 并根据属性值 更改水位 美术师和设计师可以用这个 在编辑器中微调属性 无需重新构建 和重新启动App

    如果我想调试我的系统 我可以在代码中设置断点 并附加到编辑器应用程序

    当它运行我的代码时 它将在Xcode调试器中停止 我可以检查我的逻辑

    现在基本水面已经正常工作 我想通过添加漩涡效果 更上一层楼 当玩家搅动大锅混合药水时 我希望水面弯曲 成漩涡形状 要改变水面形状 一位技术美术师构建了 这个漩涡着色器 使用Reality Composer Pro 3中的 Shader Graph系统 Shader Graph具有 旋转速度等参数 它将根据这些参数 创建漩涡形状 我希望能控制这些参数 从我的自定义组件 为此 我先添加一些属性 用于引导漩涡的形状 然后 我需要修改 之前的大锅系统 以便将这些参数 传播到Shader Graph 首先 我获取 Shader Graph材质 然后 我使用一个辅助函数 计算水面的形状 基于Cauldron属性 我使用计算出的形状 来设置Shader Graph参数 最后 我将此材质 重新分配给模型 让我们看看这在实践中如何工作 首先 我将向Cauldron 添加新属性

    然后 我将编写一个函数 来计算水面

    最后 我将更新系统 以设置着色器参数 然后重新构建插件

    每次重新构建插件时 我需要重启Reality Composer Pro 以获取更改 Reality Composer Pro会再次询问我 是否信任该项目 如果你不想再看到 这个对话框 你可以勾选 「不再询问」复选框

    接下来 会出现一个对话框 显示我的自定义组件的更改 这些更改对我来说都没问题 所以我将接受它们

    如果我返回到Cauldron组件 我将看到那里有新属性

    让我用水位的 一些默认值来设置它 和漩涡系数

    现在 让我尝试 旋转速度的不同值 你可以看到 当我增加旋转速度时 漩涡变得更深

    接下来 我想谈谈如何 在动画系统中使用插件 动画序列器支持 自定义动画动作 可以在插件中定义 然后添加到序列器时间轴 我想创建一个自定义动作 用于设置大锅的水位 为此 我需要实现 EntityAction协议 要保存到Reality File中 它还需要实现Codable

    我的动作接受两个参数 水面的起始水位 和终止水位 这样它就可以在 这两个值之间进行动画

    对于EntityAction协议 我还需要将 动画值类型作为Transform返回 这是在动画执行器中 访问我的实体所必需的 我还需要编写 执行动作的代码 并在动画运行时 更新水位

    为此 我在实体动作中 创建一个静态subscribe()函数 我将从 插件加载代码中调用它

    在此函数中 我使用EntityAction中的 subscribe方法 订阅.updated事件 该事件在RealityKit 运行动画时被调用 我将用它来执行 我的自定义动画动作 我将获取已过去的动画时间 作为0到1之间的归一化数

    然后我计算当前水位 通过使用归一化时间 在起始和终止 水位之间进行插值 我从实体获取大锅组件 并更新其水位 最后 我将修改后的 大锅组件重新设置回实体 最后一步是向 Reality Composer Pro 3 注册此自定义动画

    与自定义组件 和自定义系统一样 我需要向context 注册动作 以便编辑器能识别它

    我还需要调用 之前创建的subscribe函数 以便动作在 动画更新时执行 让我们看看这在实践中如何工作 首先 我将定义 我的自定义实体动作

    然后 我将添加 实现此动作的代码

    最后 我将向编辑器注册此动作 并重新构建插件

    当我重启编辑器 并打开项目时 它会告诉我 导入了一个新动作

    让我们创建一个 使用此动作的动画 首先 我将在编辑器中 创建一个新序列

    然后 我将打开序列 并设置动画的根实体 为包含大锅的场景 我准备了一个 名为CauldronWorld的场景

    接下来 我将向序列 添加一个动画轨道 并选择大锅作为 此轨道要使用的实体

    现在我可以从左侧面板 拖动SetWaterLevelAction 到轨道的时间轴中 以创建在大锅上运行的动作 我将在检查器中 展开此动作 以设置其参数 大锅水位的起始值 和终止值 我将起始值设为0.3 终止值设为0.5 现在 我可以播放动画 并看到水位根据 我的自定义动作发生变化

    美术师和设计师 可以使用Script Graph 来创建游戏玩法和交互性 在Reality Composer Pro 3项目中 而无需编写任何代码 内置脚本节点已经很强大 但如果你想 更上一层楼 你可以使用插件添加自定义节点 设计师可以在 Script Graph中使用这些节点 将自定义组件公开给 Script Graph的最快方式 是使用@Scriptable宏 为此 我首先需要导入 RealityKitScripting 和RealityKitScriptingMacros模块 此宏就是在这里定义的 就像RealityComposerPro Swift Package一样 当你从Reality Composer Pro内部 创建Xcode项目时 此Package会自动为你设置好 然后 我只需用@Scriptable宏 标记我的组件结构体 这将展开为一个schema变量 描述该组件 这样我就可以将其 注册到脚本系统 与所有其他注册一样 这在插件的 setup函数中进行 脚本模块需要在 主线程上注册

    我首先为我的项目创建 一个脚本配置 在配置的初始化器中 我需要返回 所有脚本模块的列表

    我将创建一个单独的模块 用于存储我的Cauldron Schema 此Schema由 @Scriptable宏生成 然后我将我的配置 添加到RealityKitScripting 让我们看看这在实践中如何工作 首先 我将导入脚本模块 并将@Scriptable宏 添加到Cauldron组件

    然后 我将添加向编辑器 注册脚本模块的代码 并重新构建插件

    让我们创建一个Script Graph 使用Cauldron组件 的新自定义节点 我将首先向 Cauldron实体添加Scripting组件

    我双击新组件 以打开Script Graph编辑器 让我们实现当用户 按下键盘上的某个键时 水位发生变化 我将先添加一个更新节点 此节点在 每次场景更新时触发

    接下来 我将添加一个If节点 并将其连接到按键事件 这样每次按下该键时 节点就会触发

    我将连接If节点 的true连接器 以设置大锅的水位

    现在 当按下「a」键时 大锅的水位 将被设置为0.25 我将连接另一个键 以设置不同的水位 为此 让我复制 并粘贴整个图

    然后在副本中 我将把键改为「z」 水位改为0.5

    我可以通过打开 模拟视图来测试 当我按下「a」和「z」键时 水位上升和下降

    本次讲座涵盖了 很多内容 我向你展示了如何使用Xcode 创建一些简单的插件 并扩展编辑器的功能 以处理你的App数据 甚至在编辑器中运行你的代码 如需了解更多 建议查看 「Explore advances in RealityKit」讲座 以了解RealityKit的 最新功能 我还建议观看 「Supercharge your spatial workflows with Reality Composer Pro 3」讲座 该讲座介绍了如何 提升使用编辑器的效率 期待看到你用 全新Reality Composer Pro 3 创作出精彩的体验 感谢观看!

    • 6:08 - Cauldron component

      // Add a component to represent the water level
      
      import RealityKit
      
      public struct Cauldron: Component, Codable {
          public var waterLevel: Float
      
          enum CodingKeys: CodingKey {
              case waterLevel
          }
      }
    • 6:42 - CauldronSystem

      // Add a system to control the water level
      
      import RealityKit
      
      public struct CauldronSystem: System {
          let query = EntityComponentQuery(Cauldron.self)
          public init(scene: Scene) {}
      
          public func update(context: SceneUpdateContext) {
              for (entity, cauldron) in context.entities(matching: query) {
                  guard let water = entity.findEntity(named: "Cauldron_Water_mesh")
                      else { continue }
                  water.setPosition(SIMD3<Float>(0, 1, 0) * cauldron.waterLevel, relativeTo: entity)
              }
          }
      }
    • 7:00 - RCPCustomComponentsPlugin

      // Make sure that Reality Composer Pro 3 knows about the Cauldron and CauldronSystem
      
      import RealityComposerPro
      
      final class RCPCustomComponentsPlugin: RealityComposerProPlugin {
          public func setup(context: any RealityComposerProContext) {
              context.registerComponent(Cauldron.self)
              context.registerSystem(CauldronSystem.self)
          }
      }
      
      @_cdecl("createRealityComposerProPlugin")
      public func createRealityComposerProPlugin() -> UnsafeMutableRawPointer {
          return RCPCustomComponentsPlugin().passRetained()
      }
    • 10:49 - Cauldron component with vortex properties

      // Properties to control water surface
      
      import RealityKit
      
      public struct Cauldron: Component, Codable {
          public var waterLevel: Float
          public var rotationSpeed: Float
          public var minWaterLevel: Float
          public var maxWaterLevel: Float
          public var vortexCoeff: Float
      }
    • 11:05 - CauldronSystem update with ShaderGraph

      public func update(context: SceneUpdateContext) {
          for (entity, cauldron) in context.entities(matching: query) {
              guard let water = entity.findEntity(named: "Cauldron_Water_mesh") else { continue }
              water.setPosition(SIMD3<Float>(0, 1, 0) * cauldron.waterLevel, relativeTo: entity)
      
              guard var model = water.components[ModelComponent.self] else { continue }
              guard var mat = model.materials.first as? ShaderGraphMaterial else { continue }
              let surface = computeSurface(cauldron: cauldron)
              try? mat.setParameter(name: "Level Radius", value: .float(surface.levelRadius))
              try? mat.setParameter(name: "Lowest Point",
                  value: .float(cauldron.waterLevel - surface.lowestPoint))
              try? mat.setParameter(name: "Height Change", value: .float(surface.heightChange))
              try? mat.setParameter(name: "Level Coeff", value: .float(surface.levelCoeff))
              try? mat.setParameter(name: "Is Level", value: .bool(surface.isLevel))
              model.materials[0] = mat
              water.components.set(model)
          }
      }
    • 13:25 - SetWaterLevelAction

      // Custom action for setting the water level of the Cauldron
      
      import RealityKit
      
      public struct SetWaterLevelAction: EntityAction, Codable {
          // Parameters for the action
          public let startWaterLevel: Float
          public let endWaterLevel: Float
      
          // Required by EntityAction protocol
          public var animatedValueType: (any AnimatableData.Type)? { Transform.self }
      }
    • 14:05 - SetWaterLevelAction subscribe

      extension SetWaterLevelAction {
          static func subscribe() {
              Task { @MainActor in
                  SetWaterLevelAction.subscribe(to: .updated) { event in
                      let normalizedTime = (event.playbackController.time - event.startTime) /
                          event.duration
                      let action = event.action
                      let currentLevel = action.startWaterLevel +
                          Float(normalizedTime) * (action.endWaterLevel - action.startWaterLevel)
                      guard let entity = event.targetEntity else { return }
                      guard var cauldron = entity.components[Cauldron.self] else { return }
                      cauldron.waterLevel = currentLevel
                      entity.components.set(cauldron)
                  }
              }
          }
      }
    • 14:56 - RCPCustomComponentsPlugin with action

      // Make sure that Reality Composer Pro 3 knows about the SetWaterLevelAction
      
      import RealityComposerPro
      
      final class RCPCustomComponentsPlugin: RealityComposerProPlugin {
          public func setup(context: any RealityComposerProContext) {
              context.registerComponent(Cauldron.self)
              context.registerSystem(CauldronSystem.self)
      
              context.registerAction(SetWaterLevelAction.self)
              SetWaterLevelAction.subscribe()
          }
      }
      
      @_cdecl("createRealityComposerProPlugin")
      public func createRealityComposerProPlugin() -> UnsafeMutableRawPointer {
          return RCPCustomComponentsPlugin().passRetained()
      }
    • 17:32 - Cauldron with @Scriptable macro

      // Expose Cauldron to Script Graphs
      
      import RealityKit
      import RealityKitScripting
      import RealityKitScriptingMacros
      
      @Scriptable
      public struct Cauldron: Component, Codable {
          public var waterLevel: Float
          public var rotationSpeed: Float
          public var minWaterLevel: Float
          public var maxWaterLevel: Float
          public var vortexCoeff: Float
      }
    • 18:08 - Register scripting module

      // Register scripting module
      
      public func setup(context: any RealityComposerProContext) {
          context.registerComponent(Cauldron.self)
          context.registerSystem(CauldronSystem.self)
      
          context.registerAction(SetWaterLevelAction.self)
          SetWaterLevelAction.subscribe()
      
          Task { @MainActor in
              let config = RKS.Configuration(id: "ChaparralVillage")
                  .onInitialize { _ in
                  [
                      Module("ChaparralVillage") {
                          Cauldron.SchemaProvider.schema
                      }
                  ]
              }
              try! RKS.addConfiguration(config)
          }
      }
    • 0:00 - Introduction
    • An overview of the Reality Composer Pro 3 plugin system, showing how Xcode and the editor share a project to let engineers and artists collaborate — with custom components, systems, animation actions, and Script Graph nodes all running live inside the editor.

    • 2:00 - Extending the editor
    • Learn how the Reality Composer Pro 3 plugin system works: how the editor and Xcode share a single git repository, how custom Swift code is compiled into a dynamic library, and how the editor loads and trusts plugins at runtime.

    • 4:51 - Custom components and systems
    • Build a Cauldron component and CauldronSystem using RealityKit, expose them to the editor via a RealityComposerProPlugin, and see the water level property update in real time as artists adjust values in the inspector.

    • 10:32 - Controlling the water surface
    • Extend the Cauldron component with vortex shader properties and update the system to drive a ShaderGraphMaterial at runtime, enabling artists to control vortex depth and rotation speed directly from the Reality Composer Pro 3 inspector.

    • 13:19 - Custom animation actions
    • Implement the EntityAction protocol to create a SetWaterLevelAction that animates the cauldron water level on the sequencer timeline, subscribe to animation update events to interpolate the level, and register the action with the editor plugin.

    • 17:12 - Custom Script Graph nodes
    • Use the @Scriptable macro to expose a custom component to Reality Composer Pro 3 Script Graphs, register a scripting module in the plugin setup, and see the generated nodes appear in the Script Graph editor for no-code artist workflows.

    • 21:16 - Next steps
    • Recap of the plugin capabilities covered — custom components, systems, animation actions, and Script Graph nodes — with recommendations to explore the Explore Advances in RealityKit and Supercharge Your Spatial Workflows sessions.

Developer Footer

  • 视频
  • WWDC26
  • 使用 Xcode 扩展 Reality Composer Pro 3 的功能
  • 打开菜单 关闭菜单
    • iOS
    • iPadOS
    • macOS
    • Apple tvOS
    • visionOS
    • watchOS
    打开菜单 关闭菜单
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • SF Symbols
    打开菜单 关闭菜单
    • 辅助功能
    • 配件
    • Apple 智能
    • App 扩展
    • App Store
    • 音频与视频 (英文)
    • 增强现实
    • 设计
    • 分发
    • 教育
    • 字体 (英文)
    • 游戏
    • 健康与健身
    • App 内购买项目
    • 本地化
    • 地图与位置
    • 机器学习与 AI
    • 开源资源 (英文)
    • 安全性
    • Safari 浏览器与网页 (英文)
    打开菜单 关闭菜单
    • 完整文档 (英文)
    • 部分主题文档 (简体中文)
    • 教程
    • 下载
    • 论坛 (英文)
    • 视频
    打开菜单 关闭菜单
    • 支持文档
    • 联系我们
    • 错误报告
    • 系统状态 (英文)
    打开菜单 关闭菜单
    • Apple 开发者
    • App Store Connect
    • 证书、标识符和描述文件 (英文)
    • 反馈助理
    打开菜单 关闭菜单
    • Apple Developer Program
    • Apple Developer Enterprise Program
    • App Store Small Business Program
    • MFi Program (英文)
    • Mini Apps Partner Program
    • News Partner Program (英文)
    • Video Partner Program (英文)
    • 安全赏金计划 (英文)
    • Security Research Device Program (英文)
    打开菜单 关闭菜单
    • 与 Apple 会面交流
    • Apple Developer Center
    • App Store 大奖 (英文)
    • Apple 设计大奖
    • Apple Developer Academies (英文)
    • WWDC
    阅读最近新闻。
    获取 Apple Developer App。
    版权所有 © 2026 Apple Inc. 保留所有权利。
    使用条款 隐私政策 协议和准则