mockdevice-testing

โดย facebook

MockDeviceKit สำหรับการทดสอบโดยไม่ต้องใช้ฮาร์ดแวร์แว่นตาจริง

npx skills add https://github.com/facebook/meta-wearables-dat-ios --skill mockdevice-testing

MockDevice Testing (iOS)

Use MockDeviceKit to test DAT SDK integrations without physical Meta glasses.

MockDeviceKit simulates Meta glasses behavior for development and testing. It provides:

  • MockDeviceKit.shared — Entry point (MockDeviceKitInterface) for creating simulated devices
  • MockGlasses — Simulated glasses, created with pairGlasses(model:)
  • MockGlassesServices — Per-device services: camera, captouch, display
  • MockCameraKit — Simulated camera with configurable video feed and photo capture
  • MockCaptouchKit — Simulated touchpad (tap(), tapAndHold())
  • MockDisplayKit — Simulated Display surface for MWDATDisplay content
  • MockPermissions — Control DAT permission results without the Meta AI app

GlassesModel cases: .rayBanMeta, .oakleyMetaHSTN, .oakleyMetaVanguard, .rayBanMetaOptics, .metaGlasses, .metaRayBanDisplay. Use .metaRayBanDisplay when you need a display-capable simulated device.

Setup

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.

Creating a mock device

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.

Simulating device states

// 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)

Simulating touchpad input

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()

Configuring permissions

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)

Setting up mock camera feeds

Video streaming

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

Photo capture

let camera = mockDevice.services.camera
camera.setCapturedImage(fileURL: imageURL)

Writing tests with MockDeviceKit

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:).

Using MockDeviceKit in the CameraAccess sample

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

Supported media formats

TypeFormats
Videoh.265 (HEVC); the samples ship an .mp4 file
ImageJPEG, PNG

Links

Skills เพิ่มเติมจาก facebook

gc-safe-coding
facebook
สำหรับคำอธิบายและเหตุผลโดยละเอียด โปรดดูที่ doc/GCSafeCoding.md
app-review-prep
facebook
เตรียมแอป Meta สำหรับ App Review — ตรวจสอบสถานะปัจจุบัน ข้อกำหนดที่ค้างอยู่ สิทธิ์ที่ได้รับ และประวัติการส่ง ใช้ก่อนส่งแอป…
api-health
facebook
ตรวจสอบสุขภาพ API สำหรับแอป Meta — ตรวจสอบ rate limits, ปริมาณการเรียกใช้ และการเลิกใช้งาน API ใช้เพื่อวินิจฉัยการจำกัดการใช้งาน, วางแผนความจุ หรือเตรียมพร้อมสำหรับเวอร์ชัน API…
debug-webhooks
facebook
แก้ไขปัญหาเว็บฮุคสำหรับแอป Meta — ตรวจสอบการสมัครใช้งานที่ใช้งานอยู่ ระบุการตั้งค่าที่ผิดพลาด และส่งเพย์โหลดทดสอบเพื่อยืนยันการส่งมอบ ใช้เมื่อ…
api-integration
facebook
แนะนำนักพัฒนาในการตั้งค่าการเชื่อมต่อ Meta API ตั้งแต่เริ่มต้น — ค้นหา API ที่เหมาะสม ดึงคู่มือการตั้งค่า ข้อกำหนดการยืนยันตัวตน…
webhook-setup
facebook
ตั้งค่าเว็บฮุคสำหรับแอป Meta แบบครบวงจร — ค้นหาหัวข้อที่มีให้เลือก สมัครรับฟิลด์ และตรวจสอบด้วยเพย์โหลดทดสอบ ใช้เมื่อกำหนดค่าเว็บฮุคสำหรับ…
test-ui
facebook
ทดสอบระบบ UI (PanelUI, ScreenSpace) กับตัวอย่าง poke โดยใช้ iwsdk CLI
flags
facebook
ตรวจสอบและเปรียบเทียบสถานะฟีเจอร์แฟลกข้ามช่องทางการเผยแพร่ของ React ดูแฟลกทั้งหมดในทุกช่องทาง (www, www-modern, canary, next, experimental, rn variants) หรือเปรียบเทียบเฉพาะช่องทางด้วย --diff รูปแบบผลลัพธ์ประกอบด้วยมุมมองตารางเริ่มต้น, การส่งออก CSV, และการจัดกลุ่มสถานะการทำความสะอาด สถานะแฟลกแสดงด้วยสัญลักษณ์: เปิดใช้งาน (✅), ปิดใช้งาน (❌), ทดสอบรูปแบบต่างๆ (🧪), เฉพาะการทำโปรไฟล์ (📊) ข้อผิดพลาดทั่วไป: แฟลก __VARIANT__ ถูกทดสอบในทั้งสองสถานะบน www; ใช้ --diff เพื่อค้นหาความหมาย...