Prebuilt media frameworks for Viewaro and
PlayerKit: dynamic libmpv, FFmpeg and their dependencies, universal for arm64 and
x86_64, macOS 15+.
This repository holds releases only. It carries no source of its own — the build lives
in the private fbmpv-build-apple, and the corresponding source of each release is attached
to the release itself.
SwiftPM fetches a remote binaryTarget without credentials, so the artefacts have to be
reachable anonymously. That is not a compromise: every component here is LGPL-2.1 or
permissive and must be redistributable. What is proprietary — the application source and
the build scripts — stays in private repositories.
Every copyleft component is LGPL-2.1 and dynamically linked. No component is LGPL-3.0, deliberately: version 3 carries the GPLv3 Installation Information requirement, which a signed App Store bundle structurally cannot satisfy, while LGPL-2.1 §6 accepts the shared-library mechanism a dynamic framework already is.
Each release contains:
| Asset | What it is |
|---|---|
*.xcframework.zip |
the frameworks, one per library |
checksums.txt |
SwiftPM checksums — what a binaryTarget verifies against |
manifest.json |
components, licences, licence versions, linkage, and where the source is |
SBOM.spdx.json |
bill of materials, SPDX 2.3 |
fbmpv-<version>-corresponding-source.tar.gz |
the complete corresponding source |
That last asset is the LGPL-2.1 §6 obligation, and it ships in the same release as the binaries because the obligation attaches the moment a binary reaches anyone else — and it must be the source of that build, not whatever upstream serves later. It contains the exact upstream archives, every patch, the build scripts and configuration, licence texts and the SBOM.
swift package compute-checksum Libmpv.xcframework.zip # must match checksums.txtEvery copyleft framework is dynamic with an @rpath install name, so a replacement needs no
cooperation from the application: build the component from its archive in the corresponding
source, package it as a framework with the same name and install name, and replace it inside
the app's Contents/Frameworks. Instructions are in the source bundle's own README.