单屏添加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
相关产品推荐
相关产品推荐

