analogcode/Swift-Radio-Pro
51.3
Adequate · 30 September 2026
3.7k
lines of production code
Swift
primary language
2
measurements over time
What this system is
SwiftRadio is an iOS application designed for streaming internet radio stations, featuring a modernized architecture that supports CarPlay integration and dark mode. It manages audio playback through a centralized service that handles lock-screen controls, Bluetooth hands-free audio, and live stream status indicators. The user interface presents a list of stations with glassmorphism styling and provides a detailed Now Playing view with dynamic visuals, buffering feedback, and scrolling track titles.
How it got here
2015 — Modern iOS architecture migration
7 changes.
The project underwent a significant architectural overhaul to support modern iOS features, including CarPlay integration, dark mode, and the Scene-based lifecycle. This involved migrating from legacy storyboards and bundled libraries to a Coordinator pattern, programmatic configurations, and updated dependency management.
2016–2022 — UI overhaul and architecture modernization
6 changes.
The project underwent a significant architectural shift by migrating navigation to the Coordinator pattern and adopting Swift Package Manager for dependency management. This period also focused on enhancing the user interface with glassmorphism design elements and implementing comprehensive lock screen support for radio playback.
2023–2026 — CarPlay integration and UI modernization
4 changes.
This period focused on expanding the app's reach by adding a full CarPlay interface for station browsing and playback. The core architecture was modernized by centralizing configuration, audio session management, and navigation into dedicated services and modules. Concurrently, the Now Playing view received a significant visual overhaul with dynamic visuals, improved accessibility, and better buffering feedback.
Features
Add CarPlay interface with station list and now-playing indicators
Users can now access Swift Radio via CarPlay. A new CarPlaySceneDelegate establishes the CarPlay connection, displaying a list of radio stations fetched from the StationsManager. When a user selects a station, playback begins. The interface dynamically updates to reflect station changes and highlights the currently playing station in the list, ensuring the now-playing indicator stays in sync with the audio state.
SwiftRadio/CarPlay · high confidence
New RadioStation model and StationsManager with lock screen support
The app introduces a new RadioStation data model and a centralized StationsManager to handle station data and playback state. This change adds support for displaying live stream status on the lock screen via MPNowPlayingInfoCenter, ensuring that users see accurate 'live' indicators and metadata when listening to radio stations.
SwiftRadio/Model · high confidence
Removals
Removal of Spring library custom UI components and utilities
The Spring library's custom UI components and utility classes have been removed from the project. This includes the deletion of \AsyncButton\, \AsyncImageView\, \AutoTextView\, \BlurView\, \DesignableButton\, \DesignableImageView\, \DesignableLabel\, \DesignableTabBarController\, \DesignableTextField\, \DesignableTextView\, \DesignableView\, \ImageLoader\, \KeyboardLayoutConstraint\, \LoadingView\, \Misc\, \SoundPlayer\, and the core \Spring\ animation engine. Users relying on these specific Spring-based controls for animations, designable properties, or utility functions will no longer have access to them.
SwiftRadio/Libraries/Spring · high confidence
Behavioural changes
Centralized app configuration and modernized UI lifecycle
The app now uses a dedicated Config module to manage global settings, including a centralized tint color and gradient background, station data sources, and feature flags. User-facing strings have been migrated to a Localizable.xcstrings catalog for improved localization support. Additionally, the app lifecycle has been updated to use the modern UIScene architecture (SceneDelegate) with a coordinator-based navigation pattern, replacing the previous AppDelegate-centric approach.
SwiftRadio/Config · high confidence
Centralized audio session and remote command configuration
The app now uses a new AudioSetupService to manage core audio behavior, configuring the AVAudioSession for playback with Bluetooth hands-free support and setting up the FRadioPlayer for automatic playback and artwork retrieval. This service also registers handlers for system remote commands (play, pause, next, previous, and toggle), enabling lock-screen and notification-center controls, and includes logic to dynamically enable or disable the stop and pause buttons based on whether a stream is live.
SwiftRadio/Services · high confidence
Migrate launch screen from storyboard to Info.plist
The launch screen is no longer defined in the LaunchScreen.xib file; instead, the app now uses the UILaunchScreen key in Info.plist to configure the launch screen, simplifying the project structure and removing the dedicated storyboard file for this purpose.
SwiftRadio/Base.lproj · high confidence
Migrate navigation to Coordinator pattern and update station tap behavior
The app replaces storyboard-based navigation with a Coordinator pattern, introducing new coordinator classes (MainCoordinator, AboutCoordinator) to manage view controller lifecycles and navigation flows. This change alters how users interact with stations: tapping a station that is already selected now plays or pauses the audio if it is stopped, or opens the Now Playing popup if it is currently playing, instead of opening a popup unconditionally. Additionally, website links from the bottom sheet are now opened in an in-app SFSafariViewController rather than launching the external Safari app, and the popup is automatically closed before opening the browser.
SwiftRadio/Coordinators · high confidence
Migrate to modern iOS architecture and add CarPlay support
The project has been updated to object version 54, reflecting a migration to Swift 5 and Xcode 14, and now includes a new CarPlay target with its own scene delegate. Navigation has been refactored from storyboards to a Coordinator pattern, and the app now uses a SceneDelegate for lifecycle management. The UI has been modernized with a new LogoShareView for sharing track details, a GradientBackgroundView, and a centralized Config service replacing the previous settings approach. Additionally, the app now supports localization via Localizable.xcstrings and integrates frameworks like LNPopupController and MarqueeLabel for enhanced playback controls and text display.
SwiftRadio.xcodeproj · high confidence
Migrate to modern iOS architecture with CarPlay support and dark mode
The app has been updated to use the modern Scene-based lifecycle (SceneDelegate) instead of the legacy AppDelegate, enabling support for multiple scenes and CarPlay integration via a dedicated Info-CarPlay.plist and entitlements. The user interface now defaults to Dark Mode, and the launch screen has been migrated from a storyboard to a programmatic configuration in Info.plist. Additionally, localization strings have been consolidated into the modern Localizable.xcstrings format, and legacy components like the old About screen and manual JSON parsing have been removed in favor of the new structure.
SwiftRadio · high confidence
Redesigned Now Playing interface with buffering feedback and dynamic visuals
The Now Playing view has been visually overhauled to include a dynamic gradient background, SF Symbols for playback controls, and a marquee label for scrolling track titles. A new AlbumArtworkView displays album art with a shadow and a buffering overlay that shows an activity indicator when the stream is loading. The ControlsView now features a live badge, a time slider, and increased tap targets for AirPlay and more buttons to improve accessibility.
SwiftRadio/Views · high confidence
Redesigned station list with glassmorphism cards and improved playback indicators
The station list now uses a new StationTableViewCell that displays each station inside a glassmorphism card with a dark blur effect and shadow. The artwork is presented in a rounded container with a shadow and a pulsing ring animation to indicate the currently playing station. A buffering overlay with an activity indicator appears over the artwork when the stream is loading, and an audio equalizer animation is shown next to the station subtitle when playback is active.
SwiftRadio/ViewControllers · high confidence
Removal of bundled SwiftyJSON source file
The local copy of the SwiftyJSON library (SwiftRadio/Libraries/SwiftyJSON.swift) has been removed from the project. This change eliminates the bundled source code, implying that the application now relies on an external dependency manager or a different version of the library to provide JSON parsing capabilities.
SwiftRadio/Libraries · high confidence
Removed user-specific Xcode configuration files
The project no longer tracks per-developer settings such as breakpoints and scheme management configurations. This ensures that individual developer preferences do not interfere with the shared project state or cause unnecessary merge conflicts.
SwiftRadio.xcodeproj/xcuserdata · high confidence
Scheme migrated to shared location and updated for UI tests
The SwiftRadio scheme has been moved from user-specific storage (xcuserdata) to the shared project data (xcshareddata), ensuring consistent build and test configurations for all team members. The scheme's upgrade version has been updated to 2620, and the test configuration now targets SwiftRadioUITests instead of the previous SwiftRadioTests unit test bundle. Additionally, the launch action no longer includes the CG\_CONTEXT\_SHOW\_BACKTRACE environment variable.
SwiftRadio.xcodeproj/xcshareddata · high confidence
Test coverage
Added initial UI test suite structure
The project now includes a basic UI test target (SwiftRadioUITests) with a new test class and an updated Info.plist configured as a bundle (BNDL) rather than a framework, establishing the foundation for automated interface testing.
SwiftRadioUITests · high confidence
Dependencies
Migrate dependencies to Swift Package Manager
The project now uses Swift Package Manager (SPM) for dependency management, replacing the previous system. The Package.resolved file pins specific versions for FRadioPlayer (0.2.2), LNPopupController (4.5.12), LNSystemMarqueeLabel (0.1.2), MarqueeLabel (4.5.3), and NVActivityIndicatorView (5.1.1).
(dependencies) · high confidence
Housekeeping
Updated workspace settings file permissions
The file permissions for the user-specific workspace settings (WorkspaceSettings.xcsettings) have been changed from read-write (644) to executable (755). This is a local configuration change specific to the developer's environment and does not affect the application's behavior or code.
SwiftRadio.xcodeproj/project.xcworkspace/xcuserdata/wu.xcuserdatad · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.
Score
- CAI 57 → 51 (-5.6)
- Rubric changed (rubric-2026.09.11 → rubric-2026.09.18) — scores are not directly comparable.
Lenses
- Code Health 99 → 99 (+0.0)
- Architecture 91 → 91 (+0.0)
- Maturity 55 → 55 (+0.0)
- Readiness 46 → 35 (-10.5)
- Security 59 → 62 (+3.1)
Resolved (5)
- Documentation: no contributor guidance (README.md)
- Documentation: no installation or build instructions (README.md)
- Medium: security finding (details withheld)
- Medium: security finding (details withheld)
- Off-boarding risk: anonymized user #1
New (3)
- Off-boarding risk: anonymized user #1
- Outdated: fradioplayer
- Outdated: nvactivityindicatorview
Changes since last survey
- 5 commits — 5 feature/other, 0 fixes
By area
- (repo) — 2 commits
- .github/workflows — 1 commit
- SwiftRadio.xcodeproj/project.pbxproj — 1 commit
- SwiftRadio.xcodeproj/project.xcworkspace — 1 commit
Notable commits
- change: Build iOS and CarPlay with Xcode 26.6 and 27.0 on dev
- change: Merge pull request #217 from dariaphoebe/master
- change: Merge pull request #218 from analogcode/dev
- change: Update resolved packages for LNPopupController 4.5.12
- change: update LNPopupController to get iOS27 support
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
analogcode/Swift-Radio-Pro was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 30 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit d0e3dc7a67e1a879164290c49d89ed429687b783 — the exact code this score is about.
- Scored under rubric-2026.09.18 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-cb25ca4feafa.