Error: captureSession(_:didEndWith:error:) nearly matches defaulted requirement in RoomCaptureSessionDelegate

Hello,

I’m working with the RoomPlan API to capture and export 3D room models in an iOS app. My goal is to implement the RoomCaptureSessionDelegate protocol to handle the end of a room capture session. However, I’m encountering a cautionary warning in Xcode:

Warning: "captureSession(:didEndWith:error:) nearly matches defaulted requirement captureSession(:didEndWith:error:) of protocol RoomCaptureSessionDelegate."

I’ve verified that my delegate method signature matches the protocol, but the warning persists. I suspect this might be due to minor discrepancies in the parameter types or naming conventions required by the protocol.

Below is my full RoomScanner.swift file:

import RoomPlan
import SwiftUI
import UIKit

func exportModelToFiles() {
    let exportURL = FileManager.default.temporaryDirectory.appendingPathComponent("RoomModel.usdz")
    let documentPicker = UIDocumentPickerViewController(forExporting: [exportURL])
    documentPicker.modalPresentationStyle = .formSheet

    if let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene,
       let rootViewController = windowScene.windows.first?.rootViewController {
        rootViewController.present(documentPicker, animated: true, completion: nil)
    }
}

class RoomScanner: ObservableObject {
    var roomCaptureSession: RoomCaptureSession?
    private let sessionConfig = RoomCaptureSession.Configuration()
    private var capturedRoom: CapturedRoom?

    func startSession() {
        roomCaptureSession = RoomCaptureSession()
        roomCaptureSession?.delegate = self
        roomCaptureSession?.run(configuration: sessionConfig)
    }

    func stopSession() {
        roomCaptureSession?.stop()
        
        guard let room = capturedRoom else {
            print("No room data available for export.")
            return
        }

        let exportURL = FileManager.default.temporaryDirectory.appendingPathComponent("RoomModel.usdz")
        do {
            try room.export(to: exportURL)
            print("3D floor plan exported to \(exportURL)")
        } catch {
            print("Error exporting room model: \(error)")
        }
    }
}

// MARK: - RoomCaptureSessionDelegate
extension RoomScanner: RoomCaptureSessionDelegate {
    func captureSession(_ session: RoomCaptureSession, didUpdate room: CapturedRoom) {
        // Handle real-time updates if necessary
    }

    func captureSession(_ session: RoomCaptureSession, didEndWith capturedRoom: CapturedRoom, error: Error?) {
        if let error = error {
            print("Capture session ended with error: \(error.localizedDescription)")
        } else {
            self.capturedRoom = capturedRoom
        }
    }
}
Answered by DTS Engineer in 813332022

Hello @JesseRichardsDev,

Thanks for reaching out about this!

func captureSession(_ session: RoomCaptureSession, didEndWith capturedRoom: CapturedRoom, error: Error?) {

The type for the capturedRoom argument is incorrect here, it should be CapturedRoomData.

Also, the parameter name should be "data" rather than "capturedRoom".

Best regards,

Greg

Hello @JesseRichardsDev,

Thanks for reaching out about this!

func captureSession(_ session: RoomCaptureSession, didEndWith capturedRoom: CapturedRoom, error: Error?) {

The type for the capturedRoom argument is incorrect here, it should be CapturedRoomData.

Also, the parameter name should be "data" rather than "capturedRoom".

Best regards,

Greg

Error: captureSession(_:didEndWith:error:) nearly matches defaulted requirement in RoomCaptureSessionDelegate
 
 
Q