Update version number in Info-AU.plist

The decimal version number in Info-AU.plist (under AudioComponents) needs to be updated as part of the build process. It should be consistent with the other places where the version number is used.

I did this with a script build phase, early in the build:

/usr/libexec/PlistBuddy -c "Set AudioComponents:0:version ${APP_VERSION_DECIMAL}" "${PROJECT_DIR}/Info-AU.plist"

As we are at it, I’d strongly suggest to make the version a variable throughout the Projucer-generated projects and templates, so it can be easily increased without the need to run Projucer from scratch (and nuke weeks of hard work).

Doesn’t a clean build fix this?

BTW Running the Projucer on a build server makes it really useful for controlling version numbers. You can do things like this in a shell script and run the Projucer as a command line app:

Get the version:
path/to/Projucer --get-version path/to/Project.jucer

Set the version:
path/to/Projucer --set-version 1.2.3 path/to/Project.jucer

Resave the project (IDE files and JuceLibraryCode etc)
path/to/Projucer --resave path/to/Project.jucer


Avoiding a re-save is the point.

It would eliminate all changes made to the project since it was initiated with Projucer. Not all projects work with the Projucer-always-in-control workflow. I have multiple projects of different origins to keep in sync. This only works with shared code that, among other things, also includes version numbers.

No. The version is a constant 65536

Currently constants are written to JuceHeader.h

namespace ProjectInfo
    const char* const  projectName    = "JuceExample";
    const char* const  versionString  = "1.0.0";
    const int          versionNumber  = 0x10000;

Since AppConfig.h is included anyway, Projucer should rather generate it more consistently like this:

namespace ProjectInfo
    const char* const  projectName    = JucePlugin_Name;
    const char* const  versionString  = JucePlugin_VersionString;
    const int          versionNumber  = JucePlugin_VersionCode;

This would be much cleaner, because in the protected user-defined code section of AppConfig.h (great to have!), the developer can add external includes or other logic that provide version numbers, names, channel configs, etc. This would be a proper way of maintaining versions w/o rebuilding the Projucer project from scratch.