Perform more rigoruous checks on how your Xcode project is changing.
- output fully-resolved build settings for each scheme/configuration combination to .lock files, to track in git
Many ways exist to combine build settings in Xcode, whether through inheritance from Xcode defaults, project/target/configuration level settings, composing xcconfigs using
#include, or any combination thereof. With such a complex system of settings, making isolated changes without unintended side effects can prove challenging. The test shows a simple example of how a small change (simply changing
macosx10.12) can result in significant changes to many build settings (see
baseline.diff for the resultant changes).
xcbs will output the full build setting environment for each scheme/configuration combination, and write each of those environments to a lock file. If you check these files into source control and run
xcbs regularly, you can see exactly how your build environment will change for seemingly innocuous–or even accidental–changes to your defined build settings.
What about user paths?
Because many build settings contain paths that only make sense on the machine running the build, paths are replaced with the most granular build setting possible. This keeps the files in
.xcbs/ from changing for each developer on your team. See lib/settings-to-unexpand to see the build settings whose values are replaced everywhere as they are written to file. Note: order matters in this list!
If you modify this list, then you need to do the following:
xcbson the test xcodeproj, check in the lock files
- run test/test.sh, overwrite the baseline diff with the computed diff, check in
brew tap tworingsoft/formulae brew install xcbs
brew install tworingsoft/xcbs
You can run
xcbs </path/to/.../your.xcodeproj> any time. You can even embed it in a pre-commit hook, as can be seen in the example pre-commit.sample.
xcbs returns exit status 66 if changes were detected, which will abort commits that leave behind changes to lockfiles.
Issues and pull requests are welcome!
If this project helped you, please consider leaving a tip
Do you need help with a project? I'm currently available for hire or contract..