Up until yesterday, the MSBuild targets had the following logic:
<Target Name="_CleanDeviceSpecificOutput" Condition="'$(_CanOutputAppBundle)' == 'true'">
<RemoveDir SessionId="$(BuildSessionId)" Condition="'$(IsMacEnabled)' == 'true'" Directories="$(IntermediateOutputPath)build-*;$(OutputPath)build-*" />
The problem with this logic is that RemoveDir does not interpret wildcards.
You might think that the solution would be to do:
<_DeviceSpecificBuildDirs Include="$(IntermediateOutputPath)build-*" />
<_DeviceSpecificBuildDirs Include="$(OutputPath)build-*" />
buuuuuut, you'd be wrong because while the Include parameter above normally expands, it only matches *files* and not directories. Since those wildcards do not match any files, they evaluate to nothingness.
Sebastien suggested the idea that perhaps what should be done is that these build-* directories should be:
This way, the _CleanDeviceSpecificOutput target could simply RemoveDir $(IntermediateOutputPath)device-builds and $(OutputPath)device-builds