Skip to content

Releases: atelier-socle/podcast-feed-maker

0.3.2 - CI Toolchain Alignment

14 May 13:52

Choose a tag to compare

Maintenance release completing the CI toolchain modernization started in 0.3.1. Two workflow jobs that were left out of that scope are now aligned on the 26.4 toolchain generation. No changes to the PodcastFeedMaker library or the podcastfeed CLI — the public API, runtime behavior, and the full test suite are identical to 0.3.1, and the published binaries are functionally equivalent.

What changed

  • ci.yml — the platform-builds job now selects Xcode 26.4 instead of Xcode 26.2 for the iOS, tvOS, watchOS, visionOS, and Mac Catalyst compile checks.
  • release.yml — the build-linux job now builds the release binary in the swift:6.3 container instead of swift:6.2, consistent with the macOS release build on Xcode 26.4.

The 26.2 and swift:6.2 legs of the build-and-test and linux matrices are intentionally kept, to preserve dual-toolchain (Swift 6.2 + 6.3) coverage in CI.

Compatibility

Unchanged from 0.3.1. Supported platforms, the minimum supported toolchain (Swift 6.2), and the dependency set are all the same.

Full changelog: 0.3.1...0.3.2

0.3.1 - CI Toolchain Modernization

14 May 13:34

Choose a tag to compare

Swift 6.2 + 6.3 build/test matrix

CI now builds and tests against both Swift 6.2 (Xcode 26.2) and Swift 6.3 (Xcode 26.4), on macOS and Linux:

  • build-and-test runs as a matrix on Xcode 26.2 and Xcode 26.4.
  • linux runs as a matrix on the swift:6.2 and swift:6.3 containers.
  • Code coverage and the Codecov upload run once, from the Swift 6.2 leg only.
  • The new Swift 6.3 toolchain was validated locally and in CI with zero regressions.

GitHub Actions on Node 24

Every GitHub Action used across the workflows was bumped to the minimum major version running on the Node 24 runtime. Each bump was verified against the action's actual runs.using field — including the internal references of composite
actions — not against version numbers alone.

Action From To
actions/checkout v4 v5
actions/upload-artifact v4 v6
actions/download-artifact v4 v7
codecov/codecov-action v5 v6
softprops/action-gh-release v2 v3
actions/upload-pages-artifact v3 v5
actions/deploy-pages v4 v5

The only breaking change across all of these is the Node 24 runtime requirement, which also raises the minimum Actions runner version to 2.327.1 — well below the version shipped on GitHub-hosted runners.

Xcode 26.4

The release workflow (release.yml) and the documentation workflow (docc-deploy.yml) now build with Xcode 26.4.

Compatibility

Unchanged from 0.3.0. Supported platforms, the minimum supported toolchain (Swift 6.2), and the dependency set are all the same.

Full changelog: 0.3.0...0.3.1

0.3.0 — Video & HLS

18 Feb 00:49

Choose a tag to compare

🔥 PodcastFeedMaker 0.3.0 — Video & HLS

PodcastFeedMaker now speaks video. This release adds comprehensive support for video podcast enclosures, HLS streaming manifests, and doubles the number of supported media formats — making PodcastFeedMaker the most complete podcast RSS library in the Swift ecosystem.

Video & HLS Enclosure Support

New MIME types (11 → 24)

  • HLS: hlsManifest (application/x-mpegURL), hlsAudioManifest (audio/mpegurl), mpegTS (video/MP2T)
  • Video: webm, threeGP, threeGP2, avi, matroska, wmv
  • Audio: webmAudio, matroskaAudio, aiff, wma

New convenience factories (3 → 15)

  • Audio: .aac(), .ogg(), .opus(), .wav(), .flac(), .aiff(), .webmAudio()
  • Video: .mov(), .m4v(), .webm()
  • HLS: .hls(), .hlsAudio()

MIMEType helper properties

  • isVideo — true for all video formats
  • isAudio — true for all audio formats
  • isHLS — true for HLS manifests
  • isStreaming — true for HLS + MPEG-TS

Platform validator updates

  • Apple Podcasts: video format validation, HLS info note (Apple delivers HLS via Podcasts Connect API), podcast:medium cross-field warning
  • Spotify: MP4 preferred for video, 500 MB video size warning (vs 200 MB audio)
  • Podcast Index: HLS alternateEnclosure info note for video feeds

License change: MIT → Apache 2.0

PodcastFeedMaker is now licensed under the Apache License 2.0. This provides stronger protections for both users and contributors, including an explicit patent grant.

  • LICENSE file replaced with Apache 2.0 full text
  • NOTICE file added (required by Apache 2.0 Section 4d)
  • SPDX-License-Identifier headers added to all 315 source files
  • CONTRIBUTING.md updated with Apache 2.0 contribution terms

By the numbers

Metric Before After
MIME types 11 24
Convenience factories 3 15
Tests 2 655 2 762 (+107)
Test suites 283 296 (+13)
SwiftLint violations 0 0
Regressions 0

Compatibility

  • Swift 6.2+
  • macOS 14+ · iOS 17+ · tvOS 17+ · watchOS 10+ · visionOS 1+ · Linux
  • Zero third-party dependencies

Full Changelog: 0.2.0...0.3.0

0.2.0 — Audit & OPML

14 Feb 22:24

Choose a tag to compare

🎉 PodcastFeedMaker 0.2.0 — Audit & OPML

The second milestone adds two major features: a complete feed quality auditing engine and full OPML subscription list support.

🔍 Feed Audit System

