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.

Hello, I am having a similar issue. I have all my authorizations, entitlements, and permissions in order but I am still not getting any samples. didFetchResult is not being called even though the fetch has completed. Please, how did you get past your issue? Thank you

Data Fetch issue from SensorKit
 
 
Q