The Swift Package Index logo.Swift Package Index

Build Information

Successful build of M3UKit, reference 0.8.1 (a84b4d), with Swift 6.1 for Android on 28 May 2025 13:22:52 UTC.

Swift 6 data race errors: 3

Build Command

bash -c docker run --pull=always --rm -v "checkouts-4609320-0":/host -w "$PWD" registry.gitlab.com/finestructure/spi-images:android-6.1-latest swift build --swift-sdk aarch64-unknown-linux-android24 -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 2>&1

Build Log

========================================
RunAll
========================================
Builder version: 4.63.1
Interrupt handler set up.
========================================
Checkout
========================================
Clone URL: https://github.com/omaralbeik/M3UKit.git
Reference: 0.8.1
Initialized empty Git repository in /host/spi-builder-workspace/.git/
hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint:
hint: 	git config --global init.defaultBranch <name>
hint:
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint:
hint: 	git branch -m <name>
From https://github.com/omaralbeik/M3UKit
 * tag               0.8.1      -> FETCH_HEAD
HEAD is now at a84b4d7 Add missing podspec file (#18)
Cloned https://github.com/omaralbeik/M3UKit.git
Revision (git rev-parse @):
a84b4d72ddb3f6fcce78752bddd9ac8fe91bf94e
SUCCESS checkout https://github.com/omaralbeik/M3UKit.git at 0.8.1
========================================
Build
========================================
Selected platform:         android
Swift version:             6.1
Building package at path:  $PWD
https://github.com/omaralbeik/M3UKit.git
https://github.com/omaralbeik/M3UKit.git
WARNING: environment variable SUPPRESS_SWIFT_6_FLAGS is not set
{
  "dependencies" : [
  ],
  "manifest_display_name" : "M3UKit",
  "name" : "M3UKit",
  "path" : "/host/spi-builder-workspace",
  "platforms" : [
  ],
  "products" : [
    {
      "name" : "M3UKit",
      "targets" : [
        "M3UKit"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    }
  ],
  "targets" : [
    {
      "c99name" : "M3UKitTests",
      "module_type" : "SwiftTarget",
      "name" : "M3UKitTests",
      "path" : "Tests/M3UKitTests",
      "resources" : [
        {
          "path" : "/host/spi-builder-workspace/Tests/M3UKitTests/Resources/invalid.m3u",
          "rule" : {
            "process" : {
            }
          }
        },
        {
          "path" : "/host/spi-builder-workspace/Tests/M3UKitTests/Resources/text.txt",
          "rule" : {
            "process" : {
            }
          }
        },
        {
          "path" : "/host/spi-builder-workspace/Tests/M3UKitTests/Resources/valid.m3u",
          "rule" : {
            "process" : {
            }
          }
        }
      ],
      "sources" : [
        "PlaylistParserTests.swift",
        "PlaylistTests.swift"
      ],
      "target_dependencies" : [
        "M3UKit"
      ],
      "type" : "test"
    },
    {
      "c99name" : "M3UKit",
      "module_type" : "SwiftTarget",
      "name" : "M3UKit",
      "path" : "Sources/M3UKit",
      "product_memberships" : [
        "M3UKit"
      ],
      "sources" : [
        "Playlist.swift",
        "PlaylistParser.swift",
        "PlaylistSource.swift",
        "RegularExpression.swift"
      ],
      "type" : "library"
    }
  ],
  "tools_version" : "5.5"
}
Running build ...
bash -c docker run --pull=always --rm -v "checkouts-4609320-0":/host -w "$PWD" registry.gitlab.com/finestructure/spi-images:android-6.1-latest swift build --swift-sdk aarch64-unknown-linux-android24 -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 2>&1
android-6.1-latest: Pulling from finestructure/spi-images
Digest: sha256:fe1962677657b2408c217cb5cceb3c09bc1d91486e360cebbc6eee461a5945d8
Status: Image is up to date for registry.gitlab.com/finestructure/spi-images:android-6.1-latest
Building for debugging...
[0/2] Write sources
[1/2] Write swift-version-24593BA9C3E375BF.txt
[3/7] Emitting module M3UKit
/host/spi-builder-workspace/Sources/M3UKit/PlaylistParser.swift:38:23: warning: static property 'removeSeriesInfoFromText' is not concurrency-safe because non-'Sendable' type 'PlaylistParser.Options' may have shared mutable state; this is an error in the Swift 6 language mode
 28 |
 29 |   /// Playlist parser options
 30 |   public struct Options: OptionSet {
    |                 `- note: consider making struct 'Options' conform to the 'Sendable' protocol
 31 |     public let rawValue: Int
 32 |
    :
 36 |
 37 |     /// Remove season number and episode number "S--E--" from the name of media.
 38 |     public static let removeSeriesInfoFromText = Options(rawValue: 1 << 0)
    |                       |- warning: static property 'removeSeriesInfoFromText' is not concurrency-safe because non-'Sendable' type 'PlaylistParser.Options' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'removeSeriesInfoFromText' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 39 |
 40 |     /// Extract id from the URL (usually last path component removing the extension)
/host/spi-builder-workspace/Sources/M3UKit/PlaylistParser.swift:41:23: warning: static property 'extractIdFromURL' is not concurrency-safe because non-'Sendable' type 'PlaylistParser.Options' may have shared mutable state; this is an error in the Swift 6 language mode
 28 |
 29 |   /// Playlist parser options
 30 |   public struct Options: OptionSet {
    |                 `- note: consider making struct 'Options' conform to the 'Sendable' protocol
 31 |     public let rawValue: Int
 32 |
    :
 39 |
 40 |     /// Extract id from the URL (usually last path component removing the extension)
 41 |     public static let extractIdFromURL = Options(rawValue: 1 << 1)
    |                       |- warning: static property 'extractIdFromURL' is not concurrency-safe because non-'Sendable' type 'PlaylistParser.Options' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'extractIdFromURL' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 42 |
 43 |     /// All available options.
/host/spi-builder-workspace/Sources/M3UKit/PlaylistParser.swift:44:23: warning: static property 'all' is not concurrency-safe because non-'Sendable' type 'PlaylistParser.Options' may have shared mutable state; this is an error in the Swift 6 language mode
 28 |
 29 |   /// Playlist parser options
 30 |   public struct Options: OptionSet {
    |                 `- note: consider making struct 'Options' conform to the 'Sendable' protocol
 31 |     public let rawValue: Int
 32 |
    :
 42 |
 43 |     /// All available options.
 44 |     public static let all: Options = [
    |                       |- warning: static property 'all' is not concurrency-safe because non-'Sendable' type 'PlaylistParser.Options' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'all' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 45 |       .removeSeriesInfoFromText,
 46 |       .extractIdFromURL,
[4/7] Compiling M3UKit PlaylistSource.swift
[5/7] Compiling M3UKit PlaylistParser.swift
/host/spi-builder-workspace/Sources/M3UKit/PlaylistParser.swift:38:23: warning: static property 'removeSeriesInfoFromText' is not concurrency-safe because non-'Sendable' type 'PlaylistParser.Options' may have shared mutable state; this is an error in the Swift 6 language mode
 28 |
 29 |   /// Playlist parser options
 30 |   public struct Options: OptionSet {
    |                 `- note: consider making struct 'Options' conform to the 'Sendable' protocol
 31 |     public let rawValue: Int
 32 |
    :
 36 |
 37 |     /// Remove season number and episode number "S--E--" from the name of media.
 38 |     public static let removeSeriesInfoFromText = Options(rawValue: 1 << 0)
    |                       |- warning: static property 'removeSeriesInfoFromText' is not concurrency-safe because non-'Sendable' type 'PlaylistParser.Options' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'removeSeriesInfoFromText' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 39 |
 40 |     /// Extract id from the URL (usually last path component removing the extension)
/host/spi-builder-workspace/Sources/M3UKit/PlaylistParser.swift:41:23: warning: static property 'extractIdFromURL' is not concurrency-safe because non-'Sendable' type 'PlaylistParser.Options' may have shared mutable state; this is an error in the Swift 6 language mode
 28 |
 29 |   /// Playlist parser options
 30 |   public struct Options: OptionSet {
    |                 `- note: consider making struct 'Options' conform to the 'Sendable' protocol
 31 |     public let rawValue: Int
 32 |
    :
 39 |
 40 |     /// Extract id from the URL (usually last path component removing the extension)
 41 |     public static let extractIdFromURL = Options(rawValue: 1 << 1)
    |                       |- warning: static property 'extractIdFromURL' is not concurrency-safe because non-'Sendable' type 'PlaylistParser.Options' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'extractIdFromURL' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 42 |
 43 |     /// All available options.
/host/spi-builder-workspace/Sources/M3UKit/PlaylistParser.swift:44:23: warning: static property 'all' is not concurrency-safe because non-'Sendable' type 'PlaylistParser.Options' may have shared mutable state; this is an error in the Swift 6 language mode
 28 |
 29 |   /// Playlist parser options
 30 |   public struct Options: OptionSet {
    |                 `- note: consider making struct 'Options' conform to the 'Sendable' protocol
 31 |     public let rawValue: Int
 32 |
    :
 42 |
 43 |     /// All available options.
 44 |     public static let all: Options = [
    |                       |- warning: static property 'all' is not concurrency-safe because non-'Sendable' type 'PlaylistParser.Options' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'all' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 45 |       .removeSeriesInfoFromText,
 46 |       .extractIdFromURL,
/host/spi-builder-workspace/Sources/M3UKit/PlaylistParser.swift:168:28: warning: capture of 'self' with non-sendable type 'PlaylistParser' in a '@Sendable' closure; this is an error in the Swift 6 language mode
 25 |
 26 | /// A class to parse `Playlist` objects from a `PlaylistSource`.
 27 | public final class PlaylistParser {
    |                    `- note: class 'PlaylistParser' does not conform to the 'Sendable' protocol
 28 |
 29 |   /// Playlist parser options
    :
166 |     processingQueue.async {
167 |       do {
168 |         let playlist = try self.parse(input)
    |                            `- warning: capture of 'self' with non-sendable type 'PlaylistParser' in a '@Sendable' closure; this is an error in the Swift 6 language mode
169 |         callbackQueue.async {
170 |           completion(.success(playlist))
/host/spi-builder-workspace/Sources/M3UKit/PlaylistParser.swift:168:39: warning: capture of 'input' with non-sendable type 'any PlaylistSource' in a '@Sendable' closure; this is an error in the Swift 6 language mode
166 |     processingQueue.async {
167 |       do {
168 |         let playlist = try self.parse(input)
    |                                       `- warning: capture of 'input' with non-sendable type 'any PlaylistSource' in a '@Sendable' closure; this is an error in the Swift 6 language mode
169 |         callbackQueue.async {
170 |           completion(.success(playlist))
/host/spi-builder-workspace/Sources/M3UKit/PlaylistSource.swift:27:17: note: protocol 'PlaylistSource' does not conform to the 'Sendable' protocol
25 |
26 | /// Playlist source.
27 | public protocol PlaylistSource {
   |                 `- note: protocol 'PlaylistSource' does not conform to the 'Sendable' protocol
28 |   /// Playlist contents raw string.
29 |   var rawString: String? { get }
/host/spi-builder-workspace/Sources/M3UKit/PlaylistParser.swift:170:11: warning: capture of 'completion' with non-sendable type '(Result<Playlist, any Error>) -> Void' in a '@Sendable' closure; this is an error in the Swift 6 language mode
168 |         let playlist = try self.parse(input)
169 |         callbackQueue.async {
170 |           completion(.success(playlist))
    |           |- warning: capture of 'completion' with non-sendable type '(Result<Playlist, any Error>) -> Void' in a '@Sendable' closure; this is an error in the Swift 6 language mode
    |           `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
171 |         }
172 |       } catch {
/host/spi-builder-workspace/Sources/M3UKit/PlaylistParser.swift:170:11: warning: capture of 'completion' with non-sendable type '(Result<Playlist, any Error>) -> Void' in a '@Sendable' closure; this is an error in the Swift 6 language mode
168 |         let playlist = try self.parse(input)
169 |         callbackQueue.async {
170 |           completion(.success(playlist))
    |           |- warning: capture of 'completion' with non-sendable type '(Result<Playlist, any Error>) -> Void' in a '@Sendable' closure; this is an error in the Swift 6 language mode
    |           `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
171 |         }
172 |       } catch {
/host/spi-builder-workspace/Sources/M3UKit/PlaylistParser.swift:170:31: warning: capture of 'playlist' with non-sendable type 'Playlist' in a '@Sendable' closure; this is an error in the Swift 6 language mode
168 |         let playlist = try self.parse(input)
169 |         callbackQueue.async {
170 |           completion(.success(playlist))
    |                               `- warning: capture of 'playlist' with non-sendable type 'Playlist' in a '@Sendable' closure; this is an error in the Swift 6 language mode
171 |         }
172 |       } catch {
/host/spi-builder-workspace/Sources/M3UKit/Playlist.swift:27:15: note: consider making struct 'Playlist' conform to the 'Sendable' protocol
 25 |
 26 | /// Object representing a playlist containing media items.
 27 | public struct Playlist: Equatable, Hashable, Codable {
    |               `- note: consider making struct 'Playlist' conform to the 'Sendable' protocol
 28 |
 29 |   /// Object representing a media.
/host/spi-builder-workspace/Sources/M3UKit/PlaylistParser.swift:174:11: warning: capture of 'completion' with non-sendable type '(Result<Playlist, any Error>) -> Void' in a '@Sendable' closure; this is an error in the Swift 6 language mode
172 |       } catch {
173 |         callbackQueue.async {
174 |           completion(.failure(error))
    |           |- warning: capture of 'completion' with non-sendable type '(Result<Playlist, any Error>) -> Void' in a '@Sendable' closure; this is an error in the Swift 6 language mode
    |           `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
175 |         }
176 |       }
/host/spi-builder-workspace/Sources/M3UKit/PlaylistParser.swift:189:26: warning: type 'Playlist' does not conform to the 'Sendable' protocol; this is an error in the Swift 6 language mode
187 |     priority: TaskPriority = .background
188 |   ) async throws -> Playlist {
189 |     let processingTask = Task(priority: priority) {
    |                          `- warning: type 'Playlist' does not conform to the 'Sendable' protocol; this is an error in the Swift 6 language mode
190 |       try self.parse(input)
191 |     }
/host/spi-builder-workspace/Sources/M3UKit/Playlist.swift:27:15: note: consider making struct 'Playlist' conform to the 'Sendable' protocol
 25 |
 26 | /// Object representing a playlist containing media items.
 27 | public struct Playlist: Equatable, Hashable, Codable {
    |               `- note: consider making struct 'Playlist' conform to the 'Sendable' protocol
 28 |
 29 |   /// Object representing a media.
/host/spi-builder-workspace/Sources/M3UKit/PlaylistParser.swift:189:26: warning: type 'Playlist' does not conform to the 'Sendable' protocol; this is an error in the Swift 6 language mode
187 |     priority: TaskPriority = .background
188 |   ) async throws -> Playlist {
189 |     let processingTask = Task(priority: priority) {
    |                          `- warning: type 'Playlist' does not conform to the 'Sendable' protocol; this is an error in the Swift 6 language mode
190 |       try self.parse(input)
191 |     }
/host/spi-builder-workspace/Sources/M3UKit/Playlist.swift:27:15: note: consider making struct 'Playlist' conform to the 'Sendable' protocol
 25 |
 26 | /// Object representing a playlist containing media items.
 27 | public struct Playlist: Equatable, Hashable, Codable {
    |               `- note: consider making struct 'Playlist' conform to the 'Sendable' protocol
 28 |
 29 |   /// Object representing a media.
/host/spi-builder-workspace/Sources/M3UKit/PlaylistParser.swift:189:9: warning: type 'Playlist' does not conform to the 'Sendable' protocol; this is an error in the Swift 6 language mode
187 |     priority: TaskPriority = .background
188 |   ) async throws -> Playlist {
189 |     let processingTask = Task(priority: priority) {
    |         `- warning: type 'Playlist' does not conform to the 'Sendable' protocol; this is an error in the Swift 6 language mode
190 |       try self.parse(input)
191 |     }
/host/spi-builder-workspace/Sources/M3UKit/Playlist.swift:27:15: note: consider making struct 'Playlist' conform to the 'Sendable' protocol
 25 |
 26 | /// Object representing a playlist containing media items.
 27 | public struct Playlist: Equatable, Hashable, Codable {
    |               `- note: consider making struct 'Playlist' conform to the 'Sendable' protocol
 28 |
 29 |   /// Object representing a media.
/host/spi-builder-workspace/Sources/M3UKit/PlaylistParser.swift:192:37: warning: type 'Playlist' does not conform to the 'Sendable' protocol; this is an error in the Swift 6 language mode
190 |       try self.parse(input)
191 |     }
192 |     return try await processingTask.value
    |                                     `- warning: type 'Playlist' does not conform to the 'Sendable' protocol; this is an error in the Swift 6 language mode
193 |   }
194 |
/host/spi-builder-workspace/Sources/M3UKit/Playlist.swift:27:15: note: consider making struct 'Playlist' conform to the 'Sendable' protocol
 25 |
 26 | /// Object representing a playlist containing media items.
 27 | public struct Playlist: Equatable, Hashable, Codable {
    |               `- note: consider making struct 'Playlist' conform to the 'Sendable' protocol
 28 |
 29 |   /// Object representing a media.
/host/spi-builder-workspace/Sources/M3UKit/PlaylistParser.swift:189:51: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
187 |     priority: TaskPriority = .background
188 |   ) async throws -> Playlist {
189 |     let processingTask = Task(priority: priority) {
    |                                                   `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
190 |       try self.parse(input)
    |           `- note: closure captures 'self' which is accessible to code in the current task
191 |     }
192 |     return try await processingTask.value
[6/7] Compiling M3UKit Playlist.swift
[7/7] Compiling M3UKit RegularExpression.swift
Build complete! (8.31s)
Build complete.
{
  "dependencies" : [
  ],
  "manifest_display_name" : "M3UKit",
  "name" : "M3UKit",
  "path" : "/host/spi-builder-workspace",
  "platforms" : [
  ],
  "products" : [
    {
      "name" : "M3UKit",
      "targets" : [
        "M3UKit"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    }
  ],
  "targets" : [
    {
      "c99name" : "M3UKitTests",
      "module_type" : "SwiftTarget",
      "name" : "M3UKitTests",
      "path" : "Tests/M3UKitTests",
      "resources" : [
        {
          "path" : "/host/spi-builder-workspace/Tests/M3UKitTests/Resources/invalid.m3u",
          "rule" : {
            "process" : {
            }
          }
        },
        {
          "path" : "/host/spi-builder-workspace/Tests/M3UKitTests/Resources/text.txt",
          "rule" : {
            "process" : {
            }
          }
        },
        {
          "path" : "/host/spi-builder-workspace/Tests/M3UKitTests/Resources/valid.m3u",
          "rule" : {
            "process" : {
            }
          }
        }
      ],
      "sources" : [
        "PlaylistParserTests.swift",
        "PlaylistTests.swift"
      ],
      "target_dependencies" : [
        "M3UKit"
      ],
      "type" : "test"
    },
    {
      "c99name" : "M3UKit",
      "module_type" : "SwiftTarget",
      "name" : "M3UKit",
      "path" : "Sources/M3UKit",
      "product_memberships" : [
        "M3UKit"
      ],
      "sources" : [
        "Playlist.swift",
        "PlaylistParser.swift",
        "PlaylistSource.swift",
        "RegularExpression.swift"
      ],
      "type" : "library"
    }
  ],
  "tools_version" : "5.5"
}
android-6.1-latest: Pulling from finestructure/spi-images
Digest: sha256:fe1962677657b2408c217cb5cceb3c09bc1d91486e360cebbc6eee461a5945d8
Status: Image is up to date for registry.gitlab.com/finestructure/spi-images:android-6.1-latest
Done.