NetNewsWire Documentation

repository·main·Indexed 27 days ago

https://github.com/ranchero-software/netnewswire

An open-source RSS/Atom/JSON feed reader for macOS and iOS. The documentation covers building from source, configuring code signing, and detailed technical guides for its utility modules: RSParser for feed and HTML parsing, RSWeb for network downloads and conditional GET requests, and RSCore for Foundation and AppKit extensions. It also includes instructions for symbolicating macOS and iOS crash logs using provided shell scripts.

Tokens
12K
Snippets
12
Records
122
Agent score
95%

What's inside NetNewsWire

  1. Overview of NetNewsWire features

    main

    NetNewsWire is a free and open-source RSS reader designed to aggregate articles from blogs and news sites. It provides a controlled news experience without relying on social media algorithms.

    Key Capabilities:

    • Feed Management: Direct feed downloading, folder organization, and importing/exporting OPML feed lists.
    • Syncing Services: Supports iCloud, Feedbin, Feedly, BazQux, Inoreader, NewsBlur, The Old Reader, and FreshRSS.
    • Reading Experience: Reader view, custom article themes, hiding read articles, and timeline customization.
    • Organization: Multiple accounts, starred articles, and smart feeds (All Unread and Today).
    • System Integration: Share sheet, share extension, background refreshing, and Home screen widgets (Today, Unread, and Starred articles).
    • Navigation: Searching, keyboard shortcuts, and context menus.
  2. Understand Website Logging and Tracking

    main

    The developer logs traffic to netnewswire.com and inessential.com in aggregate to monitor site popularity and app downloads.

    • Logging: Includes IP addresses and timestamps.
    • Tracking: The official websites do not use cookies, JavaScript, trackers, or ads.
    • Third-party Content: NetNewsWire displays HTML from external RSS feeds. These external sites may use their own analytics to track article reads; users should consult the privacy policies of those specific sites.
  3. Understand NetNewsWire release lifecycle stages

    main

    NetNewsWire uses a specific release lifecycle to communicate the stability and feature completeness of different builds. Use this guide to determine which version is appropriate for your needs:

    • Development: Unstable, feature-incomplete, and prone to bugs or wild changes. Not recommended for primary use.
    • Alpha: Feature-complete with no known bugs. This stage focuses on thorough testing and bug reporting by the community.
    • Beta: All bugs found during Alpha have been fixed. The code is considered 'frozen' (only minimal, careful bug fixes are allowed) and is considered stable enough for wider testing.
    • Final: The production-ready version. It is feature-complete, fast, does not crash, and has no known bugs.
  4. Understand NetNewsWire account types

    main

    NetNewsWire supports several types of accounts for managing feeds:

    • Local Account (e.g., "On My Mac" or "On My iPhone"): Reads feeds directly and does not support syncing. There is always a default local account present. Multiple local accounts are permitted.
    • Syncing Accounts: Connect to external services like Feedbin or Feedly to synchronize data.
    • iCloud Account: Reads feeds directly (like a local account) but uses iCloud for synchronization. Only one iCloud account is permitted.

    Data refreshing and syncing are handled independently by each account instance.

  5. Understand the Database Cleanup process

    main

    NetNewsWire performs automatic database cleanup to prevent performance degradation caused by excessive database growth. This process specifically applies to the OnMyMac account; other syncing systems follow their own respective rules.

    Key behaviors:

    • The cleanup process runs automatically at app launch, before other reads and writes occur.
    • The cleanup follows a specific order: Articles are deleted first, followed by Statuses.
    • The goal is to prune old data while preserving enough context (like articles from inactive feeds) to maintain a good user experience.
  6. Understand NetNewsWire Crash Log Collection

    main

    NetNewsWire collects crash logs to identify and fix bugs. The collection method depends on how you installed the app:

    • App Store Version: If you opt in via Apple, both Apple and the developer receive a copy of the crash logs.
    • Direct Mac Download: If you opt in, only the developer receives the logs.

    When NetNewsWire for Mac sends logs directly, it only transmits the text of the crash log. No personal information like email addresses is included. However, the developer may make non-identifiable parts of crash logs public to assist in bug fixing.

  7. Understand the Article and ArticleStatus data model

    main

    NetNewsWire separates article content from article metadata by using two distinct entities: Article and ArticleStatus. This separation allows the application to manage immutable content separately from mutable user interactions and sync states.

    Article

    An Article is an immutable struct containing the core content. In the articles database table, it includes columns such as:

    • articleID
    • title
    • contentHTML

    ArticleStatus

    An ArticleStatus is a mutable object representing the user's interaction with an article. In the statuses table, it includes columns such as:

    • articleID
    • read
    • starred
    • dateArrived
  8. How NetNewsWire optimizes feed processing

    main

    NetNewsWire minimizes resource usage and battery consumption by avoiding unnecessary feed parsing. It employs three primary strategies to determine if a feed has changed before performing a full parse and database comparison:

    1. Conditional GET: When downloading a feed, NetNewsWire sends appropriate HTTP headers to request a 304 Not Modified response from the server. If the server supports Conditional GET, it avoids re-sending the entire feed body if nothing has changed.
    2. Feed Content Hashing: If the server does not support Conditional GET, NetNewsWire generates an MD5 hash of the downloaded feed content. This hash is stored with the feed metadata. On subsequent downloads, NetNewsWire compares the new hash to the stored hash; if they match, parsing is skipped.
    3. Content Type Validation: NetNewsWire performs basic checks on the content type. If the downloaded content is clearly not an RSS feed (e.g., an image or a movie file), it aborts the parsing attempt.