同一SPM仓库中多Target的独立构建与测试问题咨询
如何在多Target的Swift Package中单独测试单个Target
问题概述
当Swift Package包含多个Target时,Xcode自动生成的单个Target对应的scheme默认不支持test操作,执行xcodebuild build test会报错:Scheme [TargetName] is not currently configured for the test action,只能通过Package scheme一次性测试所有Target,无法单独测试单个Target。
解决方案
方案1:手动创建支持测试的Target Scheme
这是目前可行的方案,步骤如下:
- 在Package根目录下创建路径:
.swiftpm/workspace/xcshareddata/xcschemes/ - 为每个需要单独测试的Target创建对应的
.xcscheme文件,以MultiPackage1为例,scheme文件需关联对应的测试目标(示例XML配置如下):<?xml version="1.0" encoding="UTF-8"?> <Scheme LastUpgradeVersion = "1400" version = "1.3"> <BuildAction parallelizeBuildables = "YES" buildImplicitDependencies = "YES"> <BuildActionEntries> <BuildActionEntry buildForTesting = "YES" buildForRunning = "YES" buildForProfiling = "YES" buildForArchiving = "YES" buildForAnalyzing = "YES"> <BuildableReference BuildableIdentifier = "primary" BlueprintIdentifier = "MultiPackage1" BuildableName = "MultiPackage1" BlueprintName = "MultiPackage1" ReferencedContainer = "container:MultiPackage.swiftpm"> </BuildableReference> </BuildActionEntry> <BuildActionEntry buildForTesting = "YES" buildForRunning = "NO" buildForProfiling = "NO" buildForArchiving = "NO" buildForAnalyzing = "NO"> <BuildableReference BuildableIdentifier = "primary" BlueprintIdentifier = "MultiPackage1Tests" BuildableName = "MultiPackage1Tests.xctest" BlueprintName = "MultiPackage1Tests" ReferencedContainer = "container:MultiPackage.swiftpm"> </BuildableReference> </BuildActionEntry> </BuildActionEntries> </BuildAction> <TestAction buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" shouldUseLaunchSchemeArgsEnv = "YES"> <Testables> <TestableReference skipped = "NO"> <BuildableReference BuildableIdentifier = "primary" BlueprintIdentifier = "MultiPackage1Tests" BuildableName = "MultiPackage1Tests.xctest" BlueprintName = "MultiPackage1Tests" ReferencedContainer = "container:MultiPackage.swiftpm"> </BuildableReference> </TestableReference> </Testables> </TestAction> <LaunchAction buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" launchStyle = "0" useCustomWorkingDirectory = "NO" ignoresPersistentStateOnLaunch = "NO" debugDocumentVersioning = "YES" debugServiceExtension = "internal" allowLocationSimulation = "YES"> <BuildableProductRunnable runnableDebuggingMode = "0"> <BuildableReference BuildableIdentifier = "primary" BlueprintIdentifier = "MultiPackage1" BuildableName = "MultiPackage1" BlueprintName = "MultiPackage1" ReferencedContainer = "container:MultiPackage.swiftpm"> </BuildableReference> </BuildableProductRunnable> </LaunchAction> <ProfileAction buildConfiguration = "Release" shouldUseLaunchSchemeArgsEnv = "YES" savedToolIdentifier = "" useCustomWorkingDirectory = "NO" debugDocumentVersioning = "YES"> <BuildableProductRunnable runnableDebuggingMode = "0"> <BuildableReference BuildableIdentifier = "primary" BlueprintIdentifier = "MultiPackage1" BuildableName = "MultiPackage1" BlueprintName = "MultiPackage1" ReferencedContainer = "container:MultiPackage.swiftpm"> </BuildableReference> </BuildableProductRunnable> </ProfileAction> <AnalyzeAction buildConfiguration = "Debug"> </AnalyzeAction> <ArchiveAction buildConfiguration = "Release" revealArchiveInOrganizer = "YES"> </ArchiveAction> </Scheme> - 将文件命名为
MultiPackage1.xcscheme,放入上述创建的目录中 - 之后即可通过命令单独测试该Target:
xcodebuild -scheme MultiPackage1 -destination 'platform=iOS Simulator,id=4BE845BA-AE9E-4F53-B2FB-A5415C89950B' build test
方案2:通过SPM命令直接指定测试目标
无需修改scheme,直接使用swift test命令并指定测试目标,更适合CI自动化场景:
swift test --target MultiPackage1Tests
如果需要指定iOS模拟器环境,添加--destination参数即可:
swift test --target MultiPackage1Tests --destination 'platform=iOS Simulator,id=4BE845BA-AE9E-4F53-B2FB-A5415C89950B'
该命令会自动构建对应的主Target和测试Target,并执行测试。
说明
Xcode自动生成的单个Target scheme默认未关联对应的测试Target,因此无法直接执行test操作。手动创建scheme或使用swift test --target命令均可解决该问题,其中后者无需额外配置,更适合自动化流程。
内容的提问来源于stack exchange,提问作者CloudBalancing
相关产品推荐
相关产品推荐

