Add iOS release readiness docs and CI

This commit is contained in:
Mikhail Kilin
2026-05-20 15:52:22 +03:00
parent 59050d0b5f
commit e5d0f2c064
3 changed files with 86 additions and 0 deletions

36
.github/workflows/ios-rust.yml vendored Normal file
View File

@@ -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

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyCollectedDataTypes</key>
<array/>
<key>NSPrivacyAccessedAPITypes</key>
<array/>
<key>NSPrivacyTracking</key>
<false/>
</dict>
</plist>

View File

@@ -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.