运行 使用 xcodebuild 测试 Swift 包:错误测试必须在具体设备上 运行
Running tests for Swift package using xcodebuild: Error tests must be run on a concrete device
我正在尝试 运行 测试我的 Swift 包(由 Package.swift
定义)使用 xcodebuild
:
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 构建/测试)。我试过 iphoneos
iphonesimulator
、iphoneos15.0
、iphonesimulator15.0
、iphonesimulator14.5
、iphoneos14.5
作为 sdk。 (Xcode 12 和 Xcode 13 测试版,使用 xcode-select
)
感谢好心的陌生人的支持,我确实设法弄明白了:有两种方法。
主要解决办法是用-destination
代替-sdk
。好的,_dump:
Swift Xcode 工作区内的包 (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
获取目标列表。
- 我通过 仅 选择
platform
和 name
属性,而不指定 OS
或 `ID 来实现它。这很好,因为 CI 系统可能会用不同的 OS 来纠正不同的 Xcode,尽管你可能更愿意指定它。
- 您需要正确格式化目的地,
xcodebuild
将它们打印在 json 中,但您应该以逗号分隔并以等号分隔它们。
Swift 没有 Xcode 工作区的程序包
如果您没有工作空间,您可以:
- 运行
xcodebuild -list
- 选择最有意义的方案(可能是说
your-package-name-is-here-Package
的方案)
- 运行:
xcodebuild -scheme SchemeName -destination 'platform=iOS Simulator,name=iPhone 12' test
- 警告: 实际上请确保您不在同一目录中有工作区。 (即不包含您的 Swift 包的一个,因为 Xcode 会混淆。)如果它看到一个工作区,它 不会 检测到自动生成的 Xcode方案基于当前目录下的Package.swift。
我正在尝试 运行 测试我的 Swift 包(由 Package.swift
定义)使用 xcodebuild
:
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 构建/测试)。我试过 iphoneos
iphonesimulator
、iphoneos15.0
、iphonesimulator15.0
、iphonesimulator14.5
、iphoneos14.5
作为 sdk。 (Xcode 12 和 Xcode 13 测试版,使用 xcode-select
)
感谢好心的陌生人的支持,我确实设法弄明白了:有两种方法。
主要解决办法是用-destination
代替-sdk
。好的,_dump:
Swift Xcode 工作区内的包 (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
获取 - 使用的目的地是
platform=iOS Simulator,name=iPhone 12
。您可以从包含 Xcode 项目、工作区或包的目录中的xcodebuild -workspace ./WorkspaceName.xcworkspace -scheme SchemeName -showdestinations
获取目标列表。 - 我通过 仅 选择
platform
和name
属性,而不指定OS
或 `ID 来实现它。这很好,因为 CI 系统可能会用不同的 OS 来纠正不同的 Xcode,尽管你可能更愿意指定它。 - 您需要正确格式化目的地,
xcodebuild
将它们打印在 json 中,但您应该以逗号分隔并以等号分隔它们。
SchemeName
Swift 没有 Xcode 工作区的程序包
如果您没有工作空间,您可以:
- 运行
xcodebuild -list
- 选择最有意义的方案(可能是说
your-package-name-is-here-Package
的方案) - 运行:
xcodebuild -scheme SchemeName -destination 'platform=iOS Simulator,name=iPhone 12' test
- 警告: 实际上请确保您不在同一目录中有工作区。 (即不包含您的 Swift 包的一个,因为 Xcode 会混淆。)如果它看到一个工作区,它 不会 检测到自动生成的 Xcode方案基于当前目录下的Package.swift。