Pageta für iOS, iPadOS und macOS (SwiftUI) — Lese-App ohne Algorithmus, Werbung und Tracking. AGPL-3.0. Spiegel des Vereins mana.
Find a file
Till JS 91bef19046 feat: In-Artikel-Suche im Reader (find-in-page)
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>
2026-06-02 13:32:00 +02:00
scripts feat(macos): Share Extension fürs Teilen aus Safari auf macOS 2026-05-19 16:20:21 +02:00
ShareExtension Tabs umbenannt: Lese-Liste → Stapel, Markierungen → Marker 2026-06-01 01:04:14 +02:00
ShareExtensionMac Tabs umbenannt: Lese-Liste → Stapel, Markierungen → Marker 2026-06-01 01:04:14 +02:00
Sources feat: In-Artikel-Suche im Reader (find-in-page) 2026-06-02 13:32:00 +02:00
Tests/UnitTests feat: Lese-Rückblick (Tag/Woche/Gesamt) als nativer Tab 2026-06-01 19:26:43 +02:00
Widgets/PagetaWidget chore: ITSAppUsesNonExemptEncryption=false in Info.plist + project.yml 2026-05-19 13:02:36 +02:00
.gitignore π-0: Repo-Skelett (SwiftUI Universal, ManaAuthGate-Login, paper-Theme) 2026-05-18 14:59:58 +02:00
.swiftformat π-0: Repo-Skelett (SwiftUI Universal, ManaAuthGate-Login, paper-Theme) 2026-05-18 14:59:58 +02:00
CHANGELOG.md design(lese-liste): gestickter Abschnitt auf Navbar-Titelhöhe 2026-05-29 21:51:53 +02:00
CLAUDE.md Theme-Galerie: alle ManaTheme-Variants frei wählbar im Konto-Tab 2026-05-31 18:37:41 +02:00
project.yml Theme-Galerie auf geteiltes ManaThemeUI umgestellt 2026-05-31 23:43:26 +02:00
README.md docs: iOS Device/Archive-Build ist grün — Blocker nur Simulator 2026-05-29 15:59:12 +02:00
STATUS.md docs: iOS Device/Archive-Build ist grün — Blocker nur Simulator 2026-05-29 15:59:12 +02:00

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-ui als Schwester-Repos ausgecheckt unter ../mana-swift-core und ../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