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,
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'
Silly question, probably ;-) , but you are modifying the correct users plist in the delete part of the script, aren't you.
It looks as though it could be deleting from the /root/Library and not the /Users/username/Library....
I made a quick python script that you can run to delete any icon for all users in the system based on the solutions given here. It needs to be ran as root.
https://github.com/jcarm010/osx-dock-remover
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With