探索今年发布的 app intents 框架新推出的所有增强功能。了解助力日常开发工作的诸多改进 (如延迟属性)、一系列新功能 (如交互式 app intents 摘要片段、实体视图注释),以及如何整合视觉智能等。我们将一起探索让 app intents 比以往更具表现力、更加流畅易用的各项更新。我们还将介绍今年 app intents 激动人心的新增支持 (如支持“聚焦”和视觉智能),并讲解如何编写完美适配这些场景的 app intents。

视频封面
视频地址

此文章由AI生成,可能存在错误,如有问题,请联系djs66256@163.com

App Intents框架新特性解析:打造深度系统集成的应用体验

引言

App Intents框架作为苹果生态系统中的重要组成部分,为开发者提供了将应用功能深度整合到系统各处的能力。在今年的WWDC大会上,苹果工程师Jeff介绍了App Intents框架的一系列新特性和改进,包括交互式摘要卡片、增强的系统集成能力、用户体验优化以及开发者便利API等。

交互式摘要卡片:提升用户互动体验

App Intents框架最大的亮点之一是新增的交互式摘要卡片功能。这种动态卡片允许开发者在系统级界面中展示定制化视图并实现用户交互。

功能特点

  • 支持在卡片中嵌入按钮、开关等交互元素
  • 可实时更新卡片状态反映应用最新数据
  • 适用于操作确认、结果展示等多种场景
  • 与SwiftUI的无缝集成,支持流畅的过渡动画

实现原理

交互式卡片采用新型的SnippetIntent协议实现。系统通过以下流程处理卡片交互:

  1. Intent返回包含参数的Snippet Intent作为结果
  2. 系统刷新时自动填充参数值
  3. 执行Snippet Intent的perform方法渲染视图
  4. 用户交互触发关联Intent执行
  5. 系统再次渲染更新后的视图

代码示例

开发者可以通过简洁的Swift代码实现这一功能:

struct ClosestLandmarkIntent: AppIntent {
    func perform() async throws -> some ReturnsValue<LandmarkEntity> & ShowsSnippetIntent & ProvidesDialog {
        let landmark = await self.findClosestLandmark()
        return .result(
            value: landmark,
            snippetIntent: LandmarkSnippetIntent(landmark: landmark)
        )
    }
}

增强的系统集成能力

App Intents框架新增了多项系统集成功能,让应用可以出现在更多系统界面中。

图像搜索集成

iOS 16的图像搜索功能现在可以向第三方应用开放:

struct LandmarkIntentValueQuery: IntentValueQuery {
    func values(for input: SemanticContentDescriptor) async throws -> [LandmarkEntity] {
        guard let pixelBuffer = input.pixelBuffer else { return [] }
        return try await modelData.searchLandmarks(matching: pixelBuffer)
    }
}

多实体类型支持

开发者现在可以返回多种类型的实体:

@UnionValue
enum VisualSearchResult {
    case landmark(LandmarkEntity)
    case collection(CollectionEntity)
}

用户体验优化

支持撤销操作

通过UndoableIntent协议,用户可以使用三指滑动撤销Intent操作:

struct DeleteCollectionIntent: UndoableIntent {
    func perform() async throws -> some IntentResult {
        await undoManager?.registerUndo(withTarget: modelData) { modelData in
            // 恢复集合
        }
    }
}

多选项交互

开发者可以提供多个操作选项供用户选择:

let resultChoice = try await requestChoice(
    between: [.cancel, archive, delete],
    dialog: "Do you want to archive or delete \(collection.name)?"
)

开发者便利API

视图控制分离

新的API允许将UI代码从Intent中分离:

.onAppIntentExecution(OpenLandmarkIntent.self) { intent in
    self.path.append(intent.landmark)
}

延迟属性加载

优化性能的延迟属性加载功能:

@DeferredProperty
var crowdStatus: Int {
    get async throws {
        await modelData.getCrowdStatus(self)
    }
}

结论

App Intents框架的新特性为开发者提供了更强大的工具,让应用能够深度融入苹果生态系统。从交互式卡片到系统级集成,从用户体验优化到开发者便利性提升,这些改进将为用户带来更一致、更便捷的使用体验,同时降低开发者的实现难度。

相关资源

开发者可以观看以下资源了解更多详情:

  • “了解App Intents”专题演讲
  • TravelTracking示例应用代码
  • 官方开发文档

查看完整视频列表和文档