More features, more code, longer compile time. Probably you heard about some tips and tricks how to improve it. Do you think that this code improvement makes your compilation faster? It is a good idea to have a specific determinant before doing it. The best approach will be measuring the compile time before particular improvement and measure it after that.
Using Report navigator
The simplest way is to open
Report navigator in Xcode (
⌘+9 shortcut key), select a particular build and look at the time next to
Compile Swift source files phase.
Using a script
Another idea is using a script. Gather the time before building and after it, calculate the difference and voilà! Now you know what is your compile time.
Script Phase before
Compile Sources phase:
date_now_in_miliseconds=$(python -c 'from time import time; print int(round(time() * 1000))')
echo $date_now_in_miliseconds > "measured_compile_time.log"
Script Phase after
Compile Sources phase:
finish_time_in_miliseconds=$(python -c 'from time import time; print int(round(time() * 1000))')
echo "[Difference] $difference [ms]" > "measured_compile_time.log"
python -c 'from time import time; print int(round(time() * 1000))' is used to get a value in miliseconds (you can use also simple
date +%s to receive that value in seconds).
From that moment you can check your compile time just by looking at the value in
compile_time.log file. Remember about adding this
.gitignore in your project. Thanks to it you can easily measure different places (or more phases at once) or even store these values and use it in other places (for example: in charts).
More robust approach is using Build Time Analyzer for Xcode. You can look at the compile time of a specific class (or even the particular method) using GUI.
Follow the steps included in the
README.md to use this tool (mostly it is about adding
OTHER_SWIFT_FLAGS = "-Xfrontend -debug-time-function-bodies" in
.pbxproj file). After that you can visually notice which particular method has the longest compile time. Now you know which places need more love from your side.
The example used in this post can be found here: Measuring Compile Time Example.
- Before doing any improvement - measure the impact!
- Use a
Report navigator / simple script / Build Time Analyzer to measure compile time.
- After measuring the compile time, improve the code / enviroment and measure it once again. Now you can be sure what kind of impact has the implemented change.