Targets can depend on other targets so code builds in the right order.

Build a target list

includeTests
target_dependencies.swift
Replay: real traced execution (multi-file project)
let includeTests = true
let coreTarget = "Core"
let appTarget = "App"
var targets = [coreTarget, appTarget]

if includeTests {
    targets.append("AppTests")
}

let buildOrder = targets.joined(separator: " -> ")

print(buildOrder)
let includeTests = false
let coreTarget = "Core"
let appTarget = "App"
var targets = [coreTarget, appTarget]

if includeTests {
    targets.append("AppTests")
}

let buildOrder = targets.joined(separator: " -> ")

print(buildOrder)
  1. includeTests ← true, coreTarget ← Core, appTarget ← App, targets ← ["Core", "App"]

    1let includeTests→ true = true  //@includeTests=false2let coreTarget→ Core = "Core"3let appTarget→ App = "App"4var targets→ ["Core", "App"] = [coreTargetCore, appTargetApp]
  2. if includeTests

    6if includeTeststrue {7    targets["Core", "App"].append("AppTests")8}
  3. buildOrder ← Core -> App -> AppTests

    10let buildOrder→ Core -> App -> AppTests = targets["Core", "App", "AppTests"].joined(separator: " -> ")1112print(buildOrderCore -> App -> AppTests)
    outputCore -> App -> AppTests
  1. includeTests ← false, coreTarget ← Core, appTarget ← App, targets ← ["Core", "App"]

    1let includeTests→ false = false2let coreTarget→ Core = "Core"3let appTarget→ App = "App"4var targets→ ["Core", "App"] = [coreTargetCore, appTargetApp]56if includeTests {7    targets.append("AppTests")8}910let buildOrder→ Core -> App = targets["Core", "App"].joined(separator: " -> ")1112print(buildOrderCore -> App)
    outputCore -> App
target dependency A target dependency says one target needs another target's compiled code before it can build.