The Swift Package Index logo.Swift Package Index

Build Information

Successful build of FRadioPlayer, reference 0.2.2 (243cd9), with Swift 6.1 for macOS (SPM) on 17 Sep 2025 04:07:58 UTC.

Swift 6 data race errors: 2

Build Command

env DEVELOPER_DIR=/Applications/Xcode-16.3.0.app xcrun swift build --arch arm64 -Xswiftc -Xfrontend -Xswiftc -stats-output-dir -Xswiftc -Xfrontend -Xswiftc .stats -Xswiftc -strict-concurrency=complete -Xswiftc -enable-upcoming-feature -Xswiftc StrictConcurrency -Xswiftc -enable-upcoming-feature -Xswiftc DisableOutwardActorInference -Xswiftc -enable-upcoming-feature -Xswiftc GlobalActorIsolatedTypesUsability -Xswiftc -enable-upcoming-feature -Xswiftc InferSendableFromCaptures

Build Log

========================================
RunAll
========================================
Builder version: 4.67.1
Interrupt handler set up.
========================================
Checkout
========================================
Clone URL: https://github.com/fethica/FRadioPlayer.git
Reference: 0.2.2
Initialized empty Git repository in /Users/admin/builder/spi-builder-workspace/.git/
From https://github.com/fethica/FRadioPlayer
 * tag               0.2.2      -> FETCH_HEAD
