Commit 079c94c2d1

079c94c2d1ae30f7e9cd89bc35031c5cf3a8998d

parent: 74ea174be6

Unsigned

cmc <hello@cleberg.net> · 2026-08-31 19:44 UTC

Add a README

What the app does, how to sign in, how to build and test, and how to send
a merge request. Carries a commented placeholder for the App Store badge
until the app is published.

Layout: unified · split

README.org added +89
@@ -0,0 +1,89 @@
1#+title: gitbay-ios
2#+author: Christian Cleberg
3
4A native iOS client for [[https://gitbay.org][gitbay]], a CLI-first git forge.
5
6The command line is the product. This app is a reading, reviewing and
7responding surface for the times you are not at a keyboard.
8
9# TODO: on publish, replace with the App Store badge:
10# [[https://apps.apple.com/app/id<APP_ID>][https://toolbox.marketingtools.apple.com/api/v2/badges/download-on-the-app-store/black/en-us]]
11
12* What it does
13
14- *Dashboard* — your review queue, assigned work, open merge requests and
15 issues, pinned repositories, recent activity.
16- *Repositories* — file tree and blob view with syntax highlighting,
17 history at a ref or per file, blame, branches and tags, and file editing
18 on a branch.
19- *Merge requests and issues* — lists, detail, comments, milestones, and a
20 unified diff.
21- *Builds* — build list, job picker, logs.
22- *Releases and wiki*, read from the same instance.
23- *Explore, feed and profiles* — discovery, activity, contribution graph.
24- *READMEs* in Markdown and Org. Org renders natively through
25 [[https://gitbay.org/krz/org-swift][OrgSwiftUI]] — selectable text, Dynamic Type, VoiceOver — rather than in a
26 web view.
27
28* Signing in
29
30Auth is a bearer token, minted over SSH on a machine that already has your
31key. The app never asks for a password.
32
33#+begin_src sh
34gitbay auth token create --name iphone --scope full --ttl 90d
35#+end_src
36
37=--scope read= works too, but a read-only token cannot comment or merge.
38The token is stored in the iOS keychain.
39
40Any gitbay instance works; the host is entered at sign-in.
41
42* Building
43
44Requires Xcode with an iOS 26.5 SDK. Swift 6 language mode, default
45=MainActor= isolation.
46
47#+begin_src sh
48xcodebuild -project gitbay.xcodeproj -scheme gitbay \
49 -destination 'platform=iOS Simulator,name=iPhone 17' build
50#+end_src
51
52Dependencies resolve over SSH ([[https://gitbay.org/krz/org-swift][krz/org-swift]]) and HTTPS
53([[https://github.com/raspu/Highlightr][Highlightr]]), so a key that can reach gitbay.org is needed to build.
54
55* Tests
56
57=gitbayTests= is hermetic and runs offline; network calls go through a
58stubbed =URLProtocol=.
59
60#+begin_src sh
61xcodebuild -project gitbay.xcodeproj -scheme gitbay \
62 -destination 'platform=iOS Simulator,name=iPhone 17' \
63 test -only-testing:gitbayTests
64#+end_src
65
66=gitbayUITests= includes a live smoke suite that talks to a real instance.
67It is opt-in, and skips without both variables. Environment reaches the
68test runner only with the =TEST_RUNNER_= prefix:
69
70#+begin_src sh
71TEST_RUNNER_GITBAY_UITEST_LIVE=1 \
72TEST_RUNNER_GITBAY_UITEST_TOKEN=<token> \
73xcodebuild -project gitbay.xcodeproj -scheme gitbay \
74 -destination 'platform=iOS Simulator,name=iPhone 17' test
75#+end_src
76
77The live suite depends on fixtures it does not create; each is guarded by
78a skip rather than seeded, since seeding one would mean a push.
79
80* Contributing
81
82Merge requests, not pull requests — this is gitbay, not GitHub. =gh= does
83nothing here.
84
85#+begin_src sh
86gitbay mr create --source <branch> --target main --title "..."
87#+end_src
88
89Bundle identifier =org.gitbay.gitbay=. Releases are tagged =vX.Y.Z=.