Cmd+F bzw. Toolbar-Eintrag öffnet eine schwebende Such-Leiste mit Treffer-Zähler und ▲/▼-Navigation — bündig zur Web-App. Bewusst eigene Suche statt System-UIFindInteraction/NSTextFinder, die eine selbst-scrollende TextView voraussetzen (hier per Architektur- Invariante isScrollEnabled=false). Treffer als NSRange über denselben cleanedBody-String; eigener Such-Background-Layer (gelb/aktiv-orange), getrennt von den User-Highlights, verschwindet beim Schließen restlos. Scroll-zu-Treffer über eine ArticleBodyController-Rect-Brücke (textview- lokales Rect, iOS firstRect / macOS layoutManager) + im readerSpace gemessene Body-Position + Scroll-Offset. Der Offset läuft über eine plain class (ReaderScrollTracker), damit Scroll-Ticks den teuren Reader-Body nicht invalidieren. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| scripts | ||
| ShareExtension | ||
| ShareExtensionMac | ||
| Sources | ||
| Tests/UnitTests | ||
| Widgets/PagetaWidget | ||
| .gitignore | ||
| .swiftformat | ||
| CHANGELOG.md | ||
| CLAUDE.md | ||
| project.yml | ||
| README.md | ||
| STATUS.md | ||
pageta-native
Native SwiftUI Universal-App (iOS + iPadOS + macOS) für Pageta, die Reader-App des Vereins mana e.V.
Bundle: ev.mana.pageta · Team: QP3GLU8PH3 · Backend:
api.pageta.com · Auth: auth.mana.how.
Status
Feature-komplett (π-0..π-9 + π-11), TestFlight offen. Voll
ausgebaute Universal-App: Feed, Lese-Liste, nativer Reader mit
Highlights/Notizen, Markierungen-Tab, Recherche, Konto (inkl. In-App-
Account-Löschung), ShareExtension + Widget. Local-first über
Event-Sourcing (sync2.mana.how), Feed/Extract-Preview HTTP-only.
Build-Stand (2026-05-29, Xcode 26.3): macOS ✅, iOS Device/Archive
✅ — TestFlight nicht blockiert. Nur der iOS-Simulator-Build ist
gebrochen (simulator-spezifische MLX-Macro-Arch-Kollision auf Apple
Silicon → auf Device/„My Mac" entwickeln). Details in
STATUS.md. Offen bleibt π-10 (ASC + TestFlight-Upload).
Vollständiger Plan + Phasen-Historie: STATUS.md ·
mana/docs/playbooks/PAGETA_NATIVE_GREENFIELD.md.
Lokal entwickeln
Voraussetzungen:
- Xcode 16+
mana-swift-core+mana-swift-uials Schwester-Repos ausgecheckt unter../mana-swift-coreund../mana-swift-ui- Apple-Developer-Account mit Team
QP3GLU8PH3-Mitgliedschaft - XcodeGen (
brew install xcodegen)
./scripts/xcodegen # → PagetaNative.xcodeproj (mit macOS-Share-Patch)
./scripts/build-icon.sh # → AppIcon-PNGs (1024+512) aus SVG
open PagetaNative.xcodeproj
# Cmd+R im Simulator (iOS oder macOS)
Der scripts/xcodegen-Wrapper umgeht einen XcodeGen-Bug, durch den
platformFilter: macOS fälschlich als maccatalyst in die pbxproj
geschrieben wird. Ohne den Patch wird die macOS-Share-Extension nicht
ins App-Bundle embeddet.
Icon-Regeneration ist nur nötig wenn sich das SVG in
../pageta/apps/web/static/icon-512.svg ändert. Das Script nimmt
rsvg-convert (Homebrew librsvg) wenn vorhanden, sonst qlmanage
(macOS built-in Fallback).
Apple-Dev-Portal-Pre-Conditions
Vor erstem TestFlight-Build registrieren:
- Bundle-IDs:
ev.mana.pageta(Main App)ev.mana.pageta.widget(kommt mit π-7)ev.mana.pageta.share(kommt mit π-6)
- App-Group
group.ev.mana.pageta - Capabilities: Associated Domains, App Groups, Keychain Sharing
Cross-Repo-Doks
../mana/docs/playbooks/PAGETA_NATIVE_GREENFIELD.md— Plan + Phasen π-0…π-10../mana/docs/MANA_SWIFT.md— Native-Koordination../mana-swift-core/CLAUDE.md— ManaCore + ManaTokens../mana-swift-ui/CLAUDE.md— ManaAuthUI../pageta/CLAUDE.md— Web-App + API../pageta/STATUS.md— Web-Stand