Swift-Radio-Pro

analogcodeMIT活跃维护

一款用 Swift 写的 iOS 专业电台应用,支持播放网络电台、展示专辑封面,并接入 iTunes API 和 Last.fm 获取曲目信息。

Professional Radio Station App for iOS!

v4.0.0发布于 2026-10-05 18:05 UTC2,947star708fork同步于 2026-11-07 07:34 UTC

怎么上手

README 里没有找到可直接复制的安装命令

README 里没有找到可直接复制的安装命令,请到 README 或官方文档查看安装方式。

硬件要求

README 没有说明硬件要求。

下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

这个项目的说明还在生成中,先参考下面「最近发版」和 README。

最近发版

5 个版本v4.0.0
  1. v4.0.0Swift Radio v4.0.0最新正式版2026-10-05 · 2026-10-05 18:05 UTC

    Swift Radio’s stations list, Now Playing, station information and About screens have been rebuilt in SwiftUI, preserving the familiar station cards, artwork, marquee titles and popup player.

    What’s new

    • Rebuilt navigation, popup presentation and options-sheet transitions, including returning directly to the player after sharing.
    • Improved playback and audio-session coordination. Scrubbing resumes playback, while a later Pause, Stop or station change takes precedence over an older seek.
    • Shared station and playback state across iPhone and CarPlay, keeping artwork and metadata aligned.
    • Loading, retry and pagination support for larger CarPlay catalogs.
    • SwiftRadioCore separates playback, catalog loading, artwork and system-media integration from the interface, making the app easier to maintain and extend.
    • Swift 6 with complete concurrency checking.
    • FRadioPlayer 0.4.0, LNPopupUI 4.0.1 and LNPopupController 4.5.12.
    • Updated configuration, architecture and localization documentation, plus a refreshed sample station catalog.

    Also on Android

    Our Android equivalent, Swift Radio Android, uses Kotlin, Jetpack Compose and the same station JSON format. We’ve added compose-popupbar for its expandable Now Playing bar and full player, bringing a similar popup experience to the iOS version’s LNPopupUI and LNPopupController.

    Requirements and upgrading

    Requires iOS 17+ and Xcode 26.6+. Existing forks should migrate custom UIKit controllers and coordinators into the SwiftUI structure. The station JSON format remains compatible; branding and content remain configurable through Config, assets and the String Catalog.

  2. v3.1.0Swift Radio v3.1.02026-07-04 · 2026-07-04 20:18 UTC
    查看更新说明

    The attached .ipa is unsigned. Install it by sideloading with AltStore or Sideloadly, which re-sign it with your own Apple ID. Or clone the repo and run it from Xcode with your personal team.

    What's Changed

    Full Changelog: https://github.com/analogcode/Swift-Radio-Pro/compare/v3.0.0...v3.1.0

  3. v3.0.0Version 3.0.02026-02-08 · 2026-02-08 18:33 UTC
    查看更新说明

    Important changes

    • Storyboard migration completed

      • Removed storyboard dependency from core flows and moved navigation to a Coordinator-based architecture.
      • Migrated launch screen from storyboard to the modern Info.plist UILaunchScreen approach.
    • Major UI redesign

      • Redesigned Stations list with a modern card-based style and improved visual hierarchy.
      • Redesigned Now Playing with dynamic blur background, SF Symbol controls, and marquee title handling.
      • Refreshed branding and assets (new icon/logo style, updated station artwork set).
    • Live vs non-live playback behavior

      • Added explicit LIVE handling (LIVE badge + live-specific controls).
      • Improved behavior so live streams use Stop, while non-live playback supports expected pause/resume flow.
      • Updated station tap behavior to resume paused/stopped playback directly.

    Additional notable updates

    • Replaced DataManager with NetworkService using async/await.
    • Improved buffering/loading UX and station state updates.
    • Added localization groundwork via Localizable.xcstrings.
    • Modernized project/tooling (Xcode settings, CI workflow updates, CarPlay updates).
  4. 2.0.8Version 2.0.82020-04-11 · 2020-04-11 01:51 UTC
    查看更新说明
    • Update the project to iOS 13 and Xcode 11.4.
    • Warning fixes.
  5. 2.0.7Version 2.0.72019-08-20 · 2019-08-20 19:23 UTC
    查看更新说明

    Add watermarked image for share activity by @CamMcLeod.

    IMG_9011

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    Swift Radio

    iOS build CarPlay build

    Open-source iOS radio app with a SwiftUI interface. Used by 80+ apps on the App Store.

    Looking for Android? See Swift Radio Android. Same station format, native Kotlin and Jetpack Compose.

    Features

    • Stream live radio with background audio playback
    • Scrubber and progress bar for non-live streams
    • Apple CarPlay support
    • Album art and track metadata from streams and iTunes API
    • Lock screen and Control Center integration
    • Multiple stations from a local or remote JSON file
    • Pull to refresh and optional search bar
    • Localization-ready via Xcode String Catalog
    • About screen with email, sharing, and external links

    Built on FRadioPlayer for streaming, metadata parsing, and iTunes album art fetching.

    Requirements

    • iOS 17 or later: the deployment target of the app target, the CarPlay target, and the SwiftRadioCore package.
    • Xcode 26.6 or later: CI builds the app and CarPlay targets with Xcode 26.6 and 27.0. The test suites are run with Xcode 27.
    • Swift 6 language mode for the app targets and SwiftRadioCore, with complete concurrency checking.

    Dependencies resolve through Swift Package Manager, so there's nothing to install before the first build.

    Getting Started

    1. Open SwiftRadio.xcodeproj in Xcode
    2. Edit SwiftRadio/Config/Config.swift to set your stations URL, contact email, website, and other app-wide settings
    3. Update your stations in SwiftRadio/Data/stations.json or host the file remotely
    4. Build and run

    Adding a station

    1. Add an entry to SwiftRadio/Data/stations.json, or to the JSON you host at Config.stationsURL
    2. Add a square image to SwiftRadio/Images.xcassets/Stations/ and name the image set exactly like the station's imageURL
    3. Build and run: no code change is needed

    Each station supports these fields:

    {
      "name": "Station Name",
      "streamURL": "https://stream.example.com/live",
      "imageURL": "station-image",
      "desc": "Short tagline",
      "longDesc": "Longer description for the detail screen",
      "website": "https://example.com"
    }
    
    • imageURL: an asset name for a bundled image, a full http(s) URL for a remote one, or an empty string to fall back to the stationImage placeholder.
    • website: optional. The "Visit Website" row and the popup's website option appear only when it starts with http or https.
    • longDesc: optional. Omit the key or leave it empty and the station info screen shows a default description.

    Forking for one station

    The template works at any catalog size, so a single-station app is mostly configuration:

    • Trim the catalog: leave one entry in stations.json and keep Config.useLocalStations = true.
    • Drop the controls it doesn't need: set Config.hideNextPreviousButtons = true and leave Config.searchable = false.
    • Open on the player: call StationsStore.select(_:) once the catalog loads and set RootView's popupOpen to true. The one-row list stays behind the player as the back destination.
    • Rebrand: replace logo and the station image in Images.xcassets, then edit the strings in Localizable.xcstrings.

    Customizing text and translation

    All user-facing strings are managed through Localizable.xcstrings (the String Catalog). Open it in Xcode to change the default English text or add new languages. Most views read their strings through Content.swift; a few accessibility labels in the player and toolbar use their catalog keys directly (player.next, player.seek, common.close and similar). Either way the text lives in the catalog, so a translation needs no code change.

    Architecture

    SwiftUI owns the app's screens and navigation. AppEnvironment creates shared services for the phone and CarPlay, so both interfaces use the same station selection and playback state.

    SwiftRadioCore is a local Swift package that separates playback, station catalogs, artwork and system-media integration from presentation. Its dependency boundaries let us test playback and catalog behavior without launching the UI. Small UIKit adapters remain for the popup player, marquee text, indicators and system presentations.

    See the SwiftRadioCore guide for service boundaries and the architecture guide for the source map, popup flow and system controls.

    Testing

    Run the core tests from Packages/SwiftRadioCore using the package guide. They cover playback, catalog refresh, remote commands, Now Playing and interruptions without live streams.

    The visual parity protocol covers screenshots, accessibility and UI regression commands. CI also builds both app targets and validates an unsigned archive. Physical-device audio routes, lock-screen controls and CarPlay remain separate acceptance checks.

    Dependencies

    LibraryPurpose
    FRadioPlayerAudio playback, stream metadata and artwork lookup, behind SwiftRadioCore
    LNPopupUISwiftUI popup bar and expanded player
    MarqueeLabelScrolling title in the expanded player
    NVActivityIndicatorViewPlayback equalizer and buffering animations

    Swift Package Manager manages these libraries. LNPopupUI also brings in LNPopupController, LNSwiftUIUtils and, through LNPopupController, LNSystemMarqueeLabel. SwiftRadioCore is included in this repository as a local package. The checked-in lockfiles record the exact resolved versions.

    Contributing

    Contributions are welcome. Please branch off dev and open a pull request. Do not commit directly to master.

    Single Station Version

    Looking for a simpler, single-station version? It skips the station list and launches straight into the player. One purchase now includes both the iOS and Android single-station projects.

    Buy on Payhip

    All proceeds go directly toward maintaining and improving Swift Radio.

    For custom work or more advanced needs, reach out to Fethi.

    Built something with Swift Radio? We'd love to see it. Drop us a line at [email protected].

    Credits

    License

    Swift Radio is open source and available under the MIT License.