37
README.md
37
README.md
@@ -1,16 +1,18 @@
|
||||
# Gotcha
|
||||
|
||||
Gotcha is a lightweight Gitea client built in Rust. Development starts with a
|
||||
reusable API crate and a CLI test bed; the same crate will back the Slint iOS
|
||||
application.
|
||||
Gotcha is a lightweight Gitea client with a reusable Rust core, a CLI, and a
|
||||
native iOS application. The iOS interface is UIKit/Swift; UniFFI exposes the
|
||||
Rust application logic to Swift.
|
||||
|
||||
## Workspace
|
||||
|
||||
- `gotcha_gitea`: reusable asynchronous Gitea API client with the complete
|
||||
typed Gitea 1.25 API and model surface
|
||||
- `gotcha`: CLI for typed common operations and arbitrary API requests
|
||||
- `gotcha-app`: Slint iOS client for servers, owned repositories, favorites,
|
||||
open issues, and issue details; bundle identifier `de.rfc1437.gotcha`
|
||||
- `gotcha-app`: Rust application core and UniFFI API used by iOS
|
||||
- `ios`: native UIKit application for activity, repositories, favorites,
|
||||
issues, milestones, pull requests, commit history, changed files, and diffs; bundle
|
||||
identifier `de.rfc1437.gotcha`
|
||||
|
||||
The generated API modules and models cover every Gitea 1.25 operation. The
|
||||
low-level request API remains available for newer instance-specific endpoints;
|
||||
@@ -53,19 +55,23 @@ derives the `owner/repository` scope. Use `--server gitea.example.com` when sele
|
||||
ambiguous, or `--url`/`GITEA_URL` for an unconfigured server. Tokens are never
|
||||
accepted as command-line arguments or environment variables.
|
||||
|
||||
## Direction
|
||||
## Architecture
|
||||
|
||||
1. Exercise and type API areas in the CLI: repositories, issues and pull
|
||||
requests, Actions, notifications, organizations, packages, administration.
|
||||
2. Add the Slint shell and move proven read workflows into touch-first screens.
|
||||
3. Add write workflows and iOS integrations such as sharing, notifications,
|
||||
and background refresh.
|
||||
The Rust core owns Gitea access, validation, presentation records, preferences,
|
||||
favorites, and Keychain-backed credentials. UniFFI generates the Swift bridge
|
||||
in `ios/Generated`. UIKit owns navigation, lists, text input, menus, scrolling,
|
||||
pull-to-refresh, appearance, and other platform behavior.
|
||||
|
||||
New API workflows should first be exercised and typed in the CLI, then exposed
|
||||
through the Rust core and presented with native UIKit controls. Future work
|
||||
includes write workflows and iOS integrations such as sharing, notifications,
|
||||
and background refresh.
|
||||
|
||||
## iOS app
|
||||
|
||||
Server tokens are kept in the Apple Keychain; the JSON preferences contain only
|
||||
server metadata and favorites. The app requires Xcode, XcodeGen, an installed
|
||||
iOS Simulator runtime, and Rust's
|
||||
Server tokens are kept in the Apple Keychain; JSON preferences contain only
|
||||
server metadata, settings, and favorites. The app requires Xcode, XcodeGen, an
|
||||
installed iOS Simulator runtime, and Rust's
|
||||
`aarch64-apple-ios` and `aarch64-apple-ios-sim` targets. Generate the project
|
||||
after installing those prerequisites:
|
||||
|
||||
@@ -76,3 +82,6 @@ open Gotcha.xcodeproj
|
||||
```
|
||||
|
||||
For a fast host-side check, run `cargo test -p gotcha-app`.
|
||||
|
||||
See [TESTING.md](TESTING.md) for the complete build, simulator, gesture, and
|
||||
release regression checklist.
|
||||
|
||||
Reference in New Issue
Block a user