The following describes the arrangement so that I don't forget what I have done when it is time to start another project. I store almost no settings in the Build panes, but instead rely on Xcode Configuration files. I do this for two reasons: first (probably purely psychological), I feel more comfortable that the settings are not going to get lost when I check them into my Subversion repository as separate files than as part of the project; and second, this allows me the freedom to twiddle settings in the build panes freely and if I get totally muck up the build, I can simply delete all the settings in the build panes to revert to a working configuration. This is particularly useful when debugging the Tests code, as I can use the build panes to enable the debugging information while debugging and then delete the settings after I've got the problem solved.
Configurations
Shared settings are kept in a Shared configuration file.
I have 4 Configurations that establish the Project level settings.
- Development: the configuration for debugging
- Testing: the configuration for running tests
- Beta: the configuration for building a beta version
- Distribution: the configuration for building the final version
Targets
I have 5 Targets.
- iSplit: the primary target which builds the app (no configuration file)
- Unit Tests: the unit tests for iSplit
- iSplit Tests: the application tests for iSplit
- iSplit Testing: the application into which the application tests are injected
- Documentation: uses doxygen to generate documentation (and install it as a docset)
I have the following three configurations:
- Development - where I build the debug version of the app. This version of the build has no optimization and as many warnings as I can turn on without hitting land-mines in the framework files.
- Testing - where I run unit tests and collect coverage data for the app. This is as close to the Distribution app as I can manage to make it while still having it run on my iPod (with the Developer certificate) and collecting coverage data.
- Distribution - where I build the final version of the app to be distributed.
Schemes
I typically use the following schemes in Xcode as part of the build process.
- iSplit - Run: Development Configuration, used for debugging
- iSplit - Test: Testing Configuration, runs the unit tests with coverage data
- iSplit Testing - Run: Testing Configuration, runs integration tests with coverage data
- iSplit - Profile: Distribution Configuration, runs application tests (with UIAutomation)
- iSplit - Analyze: Distribution Configuration
- iSplit - Archive: Distribution Configuration
Doxygen
The doxygen configuration file I use for doxygen runs.
Scripts
I use the following scripts in the build process.
- version will update the build number each time I build a distribution or beta version of iSplit.
- doxygen will create a docset from my source and install it.
- doxyfilter filters some of my preprocessor macros to convert them into doxygen comments before running doxygen.