Commit 079c94c2d1
Unsigned
Layout: unified · split
README.org added +89
| @@ -0,0 +1,89 @@ | ||
| 1 | #+title: gitbay-ios | |
| 2 | #+author: Christian Cleberg | |
| 3 | ||
| 4 | A native iOS client for [[https://gitbay.org][gitbay]], a CLI-first git forge. | |
| 5 | ||
| 6 | The command line is the product. This app is a reading, reviewing and | |
| 7 | responding 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 | ||
| 30 | Auth is a bearer token, minted over SSH on a machine that already has your | |
| 31 | key. The app never asks for a password. | |
| 32 | ||
| 33 | #+begin_src sh | |
| 34 | gitbay 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. | |
| 38 | The token is stored in the iOS keychain. | |
| 39 | ||
| 40 | Any gitbay instance works; the host is entered at sign-in. | |
| 41 | ||
| 42 | * Building | |
| 43 | ||
| 44 | Requires Xcode with an iOS 26.5 SDK. Swift 6 language mode, default | |
| 45 | =MainActor= isolation. | |
| 46 | ||
| 47 | #+begin_src sh | |
| 48 | xcodebuild -project gitbay.xcodeproj -scheme gitbay \ | |
| 49 | -destination 'platform=iOS Simulator,name=iPhone 17' build | |
| 50 | #+end_src | |
| 51 | ||
| 52 | Dependencies 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 | |
| 58 | stubbed =URLProtocol=. | |
| 59 | ||
| 60 | #+begin_src sh | |
| 61 | xcodebuild -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. | |
| 67 | It is opt-in, and skips without both variables. Environment reaches the | |
| 68 | test runner only with the =TEST_RUNNER_= prefix: | |
| 69 | ||
| 70 | #+begin_src sh | |
| 71 | TEST_RUNNER_GITBAY_UITEST_LIVE=1 \ | |
| 72 | TEST_RUNNER_GITBAY_UITEST_TOKEN=<token> \ | |
| 73 | xcodebuild -project gitbay.xcodeproj -scheme gitbay \ | |
| 74 | -destination 'platform=iOS Simulator,name=iPhone 17' test | |
| 75 | #+end_src | |
| 76 | ||
| 77 | The live suite depends on fixtures it does not create; each is guarded by | |
| 78 | a skip rather than seeded, since seeding one would mean a push. | |
| 79 | ||
| 80 | * Contributing | |
| 81 | ||
| 82 | Merge requests, not pull requests — this is gitbay, not GitHub. =gh= does | |
| 83 | nothing here. | |
| 84 | ||
| 85 | #+begin_src sh | |
| 86 | gitbay mr create --source <branch> --target main --title "..." | |
| 87 | #+end_src | |
| 88 | ||
| 89 | Bundle identifier =org.gitbay.gitbay=. Releases are tagged =vX.Y.Z=. | |