Score any podcast feed from 0 to 100 across five weighted categories, with actionable recommendations and a cross-platform compatibility matrix.

  • 29 criteria across Metadata (25%), Episodes (25%), Compliance (20%), Accessibility (15%), and Discoverability (15%)
  • Letter grades from A+ to F with score thresholds
  • Prioritized recommendations — critical, recommended, and nice-to-have, each with a concrete fix suggestion
  • Platform compatibility matrix — Apple Podcasts, Spotify, Amazon Music, Podcast Index, PSP-1
  • Score comparison — track feed quality evolution between versions
  • CI/CD integrationpodcastfeed audit feed.xml --min-score 80 exits with code 1 on failure
  • JSON output--format json for pipeline integration
  • Localization-ready — stable criterionId keys documented in the Audit Identifiers Reference

📋 OPML Import/Export

Import and export podcast subscription lists in OPML 1.0 and 2.0 format.

  • OPMLParser — full OPML 1.0/2.0 parsing with best-effort error recovery, case-insensitive type matching, Linux compatible
  • OPMLGenerator — pretty-print XML output with proper escaping and recursive outline generation
  • OPMLValidator — conformity checks with errors/warnings report
  • OPMLFeedConverter — bidirectional conversion between PodcastFeed and OPMLOutline
  • Custom attributes preservation — round-trip fidelity for non-standard attributes (Overcast, Pocket Casts, etc.)
  • CLI commandspodcastfeed opml-export and podcastfeed opml-import

📚 Documentation

  • 2 new DocC guide articles (AuditingFeeds, OPMLGuide)
  • Audit Identifiers Reference — complete mapping of all 29 criterion IDs for app localization
  • Updated README with new sections, CLI commands, and architecture

📊 Quality

  • 2655 tests in 283 suites (was 2267 in 0.1.0)
  • 98.04% code coverage
  • 0 warnings, 0 SwiftLint violations
  • 13 CLI commands (was 10 in 0.1.0)
  • All platforms green: macOS, Linux, iOS, tvOS, visionOS, Mac Catalyst

🔧 Binary Artifacts

  • podcastfeed-macos-arm64 (1.53 MB)
  • podcastfeed-linux-x86_64 (3.28 MB)

Full Changelog

0.1.0...0.2.0

0.1.0 — Initial Release

13 Feb 22:47

Choose a tag to compare

❤️ PodcastFeedMaker 0.1.0

Initial public release — A reference-quality Swift library for generating, parsing, and validating podcast RSS feeds.

Highlights

PodcastFeedMaker covers the complete podcast feed lifecycle with zero third-party dependencies. Pure Swift + Foundation, Linux-compatible from day one.

  • 2,267 tests across 238 suites
  • 7 XML namespaces: RSS 2.0, iTunes, Podcast Namespace 2.0 (all 30 tags), Atom, Dublin Core, Content Module, Podlove Simple Chapters
  • 6 platforms: macOS, iOS, tvOS, watchOS, visionOS, Linux
  • Swift 6.2 with full concurrency compliance

Features

Feed Generation

  • FeedGenerator — synchronous XML generation with configurable formatting (pretty-printed, minified)
  • StreamingFeedGenerator — async streaming for large catalogs

Feed Parsing

  • FeedParser — full-fidelity XML parsing with diagnostics and best-effort error recovery
  • StreamingFeedParser — yields items one at a time for memory efficiency
  • DateParser — handles RFC 822, ISO 8601, and common date format variants

Validation

  • Multi-platform validation: Apple Podcasts, Spotify, Amazon Music, Podcast Index, PSP-1
  • Severity levels: error, warning, info
  • Template-aware validation with level-mismatch detection

Builder DSL

  • Result builder syntax for feed composition
  • Fluent channel and item modifiers
  • PSP1Configuration helper for Podcasting 2.0 compliance

Templates & Presets

  • Four expertise levels: Basic, Standard, Advanced, Expert
  • Platform presets: .apple, .spotify, .universal, .all, .custom
  • FeedTemplate protocol for custom template composition
  • Template composition with + operator and fluent builder
  • Factory methods: PodcastFeed.basic(), .standard(), .advanced(), .expert()

Chapters

  • JSON Chapters (JSONChapterList, JSONChapter) — full Codable support
  • Podlove Simple Chapters (PodloveChapters, PodloveChapter)
  • Chapter conversion between formats

Round-Trip & Diff

  • Zero data loss round-trip: parse → modify → generate
  • Preserves unknown elements, CDATA, XML comments, namespace prefixes
  • JSON round-trip via Codable
  • FeedDiff — compare feeds with channel, episode, and namespace-level differencing

CLI (podcastfeed)

Ten commands for feed management:

Command Description
init Scaffold a new feed from a template
generate Generate RSS XML from JSON
read Parse and display a feed
validate Validate against platform requirements
lint Quick validation check
episodes List episodes
chapters Extract chapters
diff Compare two feeds
convert Convert between XML and JSON
add-episode Add an episode to an existing feed

Engine

  • PodcastFeedEngine — high-level convenience API combining generate, parse, validate
  • NetworkValidator — async URL and media type verification

Installation

Swift Package Manager

dependencies: [
    .package(url: "https://github.com/atelier-socle/podcast-feed-maker.git", from: "0.1.0")
]

CLI Binary

swift build -c release
cp .build/release/podcastfeed /usr/local/bin/

Pre-built binaries for macOS (arm64) and Linux (x86_64) are attached to this release.

Documentation

Full DocC documentation: atelier-socle.github.io/podcast-feed-maker

Requirements

  • Swift 6.2+
  • macOS 15+ / iOS 18+ / tvOS 18+ / watchOS 11+ / visionOS 2+ / Linux (Ubuntu 22.04+)

Downloads

Platform File
macOS arm64 podcastfeed-macos-arm64.tar.gz
Linux x86_64 podcastfeed-linux-x86_64.tar.gz

Full Changelog: https://github.com/atelier-socle/podcast-feed-maker/commits/0.1.0