74e03c4e10
Two-target Xcode project (xcodegen spec). The GiteaIssue container app holds the base URL + personal access token in a shared keychain group; the GiteaIssueShare extension reads them, surfaces a repo picker (with recents) and a title/notes form, then creates the issue, uploads the screenshot as an asset, and patches the body to embed it inline. Min iOS 26.0, signing team V3PF3M6B6U. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1.7 KiB
1.7 KiB
Gitea Issue
iOS share-extension for filing issues to a self-hosted Gitea instance straight from a screenshot.
Take screenshot → Share → Gitea Issue → pick repo, title, notes → submit. The screenshot is uploaded as an attachment and embedded inline in the issue body.
Architecture
Two targets in one Xcode project, sharing an App Group + Keychain:
- GiteaIssue (
com.treytartt.GiteaIssue) — container app, settings + help only - GiteaIssueShare (
com.treytartt.GiteaIssue.Share) — share extension that does the real work - App Group:
group.com.treytartt.GiteaIssue(cached repo list, recents) - Keychain group:
$(AppIdentifierPrefix)com.treytartt.GiteaIssue(base URL, token)
iOS 26.0 minimum. Signing team V3PF3M6B6U.
Layout
GiteaIssue/ Container app (settings + help)
GiteaIssueShare/ Share extension UI
Shared/ Models, Keychain, Settings, GiteaClient, RepoCache
project.yml xcodegen spec — regenerate with `xcodegen generate`
Build
xcodegen generate
xcodebuild -project GiteaIssue.xcodeproj -scheme GiteaIssue \
-destination 'generic/platform=iOS' build
Deploy (ad-hoc)
Push to admin/GiteaIssue on Gitea, then trigger the Mac mini builder at
http://Treys-Mac-mini.local:3090 against the git URL. Builder ships the IPA
to https://appstore.treytartt.com for OTA install.
First-time setup on device
- Install via Safari from
appstore.treytartt.com - Open the Gitea Issue app, set base URL + personal access token (
reposcope) - Tap Save & test connection — confirms login and pre-fetches the repo list
- From now on: Photos → screenshot → Share → Gitea Issue