我可以在命令行运行swift test时指定平台目标吗?

10

我的 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上运行测试?我能否让Swift运行iOS的测试,最好是指定一些版本目标?在CLI中使用Xcode有哪些替代方法?
1个回答

16
“诀窍是:”
  • 你认为.iOS(...)只限制编译到一个平台

  • 实际上,它是用来指定此平台将支持产品的最低版本的一行代码

它并没有说:只编译为.iOS X.y,而是.iOS的最低版本是X.y

SPM是一个以“Swift为先”的工具,因此希望构建所有平台,并且目前没有使用“仅系统参数”的方法(我知道这让我很难过)。


现在,如果您想要一个仅限于iOS的软件包,仍然是可能的,但是您需要通过xcodebuild命令进行编译(而且您不需要xcodeproj文件)。 < p > < code > // 在iOS模拟器上编译和测试 < p > < code > xcodebuild -list < p > < code > xcodebuild -scheme <scheme> -destination 'generic/platform=iOS' < p > < code > xcodebuild -scheme <scheme> -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 11' < p > < code > xcodebuild -scheme <scheme> test -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 11'

关于“依赖于苹果模块”的SPM文档使用方法


根据我的经验,我认为您可以按照以下方式设置文件夹层次结构(使用xCode 12): | 根项目文件夹/
- Source/ // 源代码文件夹 - Example/ // 在其中创建xcodeproj - Tests/ // 测试文件夹 - YourPackage.xcworkspace - 将根文件夹添加到其中以能够访问您的软件包目标 - 添加您的示例项目(并将包添加到其依赖项中) - 最后创建一个新方案,在其中选择软件包的测试目标
现在,您已经准备好与示例和测试一起开发您的包了。
请记住,Swift Package Manager目前(12/2020)没有参数仅在一个平台上构建。
希望这足够清晰。

谢谢,真遗憾“平台”并不意味着您想要支持的平台列表... - Guig
是的,我同意你的观点。这不仅仅是一个糟糕的事情,更是一件误导人的事情。有多少人会有同样的想法呢 :/ (顺便说一句,如果它回答了问题,请随时标记为完成 o/) - itMaxence

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接