Ein nativer macOS RSS-Reader mit unbegrenzten Feeds, Gruppen-Organisation, Smart Folders, Lesemodus, Feed-Entdeckung, Menüleisten-Integration, Widget und Regelautomatisierung.
→ Neueste Version herunterladen (v1.0.6)
DMG öffnen → App in Programme ziehen → fertig. Vollständig notarisiert, keine Sicherheitswarnung.
- Unbegrenzte Feeds — RSS, Atom und JSON Feed unterstützt
- Feed-Entdeckung — Normale Website-URL eingeben, RSS-Feed wird automatisch gefunden
- Gruppen-Sidebar (rechts, immer sichtbar) — Feeds per Drag & Drop in Gruppen sortieren
- Smart Folders — Heute, Alle ungelesen, Favoriten + eigene Filter mit Stichworten
- 3-spaltige Ansicht — Feeds · Artikel · Detail nebeneinander
- Tastaturkürzel —
J/KNavigation,Mgelesen markieren,SStern,SpaceBrowser - Schriftgröße & Lesemodus —
A-/A+Schriftgröße, Themes: Standard, Sepia, Schwarz - Volltext-Abruf — Feeds mit Kurzinhalt können den vollständigen Artikel laden
- Globale Artikelsuche — Suche über alle Feeds (Titel, Autor, Beschreibung)
- Regelautomatisierung — Bedingungen → Aktionen (Benachrichtigung, Favorit, Sound, Kurzbefehl)
- Hintergrund-Refresh — Konfigurierbares Intervall (5–120 Minuten)
- Menüleisten-Icon — App immer per Klick oben rechts erreichbar
- macOS Widget — Neueste Artikel im macOS Widget-Center (Klein, Mittel, Groß)
- Import/Export — OPML (kompatibel mit Reeder, NetNewsWire, Feedly) + eigenes Backup-Format
- Light & Dark Mode — Vollständig unterstützt inkl. WebView-Artikelansicht
- Native macOS App — SwiftUI + SwiftData, kein Electron
| Kürzel | Aktion |
|---|---|
J |
Nächster Artikel |
K |
Vorheriger Artikel |
M |
Als gelesen/ungelesen markieren |
S |
Favorit setzen/entfernen |
Space |
Im Browser öffnen |
⌘R |
Alle Feeds aktualisieren |
⌘⇧E |
Backup exportieren |
⌘⇧I |
Importieren |
- macOS 14 (Sonoma) oder neuer
- Xcode 16+
- xcodegen
brew install xcodegengit clone https://github.com/hansy2/rss-reader-macos.git
cd rss-reader-macos/RSSReader
xcodegen generate
open RSSReader.xcodeprojDann in Xcode ⌘R drücken.
RSSReader/
├── project.yml # xcodegen Konfiguration
├── RSSReader/
│ ├── App/
│ │ ├── RSSReaderApp.swift # @main, Menüleiste, Befehle
│ │ └── AppRouter.swift # Deep-Link Navigation
│ ├── Models/
│ │ ├── Feed.swift # SwiftData: RSS-Feed-Quelle
│ │ ├── FeedGroup.swift # SwiftData: Gruppe mit Sortierung
│ │ ├── FeedItem.swift # SwiftData: Artikel (guid unique)
│ │ ├── Rule.swift # SwiftData: Automatisierungsregel
│ │ └── SmartFolder.swift # SwiftData: Gespeicherter Filter
│ ├── Services/
│ │ ├── FeedFetchService.swift # Concurrent Feed-Abruf via TaskGroup
│ │ ├── FeedDiscoveryService.swift # RSS-Auto-Discovery aus Website-URL
│ │ ├── FullTextService.swift # Volltext-Extraktion aus Webseiten
│ │ ├── RuleEngine.swift # Regelauswertung & Aktionen
│ │ ├── BackgroundRefreshManager.swift
│ │ └── NotificationService.swift
│ ├── Views/
│ │ ├── MainWindow/ # ContentView, Sidebar, Artikelliste, Detail
│ │ ├── MenuBar/ # MenuBarView
│ │ ├── Rules/ # RulesView
│ │ ├── Settings/ # SettingsView (inkl. Import/Export)
│ │ └── About/ # AboutView
│ └── Shared/
│ ├── ReadingSettings.swift # Schriftgröße & Theme (UserDefaults)
│ ├── SharedModelContainer.swift # SwiftData Container
│ ├── AppGroup.swift # App Group Konfiguration
│ └── WidgetDataBridge.swift # Datenaustausch mit Widget
└── RSSReaderWidget/
└── RSSReaderWidget.swift # WidgetKit (Klein, Mittel, Groß)
Stack: SwiftUI + SwiftData + FeedKit, macOS 14+
┌────────────────────────────────────────────┬──────────────┐
│ NavigationSplitView (3 Spalten) │ GroupSidebar │
│ Feed-Liste │ Artikel-Liste │ Detail │ + Smart │
│ │ │ │ Folders │
└────────────────────────────────────────────┴──────────────┘
Die Gruppen-Sidebar ist außerhalb der NavigationSplitView platziert — sie kollabiert nie.
BackgroundRefreshManager→FeedFetchService.fetchAll()alle X Minuten- Feeds werden parallel via
withTaskGroupabgerufen (nurPersistentModelIDthread-übergreifend) - Neue
FeedItems in SwiftData eingefügt (Duplikat-Check via@Attribute(.unique) guid) RuleEngine.evaluate()prüft Regeln gegen neue ArtikelWidgetDataBridge.write()schreibt JSON für das Widget
| Bedingung | Beschreibung |
|---|---|
| Titel enthält | Einfache Textsuche im Titel |
| Titel passt (Regex) | Regulärer Ausdruck |
| Autor ist | Exakter Autorenvergleich |
| Inhalt enthält | Suche in Titel, Autor, Inhalt oder URL |
| Jeder neue Artikel | Immer auslösen |
| Aktion | Beschreibung |
|---|---|
| Benachrichtigung | macOS Systembenachrichtigung |
| Als Favorit markieren | Artikel wird markiert |
| Sound abspielen | NSSound (z.B. „Basso") |
| Kurzbefehl ausführen | Öffnet shortcuts://run-shortcut?name=… |
| Format | Import | Export | Kompatibel mit |
|---|---|---|---|
.rssbackup |
✅ | ✅ | Nur RSS Reader (Feeds + Gruppen + Regeln) |
.opml |
✅ | ✅ | Reeder, NetNewsWire, Feedly, Inoreader, … |
cd RSSReader
xcodegen generate
xcodebuild -project RSSReader.xcodeproj -scheme RSSReader \
-configuration Release -allowProvisioningUpdates clean build
# Notarisieren
xcrun notarytool submit RSSReader.zip \
--keychain-profile "rssreader-notarize" --wait
# Ticket heften
xcrun stapler staple /path/to/RSSReader.appMIT License — siehe LICENSE