从 CLI 运行 swift 测试时,我可以指定平台目标吗?

Gui*_*uig 4 unit-testing ios swift-package-manager

我的Package.swift看起来像

let package = Package(
  name: "MyPackage",
  platforms: [
    .iOS(.v13)
  ],
  products: [
    .library(
      name: "MyPackage",
      targets: ["MyPackage"])
  ],
  dependencies: [
    .package(url: "https://github.com/SnapKit/SnapKit.git", from: "5.0.0"),
  ],
  targets: [
    .target(
      name: "MyPackage",
      dependencies: [
        "SnapKit",
      ]),
    .testTarget(
      name: "MyPackageTests",
      dependencies: ["MyPackage"])
  ]
)
Run Code Online (Sandbox Code Playgroud)

当我跑步时,swift test我得到

error: the library 'MyPackage' requires macos 10.10, but depends on the product 'SnapKit' \
which requires macos 10.12; consider changing the library 'SurfUIKit' to require macos 10.12 \
or later, or the product 'SnapKit' to require macos 10.10 or earlier.
Run Code Online (Sandbox Code Playgroud)

为什么对未列为受支持平台的 macos 进行 swift 运行测试?我可以快速运行 iOS 测试,理想情况下指定一些版本目标吗?在 CLI 中使用 xcode 有什么替代方法?

itM*_*nce 5

诀窍是:

  • 你认为这.iOS(...)是为了将编译限制在一个平台上

  • 虽然它实际上是一条用于精确的线路,但what minimum version您的产品将为此平台提供支持

它没有说:only compile for .iOS X.y,但是.iOS min version is X.y

SPM是一种工具Swift first,因而要建立all~ platforms,并具有目前还没有办法使用〜系统只参数的〜(我知道我伤心过)。


现在,如果您想要一个仅限 iOS 的包,它仍然是可能的,但是您必须通过xcodebuild命令进行编译(并且您不需要 xcodeproj 文件)。

// Compile and test on iOS simulator

xcodebuild -list

xcodebuild -scheme <scheme> -destination 'generic/platform=iOS'

xcodebuild -scheme <scheme> -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 11'

xcodebuild -scheme <scheme> test -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 11'


关于“取决于 Apple 模块”的 SPM 文档用法


根据我的经验,我还会说您可以拥有如下的文件夹层次结构(使用 xCode 12):

| Root Project folder/

  • Source/ // 源文件夹
  • Example/ // 在其中创建一个 xcodeproj
  • Tests/ // 你的测试文件 ~
  • YourPackage.xcworkspace
    • 添加root folder其中以能够访问您的包目标
    • 添加您的示例项目(并将您的包添加到其依赖项中)
    • 最后创建一个新方案,您可以在其中选择包的测试目标

现在,您已准备好与示例和测试并行开发您的包。

请记住,Swift 包管理器当前 (12/2020) 没有仅在一个平台上构建的参数。

希望它足够清楚。