audio-streaming
Receive synchronized PCM audio frames through a Camera stream on iOS
MockDeviceKit for testing without physical glasses hardware
$ npx -y skills add facebook/meta-wearables-dat-ios --skill mockdevice-testing --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/mockdevice-testingContext preview
The summary Claude sees to decide when to auto-load this skill.
MockDeviceKit for testing without physical glasses hardware
name: mockdevice-testing description: MockDeviceKit for testing without physical glasses hardware
Use MockDeviceKit to test DAT SDK integrations without physical Meta glasses.
MockDeviceKit simulates Meta glasses behavior for development and testing. It provides:
`GlassesModel` cases: `.rayBanMeta`, `.oakleyMetaHSTN`, `.oakleyMetaVanguard`, `.rayBanMetaOptics`, `.metaGlasses`, `.metaRayBanDisplay`. Use `.metaRayBanDisplay` when you need a display-capable simulated device.
Add `MWDATMockDevice` to your target via Swift Package Manager (it's included in the `meta-wearables-dat-ios` package).
import MWDATMockDevice
To test a Display experience, also add `MWDATDisplay` to the target. After enabling `MockDeviceKit`, use the normal `DeviceSession.addDisplay()` API.
import MWDATMockDevice let mockDeviceKit = MockDeviceKit.shared mockDeviceKit.enable() let mockDevice = try mockDeviceKit.pairGlasses(model: .rayBanMeta)
`enable()` starts from a registered, permissions-granted state. Pass a `MockDeviceKitConfig` when you want to exercise the registration or permission flow instead:
mockDeviceKit.enable(
config: MockDeviceKitConfig(initiallyRegistered: false, initialPermissionsGranted: false)
)Use `mockDeviceKit.pairedDevices`, `mockDeviceKit.unpairDevice(_:)`, and `mockDeviceKit.disable()` to tear devices down.
// Simulate glasses lifecycle mockDevice.powerOn() mockDevice.unfold() mockDevice.don() // Simulate wearing the glasses // Later... mockDevice.doff() // Simulate removing mockDevice.fold() mockDevice.powerOff() // Battery, charging, and thermal state mockDevice.setBatteryLevel(35) mockDevice.setChargingState(.charging) mockDevice.setThermalLevel(.severe)
A single tap pauses an active camera stream, and a second tap resumes it — the `CameraAccess` tests use this to cover the `StreamState.paused` path.
mockDevice.services.captouch.tap() mockDevice.services.captouch.tapAndHold()
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) // Or stream live from the phone's own camera camera.setCameraFeed(cameraFacing: .back) // CameraFacing is .front or .back
let camera = mockDevice.services.camera camera.setCapturedImage(fileURL: imageURL)
Create a reusable test base class:
import MWDATCore
import MWDATMockDevice
import XCTest
@MainActor
class MockDeviceKitTestCase: XCTestCase {
private var mockDevice: MockGlasses?
private var cameraKit: MockCameraKit?
override func setUp() async throws {
try await super.setUp()
try? Wearables.configure()
MockDeviceKit.shared.enable()
let device = try MockDeviceKit.shared.pairGlasses(model: .rayBanMeta)
mockDevice = device
cameraKit = device.services.camera
// Make the device available to Wearables before creating a session
device.powerOn()
device.unfold()
}
override func tearDown() async throws {
MockDeviceKit.shared.disable()
mockDevice = nil
cameraKit = nil
try await super.tearDown()
}
}The device only shows up in `Wearables.shared.devicesStream()` after it is powered on and unfolded, so wait for your view model's "device available" state before calling `createSession(deviceSelector:)`.
The CameraAccess sample app includes a Debug menu for MockDeviceKit:
1. Tap the **Debug icon** to open the MockDeviceKit menu 2. Tap **Pair RayBan Meta** to create a simulated device 3. Use **PowerOn**, **Unfold**, **Don** to simulate glasses states 4. Select video/image files to configure mock camera feeds 5. Start streaming to see simulated frames
| Type | Formats | |------|---------| | Video | h.265 (HEVC); the samples ship an `.mp4` file | | Image | JPEG, PNG |
The Meta Wearables Device Access Toolkit enables developers to utilize Meta's AI glasses to build hands-free wearable experiences into their mobile applications.
Receive synchronized PCM audio frames through a Camera stream on iOS
Capture standalone high-quality photos from connected glasses on iOS
Stream, video frames, photo capture, resolution/frame rate configuration
Swift patterns, async/await, naming conventions, key types for DAT SDK iOS development
Use the Wearables DAT MCP server for live DAT documentation search with `search_dat_docs`,…