#!/bin/bash # Mac OSX .app builder function die { echo "ERROR: $1" > /dev/null 1>&2 exit 1 } if [ "$#" -ne 2 ]; then die "Usage: `basename $0` AppNameHere icon-file.svg" fi APPNAME=$1 ICONNAME=$2 if [ ! -f $ICONNAME ]; then die "Image file for icon not found" fi mkdir -p "$APPNAME.app/Contents/"{MacOS,Resources} cat > "$APPNAME.app/Contents/Info.plist" < CFBundleGetInfoString $APPNAME CFBundleExecutable $APPNAME CFBundleIdentifier com.example.www CFBundleName $APPNAME CFBundleIconFile icon.icns CFBundleShortVersionString 0.01 CFBundleInfoDictionaryVersion 6.0 CFBundlePackageType APPL IFMajorVersion 0 IFMinorVersion 1 NSHighResolutionCapable NSSupportsAutomaticGraphicsSwitching END cp $ICONNAME "$APPNAME.app/Contents/Resources/" cd "$APPNAME.app/Contents/Resources/" fileName="$(basename $ICONNAME)" postfix=${fileName##*.} if [[ $postfix == 'svg' ]]; then qlmanage -z -t -s 1024 -o ./ "$fileName" fileName=${fileName}.png fi echo $fileName mkdir icon.iconset sips -z 16 16 "$fileName" --out icon.iconset/icon_16x16.png sips -z 32 32 "$fileName" --out icon.iconset/icon_16x16@2x.png cp icon.iconset/icon_16x16@2x.png icon.iconset/icon_32x32.png sips -z 64 64 "$fileName" --out icon.iconset/icon_32x32@2x.png sips -z 128 128 "$fileName" --out icon.iconset/icon_128x128.png sips -z 256 256 "$fileName" --out icon.iconset/icon_128x128@2x.png cp icon.iconset/icon_128x128@2x.png icon.iconset/icon_256x256.png sips -z 512 512 "$fileName" --out icon.iconset/icon_256x256@2x.png cp icon.iconset/icon_256x256@2x.png icon.iconset/icon_512x512.png sips -z 1024 1024 "$fileName" --out icon.iconset/icon_512x512@2x.png # Create .icns file iconutil -c icns icon.iconset # Cleanup rm -R icon.iconset rm $fileName