How builds are configured.
WHAT A SCHEME DEFINES
Which targets to build Which configuration to use for each action Environment variables and launch arguments Which tests to run
WHAT THE ACTIONS ARE
Build, run, test, profile, analyse, archive.
WHAT ARCHIVE PRODUCES
A build ready for distribution.
WHAT TO KNOW ABOUT SCHEMES
They can be shared or personal, and only shared ones are in version control.
WHAT TO DO
Mark schemes as shared, so everyone and the build server use the same.
WHAT INCREMENTAL BUILDS DO
Rebuild only what changed.
WHAT DEFEATS THEM
Build phases running scripts unconditionally Generated files with changing timestamps Settings that vary
WHAT TO DO ABOUT SLOW BUILDS
Measure where time goes, using the build timing report Reduce dependencies between targets Avoid expensive type inference in Swift
WHY THAT LAST POINT
Complex expressions can take disproportionate time to compile.
WHAT TO ADD
Explicit types where compilation is slow.
WHAT TO CLEAN
Rarely. Cleaning routinely hides problems rather than solving them.