Quantcast
Viewing all articles
Browse latest Browse all 166

Possible to distribute the same module from source & binary in the same package?

Hi,

historically I provided a module from source through SPM. I was asked to provide a pre-compiled version of that module to speed up consumer's build time. I am able to build a xcframework with custom tooling. I was thinking to distribute the binary framework from the same Package with a binaryTarget.

I'd like to let app developers choose the library produce (AwesomeModuleFromSource vs AwesomeModuleFromBinary) but let them use the same module name

import AwesomeModule

I imagined creating such a package manifest.

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

import PackageDescription

let package = Package(
    name: "AwesomePackage",
    defaultLocalization: "en",
    products: [
        .library(
            name: "AwesomeModuleFromSource",
            targets: ["AwesomeModule"]
        ),
        .library(
            name: "ModuleFromBinary",
            targets: ["AwesomeModuleBinary"]
        )
    ],
    dependencies: [],
    targets: [
        .binaryTarget(name: "AwesomeModuleBinary",
                      url: "xxx",
                      checksum: "xxx"
        ),
        .target(
            name: "AwesomeModule",
            dependencies: []
        )
    ]
)

However, SPM complains that the downloaded archive of binary target does not contain expected binary artifact named because the module name is AwesomeModule. Changing the .target name would lead to a different module name when used from source Image may be NSFW.
Clik here to view.
:frowning:

Is it possible to provide the same module from source and through a binaryTarget from the same package? How can I do that?

3 posts - 2 participants

Read full topic


Viewing all articles
Browse latest Browse all 166

Trending Articles