Files
telegram-tui/crates/tele-ios-ffi
2026-05-21 15:27:59 +03:00
..
2026-05-21 00:45:39 +03:00
2026-05-21 15:27:59 +03:00
2026-05-21 15:27:59 +03:00

tele-ios-ffi

UniFFI bridge for the future native iOS app.

Current scope:

  • Exposes a fake-backed SessionHandle for Swift integration tests and app shell work.
  • Mirrors the tele-core::session DTO/event model with UniFFI-compatible records and enums.
  • Supports a fake-only build for UI work and a real TDLib build path using local iOS TDLib artifacts.

Generate Swift bindings and headers:

scripts/generate-ios-ffi-bindings.sh

The script builds target/release/libtele_ios_ffi.a and writes Swift sources, headers, a Swift typecheck-friendly tele_ios_ffiFFI module map, and an XCFramework-compatible module map under build/ios-ffi/.

Build the fake-only iOS simulator XCFramework without linking TDLib:

DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer scripts/build-ios-fake-ffi-xcframework.sh

Run an executable Swift smoke test against matching fake-only UniFFI bindings:

DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer scripts/smoke-ios-ffi-swift.sh

Typecheck the Swift app bridge against generated UniFFI bindings:

DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer scripts/typecheck-ios-uniffi-app-bridge.sh

Current linking status:

  • Xcode is installed at /Applications/Xcode.app, and DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer xcodebuild -version reports Xcode 26.5.
  • The iOS 26.5 simulator runtime is installed and scripts/check-ios-prereqs.sh passes with available iPhone/iPad simulators.
  • The current app shell uses the fake Swift bridge.
  • tdlib-rs does not publish iOS download-tdlib archives, so real iOS linking uses tele-core/tdlib-local and LOCAL_TDLIB_PATH.
  • Local TDLib linking is validated for aarch64-apple-ios-sim via scripts/check-ios-tdlib-linking.sh and for aarch64-apple-ios via IOS_RUST_TARGET=aarch64-apple-ios scripts/build-ios-ffi-with-local-tdlib.sh.
  • scripts/build-ios-real-ffi-xcframework.sh packages local simulator Rust slices plus local libtdjson into app-local XCFrameworks, generates Swift bindings, and enables Xcode builds with TELE_IOS_USE_LOCAL_FFI=1.