Native iOS integration
Camera ownership, latest-frame transfer and native packaging boundaries.
Native boundary
The Apple Vision plugin is implemented in PhiMotionVisionBridge.h/.mm. The Objective-C++ source lives in Unity’s iOS plugin path so it is included in the exported Xcode project. This website does not modify generated Xcode files.
Camera ownership
A managed provider owns one opaque native provider. PoseCameraOwnership.TryAcquire checks for competing ownership; stopping or disposing the provider releases it. The capture thread publishes a completed latest-joint snapshot, and Unity reads a copy.
ABI and transfer
ABI version and structure size are validated. Key functions include PMRPose_Create, PMRPose_Start, PMRPose_Stop, PMRPose_CopyLatestFrame, PMRPose_CopyDiagnostics and PMRPose_Destroy. A version mismatch prevents the managed provider from starting.
The boundary does not expose partial frames or an unbounded queue. Unity polls rather than receiving a background callback into managed code. Raw camera pixels are not part of the common pose model.
MediaPipe and UnityFramework
The MediaPipe research integration isolates SDK symbols in a generated PhiMotionMediaPipePlugin.framework. Its documentation describes keeping static SDK graph symbols out of UnityFramework and exposing a C ABI. The packaging process uses the workspace after CocoaPods installation.
Build and device evidence
C# compilation, IL2CPP conversion, iOS export, Xcode build, signing, installation and process liveness are separate checks. Historical runtime records do not establish current device state. This website task performed no native build, signing or device operation.