The solution was to define new targets, with their dependencies and commands, in a macx scope (the TARGET name is HiView):
<pre><code>
macx {
# Application signature (4 characters).
HiView_SIGNATURE = HiHV
# Adds the Mac icons to the application bundle.
ICON = Images/HiView_Icons.icns
Info_plist.target = Info.plist
Info_plist.depends = Info.plist.template $${TARGET}.app/Contents/Info.plist
Info_plist.commands = @$(DEL_FILE) $${TARGET}.app/Contents/Info.plist$$escape_expand(\n\t) \
@$(SED) -e "s,@EXECUTABLE@,$$TARGET,g" -e "s,@VERSION@,$$MODULE_VERSION,g" -e "s,@TYPEINFO@,$$HiView_SIGNATURE,g" -e "s,@ICON@,$$basename(ICON),g" Info.plist.template > $${TARGET}.app/Contents/Info.plist
QMAKE_EXTRA_TARGETS += Info_plist
PRE_TARGETDEPS += $$Info_plist.target
PkgInfo.target = PkgInfo
PkgInfo.depends = $${TARGET}.app/Contents/PkgInfo
PkgInfo.commands = @$(DEL_FILE) $$PkgInfo.depends$$escape_expand(\n\t) \
@echo "APPL$$HiView_SIGNATURE" > $$PkgInfo.depends
QMAKE_EXTRA_TARGETS += PkgInfo
PRE_TARGETDEPS += $$PkgInfo.target
}
</code></pre>
The builtin targets for the bundle Contents files are still present, but the additional targets replace the results of the builtin targets with files having the desired contents. The bundle's Contents/Info.plist deleted and then regenerated from an Info.plist.template file; and the Contents/PkgInfo is deleted and rewritten with appropriate 8 characters. The new target commands will always be run because the they are pseudo targets (no files are created), and the targets are placed at the head of the $(TARGET) target dependency list using PRE_TARGETDEPS.
This solution is something of a hack. but it works in a way that provides the application developer with complete control over specifying the contents of the bundle's key Contents/Info.plist file and sibling PkgInfo file. This solution could easily be extended to manage additional contents of the application bundle.