README.org
103 lines · 5973 bytes
gitbay-ios
A native iOS client for gitbay, a CLI-first git forge.
This app is a reading, reviewing and responding surface for the times you are not at a keyboard.
What it does
| Area | What's there |
|---|---|
| Dashboard | Your review queue, assigned work, open merge requests and issues, pinned saved queries, pinned repositories, recent activity, and the unread count |
| Repositories | File tree and blob view with syntax highlighting and names linked to their definitions, history at a ref or per file, blame, branches and tags, file editing on a branch, a compare between any two refs, and finding a definition from the symbol index |
| Merge requests | Lists and detail with a unified diff, comments and review threads started from a diff line, suggested changes and applying them, reactions, review verdicts and requests, draft and ready, retarget, milestones, merge when ready, and the stack a merge request sits in |
| Issues | Lists and detail, comments, reactions, labels with the colours the web paints them, assignees and milestones, filtering by label, assignee, author and milestone |
| Search | Title-and-body search within a repository, file contents across one repository, the whole instance for repositories, issues and merge requests, and saved queries across repositories |
| Notifications | The inbox, unread or all, marked read singly or in bulk. Push registers this device against every signed-in account; a tap opens the issue, merge request or build it names |
| Repository actions | Fork, bookmark, watch and mute, pin, archive, visibility, topics, branch protection, required checks, dependency checks with their status, rename, transfer and delete |
| Builds | Build list, job picker, logs whole or their last lines, and cancelling one that is queued or running |
| Releases and wiki | Releases list, detail, create with notes summarized from merged merge requests, edit and delete. Wikis read from the same instance |
| Organisations | Members and roles, teams and their repository grants, create and rename |
| Your account | SSH keys with their last use and expiry, PGP keys, email addresses, API tokens, notification settings including reply by mail, your profile — description, website, about text and links — and deleting the account |
| Explore, feed and profiles | Discovery, activity, contribution graph |
| Markup | Bodies and comments are written and rendered in the format they were stored in. Org renders natively through OrgSwiftUI — selectable text, Dynamic Type, VoiceOver — rather than in a web view |
Everything in your account the CLI can do reaches the app.
Signing in
To sign in to the mobile app you need a bearer token. Create one with full
scope under Settings → API tokens on the instance's website
(https://<instance>/settings#tokens), or over SSH:
gitbay auth token create --name iphone --scope full --ttl 90d
Full scope can comment and merge, and on an admin account, administer the
instance. --scope read works too, but a read-only token cannot comment or
merge.
Any gitbay instance works. You just need to enter the host at sign-in.
Building
Builds with the iOS 26.5 SDK and runs on iOS 18.0 and later. Swift 6 language mode, default MainActor
isolation.
xcodebuild -project gitbay.xcodeproj -scheme gitbay \
-destination 'platform=iOS Simulator,name=iPhone 17' build
Dependencies resolve over SSH (krz/org-swift) and HTTPS (Highlightr), so a key that can reach gitbay.org is needed to build.
Tests
gitbayTests is hermetic and runs offline; network calls go through a stubbed
URLProtocol.
xcodebuild -project gitbay.xcodeproj -scheme gitbay \
-destination 'platform=iOS Simulator,name=iPhone 17' \
test -only-testing:gitbayTests
gitbayUITests includes a live smoke suite that talks to a real instance. It is
opt-in, and skips without both variables. Environment reaches the test runner
only with the TEST_RUNNER_ prefix:
TEST_RUNNER_GITBAY_UITEST_LIVE=1 \
TEST_RUNNER_GITBAY_UITEST_TOKEN=<token> \
xcodebuild -project gitbay.xcodeproj -scheme gitbay \
-destination 'platform=iOS Simulator,name=iPhone 17' test
The suite runs as the ios-smoke account, not a personal one: it owns the
scratch and fixture repositories and is an admin of krz. An instance admin
provisions it once with gitbayUITests/smoke-account.sh, which also writes the
account's SSH key to ~/.ssh/gitbay-ios-smoke. The token above is minted with
that key:
ssh -F /dev/null -i ~/.ssh/gitbay-ios-smoke -o IdentitiesOnly=yes \
git@gitbay.org token create --name ui-smoke --scope full --ttl 30d
Setup signs in only when it finds the token screen, so a simulator signed in as
another account has to be signed out first (xcrun simctl keychain <device>
reset while the app is not running).
Contributing
To contribute, create a merge request with your changes:
gitbay mr create --source <branch> --target main --title "..."