Data Fetch issue from SensorKit

I want use SensorKit data for research purposes in my current app. I have applied for and received permission from Apple to access SensorKit Data. I have granting all the necessary permissions. But no data retrieved.

I am using didCompleteFetch for retrieving data from Sensorkit. CompleteFetch method calls but find the data. Below is my SensorKitManager Code.

import SensorKit import Foundation

protocol SensorManagerDelegate: AnyObject { func didFetchPhoneUsageReport(_ reports: [SRPhoneUsageReport]) func didFetchAmbientLightSensorData(_ data: [SRAmbientLightSample]) func didFailFetchingData(error: Error) }

class SensorManager: NSObject, SRSensorReaderDelegate {

private let phoneUsageReader: SRSensorReader
private let ambientLightReader: SRSensorReader
weak var delegate: SensorManagerDelegate?

override init() {
    self.phoneUsageReader = SRSensorReader(sensor: .phoneUsageReport)
    self.ambientLightReader = SRSensorReader(sensor: .ambientLightSensor)
    super.init()
    self.phoneUsageReader.delegate = self
    self.ambientLightReader.delegate = self
}

func requestAuthorization() {
    let sensors: Set<SRSensor> = [.phoneUsageReport, .ambientLightSensor]

    guard phoneUsageReader.authorizationStatus != .authorized || ambientLightReader.authorizationStatus != .authorized else {
        log("Already authorized. Fetching data directly...")
        fetchSensorData()
        return
    }

    SRSensorReader.requestAuthorization(sensors: sensors) { [weak self] error in
        DispatchQueue.main.async {
            if let error = error {
                self?.log("Authorization failed: \(error.localizedDescription)", isError: true)
                self?.delegate?.didFailFetchingData(error: error)
            } else {
                self?.log("Authorization granted.")
                self?.fetchSensorData()
            }
        }
    }
}

func fetchSensorData() {
    guard let fromDate = Calendar.current.date(byAdding: .day, value: -1, to: Date()) else {
        log("Failed to calculate 'from' date.", isError: true)
        return
    }

    let fromTime = SRAbsoluteTime.fromCFAbsoluteTime(_cf: fromDate.timeIntervalSinceReferenceDate)
    let toTime = SRAbsoluteTime.fromCFAbsoluteTime(_cf: Date().timeIntervalSinceReferenceDate)

    let phoneUsageRequest = SRFetchRequest()
    phoneUsageRequest.from = fromTime
    phoneUsageRequest.to = toTime
    phoneUsageRequest.device = SRDevice.current

    let ambientLightRequest = SRFetchRequest()
    ambientLightRequest.from = fromTime
    ambientLightRequest.to = toTime
    ambientLightRequest.device = SRDevice.current

    phoneUsageReader.fetch(phoneUsageRequest)
    ambientLightReader.fetch(ambientLightRequest)
}

// ✅ Delegate Methods
func sensorReader(_ reader: SRSensorReader, didCompleteFetch fetchRequest: SRFetchRequest) {
    Task.detached {
        if reader.sensor == .phoneUsageReport {
            if let samples = reader.fetch(fetchRequest) as? [SRPhoneUsageReport] {
                DispatchQueue.main.async { [weak self] in
                    self?.delegate?.didFetchPhoneUsageReport(samples)
                }
            }
        } else if reader.sensor == .ambientLightSensor {
            if let samples = reader.fetch(fetchRequest) as? [SRAmbientLightSample] {
                DispatchQueue.main.async { [weak self] in
                    self?.delegate?.didFetchAmbientLightSensorData(samples)
                }
            }
        }
    }
}

func sensorReader(_ reader: SRSensorReader, fetching fetchRequest: SRFetchRequest, didFetchResult result: SRFetchResult<AnyObject>) -> Bool {
    return true
}

func sensorReader(_ reader: SRSensorReader, fetching fetchRequest: SRFetchRequest, failedWithError error: any Error) {
    DispatchQueue.main.async { [weak self] in
        self?.delegate?.didFailFetchingData(error: error)
    }
}

// MARK: - Logging Helper
private func log(_ message: String, isError: Bool = false) {
    if isError {
        print("❌ [SensorManager] \(message)")
    } else {
        print("✅ [SensorManager] \(message)")
    }
}

}

And ViewController

import UIKit import SensorKit

class ViewController: UIViewController { private var sensorManager: SensorManager!

override func viewDidLoad() {
    super.viewDidLoad()
    setupSensorManager()
}

private func setupSensorManager() {
    sensorManager = SensorManager()
    sensorManager.delegate = self
    sensorManager.requestAuthorization()
}

}

// MARK: - SensorManagerDelegate extension ViewController: SensorManagerDelegate { func didFetchPhoneUsageReport(_ reports: [SRPhoneUsageReport]) { for report in reports { print("Total Calls: (report.totalOutgoingCalls + report.totalIncomingCalls)") print("Outgoing Calls: (report.totalOutgoingCalls)") print("Incoming Calls: (report.totalIncomingCalls)") print("Total Call Duration: (report.totalPhoneCallDuration) seconds") } }

func didFetchAmbientLightSensorData(_ data: [SRAmbientLightSample]) {
    for sample in data {
        print(sample)
    }
}

func didFailFetchingData(error: Error) {
    print("Failed to fetch data: \(error.localizedDescription)")
}

}

Could anyone please assist me in resolving this issue? Any guidance or troubleshooting steps would be greatly appreciated.

Data Fetch issue from SensorKit
 
 
Q