You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

单屏添加3个及以上Device Activity Report时扩展崩溃问题咨询

关于Screen Time API多DeviceActivityReport显示崩溃的问题

我正在使用WWDC 2021和2022推出的新版Screen Time API开发SwiftUI应用,尝试在单屏展示3个Device Activity Report。制作了仅显示文本的简易Demo后,发现所有报告短暂显示后消失,Xcode调试控制台出现以下错误:

2023-09-02 22:36:37.763861-0400 TestApp3[6222:368344] [default] VS terminated with error: Error Domain=_UIViewServiceInterfaceErrorDomain Code=3 "(null)" UserInfo={Message=Service Connection Interrupted}

项目及所有目标的部署目标为iOS 16,使用Xcode 14.3.1,测试设备为iPhone 11(iOS 16.6)。若用单个报告承载所有元素会导致性能低下,整个API运行也较卡顿,不确定是自身实现问题还是Apple的Bug。

核心代码

ContentView.swift

struct ContentView: View {
    var body: some View {
        VStack {
            DeviceActivityReport(.init("Total Activity1"))
            Spacer(minLength: 16)
            DeviceActivityReport(.init("Total Activity2"))
            Spacer(minLength: 16)
            DeviceActivityReport(.init("Total Activity3"))
        }
    }
}

ActivityReport.swift

@main
struct ActivityReport: DeviceActivityReportExtension {
    var body: some DeviceActivityReportScene {
        TotalActivityReport1 { totalActivity in
                .init(totalActivity: totalActivity)
        }
        TotalActivityReport2 { totalActivity in
            .init(totalActivity: totalActivity)
        }
        TotalActivityReport3 { totalActivity in
            .init(totalActivity: totalActivity)
        }
    }
}

TotalActivityReport.swift

extension DeviceActivityReport.Context {
    static let totalActivity1 = Self("Total Activity1")
    static let totalActivity2 = Self("Total Activity2")
    static let totalActivity3 = Self("Total Activity3")
}

struct TotalActivityReport1: DeviceActivityReportScene {
    let context: DeviceActivityReport.Context = .totalActivity1
    let content: (String) -> TotalActivityView1
    
    func makeConfiguration(representing data: DeviceActivityResults<DeviceActivityData>) async -> String {
        "Test1"
    }
}

struct TotalActivityReport2: DeviceActivityReportScene {
    let context: DeviceActivityReport.Context = .totalActivity2
    let content: (String) -> TotalActivityView2
    
    func makeConfiguration(representing data: DeviceActivityResults<DeviceActivityData>) async -> String {
        "Test2"
    }
}

struct TotalActivityReport3: DeviceActivityReportScene {
    let context: DeviceActivityReport.Context = .totalActivity3
    let content: (String) -> TotalActivityView3
    
    func makeConfiguration(representing data: DeviceActivityResults<DeviceActivityData>) async -> String {
        "Test3"
    }
}

TotalActivityView.swift

struct TotalActivityView1: View {
    let totalActivity: String
    
    var body: some View {
        Text(totalActivity)
    }
}

struct TotalActivityView2: View {
    let totalActivity: String
    
    var body: some View {
        Text(totalActivity)
    }
}

struct TotalActivityView3: View {
    let totalActivity: String
    
    var body: some View {
        Text(totalActivity)
    }
}

内容的提问来源于stack exchange,提问作者Daniyar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 22:00:21