Rebuild guide
This is a sanitized, library-only rebuild guide for the corresponding-source package. It does not build, install, or replace the Eki XR customer app. It does not contain Eki XR Swift source or any application or library binary.
1. Package identity and provenance
Download ffmpeg-source-build164-r1.tar.gz and verify it with ffmpeg-source-build164-r1.tar.gz.sha256.
- Archive size:
18,383,140bytes. - SHA-256:
50f1e607757254afad2a2a2fc2ea95830211bd20f78dd96dfb9350a2074990ce. - Top-level directory:
ffmpeg-source-package/. - Archive manifest:
ffmpeg-source-package/manifest.json.
The pinned source identities are:
- FFmpegKitNext
v9.0.0, commita724ed99583dcfe2af497c794fdd6b24ddd54a4e. - FFmpeg
n9.0.1, commitbf1b838f2ab88b4f8fd83443325c782ea0e0f7fa. - GNU config
v20210814, commit805517123cbfe33d17c989a18e78c5789fab0437. - gas-preprocessor
v20210917, then patched byfunction-ios.sh; retained SHA-256ed085dd43ed95759a2b84afc3b1f9b0b64114b586d0d4b16fbe164b4369ae844.
FFmpeg is stored at the wrapper's src/ffmpeg build location as pristine pinned bytes. The eight retained post-customization files are under modified-source/ffmpeg/ and the corresponding patch is patches/ffmpeg-working-tree.patch, SHA-256 69380ce6e609c1e5af28d0ecba08c186c8e8f1ffa7441bd9e3b9f3b0674cafc2.
2. Prerequisites
- macOS with Xcode 27 and an iOS 27 SDK.
- Homebrew GNU sed, GNU libtool, and
pkg-config. For example:brew install gnu-sed libtool pkg-config. - A clean, disposable working directory with enough storage for temporary compiler output.
Use a toolchain appropriate for the target machine. The recorded build used GNU sed as gsed and GNU libtool ahead of the system tools. The commands below use Homebrew prefix expressions instead of machine-specific absolute paths.
3. Verify and safely extract
Run these commands from the directory containing the downloaded files. Replace <work-dir> throughout with an absolute path to a fresh disposable directory without spaces.
shasum -a 256 -c ffmpeg-source-build164-r1.tar.gz.sha256
mkdir -p <work-dir>
tar -xzf ffmpeg-source-build164-r1.tar.gz -C <work-dir>
cd <work-dir>/ffmpeg-source-package
Before building, inspect manifest.json. Its per-file SHA-256 and byte-size records cover the payload; the manifest is intentionally excluded from its own records. Keep an unchanged copy for verification before making your own modifications.
4. Recreate synthetic Git baselines
The public archive intentionally has no .git metadata. The FFmpeg build script uses Git to reset the pristine source before applying its own customizations, so create disposable synthetic baselines after extraction. These commits are local verification anchors, not upstream identities. Do not create upstream-looking tags or use the pinned upstream commit IDs as synthetic commit IDs.
Disable commit signing and hooks for these synthetic commits. The verified extraction used the following policy:
export GIT_CONFIG_NOSYSTEM=1
export GIT_TERMINAL_PROMPT=0
cd <work-dir>/ffmpeg-source-package/upstream/ffmpeg-kit-next/src/ffmpeg
git -c commit.gpgsign=false -c core.hooksPath=/dev/null init --initial-branch=main
git config user.name "Eki XR synthetic rebuild"
git config user.email "[email protected]"
git config commit.gpgsign false
git config core.hooksPath /dev/null
git add -A
git commit --no-gpg-sign -m "synthetic pristine FFmpeg baseline"
git rev-parse HEAD
The verified extracted-archive FFmpeg baseline was 491f75a93602d7c48dbacb12f2b059646d98a2f9. Initialize the wrapper separately:
cd <work-dir>/ffmpeg-source-package/upstream/ffmpeg-kit-next
git -c commit.gpgsign=false -c core.hooksPath=/dev/null init --initial-branch=main
git config user.name "Eki XR synthetic rebuild"
git config user.email "[email protected]"
git config commit.gpgsign false
git config core.hooksPath /dev/null
git add -A
git commit --no-gpg-sign -m "synthetic FFmpegKitNext wrapper baseline"
git rev-parse HEAD
The verified extracted-archive wrapper baseline was 5b7756683dbc65a1bda3136500fef9816f1d2bce. Your synthetic commit hashes will differ; the manifest records the actual upstream identities.
5. Do not preapply the retained patch
DO NOT preapply patches/ffmpeg-working-tree.patch. The FFmpegKitNext script scripts/apple/ffmpeg.sh resets the pristine FFmpeg files and applies its customizations during the build. Applying the retained patch first would duplicate those changes. Use the patch only as post-build evidence for comparison.
6. Run the recorded library build
From <work-dir>/ffmpeg-source-package/upstream/ffmpeg-kit-next, run the recorded recipe. The prefix expressions keep the command free of local usernames and machine-specific absolute paths while selecting the same GNU tools:
PATH="$(brew --prefix libtool)/libexec/gnubin:$(brew --prefix)/bin:$PATH" \
SED="$(brew --prefix)/bin/gsed" \
./ios.sh --arch=arm64,arm64-simulator \
--target=27.0 \
--disable-lib-ios-avfoundation \
--enable-lib-ios-videotoolbox \
--enable-lib-ios-audiotoolbox \
--enable-lib-ios-zlib \
--jobs=8 -x --spm
This records the same target and flags as the verified invocation: shared FFmpegKitNext libraries, no static output, disabled autodetection, iOS zlib, AudioToolbox and VideoToolbox enabled, AVFoundation disabled, GPL and nonfree options disabled. The zlib dependency is classified as a platform-system dependency; no zlib source archive is included.
7. Privacy manifest destination mapping
The archive contains four source privacy manifests under vendor/. If a separate library source checkout is being compared or staged, map each archive member to the corresponding project-relative destination exactly as follows:
vendor/Vendor/FFmpegKitNext/libavformat.xcframework/ios-arm64/libavformat.framework/PrivacyInfo.xcprivacy→Vendor/FFmpegKitNext/libavformat.xcframework/ios-arm64/libavformat.framework/PrivacyInfo.xcprivacyvendor/Vendor/FFmpegKitNext/libavformat.xcframework/ios-arm64-simulator/libavformat.framework/PrivacyInfo.xcprivacy→Vendor/FFmpegKitNext/libavformat.xcframework/ios-arm64-simulator/libavformat.framework/PrivacyInfo.xcprivacyvendor/Vendor/FFmpegKitNext/libavutil.xcframework/ios-arm64/libavutil.framework/PrivacyInfo.xcprivacy→Vendor/FFmpegKitNext/libavutil.xcframework/ios-arm64/libavutil.framework/PrivacyInfo.xcprivacyvendor/Vendor/FFmpegKitNext/libavutil.xcframework/ios-arm64-simulator/libavutil.framework/PrivacyInfo.xcprivacy→Vendor/FFmpegKitNext/libavutil.xcframework/ios-arm64-simulator/libavutil.framework/PrivacyInfo.xcprivacy
For this build, copy each manifest into the matching framework slice under upstream/ffmpeg-kit-next/prebuilt/bundle-apple-xcframework-ios-27.0/, omitting the vendor/Vendor/FFmpegKitNext/ prefix. The source download contains no compiled frameworks.
8. Recorded verification and limitations
The independent clean build record dated 2026-10-26 completed with build_exit_code=0. It reported ffmpeg: ok and ffmpeg-kit: ok for both arm64 and arm64-simulator, followed by successful xcframework creation.
Post-build source comparison matched 7 of 8 retained modified FFmpeg files: configure, libavformat/file.c, libavformat/hls.c, libavformat/protocols.c, libavutil/file.c, libavutil/file.h, and libavutil/log.c. The only mismatch was ffbuild/common.mak, whose difference was an absolute wrapper-folder path. The post-build patch therefore also differed from the retained patch. Do not describe this result as byte-reproducibility.
This website distributes source only. Your rights to modify and redistribute the covered library code and resulting libraries are governed by their included licenses; this guide adds no restrictions.
9. Scope, licenses, and notices
The package preserves upstream license and notice files, including the FFmpeg and FFmpegKitNext license files, FFmpegKitNext's tool-license files, GNU config notices, and the gas-preprocessor license header. Read the files included in the archive for the terms applicable to the code you use. The package records zlib as a platform-system dependency and does not include its source.
The package manifest marks reproducibility, dependency notices, and commercial legal compliance as unverified. This page is engineering provenance, not legal advice or a legal-compliance verdict.
Modification notices
2026-10-26: This public guide documents the approved source-only publication. No Eki XR app Swift source, app binary, library binary, signing material, or customer data is included.
2026-10-26: The archive was copied byte-for-byte from the verified source package. Its original internal provenance strings were not rewritten. The public filename and adjacent checksum sidecar identify this release as build164-r1.
2026-10-26: The guide records the clean library build result and its one known generated-source path difference. It makes no claim of App Store replacement or legal compliance.