feat(apple): native SwiftUI app for iOS and macOS

Add a native SwiftUI VniDrop app (Send/Receive/Settings) talking to the
Rust core via generated UniFFI Swift bindings, plus the uniffi-bindgen
helper crate. iOS uses a TabView, macOS a NavigationSplitView sidebar.
This commit is contained in:
2026-07-18 22:06:30 +02:00
parent 601cbc486e
commit ea376a382b
68 changed files with 8650 additions and 1 deletions

View File

@@ -0,0 +1,30 @@
// swift-tools-version:5.9
import PackageDescription
// Local package wrapping the VniDrop Rust core:
// - `vnidrop` binary target: the xcframework of static libraries + the FFI
// C module (`vnidropFFI`), produced by apple/scripts/build-core.sh.
// - `VnidropCore` target: the generated Swift bindings (`Vnidrop.swift`).
//
// Both `vnidrop.xcframework` and `Sources/VnidropCore/Vnidrop.swift` are build
// outputs and are gitignored; run apple/scripts/build-core.sh to (re)generate.
let package = Package(
name: "VnidropCore",
platforms: [
.iOS(.v16),
.macOS(.v13),
],
products: [
.library(name: "VnidropCore", targets: ["VnidropCore"]),
],
targets: [
.binaryTarget(
name: "vnidrop",
path: "vnidrop.xcframework"
),
.target(
name: "VnidropCore",
dependencies: ["vnidrop"]
),
]
)

View File

@@ -0,0 +1,25 @@
# VnidropCore (Swift package)
Swift bindings for the VniDrop Rust transfer core (`crates/vnidrop`), generated
with UniFFI in library mode. The Rust crate is never modified for this — the
Swift surface is produced from the compiled staticlib.
## Regenerate
From the repository root:
```bash
apple/scripts/build-core.sh release # or: debug
```
This builds `libvnidrop.a` for `aarch64-apple-ios`, `aarch64-apple-ios-sim`, and
`aarch64-apple-darwin`, generates `Sources/VnidropCore/Vnidrop.swift`, and
assembles `vnidrop.xcframework`.
## Generated / ignored artifacts
- `vnidrop.xcframework/`
- `Sources/VnidropCore/Vnidrop.swift`
Both are gitignored. A clean checkout must run the build script before opening
the Xcode project.