@@ -249,7 +249,24 @@ public class SchemeGenerator {
249249 let testPlans = scheme. test? . testPlans. enumerated ( ) . map { index, testPlan in
250250 XCScheme . TestPlanReference ( reference: " container: \( testPlan. path) " , default: defaultTestPlanIndex == index)
251251 } ?? [ ]
252-
252+
253+ func getAdditionalOptions( _ options: AdditionalOptions ) -> [ XCScheme . AdditionalOption ] {
254+ var additionalOptions : [ XCScheme . AdditionalOption ] = [ ]
255+ if options. mallocScribble {
256+ additionalOptions. append ( XCScheme . AdditionalOption ( key: " MallocScribble " , value: " " , isEnabled: true ) )
257+ }
258+ if options. mallocGuardEdges {
259+ additionalOptions. append ( XCScheme . AdditionalOption ( key: " MallocGuardEdges " , value: " " , isEnabled: true ) )
260+ }
261+ if options. guardMalloc {
262+ additionalOptions. append ( XCScheme . AdditionalOption ( key: " DYLD_INSERT_LIBRARIES " , value: " /usr/lib/libgmalloc.dylib " , isEnabled: true ) )
263+ }
264+ if options. zombieObjects {
265+ additionalOptions. append ( XCScheme . AdditionalOption ( key: " NSZombieEnabled " , value: " YES " , isEnabled: true ) )
266+ }
267+ return additionalOptions
268+ }
269+
253270 let testAction = XCScheme . TestAction (
254271 buildConfiguration: scheme. test? . config ?? defaultDebugConfig. name,
255272 macroExpansion: buildableReference,
@@ -264,6 +281,7 @@ public class SchemeGenerator {
264281 codeCoverageTargets: coverageBuildableTargets,
265282 onlyGenerateCoverageForSpecifiedTargets: !coverageBuildableTargets. isEmpty,
266283 disableMainThreadChecker: scheme. test? . disableMainThreadChecker ?? Scheme . Test. disableMainThreadCheckerDefault,
284+ additionalOptions: scheme. test? . additionalOptions. map ( getAdditionalOptions) ?? [ ] ,
267285 commandlineArguments: testCommandLineArgs,
268286 environmentVariables: testVariables,
269287 language: scheme. test? . language,
@@ -310,6 +328,7 @@ public class SchemeGenerator {
310328 locationScenarioReference: locationScenarioReference,
311329 disableMainThreadChecker: scheme. run? . disableMainThreadChecker ?? Scheme . Run. disableMainThreadCheckerDefault,
312330 stopOnEveryMainThreadCheckerIssue: scheme. run? . stopOnEveryMainThreadCheckerIssue ?? Scheme . Run. stopOnEveryMainThreadCheckerIssueDefault,
331+ additionalOptions: scheme. run? . additionalOptions. map ( getAdditionalOptions) ?? [ ] ,
313332 commandlineArguments: launchCommandLineArgs,
314333 environmentVariables: launchVariables,
315334 language: scheme. run? . language,
@@ -433,6 +452,7 @@ extension Scheme {
433452 environmentVariables: targetScheme. environmentVariables,
434453 disableMainThreadChecker: targetScheme. disableMainThreadChecker,
435454 stopOnEveryMainThreadCheckerIssue: targetScheme. stopOnEveryMainThreadCheckerIssue,
455+ additionalOptions: targetScheme. additionalOptions,
436456 language: targetScheme. language,
437457 region: targetScheme. region,
438458 storeKitConfiguration: targetScheme. storeKitConfiguration
@@ -442,6 +462,7 @@ extension Scheme {
442462 gatherCoverageData: targetScheme. gatherCoverageData,
443463 coverageTargets: targetScheme. coverageTargets,
444464 disableMainThreadChecker: targetScheme. disableMainThreadChecker,
465+ additionalOptions: targetScheme. additionalOptions,
445466 commandLineArguments: targetScheme. commandLineArguments,
446467 targets: targetScheme. testTargets,
447468 environmentVariables: targetScheme. environmentVariables,
0 commit comments