From e5d0f2c064d834afa39b1899637a1c7b40e6a7b5 Mon Sep 17 00:00:00 2001 From: Mikhail Kilin Date: Wed, 20 May 2026 15:52:22 +0300 Subject: [PATCH] Add iOS release readiness docs and CI --- .github/workflows/ios-rust.yml | 36 ++++++++++++++++++ .../Resources/PrivacyInfo.xcprivacy | 12 ++++++ docs/ios/release-checklist.md | 38 +++++++++++++++++++ 3 files changed, 86 insertions(+) create mode 100644 .github/workflows/ios-rust.yml create mode 100644 apps/ios/TeleTuiIOS/Resources/PrivacyInfo.xcprivacy create mode 100644 docs/ios/release-checklist.md diff --git a/.github/workflows/ios-rust.yml b/.github/workflows/ios-rust.yml new file mode 100644 index 0000000..1452f54 --- /dev/null +++ b/.github/workflows/ios-rust.yml @@ -0,0 +1,36 @@ +name: iOS and Rust + +on: + push: + branches: [main] + pull_request: + +jobs: + rust: + runs-on: macos-latest + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@stable + - name: Format + run: cargo fmt -- --check + - name: Core check + run: cargo check -p tele-core + - name: Workspace clippy + run: cargo clippy --workspace --all-targets --all-features -- -D warnings + - name: Workspace tests + run: cargo test --workspace --all-features + - name: Generate iOS FFI bindings + run: scripts/generate-ios-ffi-bindings.sh /tmp/tele-ios-ffi + - name: Swift bindings typecheck + run: swiftc -typecheck -I /tmp/tele-ios-ffi/Headers /tmp/tele-ios-ffi/Swift/tele_ios_ffi.swift + + ios-shell: + runs-on: macos-latest + steps: + - uses: actions/checkout@v4 + - name: Build SwiftUI app shell + working-directory: apps/ios/TeleTuiIOS + run: swift build --product TeleTuiIOSApp + - name: Run SwiftUI smoke tests + working-directory: apps/ios/TeleTuiIOS + run: swift run TeleTuiIOSSmokeTests diff --git a/apps/ios/TeleTuiIOS/Resources/PrivacyInfo.xcprivacy b/apps/ios/TeleTuiIOS/Resources/PrivacyInfo.xcprivacy new file mode 100644 index 0000000..8c4bb35 --- /dev/null +++ b/apps/ios/TeleTuiIOS/Resources/PrivacyInfo.xcprivacy @@ -0,0 +1,12 @@ + + + + + NSPrivacyCollectedDataTypes + + NSPrivacyAccessedAPITypes + + NSPrivacyTracking + + + diff --git a/docs/ios/release-checklist.md b/docs/ios/release-checklist.md new file mode 100644 index 0000000..a616d53 --- /dev/null +++ b/docs/ios/release-checklist.md @@ -0,0 +1,38 @@ +# iOS Release Checklist + +## Support Matrix + +- Minimum iOS: 17.0 +- Swift package shell also builds on macOS 14 for local smoke coverage. +- Rust targets: iOS device and simulator targets still need TDLib validation. +- TDLib: `tdlib-rs` 1.2.0 with `download-tdlib`; iOS packaging is not validated yet. +- Bridge: UniFFI 0.31.1 generated Swift bindings. + +## Required Before TestFlight + +1. Install and select full Xcode with `xcode-select`. +2. Create the Xcode app project or wire the Swift package into an Xcode app target. +3. Add app icon, launch screen, bundle id, signing team, notification capability, and entitlements. +4. Build TDLib for simulator and device architectures. +5. Package Rust static libraries and generated UniFFI Swift/header/modulemap output into an XCFramework. +6. Run simulator smoke with fake bridge. +7. Run real-device smoke with real Telegram credentials. +8. Archive and upload to TestFlight. + +## CI Gates + +- `cargo fmt -- --check` +- `cargo check -p tele-core` +- `cargo clippy --workspace --all-targets --all-features -- -D warnings` +- `cargo test --workspace --all-features` +- `scripts/generate-ios-ffi-bindings.sh` +- `swiftc -typecheck` for generated Swift bindings +- `swift build --product TeleTuiIOSApp` +- `swift run TeleTuiIOSSmokeTests` + +## Rollback + +1. Disable the TestFlight build in App Store Connect. +2. Re-upload the previous known-good archive. +3. If the issue is TDLib/session related, revoke the affected build and keep existing accounts on the previous app version. +4. Preserve account Application Support directories; do not delete TDLib databases during rollback unless the issue is confirmed to be corrupted local state.