Device Activity Report only for Selected Apps

This thread has been locked by a moderator; it no longer accepts new replies.

I want to display device activity reports for particular selected apps. for getting a daily basis app uses time. Now, what is happening? there are 10 apps selected from the family activity picker but some apps are displayed in the list. I need all 10 apps or more that I will choose from the family activity picker. The bellow code is used for fetching reports.

var body: some View {

    VStack {
        DeviceActivityReport(context, filter: filter)
     }
}

bellow code is used for the filter

@State public var filter = DeviceActivityFilter()

init(selectedApps: Set<ApplicationToken>, selectedCategories: Set<ActivityCategoryToken>, selectedWebDomains: Set<WebDomainToken>) {
    
    self.selectedApps = selectedApps
    self.selectedCategories = selectedCategories
    self.selectedWebDomains = selectedWebDomains
    self.filter = DeviceActivityFilter(
        segment: .daily(
            during: Calendar.current.dateInterval(
                of: .weekOfYear, for: .now
            )!
        ),
        users: .all,
        devices: .init([.iPhone]),
        applications: selectedApps,
        categories: selectedCategories,
        webDomains: selectedWebDomains
    )
}

You can see we selected 3 apps from family activity picker but we getting 2 apps from DeviceActivityReport extension

following code is for device activity report extension

let context: DeviceActivityReport.Context = .totalActivity

// Define the custom configuration and the resulting view for this report.
let content: (ActivityReport) -> TotalActivityView

   func makeConfiguration(representing data: DeviceActivityResults<DeviceActivityData>) async -> ActivityReport {
    // Reformat the data into a configuration that can be used to create
    // the report's view.
    var res = ""
    var list: [AppDeviceActivity] = []
    let totalActivityDuration = await data.flatMap { $0.activitySegments }.reduce(0, {
        $0 + $1.totalActivityDuration
    })
    for await d in data {
        res += d.user.appleID!.debugDescription
        res += d.lastUpdatedDate.description
        
        for await a in d.activitySegments{
            res += a.totalActivityDuration.formatted()
            for await c in a.categories {
                for await ap in c.applications {
                    if let apptoken = ap.application.token {
                        let appName = (ap.application.localizedDisplayName ?? "nil")
                        let bundle = (ap.application.bundleIdentifier ?? "nil")
                        let duration = ap.totalActivityDuration
                        let numberOfPickups = ap.numberOfPickups
                    let app = AppDeviceActivity(appToken: apptoken, id: bundle, displayName: appName, duration: duration, numberOfPickups: numberOfPickups)
                        list.append(app)
                    }
                }
            }
        }
    }
    

      
    return ActivityReport(totalDuration: totalActivityDuration, apps: list)
}
Answered by DTS Engineer in 824446022

Please help me out of this.

Sadly, this isn’t my area of expertise. One of my colleagues responded on your other thread and I recommend you concentrate your discussion there.


Actually, I’m gonna make that more than a recommendation. There’s no point having two threads running for exactly the same question, so I’ve locked this thread.

Folks, if you want to discuss this issue further, please bounce over to VSid’s other thread. Thanks!

Share and Enjoy

Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"

Boost

DeviceActivityReport will give you data for all of the installed apps on your phone (devices: .init([.iPhone])). Then you have to filter down that data based on your restricted apps which you have selected through FamilyActivitySelection().

only applications that have screentime associated with them will show up in the report the way you have set up. Can save your user's selection to appgroup & append apps that do not have time in the report to get the list. applicationtokens should be the same between contexts so can use that as a unique identifier

Please help me out of this.

Sadly, this isn’t my area of expertise. One of my colleagues responded on your other thread and I recommend you concentrate your discussion there.


Actually, I’m gonna make that more than a recommendation. There’s no point having two threads running for exactly the same question, so I’ve locked this thread.

Folks, if you want to discuss this issue further, please bounce over to VSid’s other thread. Thanks!

Share and Enjoy

Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"

Device Activity Report only for Selected Apps
 
 
Q