dat-conventions

Swift-Muster, async/await, Namenskonventionen, Schlüsseltypen für die DAT SDK iOS-Entwicklung

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

DAT SDK Conventions (iOS)

Architecture

The public SDK is organized into these modules:

  • MWDATCore: Device discovery, registration, permissions, device selectors, DeviceSession
  • MWDATCamera: Camera, Stream, VideoFrame, photo capture
  • MWDATDisplay: Display capability, display UI components, icons, images, buttons, video
  • MWDATMockDevice: MockDeviceKit for testing without hardware
  • MWDATMockDeviceTestClient: MockDeviceTestClient for driving MockDeviceKit over HTTP from a UI-test process

Swift Patterns

  • Use async/await for all SDK operations — the SDK is fully async
  • Use AsyncSequence / publisher .listen {} for observing streams
  • Annotate UI-updating code with @MainActor
  • Never block the main thread with frame processing
  • Handle errors with do/catch — the SDK throws typed errors

Naming Conventions

TypeConventionExample
Entry pointWearables.sharedWearables.shared.startRegistration()
Device sessions*SessionDeviceSession
CapabilitiesNamed by functionStream
Selectors*DeviceSelectorAutoDeviceSelector, SpecificDeviceSelector
Config*ConfigurationStreamConfiguration
Publishers*PublisherstatePublisher, videoFramePublisher

Imports

import MWDATCore    // Registration, devices, permissions
import MWDATCamera  // Stream, VideoFrame, photo capture
import MWDATDisplay // Display, FlexBox, Text, Button, Image, Icon, VideoPlayer

For testing:

import MWDATMockDevice  // MockDeviceKit, MockGlasses, MockCameraKit

Key Types

  • Wearables — SDK entry point. Call Wearables.configure() at launch, then use Wearables.shared (an any WearablesInterface)
  • DeviceSession — The connection to a selected device. Create with createSession(deviceSelector:), then attach capabilities
  • Camera — Camera capability from session.addCamera(config:); owns camera.stream
  • Stream — Camera stream: start(), stop(), capturePhoto(format:), and the frame/state/photo/error publishers
  • Display — Display capability from session.addDisplay()
  • VideoFrame — Individual video frame with .makeUIImage() and .sampleBuffer
  • Device / DeviceIdentifier — DeviceIdentifier is a String; resolve a Device with deviceForIdentifier(_:)
  • AutoDeviceSelector — Selects the best available device, optionally filtered (filter: { $0.supportsDisplay() })
  • SpecificDeviceSelector — Selects a specific device by DeviceIdentifier
  • StreamConfiguration — Configure video codec, resolution, frame rate
  • ListenerTokenBag / AnyListenerToken — Keep .listen {} subscriptions alive; dropping a token cancels it
  • MockDeviceKit — Factory for creating simulated devices in tests

Error Handling

do {
    try Wearables.configure()
} catch {
    // Handle configuration error
}

do {
    try await Wearables.shared.startRegistration()
} catch {
    // Handle registration error
}

Build and Test

# Install dependencies via Swift Package Manager
# In Xcode: File > Add Package Dependencies > enter repo URL

# Build from command line
xcodebuild -scheme MWDATCore -destination 'platform=iOS Simulator,name=iPhone 16'

# Run tests
xcodebuild test -scheme MWDATCoreTests -destination 'platform=iOS Simulator,name=iPhone 16'

For sample apps:

# Open the sample app workspace
open ExternalSampleApps/CameraAccess/CameraAccess.xcodeproj

# Build and run on simulator (uses MockDeviceKit - no glasses needed)
xcodebuild -scheme CameraAccess -destination 'platform=iOS Simulator,name=iPhone 16'

Development Workflow

  1. Add SDK via Swift Package Manager (SPM) in Xcode
  2. Import modules (MWDATCore, MWDATCamera, MWDATDisplay when rendering Display content)
  3. Configure at app launch: try Wearables.configure()
  4. Build with Xcode or xcodebuild
  5. Test with MockDeviceKit - no physical glasses required
  6. Debug using Xcode console for SDK logs

Live docs search

If your editor supports remote MCP servers, connect https://mcp.developer.meta.com/wearables and use search_dat_docs for current DAT setup, session lifecycle, camera streaming, MockDeviceKit, permissions, and exact API symbols. This public docs server does not require authentication; do not configure tokens, OAuth, or custom authorization headers for it.

See the dat-docs-mcp skill for Claude Code, Cursor, and MCP Inspector setup and troubleshooting.

Use llms.txt when your tool only supports static reference context.

Links

Mehr Skills von facebook

gc-safe-coding
facebook
Die vollständige Erklärung und Begründung finden Sie in doc/GCSafeCoding.md.
app-review-prep
facebook
Bereiten Sie eine Meta-App für die App-Überprüfung vor – prüft aktuellen Status, ausstehende Anforderungen, gewährte Berechtigungen und Einreichungsverlauf. Verwenden Sie vor dem Einreichen einer App…
api-health
facebook
Überwachen Sie die API-Gesundheit einer Meta-App – prüfen Sie Rate Limits, Anrufvolumen und API-Deprecations. Verwenden Sie dies zur Diagnose von Drosselung, zur Kapazitätsplanung oder zur Vorbereitung auf API-Version…
debug-webhooks
facebook
Beheben Sie Webhook-Probleme für eine Meta-App – prüfen Sie aktive Abonnements, identifizieren Sie Fehlkonfigurationen und senden Sie Test-Payloads, um die Zustellung zu verifizieren. Verwenden Sie, wenn…
api-integration
facebook
Führe einen Entwickler durch die Einrichtung einer Meta-API-Integration von Grund auf — findet die richtigen APIs, ruft Setup-Anleitungen und Authentifizierungsanforderungen ab, …
webhook-setup
facebook
Richte Webhooks für eine Meta-App end-to-end ein – entdecke verfügbare Topics, abonniere Felder und verifiziere mit einer Test-Payload. Verwende dies beim Konfigurieren von Webhooks für…
test-ui
facebook
Teste das UI-System (PanelUI, ScreenSpace) am Beispiel von poke mit der iwsdk CLI.
flags
facebook
Inspiziere und vergleiche Feature-Flag-Status über React-Release-Kanäle hinweg. Zeige alle Flags über Kanäle hinweg an (www, www-modern, canary, next, experimental, rn-Varianten) oder vergleiche bestimmte Kanäle mit --diff. Ausgabeformate umfassen Standard-Tabellenansicht, CSV-Export und Bereinigungsstatus-Gruppierung. Flag-Status werden durch Symbole angezeigt: aktiviert (✅), deaktiviert (❌), Variantentest (🧪), nur Profiling (📊). Häufige Falle: __VARIANT__-Flags werden in beiden Zuständen auf www getestet; verwende --diff, um sinnvolle...