HEAD is now at 243cd92 Merge pull request #90 from fethica/v0.2.2
Cloned https://github.com/fethica/FRadioPlayer.git
Revision (git rev-parse @):
243cd9246b79a186c39b3c53dbe725c8c01bab59
SUCCESS checkout https://github.com/fethica/FRadioPlayer.git at 0.2.2
========================================
ResolveProductDependencies
========================================
Resolving dependencies ...
{
  "identity": ".resolve-product-dependencies",
  "name": "resolve-dependencies",
  "url": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies",
  "version": "unspecified",
  "path": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies",
  "dependencies": [
    {
      "identity": "fradioplayer",
      "name": "FRadioPlayer",
      "url": "https://github.com/fethica/FRadioPlayer.git",
      "version": "unspecified",
      "path": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies/.build/checkouts/FRadioPlayer",
      "dependencies": [
      ]
    }
  ]
}
Fetching https://github.com/fethica/FRadioPlayer.git
[1/1595] Fetching fradioplayer
Fetched https://github.com/fethica/FRadioPlayer.git from cache (0.93s)
Creating working copy for https://github.com/fethica/FRadioPlayer.git
Working copy of https://github.com/fethica/FRadioPlayer.git resolved at 0.2.2 (243cd92)
warning: '.resolve-product-dependencies': dependency 'fradioplayer' is not used by any target
Found 0 product dependencies
========================================
Build
========================================
Selected platform:         macosSpm
Swift version:             6.1
Building package at path:  $PWD
https://github.com/fethica/FRadioPlayer.git
https://github.com/fethica/FRadioPlayer.git
{
  "dependencies" : [
  ],
  "manifest_display_name" : "FRadioPlayer",
  "name" : "FRadioPlayer",
  "path" : "/Users/admin/builder/spi-builder-workspace",
  "platforms" : [
    {
      "name" : "macos",
      "version" : "10.12"
    },
    {
      "name" : "ios",
      "version" : "15.0"
    },
    {
      "name" : "tvos",
      "version" : "10.0"
    }
  ],
  "products" : [
    {
      "name" : "FRadioPlayer",
      "targets" : [
        "FRadioPlayer"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    }
  ],
  "targets" : [
    {
      "c99name" : "FRadioPlayerTests",
      "module_type" : "SwiftTarget",
      "name" : "FRadioPlayerTests",
      "path" : "Tests/FRadioPlayerTests",
      "sources" : [
        "FRadioPlayerTests.swift"
      ],
      "target_dependencies" : [
        "FRadioPlayer"
      ],
      "type" : "test"
    },
    {
      "c99name" : "FRadioPlayer",
      "module_type" : "SwiftTarget",
      "name" : "FRadioPlayer",
      "path" : "Sources/FRadioPlayer",
      "product_memberships" : [
        "FRadioPlayer"
      ],
      "sources" : [
        "FRadioArtworkAPI+iTunes.swift",
        "FRadioArtworkAPI.swift",
        "FRadioMetadataExtractor.swift",
        "FRadioPlayer+Metadata.swift",
        "FRadioPlayer+Observation.swift",
        "FRadioPlayer+PlaybackState.swift",
        "FRadioPlayer+State.swift",
        "FRadioPlayer.swift",
        "FRadioPlayerObserver.swift",
        "Reachability.swift"
      ],
      "type" : "library"
    }
  ],
  "tools_version" : "5.5"
}
Running build ...
env DEVELOPER_DIR=/Applications/Xcode-16.3.0.app xcrun swift build --arch arm64 -Xswiftc -Xfrontend -Xswiftc -stats-output-dir -Xswiftc -Xfrontend -Xswiftc .stats -Xswiftc -strict-concurrency=complete -Xswiftc -enable-upcoming-feature -Xswiftc StrictConcurrency -Xswiftc -enable-upcoming-feature -Xswiftc DisableOutwardActorInference -Xswiftc -enable-upcoming-feature -Xswiftc GlobalActorIsolatedTypesUsability -Xswiftc -enable-upcoming-feature -Xswiftc InferSendableFromCaptures
Building for debugging...
[0/2] Write sources
[1/2] Write swift-version-2F0A5646E1D333AE.txt
[3/12] Compiling FRadioPlayer FRadioPlayerObserver.swift
[4/13] Compiling FRadioPlayer FRadioPlayer+State.swift
[5/13] Compiling FRadioPlayer FRadioMetadataExtractor.swift
[6/13] Compiling FRadioPlayer FRadioArtworkAPI.swift
[7/13] Emitting module FRadioPlayer
/Users/admin/builder/spi-builder-workspace/Sources/FRadioPlayer/FRadioPlayer.swift:15:12: warning: non-final class 'FRadioPlayer' cannot conform to 'Sendable'; use '@unchecked Sendable'; this is an error in the Swift 6 language mode
 13 |  */
 14 |
 15 | open class FRadioPlayer: NSObject {
    |            `- warning: non-final class 'FRadioPlayer' cannot conform to 'Sendable'; use '@unchecked Sendable'; this is an error in the Swift 6 language mode
 16 |
 17 |     // MARK: - Properties
/Users/admin/builder/spi-builder-workspace/Sources/FRadioPlayer/FRadioPlayer.swift:23:14: warning: stored property 'isPlayImmediately' of 'Sendable'-conforming class 'FRadioPlayer' is mutable; this is an error in the Swift 6 language mode
 21 |
 22 |     /// Enable / disable `playImmediately`. More info: https://developer.apple.com/documentation/avfoundation/avplayer/1643480-playimmediately
 23 |     open var isPlayImmediately: Bool = false
    |              `- warning: stored property 'isPlayImmediately' of 'Sendable'-conforming class 'FRadioPlayer' is mutable; this is an error in the Swift 6 language mode
 24 |
 25 |     /// The player current radio URL
[8/13] Compiling FRadioPlayer FRadioPlayer+Metadata.swift
[9/13] Compiling FRadioPlayer FRadioPlayer+PlaybackState.swift
[10/13] Compiling FRadioPlayer FRadioPlayer.swift
/Users/admin/builder/spi-builder-workspace/Sources/FRadioPlayer/FRadioPlayer.swift:15:12: warning: non-final class 'FRadioPlayer' cannot conform to 'Sendable'; use '@unchecked Sendable'; this is an error in the Swift 6 language mode
 13 |  */
 14 |
 15 | open class FRadioPlayer: NSObject {
    |            `- warning: non-final class 'FRadioPlayer' cannot conform to 'Sendable'; use '@unchecked Sendable'; this is an error in the Swift 6 language mode
 16 |
 17 |     // MARK: - Properties
/Users/admin/builder/spi-builder-workspace/Sources/FRadioPlayer/FRadioPlayer.swift:23:14: warning: stored property 'isPlayImmediately' of 'Sendable'-conforming class 'FRadioPlayer' is mutable; this is an error in the Swift 6 language mode
 21 |
 22 |     /// Enable / disable `playImmediately`. More info: https://developer.apple.com/documentation/avfoundation/avplayer/1643480-playimmediately
 23 |     open var isPlayImmediately: Bool = false
    |              `- warning: stored property 'isPlayImmediately' of 'Sendable'-conforming class 'FRadioPlayer' is mutable; this is an error in the Swift 6 language mode
 24 |
 25 |     /// The player current radio URL
/Users/admin/builder/spi-builder-workspace/Sources/FRadioPlayer/FRadioPlayer.swift:49:24: warning: main actor-isolated property 'rate' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
 47 |     /// Read only property to get the current AVPlayer rate.
 48 |     open var rate: Float? {
 49 |         return player?.rate
    |                        `- warning: main actor-isolated property 'rate' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
 50 |     }
 51 |
/Applications/Xcode-16.3.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.4.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVPlayer.h:184:17: note: property declared here
 182 |  Before macOS 13, iOS 16, tvOS 16, and watchOS 9, this property must be accessed on the main thread/queue.
 183 |  */
 184 | @property float rate
     |                 `- note: property declared here
 185 | #if AVF_DEPLOYING_TO_2022_RELEASES_AND_LATER
 186 | NS_SWIFT_NONISOLATED
/Users/admin/builder/spi-builder-workspace/Sources/FRadioPlayer/FRadioPlayer.swift:220:36: warning: call to main actor-isolated instance method 'playImmediately(atRate:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
212 |
213 |      */
214 |     open func play() {
    |               `- note: add '@MainActor' to make instance method 'play()' part of global actor 'MainActor'
215 |         guard let player = player else { return }
216 |         if player.currentItem == nil, playerItem != nil {
    :
218 |         }
219 |
220 |         isPlayImmediately ? player.playImmediately(atRate: 1.0) : player.play()
    |                                    `- warning: call to main actor-isolated instance method 'playImmediately(atRate:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
221 |         playbackState = .playing
222 |     }
AVFoundation.AVPlayer.playImmediately:3:24: note: calls to instance method 'playImmediately(atRate:)' from outside of its actor context are implicitly asynchronous
1 | class AVPlayer {
2 | @available(macOS 10.12, *)
3 |   @MainActor open func playImmediately(atRate rate: Float)}
  |                        `- note: calls to instance method 'playImmediately(atRate:)' from outside of its actor context are implicitly asynchronous
4 |
/Users/admin/builder/spi-builder-workspace/Sources/FRadioPlayer/FRadioPlayer.swift:220:74: warning: call to main actor-isolated instance method 'play()' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
212 |
213 |      */
214 |     open func play() {
    |               `- note: add '@MainActor' to make instance method 'play()' part of global actor 'MainActor'
215 |         guard let player = player else { return }
216 |         if player.currentItem == nil, playerItem != nil {
    :
218 |         }
219 |
220 |         isPlayImmediately ? player.playImmediately(atRate: 1.0) : player.play()
    |                                                                          `- warning: call to main actor-isolated instance method 'play()' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
221 |         playbackState = .playing
222 |     }
AVFoundation.AVPlayer.play:2:22: note: calls to instance method 'play()' from outside of its actor context are implicitly asynchronous
1 | class AVPlayer {
2 | @MainActor open func play()}
  |                      `- note: calls to instance method 'play()' from outside of its actor context are implicitly asynchronous
3 |
/Users/admin/builder/spi-builder-workspace/Sources/FRadioPlayer/FRadioPlayer.swift:229:16: warning: call to main actor-isolated instance method 'pause()' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
225 |      Trigger the pause function of the radio player
226 |      */
227 |     open func pause() {
    |               `- note: add '@MainActor' to make instance method 'pause()' part of global actor 'MainActor'
228 |         guard let player = player else { return }
229 |         player.pause()
    |                `- warning: call to main actor-isolated instance method 'pause()' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
230 |         playbackState = .paused
231 |     }
AVFoundation.AVPlayer.pause:2:22: note: calls to instance method 'pause()' from outside of its actor context are implicitly asynchronous
1 | class AVPlayer {
2 | @MainActor open func pause()}
  |                      `- note: calls to instance method 'pause()' from outside of its actor context are implicitly asynchronous
3 |
/Users/admin/builder/spi-builder-workspace/Sources/FRadioPlayer/FRadioPlayer.swift:242:20: warning: call to main actor-isolated instance method 'pause()' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
235 |
236 |      */
237 |     open func stop() {
    |               `- note: add '@MainActor' to make instance method 'stop()' part of global actor 'MainActor'
238 |         guard let player = player else { return }
239 |
240 |         if duration != 0 {
241 |             currentTime = 0
242 |             player.pause()
    |                    `- warning: call to main actor-isolated instance method 'pause()' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
243 |             player.seek(to: .zero)
244 |         } else {
AVFoundation.AVPlayer.pause:2:22: note: calls to instance method 'pause()' from outside of its actor context are implicitly asynchronous
1 | class AVPlayer {
2 | @MainActor open func pause()}
  |                      `- note: calls to instance method 'pause()' from outside of its actor context are implicitly asynchronous
3 |
/Users/admin/builder/spi-builder-workspace/Sources/FRadioPlayer/FRadioPlayer.swift:266:13: warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
264 |         player?.seek(to: seekTime, toleranceBefore: .zero, toleranceAfter: .positiveInfinity, completionHandler: { [weak self] _ in
265 |             self?.play()
266 |             completion?()
    |             |- warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
    |             `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
267 |         })
268 |     }
/Users/admin/builder/spi-builder-workspace/Sources/FRadioPlayer/FRadioPlayer.swift:304:22: warning: call to main actor-isolated initializer 'init(asset:automaticallyLoadedAssetKeys:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
294 |     }
295 |
296 |     private func setupPlayer(with asset: AVURLAsset) {
    |                  `- note: add '@MainActor' to make instance method 'setupPlayer(with:)' part of global actor 'MainActor'
297 |
298 |         if player == nil {
    :
302 |         }
303 |
304 |         playerItem = AVPlayerItem(asset: asset, automaticallyLoadedAssetKeys: requiredAssetKeys)
    |                      `- warning: call to main actor-isolated initializer 'init(asset:automaticallyLoadedAssetKeys:)' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
305 |     }
306 |
/Applications/Xcode-16.3.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.4.sdk/System/Library/Frameworks/AVFoundation.framework/Headers/AVPlayerItem.h:167:1: note: calls to initializer 'init(asset:automaticallyLoadedAssetKeys:)' from outside of its actor context are implicitly asynchronous
 165 |  This method, along with the companion `asset` property, is MainActor-isolated for Swift clients because AVAsset is not Sendable.  If you are using a Sendable subclass of AVAsset, such as AVURLAsset, you can use `init(asset:automaticallyLoadedAssetKeys:)` to initialize an AVPlayerItem while not running on the main actor.
 166 |  */
 167 | - (instancetype)initWithAsset:(AVAsset *)asset automaticallyLoadedAssetKeys:(nullable NSArray<NSString *> *)automaticallyLoadedAssetKeys NS_DESIGNATED_INITIALIZER API_AVAILABLE(macos(10.9), ios(7.0), tvos(9.0), watchos(1.0), visionos(1.0));
     | `- note: calls to initializer 'init(asset:automaticallyLoadedAssetKeys:)' from outside of its actor context are implicitly asynchronous
 168 |
 169 | - (id)copyWithZone:(nullable NSZone *)zone
/Users/admin/builder/spi-builder-workspace/Sources/FRadioPlayer/FRadioPlayer.swift:322:18: warning: call to main actor-isolated instance method 'remove' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
308 |
309 |      */
310 |     private func playerItemDidChange() {
    |                  `- note: add '@MainActor' to make instance method 'playerItemDidChange()' part of global actor 'MainActor'
311 |
312 |         guard lastPlayerItem != playerItem else { return }
    :
320 |             item.removeObserver(self, forKeyPath: #keyPath(AVPlayerItem.isPlaybackLikelyToKeepUp))
321 |             item.removeObserver(self, forKeyPath: #keyPath(AVPlayerItem.duration))
322 |             item.remove(metadataOutput)
    |                  `- warning: call to main actor-isolated instance method 'remove' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
323 |         }
324 |
AVFoundation.AVPlayerItem.remove:3:24: note: calls to instance method 'remove' from outside of its actor context are implicitly asynchronous
1 | class AVPlayerItem {
2 | @available(macOS 10.8, *)
3 |   @MainActor open func remove(_ output: AVPlayerItemOutput)}
  |                        `- note: calls to instance method 'remove' from outside of its actor context are implicitly asynchronous
4 |
/Users/admin/builder/spi-builder-workspace/Sources/FRadioPlayer/FRadioPlayer.swift:336:18: warning: call to main actor-isolated instance method 'add' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
308 |
309 |      */
310 |     private func playerItemDidChange() {
    |                  `- note: add '@MainActor' to make instance method 'playerItemDidChange()' part of global actor 'MainActor'
311 |
312 |         guard lastPlayerItem != playerItem else { return }
    :
334 |             item.addObserver(self, forKeyPath: #keyPath(AVPlayerItem.isPlaybackLikelyToKeepUp), options: [.old, .new], context: &playerItemContext)
335 |             item.addObserver(self, forKeyPath: #keyPath(AVPlayerItem.duration), options: [.old, .new], context: &playerItemContext)
336 |             item.add(metadataOutput)
    |                  `- warning: call to main actor-isolated instance method 'add' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
337 |
338 |             player?.replaceCurrentItem(with: item)
AVFoundation.AVPlayerItem.add:3:24: note: calls to instance method 'add' from outside of its actor context are implicitly asynchronous
1 | class AVPlayerItem {
2 | @available(macOS 10.8, *)
3 |   @MainActor open func add(_ output: AVPlayerItemOutput)}
  |                        `- note: calls to instance method 'add' from outside of its actor context are implicitly asynchronous
4 |
/Users/admin/builder/spi-builder-workspace/Sources/FRadioPlayer/FRadioPlayer.swift:436:17: warning: call to main actor-isolated instance method 'pause()' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
428 |
429 |     // Check if the playback could keep up after a network interruption
430 |     private func checkNetworkInterruption() {
    |                  `- note: add '@MainActor' to make instance method 'checkNetworkInterruption()' part of global actor 'MainActor'
431 |         guard
432 |             let item = playerItem,
    :
434 |             reachability.connection != .none else { return }
435 |
436 |         player?.pause()
    |                 `- warning: call to main actor-isolated instance method 'pause()' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
437 |
438 |         // Wait 1 sec to recheck and make sure the reload is needed
AVFoundation.AVPlayer.pause:2:22: note: calls to instance method 'pause()' from outside of its actor context are implicitly asynchronous
1 | class AVPlayer {
2 | @MainActor open func pause()}
  |                      `- note: calls to instance method 'pause()' from outside of its actor context are implicitly asynchronous
3 |
/Users/admin/builder/spi-builder-workspace/Sources/FRadioPlayer/FRadioPlayer.swift:354:17: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
352 |         artworkAPI.getArtwork(for: metadata) { [weak self] artworlURL in
353 |             DispatchQueue.main.async {
354 |                 self?.currentArtworkURL = artworlURL
    |                 |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
    |                 `- note: task-isolated 'self' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
355 |             }
356 |         }
[11/13] Compiling FRadioPlayer FRadioPlayer+Observation.swift
[12/13] Compiling FRadioPlayer FRadioArtworkAPI+iTunes.swift
/Users/admin/builder/spi-builder-workspace/Sources/FRadioPlayer/FRadioArtworkAPI+iTunes.swift:30:17: warning: capture of 'completion' with non-sendable type '(URL?) -> Void' in a '@Sendable' closure
28 |         let task = session.dataTask(with: url) { (data, response, error) in
29 |             guard error == nil, let data = data else {
30 |                 completion(nil)
   |                 |- warning: capture of 'completion' with non-sendable type '(URL?) -> Void' in a '@Sendable' closure
   |                 `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
31 |                 return
32 |             }
/Users/admin/builder/spi-builder-workspace/Sources/FRadioPlayer/FRadioArtworkAPI+iTunes.swift:34:151: warning: capture of 'self' with non-sendable type 'iTunesAPI' in a '@Sendable' closure
 9 |
10 | // MARK: - iTunes API
11 | public struct iTunesAPI: FRadioArtworkAPI {
   |               `- note: consider making struct 'iTunesAPI' conform to the 'Sendable' protocol
12 |
13 |     let artworkSize: Int
   :
32 |             }
33 |
34 |             guard let response = try? JSONDecoder().decode(iTunesResponse.self, from: data), let artworkURL = response.results.first?.artworkURL(for: artworkSize) else {
   |                                                                                                                                                       `- warning: capture of 'self' with non-sendable type 'iTunesAPI' in a '@Sendable' closure
35 |                 completion(nil)
36 |                 return
[13/13] Compiling FRadioPlayer Reachability.swift
/Users/admin/builder/spi-builder-workspace/Sources/FRadioPlayer/Reachability.swift:241:30: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
239 |
240 |         DispatchQueue.main.async { [weak self] in
241 |             guard let self = self else { return }
    |                              |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
    |                              `- note: task-isolated 'self' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
242 |             block?(self)
243 |             self.notificationCenter.post(name: .reachabilityChanged, object: self)
/Users/admin/builder/spi-builder-workspace/Sources/FRadioPlayer/Reachability.swift:242:13: warning: sending 'block' risks causing data races; this is an error in the Swift 6 language mode
240 |         DispatchQueue.main.async { [weak self] in
241 |             guard let self = self else { return }
242 |             block?(self)
    |             |- warning: sending 'block' risks causing data races; this is an error in the Swift 6 language mode
    |             `- note: task-isolated 'block' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
243 |             self.notificationCenter.post(name: .reachabilityChanged, object: self)
244 |         }
Build complete! (8.01s)
Build complete.
{
  "dependencies" : [
  ],
  "manifest_display_name" : "FRadioPlayer",
  "name" : "FRadioPlayer",
  "path" : "/Users/admin/builder/spi-builder-workspace",
  "platforms" : [
    {
      "name" : "macos",
      "version" : "10.12"
    },
    {
      "name" : "ios",
      "version" : "15.0"
    },
    {
      "name" : "tvos",
      "version" : "10.0"
    }
  ],
  "products" : [
    {
      "name" : "FRadioPlayer",
      "targets" : [
        "FRadioPlayer"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    }
  ],
  "targets" : [
    {
      "c99name" : "FRadioPlayerTests",
      "module_type" : "SwiftTarget",
      "name" : "FRadioPlayerTests",
      "path" : "Tests/FRadioPlayerTests",
      "sources" : [
        "FRadioPlayerTests.swift"
      ],
      "target_dependencies" : [
        "FRadioPlayer"
      ],
      "type" : "test"
    },
    {
      "c99name" : "FRadioPlayer",
      "module_type" : "SwiftTarget",
      "name" : "FRadioPlayer",
      "path" : "Sources/FRadioPlayer",
      "product_memberships" : [
        "FRadioPlayer"
      ],
      "sources" : [
        "FRadioArtworkAPI+iTunes.swift",
        "FRadioArtworkAPI.swift",
        "FRadioMetadataExtractor.swift",
        "FRadioPlayer+Metadata.swift",
        "FRadioPlayer+Observation.swift",
        "FRadioPlayer+PlaybackState.swift",
        "FRadioPlayer+State.swift",
        "FRadioPlayer.swift",
        "FRadioPlayerObserver.swift",
        "Reachability.swift"
      ],
      "type" : "library"
    }
  ],
  "tools_version" : "5.5"
}
Done.