- Clone the repository
- Build the Rust library and bindings:
- iOS:
just build-ios(simulator) orjust bidd(device) - Android:
just build-android
- iOS:
- Open in Xcode (
ios/Cove.xcodeproj) or Android Studio (android/) - Build and run
just build-ios-release # or just birThen archive and distribute via Xcode (Product → Archive).
just build-android-release # or just barThen build a signed APK/AAB via Android Studio (Build → Generate Signed Bundle/APK).
- Rust-only changes: Use
just baconorjust bcheckfor continuous feedback - UI changes (no Rust API changes): Use
just compile-iosorjust compile-androidfor faster iteration - Rust API changes: Run
just build-iosorjust build-androidto regenerate bindings - Tests: Run
just wtestin a separate terminal for continuous test feedback
| Command | Description |
|---|---|
just ba |
Build Android debug |
just bi |
Build iOS debug simulator |
just bidd |
Build iOS debug device |
just test |
Run test suite |
just wtest |
Watch mode tests |
just fmt |
Format all code (Rust, Swift, Kotlin) |
just ci |
Run all CI checks |
just clean |
Full cleanup of build artifacts |
Run just to see all available commands.
- iOS builds stuck? Try
just xcode-resetto clear Xcode caches - Clean slate needed? Run
just cleanto remove all build artifacts - UniFFI binding issues? Regenerate bindings after changing Rust exports
- Actor not receiving messages? Verify
FfiApp::init_on_startis called during app startup
- Run
just fmtto format all code - Run
just cito execute all checks (format, lint, clippy, tests, compilation) - Fix any issues reported by CI checks
- If clippy reports warnings, run
just fixfirst to auto-fix what's possible
Write clear, concise commit messages following these guidelines:
- Use imperative mood: "Add feature" not "Added feature"
- Limit subject to 50 chars: Be concise, this is the title
- Capitalize the subject line
- No period at the end of the subject
- Separate subject from body with a blank line
- Wrap body at 72 chars
- Explain what and why, not how: The code shows how
Example:
Add UTXO locking for coin control
Prevent selected UTXOs from being spent by other transactions
while a send flow is in progress. This avoids conflicts when
the user is manually selecting coins.
A good subject line completes: "If applied, this commit will ___"
See How to Write a Git Commit Message for the full guide.
- ARCHITECTURE.md - System design, Rust core, UniFFI, mobile patterns
- docs/IOS_ANDROID_PARITY.md - iOS/Android UI parity patterns