A native iOS app for browsing your self-hosted Gitea server. Browse repositories, issues, pull requests, notifications, and your profile — all from your iPhone.
Built with SwiftUI, targeting iOS 16+. No third-party dependencies.
- Repositories — browse your repos, explore files, view READMEs, releases, and commit history
- Issues — list and read issues with label badges and markdown rendering
- Pull Requests — view open/closed PRs with diff context
- Notifications — inbox with All / Unread filter
- Profile — view your account info and sign out
- Explore — discover public repositories on your server
- iOS 16+
- Xcode 15+
- A running Gitea instance (self-hosted)
# Install xcodegen if you don't have it
brew install xcodegen
cd GiteaClient
xcodegen generate
open GiteaClient.xcodeprojBuild and run on any iPhone 16 simulator (or a physical device with your Team ID set in project.yml).
- Enter your Gitea server URL (e.g.
https://gitea.example.com) - Log in with your Gitea username and password
- The app creates a Gitea API token and stores it securely in Keychain
GiteaClient/
├── App/ – @main entry point, AppState (EnvironmentObject)
├── Models/ – Codable structs for Gitea API responses
├── Services/
│ ├── GiteaAPIClient.swift – all HTTP, token auth
│ └── KeychainHelper.swift – token + server URL persistence
├── ViewModels/ – @MainActor ObservableObjects per feature
└── Views/
├── Components/ – DesignSystem, headers, reusable UI
├── Auth/ – Login + server URL screens
├── Main/ – Tab container (ZStack opacity pattern)
├── Repositories/ – Repo list, detail, file explorer, README
├── Issues/ – Issue list + detail
├── PullRequests/ – PR list + detail
├── Notifications/ – Inbox
├── Explore/ – Explore view
└── Profile/ – Profile view
No native TabView or NavigationBar. The app uses a custom ZStack-based tab system that preserves each tab's NavigationStack state across switches, with a CustomTabBar pinned via .safeAreaInset.
Defined in DesignSystem.swift — adaptive light/dark tokens:
| Token | Light | Dark |
|---|---|---|
Color.appBg |
#F5F4F2 |
#17191A |
Color.appCard |
#FFFFFF |
#212325 |
| Accent | #1F8A6F |
#4FCBA6 |
To build for a physical device, set your Apple Developer Team ID in project.yml:
DEVELOPMENT_TEAM: "YOUR_TEAM_ID"Then re-run xcodegen generate.



