Pre-processed, embedded Info.plist files are not updated anymore
||Product Version:||8.3 beta 2 (8W120l)|
We have a target that builds a command line binary which has an embedded Info.plist. This Info.plist is pre-processed to add some versioning to the Info.plist. The Xcode build settings are roughly as follows:
CREATE_INFOPLIST_SECTION_IN_BINARY = YES
INFOPLIST_FILE = src/...some-path.../Info.plist
INFOPLIST_OUTPUT_FORMAT = binary
INFOPLIST_PREFIX_HEADER = $(BUILT_PRODUCTS_DIR)/Info.plist.h
INFOPLIST_PREPROCESS = YES
Everything works as expected the first time the binary is built. However, when then content of the file Info.plist.h is changed, which also causes its last modification date timestamp to be updated, then Info.plist is *NOT* re-processed. Instead the version found in Derived Sources (Preprocessed-Info.plist) is used which still contains the old values. Only a clean build will cause the Info.plist to be re-processed.
Not only is that behavior a bug, I might be wrong but I think in previous Xcode versions this used to be working correctly (don't take my word for it, though)
Steps to Reproduce:
See above. Just make a very simple command line target with an embedded Info.plist; "Hello World" should be sufficient.
Every time a built is made Xcode compare the last modification date of the already pre-processed Info.plist with the last modification date of the pre-process prefix header. If the pre-fix header has a newer date, the cached pre-processed Info.plist is deleted and re-created just like in case of a clean build.
Once it has been pre-processed, it's never pre-processed again until you build clean.
8.3 beta 2 (8W120l)
This problem is also reproducible with Xcode 8.2.*, so it's not a new Xcode 8.3 bug!
Reports posted here will not necessarily be seen by Apple.
All problems should be submitted at bugreport.apple.com before they are posted here.
Please only post information for Radars that you have filed yourself, and please do
not include Apple confidential information in your posts. Thank you!