+3
−0
2ndPod.macOS.entitlements
0 → 100644
+10
−0
2ndPod/AddPodcastView.swift
0 → 100644
+48
−0
Loading
Builds out the MVP on top of the scaffold:
- StorageKit (GRDB/SQLite): subscribe-by-URL with upsert/dedup, play queue
(reorder + auto-advance), offline download records. Cascade deletes.
- FeedKit: networked FeedFetcher (injectable loader) over the RSS parser.
- PlaybackKit: AudioPlayerEngine protocol (+ AVPlayer engine) and an
observable PlaybackController; lock-screen via MPNowPlayingInfoCenter /
MPRemoteCommandCenter; background audio; variable speed.
- App: DownloadController, AppModel orchestration, NavigationSplitView root
(sidebar + detail, collapses to a stack on iPhone), mini player, queue and
podcast-detail screens.
- Multiplatform native target (SDKROOT=auto, adds macOS 15; not Catalyst) with
a sandbox + network-client entitlement on macOS; iOS-only modifiers guarded.
29 package tests green; iOS and macOS both build; runtime-verified in the
iPhone and iPad simulators.
Co-Authored-By:
Claude <claude@anthropic.com>