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
}
}
}
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