This is now fixed on the latest develop branch. The post-build script is now also executed for the aggregate target.
Xcode conveniently passes the target name that is currently processing to the script via the TARGET_NAME environment variable. You can then have Xcode only do specific things for specific targets - for example, only when the aggregate target finishes.
TARGET_NAME unfortunately includes the project name as well, so the same build script won’t work between different projects. The project name can be excluded with a bit of sed magic:
TARGET=`echo $TARGET_NAME | sed 's/^.*(\(.*\)).*$/\1/g'`
The following screenshot shows a plug-in project where the script is only run at the very end (i.e. when the aggregate target has finished). The script will work regardless of the project name.

And here again so you can copy&paste:
TARGET=`echo $TARGET_NAME | sed 's/^.*(\(.*\)).*$/\1/g'`
if [ $TARGET = App -o $TARGET = All ]; then
echo "Do your stuff here!"
fi
