diff --git a/Sources/XcodeGenKit/SchemeGenerator.swift b/Sources/XcodeGenKit/SchemeGenerator.swift index e379e799..db3114d8 100644 --- a/Sources/XcodeGenKit/SchemeGenerator.swift +++ b/Sources/XcodeGenKit/SchemeGenerator.swift @@ -286,10 +286,12 @@ public class SchemeGenerator { let testPlans = scheme.test?.testPlans.enumerated().map { index, testPlan in XCScheme.TestPlanReference(reference: "container:\(testPlan.path)", default: defaultTestPlanIndex == index) } ?? [] + let testBuildableEntries = buildActionEntries.filter({ $0.buildFor.contains(.testing) }) + testBuildTargetEntries + let testMacroExpansionBuildableRef = testBuildableEntries.map(\.buildableReference).contains(buildableReference) ? buildableReference : testBuildableEntries.first?.buildableReference let testAction = XCScheme.TestAction( buildConfiguration: scheme.test?.config ?? defaultDebugConfig.name, - macroExpansion: buildableReference, + macroExpansion: testMacroExpansionBuildableRef, testables: testables, testPlans: testPlans.isEmpty ? nil : testPlans, preActions: scheme.test?.preActions.map(getExecutionAction) ?? [], diff --git a/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift b/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift index b5f392d3..31af6747 100644 --- a/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift +++ b/Tests/XcodeGenKitTests/SchemeGeneratorTests.swift @@ -479,6 +479,46 @@ class SchemeGeneratorTests: XCTestCase { try expect(xcscheme.launchAction?.macroExpansion?.buildableName) == "MyApp.app" } + $0.it("generates scheme with macroExpansion from tests when the main target is not part of the scheme") { + let app = Target( + name: "MyApp", + type: .application, + platform: .iOS, + dependencies: [] + ) + + let mockApp = Target( + name: "MockApp", + type: .application, + platform: .iOS, + dependencies: [] + ) + + let testBundle = Target( + name: "TestBundle", + type: .unitTestBundle, + platform: .iOS + ) + let appTarget = Scheme.BuildTarget(target: .local(app.name), buildTypes: [.running]) + let mockAppTarget = Scheme.BuildTarget(target: .local(mockApp.name), buildTypes: [.testing]) + let testBundleTarget = Scheme.BuildTarget(target: .local(testBundle.name), buildTypes: [.testing]) + + let scheme = Scheme( + name: "TestScheme", + build: Scheme.Build(targets: [appTarget, mockAppTarget, testBundleTarget]), + run: Scheme.Run(config: "Debug", macroExpansion: "MyApp") + ) + let project = Project( + name: "test", + targets: [app, mockApp, testBundle], + schemes: [scheme] + ) + let xcodeProject = try project.generateXcodeProject() + + let xcscheme = try unwrap(xcodeProject.sharedData?.schemes.first) + try expect(xcscheme.testAction?.macroExpansion?.buildableName) == "MockApp.app" + } + $0.it("generates scheme with test target of local swift package") { let targetScheme = TargetScheme( testTargets: [Scheme.Test.TestTarget(targetReference: TestableTargetReference(name: "XcodeGenKitTests", location: .package("XcodeGen")))])