【问题标题】:Can I specify a platform target when running swift test from the CLI?从 CLI 运行 swift 测试时,我可以指定平台目标吗?
【发布时间】:2020-11-09 20:07:27
【问题描述】:

我的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"])
  ]
)

当我运行 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.

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

【问题讨论】:

    标签: ios unit-testing swift-package-manager


    【解决方案1】:

    诀窍是:

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

    • 虽然它实际上是用于指定 what minimum version 的行,但您的产品将支持此平台

    不是说:only compile for .iOS X.y,而是.iOS min version is X.y

    SPM 是Swift first 的工具,因此想为all~ platforms 构建,目前无法使用~system only 参数~(我知道我也很难过)。


    现在,如果您想拥有一个仅适用于 iOS 的软件包,它仍然是可能的,但 you'll have to compil through xcodebuild commands(并且您不需要 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'


    SPM documentation usage about "Depending on Apple modules"


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

    | Root Project folder/

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

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

    请记住,目前(2020 年 12 月)的 Swift 包管理器没有参数只能在一个平台上构建。

    希望它足够清楚。

    【讨论】:

    • 感谢platforms 并不意味着要支持的平台列表...
    • 是的,我同意你的观点,而且不仅仅是一个无赖,这是一个误导性的事情。有多少人真的以同样的方式假设:/(顺便说一句,如果它回答了这个问题,请随意标记它完成 o /)
    猜你喜欢
    • 1970-01-01
    • 2016-04-20
    • 1970-01-01
    • 2015-06-22
    • 2011-12-18
    • 1970-01-01
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    相关资源
    最近更新 更多