Question about "...contains unsafe build flags" in SPM

Xcode 12.4

Confuse 2 statements in Swift Package Manger
1).package(url: "file:///XXX.git", .branch("main")),
:grinning:It works very well.

2).package(url: "file:///XXX.git", from: "8.2.0"),
:scream:Cause the error "the target 'XXX' in product 'ABC' contains unsafe build flags"

Do I forget something?

My Package.swift

// swift-tools-version:5.3
// The swift-tools-version declares the minimum version of Swift required to build this package.

import PackageDescription

let package = Package(
    name: "ABC",
    defaultLocalization: "en",
    products: [
        // Products define the executables and libraries a package produces, and make them visible to other packages.
        .library( name: "ABC", targets: ["ABC"]),
    ],
    dependencies: [
        // Dependencies declare other packages that this package depends on.
        //.package(url: "file:///XXX.git", .branch("main")),
        .package(url: "file:///XXX.git", from: "8.2.0"),
    ],
    targets: [
        // Targets are the basic building blocks of a package. A target can define a module or a test suite.
        // Targets can depend on other targets in this package, and on products in packages this package depends on.
        .target(
            name: "ABC",
            dependencies: ["XXX"],
            resources: [.process("Resources")]),
        .testTarget(
            name: "ABCTests",
            dependencies: ["ABC"]),
    ]
)

You have done nothing wrong. The “XXX” package tagged a version containing unreliable options that are disallowed for versioned releases. Report the error to them and ask them to fix it. While you wait, you might try 8.1.0 or some other earlier version in case you can find one that predates the addition of the offending options.

@SDGGiesbrecht thanks
I still confuse, because, the branch main and tag 8.2.0 are identical.
they point to the same commit.

Local and branch dependencies are allowed to use unsafeFlags for the sake of development, but SwiftPM will reject a versioned dependency that attempts to use them.

It is similar to how a branch is allowed to depend on another branch, but a version is not allowed to depend on that very same branch. Even though the version might appear to work now, it will inevitably become broken with the passage of time as the underlying branch slides out from underneath it.

1 Like

@SDGGiesbrecht thanks
I got it.