Every xcframework now ships xros-arm64 and xros-arm64-simulator alongside the existing five slices, and Package.swift declares .visionOS(.v1). Nothing else changed: the iOS, tvOS and macOS slices are bit-identical to 2.3.0.
Added
- visionOS device and simulator slices. FFmpeg, dav1d, zimg and libzvbi all cross-compile to
arm64-apple-xros1.0and its simulator variant. The resulting slice is feature-identical to the tvOS one, verified by diffing the generated codec, demuxer, filter and parser lists: 39 decoders, 24 demuxers, 13 filters and 19 parsers, byte-identical sets, includingyadif_videotoolboxfor Metal deinterlacing,libdav1d,libzvbi_teletext, and thesup/webvttsidecar demuxers. Binaries reportplatform VISIONOS minos 1.0undervtool.
Local FFmpeg patches
One patch was added, bringing the total to four:
patch_ffmpeg_visionos:libavcodec/videotoolbox.cselectskCVPixelBufferOpenGLESCompatibilityKeyunder#if TARGET_OS_IPHONE, which is 1 on visionOS (TARGET_OS_IOSis the one that is 0). The key is marked unavailable there, because the platform has neither OpenGL ES nor OpenGL, so the hardware-decode path did not compile forxros. The patch takes the key out of the visionOS branch only. Nothing is lost: the attribute merely asks CoreVideo to make the buffer bindable as a GL texture, and on visionOS every consumer is Metal, which the IOSurface properties set alongside it already cover.TARGET_OS_VISIONis defined as 0 on SDKs that predate it, and an undefined macro evaluates to 0 in#if, so the patch is a no-op on every other slice.
Everything else cross-compiled as it stands: dav1d's meson cross build, zimg's and zvbi's autotools, and FFmpeg's own configure with --target-os=darwin and an xros triple all needed no changes.
Note for consumers
The visionOS simulator slice is arm64-only, for the obvious reason: there is no Intel Vision Pro.
Built and verified against Xcode 26 with the visionOS 26.5 SDK; the package builds for both generic/platform=visionOS and the visionOS Simulator.