Wire local TDLib into iOS FFI build

This commit is contained in:
Mikhail Kilin
2026-05-21 15:27:59 +03:00
parent aec3678bd6
commit 217328505c
34 changed files with 24460 additions and 28 deletions

View File

@@ -1,7 +1,29 @@
// swift-tools-version: 6.0
import Foundation
import PackageDescription
let useLocalFfi = ProcessInfo.processInfo.environment["TELE_IOS_USE_LOCAL_FFI"] == "1"
let localFfiTargets: [Target] = useLocalFfi ? [
.binaryTarget(
name: "tele_ios_ffiFFI",
path: "BinaryArtifacts/tele_ios_ffi.xcframework"
),
.binaryTarget(
name: "tdjson",
path: "BinaryArtifacts/tdjson.xcframework"
),
.target(
name: "tele_ios_ffi",
dependencies: ["tele_ios_ffiFFI", "tdjson"],
path: "Generated/tele_ios_ffi/Sources/tele_ios_ffi"
),
] : []
let coreDependencies: [Target.Dependency] = useLocalFfi ? [
"tele_ios_ffi",
] : []
let package = Package(
name: "TeleTuiIOS",
platforms: [
@@ -14,7 +36,10 @@ let package = Package(
.executable(name: "TeleTuiIOSSmokeTests", targets: ["TeleTuiIOSSmokeTests"]),
],
targets: [
.target(name: "TeleTuiIOSCore"),
.target(
name: "TeleTuiIOSCore",
dependencies: coreDependencies
),
.executableTarget(
name: "TeleTuiIOSApp",
dependencies: ["TeleTuiIOSCore"]
@@ -23,5 +48,5 @@ let package = Package(
name: "TeleTuiIOSSmokeTests",
dependencies: ["TeleTuiIOSCore"]
),
]
] + localFfiTargets
)

View File

@@ -38,3 +38,10 @@ Run the simulator launch plus screenshot sanity check:
```bash
DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer scripts/smoke-ios-simulator-ui.sh
```
Build the app against the local real Rust/TDLib FFI artifacts:
```bash
DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer scripts/build-ios-real-ffi-xcframework.sh
TELE_IOS_USE_LOCAL_FFI=1 DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer scripts/build-ios-simulator-app.sh
```

View File

@@ -5,7 +5,7 @@ public enum SessionBridgeFactory {
account: Account,
useFakeTdlib: Bool = true
) -> SessionBridge {
#if canImport(tele_ios_ffiFFI)
#if canImport(tele_ios_ffi) || canImport(tele_ios_ffiFFI)
do {
return try UniFfiSessionBridge(account: account, useFakeTdlib: useFakeTdlib)
} catch {

View File

@@ -1,8 +1,12 @@
import Foundation
#if canImport(tele_ios_ffiFFI)
#if canImport(tele_ios_ffi)
import tele_ios_ffi
#elseif canImport(tele_ios_ffiFFI)
import tele_ios_ffiFFI
#endif
#if canImport(tele_ios_ffi) || canImport(tele_ios_ffiFFI)
public actor UniFfiSessionBridge: SessionBridge {
private let handle: SessionHandle
private let defaultLimit: Int32