Build SPM Package via Fastlane in Xcode 11 does not work

Viewed 2366

I recently updated my package manager from Cocoapods to SPM because Xcode 11 already has it integrated. All my libraries already supported SPM, so I gave it a try. It all works fine during Xcode debug building, but I'm currently using Fastlane to automate the deployment and testing process, and my spm package fails during the testing step because my package doesn't support MacOs, but some dependencies do, so it somehow tries to force me to provide MacOS support. Unfortunately, I can't do that at the moment.

Do you have any idea if I'm using spm incorrectly, or if this is a bug of spm? RxSwift also supports MacOs, but spm seems to have no problem with this particular package, only Kingfisher, RxSwiftExt and Willow are affected.

This is the error:

error: the product 'Kingfisher' requires minimum platform version 10.12 for macos platform
error: the product 'RxSwiftExt' requires minimum platform version 10.11 for macos platform
error: the product 'Willow' requires minimum platform version 10.11 for macos platform

This is my test statement from fastlane/swift

swift test --build-path ./build --package-path Core --configuration debug

And this is my Package.swift

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

import PackageDescription

let package = Package(
    name: "Core",
    platforms: [
        .iOS(.v11)
    ],
    products: [
        // Products define the executables and libraries produced by a package, and make them visible to other packages.
        .library(
            name: "Core",
            type: .static,
            targets: ["Core"]),
    ],
    dependencies: [
        // Local Dependencies
        .package(path: "../RxKingfisher"),
        // Remote Dependencies
       .package(url: "https://github.com/Nike-Inc/Willow.git",   Package.Dependency.Requirement.branch("master")),
        .package(url: "https://github.com/ReactiveX/RxSwift", .branch("master")),
        .package(url: "https://github.com/Quick/Nimble", .branch("master")),
        .package(url: "https://github.com/Quick/Quick", .branch("master")),
        .package(url: "https://github.com/realm/realm-cocoa", .branch("master")),
        .package(url: "https://github.com/RxSwiftCommunity/RxRealm", .branch("master")),
        .package(url: "https://github.com/RxSwiftCommunity/Action", .branch("master")),
        .package(url: "https://github.com/RxSwiftCommunity/RxSwiftExt", .branch("master")),
        .package(url: "https://github.com/onevcat/Kingfisher", .branch("master")),
        .package(url: "https://github.com/Swinject/Swinject", .branch("master")),
        .package(url: "https://github.com/RxSwiftCommunity/RxDataSources", .branch("master")),
        // We need to change to the master branch after it was merged
        .package(url: "https://github.com/jrendel/SwiftKeychainWrapper", Package.Dependency.Requirement.revision("8b0da97503be8db3b008581a30fdec71046136a7"))
    ],
    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 which this package depends on.
        .target(
            name: "Core",
            dependencies: [
                // Remote
                "Realm", "RealmSwift", "RxDataSources", "RxRealm", "Kingfisher", "RxSwift", "Action", "SwiftKeychainWrapper", "RxSwiftExt", "Swinject", "Willow",
                // Locals
                "RxKingfisher"
            ]),
        .testTarget(
            name: "CoreTests",
            dependencies: ["Core", "Quick", "Nimble", "RxTest", "RxBlocking"])
    ]
)


1 Answers

Not sure about the syntax for swift command, but with xcodebuild setting the destination helped me.

xcodebuild -quiet clean test -project YourProject.xcodeproj -scheme YourScheme -destination 'platform=iOS Simulator,name=iPhone 8'

It seems that setting iOS for the platforms in Package.swift you will still have the Mac as available build target, which is at the beginning of the list and ends up being used in this case.

Related