facebook/mockdevice-testing
MockDeviceKit for testing without physical glasses hardware
npx skills add https://github.com/facebook/meta-wearables-dat-ios --skill mockdevice-testing
Use MockDeviceKit to test DAT SDK integrations without physical Meta glasses.
MockDeviceKit simulates Meta glasses behavior for development and testing. It provides:
MockDeviceKit — Entry point for creating simulated devicesMockGlasses — Simulated glasses (Ray-Ban Meta, etc.)MockCameraKit — Simulated camera with configurable video feed and photo captureAdd MWDATMockDevice to your target via Swift Package Manager (it's included in the meta-wearables-dat-ios package).
import MWDATMockDevice
import MWDATMockDevice
let mockDeviceKit = MockDeviceKit.shared
mockDeviceKit.enable()
let mockDevice = try mockDeviceKit.pairGlasses(model: .rayBanMeta)
// Simulate glasses lifecycle
mockDevice.powerOn()
mockDevice.unfold()
mockDevice.don() // Simulate wearing the glasses
// Later...
mockDevice.doff() // Simulate removing
mockDevice.fold()
mockDevice.powerOff()
MockDeviceKit provides permissions to control permission behavior without the Meta AI app.
By default, requestPermission() returns .granted. Use set(_:_:) to control checkPermissionStatus() and setRequestResult(_:result:) to control requestPermission() outcomes.
let mockDeviceKit = MockDeviceKit.shared
// Simulate denied camera permission status
mockDeviceKit.permissions.set(.camera, .denied)
// Simulate denied request result (user tapping "deny")
mockDeviceKit.permissions.setRequestResult(.camera, result: .denied)
let camera = mockDevice.services.camera
camera.setCameraFeed(fileURL: videoURL)
let camera = mockDevice.services.camera
camera.setCapturedImage(fileURL: imageURL)
Create a reusable test base class:
import XCTest
import MetaWearablesDAT
@MainActor
class MockDeviceKitTestCase: XCTestCase {
private var mockDevice: MockGlasses?
private var cameraKit: MockCameraKit?
override func setUp() async throws {
try await super.setUp()
MockDeviceKit.shared.enable()
mockDevice = try MockDeviceKit.shared.pairGlasses(model: .rayBanMeta)
cameraKit = mockDevice?.services.camera // mockDevice is MockGlasses? for tearDown nil-ability
}
override func tearDown() async throws {
MockDeviceKit.shared.disable()
mockDevice = nil
cameraKit = nil
try await super.tearDown()
}
}
The CameraAccess sample app includes a Debug menu for MockDeviceKit:
| Type | Formats |
|------|---------|
| Video | h.265 (HEVC) |
| Image | JPEG, PNG |
Take facebook/mockdevice-testing from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.