#!/bin/sh # Force Bourne shell in case tcsh is default. # # Author: Phil Hess # Revisions: 2007-03-17 - initial release. # 2007-04-09 - added support for .icns file. # exename=$1 appname=$2 if [ "$appname" = "" ] then appname=$exename fi appfolder=$appname.app plistfile=$appfolder/Contents/Info.plist # if [ "$exename" = "" ] then echo "Usage: $0 executable_file [app_name]" echo "Creates .app bundle (folder) for specified executable file" elif ! [ -e $exename ] then echo "$exename does not exist" elif [ -e "$appfolder" ] then echo "$appfolder already exists" else echo "Creating $appfolder..." mkdir "$appfolder" mkdir "$appfolder/Contents" mkdir "$appfolder/Contents/MacOS" mkdir "$appfolder/Contents/Resources" # # Instead of copying executable into .app folder after each compile, # simply create a symbolic link to executable. # Tip: When you're ready to distribute your .app, delete the link # and copy the executable into the .app folder. ln -s ../../../$exename "$appfolder/Contents/MacOS/$exename" # # Create PkgInfo file using first 4 chars of application name. echo "APPL"${appname:0:4} >$appfolder/Contents/PkgInfo # # If it exists, copy icons file with same name. if [ -e "$exename.icns" ] then cp -p $exename.icns "$appfolder/Contents/Resources" fi # # Create information property list file (Info.plist). # Tip: By customizing this script for a specific app, you can set # additional properties such as CFBundleGetInfoString for copyright # info, CFBundleIconFile for name of icon file (.icns) in Resources, # and CFBundleIdentifier (example: com.myorganization.myapp), as well # as more precise CFBundleSignature (change PkgInfo file too) and # CFBundleVersion strings. echo '<?xml version="1.0" encoding="UTF-8"?>' >$plistfile echo '<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">' >>$plistfile echo '<plist version="1.0">' >>$plistfile echo '<dict>' >>$plistfile echo ' <key>CFBundleDevelopmentRegion</key>' >>$plistfile echo ' <string>English</string>' >>$plistfile echo ' <key>CFBundleExecutable</key>' >>$plistfile echo ' <string>'$exename'</string>' >>$plistfile if [ -e "$exename.icns" ] then echo ' <key>CFBundleIconFile</key>' >>$plistfile echo ' <string>'$exename'.icns</string>' >>$plistfile fi echo ' <key>CFBundleInfoDictionaryVersion</key>' >>$plistfile echo ' <string>6.0</string>' >>$plistfile echo ' <key>CFBundleName</key>' >>$plistfile echo ' <string>'$appname'</string>' >>$plistfile echo ' <key>CFBundlePackageType</key>' >>$plistfile echo ' <string>APPL</string>' >>$plistfile echo ' <key>CFBundleSignature</key>' >>$plistfile echo ' <string>'${appname:0:4}'</string>' >>$plistfile echo ' <key>CFBundleVersion</key>' >>$plistfile echo ' <string>1.0</string>' >>$plistfile echo ' <key>CSResourcesFileMapped</key>' >>$plistfile echo ' <true/>' >>$plistfile echo '</dict>' >>$plistfile echo '</plist>' >>$plistfile fi