【问题标题】:Running tests for Swift package using xcodebuild: Error tests must be run on a concrete device使用 xcodebuild 为 Swift 包运行测试:错误测试必须在具体设备上运行
【发布时间】:2021-06-17 23:38:00
【问题描述】:

我正在尝试使用 xcodebuild 为我的 Swift 包(由 Package.swift 定义)运行测试:

xcodebuild -scheme "package-name-Package" -configuration "Debug" -sdk "iphonesimulator14.5" -arch "x86_64" test`

不幸的是,我不断收到此错误:

xcodebuild: error: Failed to build workspace package-name with scheme package-name-Package.
    Reason: Cannot test target “Target1Tests” on “Any iOS Simulator Device”: Tests must be run on a concrete device
Cannot test target “Target2Tests” on “Any iOS Simulator Device”: Tests must be run on a concrete device
Cannot test target “Target3Tests” on “Any iOS Simulator Device”: Tests must be run on a concrete device

我不确定要使用什么 -sdk。我已经阅读了xcodebuild -showsdks 的输出并进行了适当的选择(我需要为 iOS 构建/测试)。我试过iphoneosiphonesimulatoriphoneos15.0iphonesimulator15.0iphonesimulator14.5iphoneos14.5作为sdk。 (Xcode 12 和 Xcode 13 测试版,使用 xcode-select

【问题讨论】:

    标签: xcode xcodebuild


    【解决方案1】:

    感谢陌生人的支持,我确实设法弄清楚了:有两种方法。

    主要的解决方案是使用-destination 而不是-sdk。好的,?_dump:

    Xcode 工作区中的

    Swift 包

    (WorkspaceName.xcworkspace)

    我的首选方案:我最终将 Swift 包放在 Xcode 工作区中。我的意思是将包含 Swift 包(以及工作区)的根目录拖到 Xcode 项目导航器/工作区中。

    优点是每次启动 Xcode 时都不会生成 Xcode 方案,而是与工作区相关联。这意味着每次启动 Xcode 时都不会重置您的修改(例如添加环境变量)。

    xcodebuild -workspace ./WorkspaceName.xcworkspace -scheme SchemeName -destination 'platform=iOS Simulator,name=iPhone 12' test
    

    注意事项:

    • 如果要构建项目,只需设置正确的方案并将test替换为build
    • Here 是 Xcode 13 Beta 上可用的目的地列表。一个例子是:{ platform:iOS Simulator, id:FD90A730-A1D5-4BBC-B61A-0324400EE9EA, OS:15.0, name:iPhone 12 }
    • 您可以从 Xcode 工作区或通过运行 xcodebuild -list 获得 SchemeName
    • 使用的目的地是platform=iOS Simulator,name=iPhone 12。您可以在包含 Xcode 项目、工作区或包的目录中从 xcodebuild -workspace ./WorkspaceName.xcworkspace -scheme SchemeName -showdestinations 获取目标列表。
    • 我通过只是选择platformname 属性来使其工作,而不指定OS 或`ID。这很好,因为 CI 系统可能会针对不同操作系统的不同 Xcode,尽管您可能更愿意指定它。
    • 您需要正确格式化目标,xcodebuild 以 json 格式打印出来,但您应该以逗号分隔并用等号提供它们。

    没有 Xcode 工作区的 Swift 包

    如果你没有工作区,你可以这样做:

    • 运行xcodebuild -list
    • 选择最有意义的方案(可能是your-package-name-is-here-Package 的方案)
    • 运行:
    xcodebuild -scheme SchemeName -destination 'platform=iOS Simulator,name=iPhone 12' test
    
    • 警告:实际上请确保您在同一目录中拥有工作区。 (即不包含您的 Swift 包的包,因为 Xcode 会混淆。)如果它看到一个工作区,它不会检测基于当前目录中的 Package.swift 自动生成的 Xcode 方案.

    【讨论】:

    • 我正在对在模拟器上运行 SPM 测试失去所有希望...但是您的回答已经挽救了一天!谢谢?
    • 感谢@spacecash21 告诉我,我没有收到通知,除非你标记我的名字。 ?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-13
    • 2019-04-03
    • 1970-01-01
    • 2016-02-15
    • 1970-01-01
    • 2016-03-20
    相关资源
    最近更新 更多