-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Description
Describe the bug
Initial builds with Xcode 16 are significantly (many minutes) slower than with Xcode 15. This happens for a new clone and any time an existing clone is reset using Product->Clean Build folder.
Configuration
Build times reported in this Issue were obtained with
- LoopWorkspace
dev, commit a32a19d (3.5.0) - Apple M1 MacBook Pro
- Xcode 16.0
- macOS 14.6
Previous Information
The initial discussion of this topic is on zulipchat:
The gist is that when this parameter, ENABLE_MODULE_VERIFIER is set to YES in the project.pbxproj file, the initial build takes a long time with Xcode 16.
Additional Information
There are 19 submodules used by LoopWorkspace 3.4.1 and 3.5.0.
Of those, only 6 submodules have the ENABLE_MODULE_VERIFIER set in the Debug and Release sections and in all cases, it is set to YES. The number of entries in the project.pbxproj file per submodule is shown in the table below.
| Repo | Instances |
|---|---|
| AmplitudeService | 4 |
| LibreTransmitter | 4 |
| LoopKit | 7 |
| MixpanelService | 6 |
| OmniBLE | 2 |
| OmniKit | 6 |
Suggested Fix
There are 2 suggestions for fixing this problem.
- Change the instances of that configuration from
YESto a parameter that defaults toNObut could be modified to change the value without modifying the submodules again. - Remove the lines with that parameter in the
project.pbxprojfiles completely
The rationale for Option 1 is that someone turned these on and there may be a reason why this was done.
The rationale for Option 2 is to be consistent with all the other submodules.
Both these options were tested and the improved timing is identical for either choice so long as the 12 instances of ENABLE_MODULE_VERIFIER = YES that matter are modified.
Timing Data
The timing for the build is taken from the Xcode tool.
- All tests with Xcode 16.0
- All initial builds preceded by Clean Build Folder, close workspace, open workspace
- Use the menu sequence: Product, Perform Action, Build with Timing Summary
- All times are reported in seconds
- View the Build Timing Summary display
Report build time in seconds for first and subsequent builds in the table below. Multiple tests of a given configuration gave consistent results.
| Config | First Build | Next Build |
|---|---|---|
| dev | 490 | 20 |
| modified | 140 | 20 |
Timing Display for Initial Build: dev
The graphic below shows the timing display associated with the ENABLE_MODULE_VERIFIER = YES parameter for the initial build for Loop 3.4.1 or 3.5.0.
The items in the graphic above that begin with "Verify" are shown in the list below.
- LoopKit
- LoopKit-watchOS
- LoopKitUI
- AmplitudeService
- AmplitudeServiceUIKit
- MixpanelService
- MixpanelServiceUI
- OmniKit
- OmniKitUI
- OmniBLE
- LibreTransmitter
- LibreTransmitterUI
Timing Display for Initial Build: fix applied
The graphic below shows the timing display for the initial build when the submodules have the suggested fix applied.

