The Swift Package Index logo.Swift Package Index

Track the adoption of Swift 6 strict concurrency checks for data race safety. How many packages are Ready for Swift 6?

Build Information

Successful build of text-to-emoji, reference main (e95c85), with Swift 6.1 for macOS (SPM) on 27 Apr 2025 05:44:44 UTC.

Swift 6 data race errors: 1

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.61.0
Interrupt handler set up.
========================================
Checkout
========================================
Clone URL: https://github.com/WouterWisse/text-to-emoji.git
Reference: main
Initialized empty Git repository in /Users/admin/builder/spi-builder-workspace/.git/
From https://github.com/WouterWisse/text-to-emoji
 * branch            main       -> FETCH_HEAD
 * [new branch]      main       -> origin/main
HEAD is now at e95c859 Update README.md
Cloned https://github.com/WouterWisse/text-to-emoji.git
Revision (git rev-parse @):
e95c859412babf24500e2496b0ac708fff5fc4a1
SUCCESS checkout https://github.com/WouterWisse/text-to-emoji.git at main
========================================
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": "text-to-emoji",
      "name": "text-to-emoji",
      "url": "https://github.com/WouterWisse/text-to-emoji.git",
      "version": "unspecified",
      "path": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies/.build/checkouts/text-to-emoji",
      "dependencies": [
      ]
    }
  ]
}
Fetching https://github.com/WouterWisse/text-to-emoji.git
[1/977] Fetching text-to-emoji
Fetched https://github.com/WouterWisse/text-to-emoji.git from cache (1.14s)
Creating working copy for https://github.com/WouterWisse/text-to-emoji.git
Working copy of https://github.com/WouterWisse/text-to-emoji.git resolved at main (e95c859)
warning: '.resolve-product-dependencies': dependency 'text-to-emoji' 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/WouterWisse/text-to-emoji.git
https://github.com/WouterWisse/text-to-emoji.git
{
  "default_localization" : "en",
  "dependencies" : [
  ],
  "manifest_display_name" : "text-to-emoji",
  "name" : "text-to-emoji",
  "path" : "/Users/admin/builder/spi-builder-workspace",
  "platforms" : [
    {
      "name" : "ios",
      "version" : "13.0"
    },
    {
      "name" : "macos",
      "version" : "10.15"
    },
    {
      "name" : "tvos",
      "version" : "13.0"
    },
    {
      "name" : "watchos",
      "version" : "6.0"
    }
  ],
  "products" : [
    {
      "name" : "TextToEmoji",
      "targets" : [
        "TextToEmoji"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    }
  ],
  "targets" : [
    {
      "c99name" : "TextToEmojiTests",
      "module_type" : "SwiftTarget",
      "name" : "TextToEmojiTests",
      "path" : "Tests/TextToEmojiTests",
      "sources" : [
        "Mocks/MockStringMatchScoreProvider.swift",
        "StringMatchScoreProviderTests.swift",
        "StringPreparationTests.swift",
        "TextToEmojiTests.swift"
      ],
      "target_dependencies" : [
        "TextToEmoji"
      ],
      "type" : "test"
    },
    {
      "c99name" : "TextToEmoji",
      "module_type" : "SwiftTarget",
      "name" : "TextToEmoji",
      "path" : "Sources/TextToEmoji",
      "product_memberships" : [
        "TextToEmoji"
      ],
      "resources" : [
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Sources/TextToEmoji/Resources/en.lproj/Activity.strings",
          "rule" : {
            "process" : {
              "localization" : "en"
            }
          }
        },
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Sources/TextToEmoji/Resources/en.lproj/Adjectives.strings",
          "rule" : {
            "process" : {
              "localization" : "en"
            }
          }
        },
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Sources/TextToEmoji/Resources/en.lproj/AnimalsAndNature.strings",
          "rule" : {
            "process" : {
              "localization" : "en"
            }
          }
        },
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Sources/TextToEmoji/Resources/en.lproj/Flags.strings",
          "rule" : {
            "process" : {
              "localization" : "en"
            }
          }
        },
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Sources/TextToEmoji/Resources/en.lproj/FoodAndDrink.strings",
          "rule" : {
            "process" : {
              "localization" : "en"
            }
          }
        },
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Sources/TextToEmoji/Resources/en.lproj/Objects.strings",
          "rule" : {
            "process" : {
              "localization" : "en"
            }
          }
        },
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Sources/TextToEmoji/Resources/en.lproj/SmileysAndPeople.strings",
          "rule" : {
            "process" : {
              "localization" : "en"
            }
          }
        },
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Sources/TextToEmoji/Resources/en.lproj/Symbols.strings",
          "rule" : {
            "process" : {
              "localization" : "en"
            }
          }
        },
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Sources/TextToEmoji/Resources/en.lproj/TravelAndPlaces.strings",
          "rule" : {
            "process" : {
              "localization" : "en"
            }
          }
        },
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Sources/TextToEmoji/Resources/nl.lproj/Activity.strings",
          "rule" : {
            "process" : {
              "localization" : "nl"
            }
          }
        },
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Sources/TextToEmoji/Resources/nl.lproj/Adjectives.strings",
          "rule" : {
            "process" : {
              "localization" : "nl"
            }
          }
        },
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Sources/TextToEmoji/Resources/nl.lproj/AnimalsAndNature.strings",
          "rule" : {
            "process" : {
              "localization" : "nl"
            }
          }
        },
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Sources/TextToEmoji/Resources/nl.lproj/Flags.strings",
          "rule" : {
            "process" : {
              "localization" : "nl"
            }
          }
        },
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Sources/TextToEmoji/Resources/nl.lproj/FoodAndDrink.strings",
          "rule" : {
            "process" : {
              "localization" : "nl"
            }
          }
        },
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Sources/TextToEmoji/Resources/nl.lproj/Objects.strings",
          "rule" : {
            "process" : {
              "localization" : "nl"
            }
          }
        },
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Sources/TextToEmoji/Resources/nl.lproj/SmileysAndPeople.strings",
          "rule" : {
            "process" : {
              "localization" : "nl"
            }
          }
        },
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Sources/TextToEmoji/Resources/nl.lproj/Symbols.strings",
          "rule" : {
            "process" : {
              "localization" : "nl"
            }
          }
        },
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Sources/TextToEmoji/Resources/nl.lproj/TravelAndPlaces.strings",
          "rule" : {
            "process" : {
              "localization" : "nl"
            }
          }
        }
      ],
      "sources" : [
        "EmojiCategory.swift",
        "Extensions/String+Preparation.swift",
        "StringMatchScoreProvider.swift",
        "TextToEmoji.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/21] Copying SmileysAndPeople.strings
[0/21] Copying FoodAndDrink.strings
[0/21] Copying SmileysAndPeople.strings
[0/21] Copying Objects.strings
[0/21] Copying AnimalsAndNature.strings
[3/21] Copying TravelAndPlaces.strings
[5/21] Copying Objects.strings
[6/21] Copying AnimalsAndNature.strings
[8/21] Copying Symbols.strings
[9/21] Copying Activity.strings
[12/21] Copying FoodAndDrink.strings
[12/21] Copying Adjectives.strings
[12/21] Copying Flags.strings
[13/21] Copying Info.plist
[13/21] Copying Adjectives.strings
[14/21] Copying Activity.strings
[15/21] Copying Flags.strings
[17/21] Write sources
[20/21] Write swift-version-2F0A5646E1D333AE.txt
[22/27] Compiling TextToEmoji resource_bundle_accessor.swift
[23/27] Compiling TextToEmoji StringMatchScoreProvider.swift
/Users/admin/builder/spi-builder-workspace/Sources/TextToEmoji/StringMatchScoreProvider.swift:8:17: warning: static property 'default' is not concurrency-safe because non-'Sendable' type 'StringMatchScoreProvider' may have shared mutable state; this is an error in the Swift 6 language mode
 1 | import Foundation
 2 |
 3 | public struct StringMatchScoreProvider {
   |               `- note: consider making struct 'StringMatchScoreProvider' conform to the 'Sendable' protocol
 4 |     var provideScore: (_ text: String, _ possibleMatch: String) -> Int
 5 | }
 6 |
 7 | public extension StringMatchScoreProvider {
 8 |      static let `default` = StringMatchScoreProvider(
   |                 |- warning: static property 'default' is not concurrency-safe because non-'Sendable' type 'StringMatchScoreProvider' may have shared mutable state; this is an error in the Swift 6 language mode
   |                 |- note: add '@MainActor' to make static property 'default' part of global actor 'MainActor'
   |                 `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 9 |         provideScore: { text, possibleMatch in
10 |             // https://en.wikipedia.org/wiki/Levenshtein_distance
[24/27] Emitting module TextToEmoji
/Users/admin/builder/spi-builder-workspace/Sources/TextToEmoji/StringMatchScoreProvider.swift:8:17: warning: static property 'default' is not concurrency-safe because non-'Sendable' type 'StringMatchScoreProvider' may have shared mutable state; this is an error in the Swift 6 language mode
 1 | import Foundation
 2 |
 3 | public struct StringMatchScoreProvider {
   |               `- note: consider making struct 'StringMatchScoreProvider' conform to the 'Sendable' protocol
 4 |     var provideScore: (_ text: String, _ possibleMatch: String) -> Int
 5 | }
 6 |
 7 | public extension StringMatchScoreProvider {
 8 |      static let `default` = StringMatchScoreProvider(
   |                 |- warning: static property 'default' is not concurrency-safe because non-'Sendable' type 'StringMatchScoreProvider' may have shared mutable state; this is an error in the Swift 6 language mode
   |                 |- note: add '@MainActor' to make static property 'default' part of global actor 'MainActor'
   |                 `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 9 |         provideScore: { text, possibleMatch in
10 |             // https://en.wikipedia.org/wiki/Levenshtein_distance
[25/27] Compiling TextToEmoji String+Preparation.swift
[26/27] Compiling TextToEmoji TextToEmoji.swift
/Users/admin/builder/spi-builder-workspace/Sources/TextToEmoji/TextToEmoji.swift:33:30: 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
 31 |         category: EmojiCategory?
 32 |     ) async throws -> String {
 33 |         let emojiTask = Task {
    |                              `- 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
 34 |             let input = text.prepareString()
 35 |
 36 |             let allTables = EmojiCategory.allCases
 37 |                 .map { $0.tableName }
 38 |                 .sorted(by: { $0 == category?.tableName && $1 != category?.tableName })
    |                                     `- note: closure captures 'category' which is accessible to code in the current task
 39 |
 40 |             for table in allTables {
[27/27] Compiling TextToEmoji EmojiCategory.swift
Build complete! (4.28s)
Build complete.
{
  "default_localization" : "en",
  "dependencies" : [
  ],
  "manifest_display_name" : "text-to-emoji",
  "name" : "text-to-emoji",
  "path" : "/Users/admin/builder/spi-builder-workspace",
  "platforms" : [
    {
      "name" : "ios",
      "version" : "13.0"
    },
    {
      "name" : "macos",
      "version" : "10.15"
    },
    {
      "name" : "tvos",
      "version" : "13.0"
    },
    {
      "name" : "watchos",
      "version" : "6.0"
    }
  ],
  "products" : [
    {
      "name" : "TextToEmoji",
      "targets" : [
        "TextToEmoji"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    }
  ],
  "targets" : [
    {
      "c99name" : "TextToEmojiTests",
      "module_type" : "SwiftTarget",
      "name" : "TextToEmojiTests",
      "path" : "Tests/TextToEmojiTests",
      "sources" : [
        "Mocks/MockStringMatchScoreProvider.swift",
        "StringMatchScoreProviderTests.swift",
        "StringPreparationTests.swift",
        "TextToEmojiTests.swift"
      ],
      "target_dependencies" : [
        "TextToEmoji"
      ],
      "type" : "test"
    },
    {
      "c99name" : "TextToEmoji",
      "module_type" : "SwiftTarget",
      "name" : "TextToEmoji",
      "path" : "Sources/TextToEmoji",
      "product_memberships" : [
        "TextToEmoji"
      ],
      "resources" : [
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Sources/TextToEmoji/Resources/en.lproj/Activity.strings",
          "rule" : {
            "process" : {
              "localization" : "en"
            }
          }
        },
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Sources/TextToEmoji/Resources/en.lproj/Adjectives.strings",
          "rule" : {
            "process" : {
              "localization" : "en"
            }
          }
        },
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Sources/TextToEmoji/Resources/en.lproj/AnimalsAndNature.strings",
          "rule" : {
            "process" : {
              "localization" : "en"
            }
          }
        },
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Sources/TextToEmoji/Resources/en.lproj/Flags.strings",
          "rule" : {
            "process" : {
              "localization" : "en"
            }
          }
        },
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Sources/TextToEmoji/Resources/en.lproj/FoodAndDrink.strings",
          "rule" : {
            "process" : {
              "localization" : "en"
            }
          }
        },
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Sources/TextToEmoji/Resources/en.lproj/Objects.strings",
          "rule" : {
            "process" : {
              "localization" : "en"
            }
          }
        },
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Sources/TextToEmoji/Resources/en.lproj/SmileysAndPeople.strings",
          "rule" : {
            "process" : {
              "localization" : "en"
            }
          }
        },
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Sources/TextToEmoji/Resources/en.lproj/Symbols.strings",
          "rule" : {
            "process" : {
              "localization" : "en"
            }
          }
        },
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Sources/TextToEmoji/Resources/en.lproj/TravelAndPlaces.strings",
          "rule" : {
            "process" : {
              "localization" : "en"
            }
          }
        },
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Sources/TextToEmoji/Resources/nl.lproj/Activity.strings",
          "rule" : {
            "process" : {
              "localization" : "nl"
            }
          }
        },
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Sources/TextToEmoji/Resources/nl.lproj/Adjectives.strings",
          "rule" : {
            "process" : {
              "localization" : "nl"
            }
          }
        },
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Sources/TextToEmoji/Resources/nl.lproj/AnimalsAndNature.strings",
          "rule" : {
            "process" : {
              "localization" : "nl"
            }
          }
        },
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Sources/TextToEmoji/Resources/nl.lproj/Flags.strings",
          "rule" : {
            "process" : {
              "localization" : "nl"
            }
          }
        },
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Sources/TextToEmoji/Resources/nl.lproj/FoodAndDrink.strings",
          "rule" : {
            "process" : {
              "localization" : "nl"
            }
          }
        },
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Sources/TextToEmoji/Resources/nl.lproj/Objects.strings",
          "rule" : {
            "process" : {
              "localization" : "nl"
            }
          }
        },
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Sources/TextToEmoji/Resources/nl.lproj/SmileysAndPeople.strings",
          "rule" : {
            "process" : {
              "localization" : "nl"
            }
          }
        },
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Sources/TextToEmoji/Resources/nl.lproj/Symbols.strings",
          "rule" : {
            "process" : {
              "localization" : "nl"
            }
          }
        },
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Sources/TextToEmoji/Resources/nl.lproj/TravelAndPlaces.strings",
          "rule" : {
            "process" : {
              "localization" : "nl"
            }
          }
        }
      ],
      "sources" : [
        "EmojiCategory.swift",
        "Extensions/String+Preparation.swift",
        "StringMatchScoreProvider.swift",
        "TextToEmoji.swift"
      ],
      "type" : "library"
    }
  ],
  "tools_version" : "5.5"
}
Done.