How to remove an application Icon from Dock from Mac OSX Mavericks?

user1172562 picture user1172562 · Nov 12, 2013 · Viewed 7.5k times · Source

I am writing an application uninstaller in which I want to remove the icon of our app from Dock. During instalation the icon was added to dock using the following on commandline:

sudo -u "$USER" defaults write com.apple.dock persistent-apps -array-add "<dict><key>tile-data</key><dict><key>file-data</key><dict><key>_CFURLString</key><string>/Applications/MyApplication.app</string><key>_CFURLStringType</key><integer>0</integer></dict></dict></dict>"
sudo -u "$USER" osascript -e 'tell Application "Dock"' -e 'quit' -e 'end tell'

During uninstallation I am using the following shell script to remove icon from Dock:

#!/bin/sh
# Get location of entry for our application in Dock
dloc=$(defaults read com.apple.dock persistent-apps | grep file-label\" | awk '/MyApplication/ {print NR}')
dloc=$((dloc - 1))

# Remove this entry from Dock's plist file : com.apple.dock.plist
/usr/libexec/PlistBuddy -c "Delete persistent-apps:$dloc" ~/Library/Preferences/com.apple.dock.plist

# Restart Dock to persist changes
osascript -e 'delay 3' -e 'tell Application "Dock"' -e 'quit' -e 'end tell' -e 'delay 3'
#killall Dock

I can see that the above script successfully removes the entry of MyApplication from the persistent-apps from com.apple.dock.plist plist. However after restarting the Dock, the dock still has the same icons as the previous.

Can someone please help?

Thanks,

Answer

rick_meng picture rick_meng · Dec 20, 2013

i have the same question with you. deleting item twice will solve this issue.i succeed.

#!/bin/sh -
#delete item from com.apple.dock.plist
dloc=$(defaults read com.apple.dock persistent-apps | grep file-label | awk '/Notes/  {printf NR}')
dloc=$[$dloc-1]
echo $dloc
sudo -u $USER /usr/libexec/PlistBuddy -c "Delete persistent-apps:$dloc" ~/Library/Preferences/com.apple.dock.plist

#must delete item from com.apple.dock.plist agian,or won't change
dloc=$(defaults read com.apple.dock persistent-apps | grep file-label | awk '/Photo Booth/  {printf NR}')
#dloc=$(defaults read com.apple.dock persistent-apps | grep _CFURLString "PageManager%209.31.app")
dloc=$[$dloc-1]
echo $dloc
sudo -u $USER /usr/libexec/PlistBuddy -c "Delete persistent-apps:$dloc" ~/Library/Preferences/com.apple.dock.plist
sleep 3
# Restart Dock to persist changes
osascript -e 'delay 3' -e 'tell Application "Dock"' -e 'quit' -e 'end tell'