Rename all project references from quicproquo/qpq to quicprochat/qpc across documentation, Docker configuration, CI workflows, packaging scripts, operational configs, and build tooling. - Docker: crate paths, binary names, user/group, data dirs, env vars - CI: workflow crate references, binary names, artifact names - Docs: all markdown files under docs/, SDK READMEs, book.toml - Packaging: OpenWrt Makefile, init script, UCI config (file renames) - Scripts: justfile, dev-shell, screenshot, cross-compile, ai_team - Operations: Prometheus config, alert rules, Grafana dashboard - Config: .env.example (QPQ_* → QPC_*), CODEOWNERS paths - Top-level: README, CONTRIBUTING, ROADMAP, CLAUDE.md
2.3 KiB
2.3 KiB
QuicProChat Swift SDK
Swift wrapper over libquicprochat_ffi for iOS and macOS.
Prerequisites
- Xcode 15+ / Swift 5.9+
- iOS 15+ or macOS 13+
libquicprochat_ffibuilt for the target architecture
Building the Native Library
# iOS (device)
cargo build --release -p quicprochat-ffi --target aarch64-apple-ios
# iOS Simulator (Apple Silicon)
cargo build --release -p quicprochat-ffi --target aarch64-apple-ios-sim
# macOS
cargo build --release -p quicprochat-ffi --target aarch64-apple-darwin
Installation
Swift Package Manager
Add to your Package.swift:
dependencies: [
.package(path: "sdks/swift"),
]
Or add the library search path to your Xcode project:
LIBRARY_SEARCH_PATHS = $(PROJECT_DIR)/../target/release
OTHER_LDFLAGS = -lquicprochat_ffi
Usage
import QuicProChat
let client = try QpqClient(
server: "127.0.0.1:5001",
caCertPath: Bundle.main.path(forResource: "ca", ofType: "pem")!
)
try client.login(username: "alice", password: "secret")
try client.send(to: "bob", message: "hello".data(using: .utf8)!)
let messages = try client.receive(timeoutMs: 5000)
for msg in messages {
print("Received: \(msg)")
}
client.disconnect()
API
| Method | Description |
|---|---|
QpqClient(server:caCertPath:serverName:) |
Connect to server |
client.login(username:password:) |
OPAQUE authentication |
client.send(to:message:) |
Send message by username |
client.receive(timeoutMs:) |
Receive pending messages |
client.disconnect() |
Disconnect |
client.isConnected |
Connection status |
Error Handling
All errors are thrown as QpqError:
do {
try client.login(username: "alice", password: "wrong")
} catch QpqError.authFailed(let msg) {
print("Authentication failed: \(msg)")
} catch QpqError.connectionFailed(let msg) {
print("Connection failed: \(msg)")
}
Structure
Sources/CQuicProChat/-- C module map and FFI headerSources/QuicProChat/QpqClient.swift-- High-level Swift clientSources/QuicProChat/QpqError.swift-- Error types
Cross-Compilation
For iOS devices, add the Rust target and build:
rustup target add aarch64-apple-ios
cargo build --release -p quicprochat-ffi --target aarch64-apple-ios
Copy the library to your Xcode project's framework search path.