Vendored arti.xcframework rebuilt from source (Rust 1.96.0, normalized archive metadata for reproducible hashes). New ARTI-BINARY-PROVENANCE.md records toolchain, rebuild steps, and a SHA256 manifest for every file in the xcframework. A new CI workflow turns that policy into a gate: PRs must keep the binary matching the manifest, and binary changes must ship with source/lockfile/build-script evidence. Also raises TorManager.awaitReady's default timeout from 25s to 75s to match the bootstrap monitor deadline - a shorter wait reported "not ready" while Arti was still legitimately bootstrapping, silently stranding queued relay work. Privacy policy, Tor integration doc, and privacy assessment updated to match the current implementation. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
4.1 KiB
Arti Binary Provenance
This repo vendors a prebuilt Arti static-library xcframework at:
localPackages/Arti/Frameworks/arti.xcframework
SwiftPM links it through localPackages/Arti/Package.swift as the binary target named arti. Treat changes to this artifact like dependency updates: review the Rust sources, lockfile, build script, produced headers, and artifact hashes together.
Source Inputs
- Rust workspace:
localPackages/Arti/Cargo.toml - Crate:
localPackages/Arti/arti-bitchat - Dependency lockfile:
localPackages/Arti/Cargo.lock - Build script:
localPackages/Arti/build-ios.sh - Exported C header:
localPackages/Arti/Frameworks/include/arti.h
The crate declares rust-version = "1.90" and uses arti-client / tor-rtcompat 0.38 with minimal Tokio/Rustls features. The current lockfile requires Rust 1.90 or newer. The build script currently targets:
aarch64-apple-iosaarch64-apple-ios-simaarch64-apple-darwin
It builds release static libraries with size-oriented flags (opt-level=z, fat LTO, one codegen unit, panic=abort, stripped symbols), normalizes static-archive metadata with xcrun libtool -static -D, then packages them with xcodebuild -create-xcframework.
Regenerating The Artifact
From the repo root:
cd localPackages/Arti
rustup toolchain install 1.96.0
rustup default 1.96.0
rustup target add aarch64-apple-ios aarch64-apple-ios-sim aarch64-apple-darwin
cargo install cbindgen
./build-ios.sh
After rebuilding, verify that:
Cargo.lockchanges are intentional and reviewed.Frameworks/include/arti.hstill matches the exported FFI functions used byTorManager.Frameworks/arti.xcframeworkcontains iOS device, iOS simulator, and macOS arm64 slices.- The main app still passes iOS tests and the macOS build.
Audited Rebuild
The June 2026 artifact below was rebuilt from source on this host with:
rustc 1.96.0 (ac68faa20 2026-05-25)
cargo 1.96.0 (30a34c682 2026-05-25)
rustup 1.29.0 (28d1352db 2026-03-05)
cbindgen 0.29.3
Xcode 26.5
Build version 17F42
Rust 1.86.0 was also checked during the audit and no longer builds this lockfile because typed-index-collections@3.4.0 requires Rust 1.90.0 or newer.
The build script now normalizes static-archive metadata and writes a stable xcframework Info.plist. Two consecutive no-source-change rebuilds on this host produced the same hashes below.
Current Artifact Hashes
Run this from the repo root to verify the checked-in artifact:
find localPackages/Arti/Frameworks/arti.xcframework -maxdepth 3 -type f -print0 | sort -z | xargs -0 shasum -a 256
Current hashes:
2083d44eafc765db1ffa2691a5c5fabe60b4edbb82b574169ca0c6b98e245e3a localPackages/Arti/Frameworks/arti.xcframework/Info.plist
551655904834748c9dc36034fdbc9465e7533aef1e4a6514b4fcc75875b93058 localPackages/Arti/Frameworks/arti.xcframework/ios-arm64-simulator/Headers/arti.h
85febff37b751df667a3cab8222de2e1450cefe44b5b62c419adcbce48b9663f localPackages/Arti/Frameworks/arti.xcframework/ios-arm64-simulator/libarti_bitchat.a
551655904834748c9dc36034fdbc9465e7533aef1e4a6514b4fcc75875b93058 localPackages/Arti/Frameworks/arti.xcframework/ios-arm64/Headers/arti.h
fd25ee379d709a794733fc3c052746d1e6f7b25fec23e5f5234008a3434ce879 localPackages/Arti/Frameworks/arti.xcframework/ios-arm64/libarti_bitchat.a
551655904834748c9dc36034fdbc9465e7533aef1e4a6514b4fcc75875b93058 localPackages/Arti/Frameworks/arti.xcframework/macos-arm64/Headers/arti.h
8c426a41dc3eb76cc3e3e22e3356b9d11dbebdf0a0f248c5ac892e1839352c75 localPackages/Arti/Frameworks/arti.xcframework/macos-arm64/libarti_bitchat.a
Review Checklist
- Record
rustc --version,cargo --version,cbindgen --version, andxcodebuild -versionin the PR when refreshing the binary. - Include the hash output above after any binary change.
- If a rebuild changes only xcframework/library bytes, record the new hashes and app validation evidence in the PR.
- Keep
target/,.build/, and.swiftpm/out of source control. - Do not accept an xcframework-only update without matching source, lockfile, or build-script evidence explaining where it came from.