如何从Mac OSX Mavericks中删除Dock中的应用程序图标?

时间:2013-11-12 00:11:26

标签: macos icons osx-mavericks dock

我正在编写一个应用程序卸载程序,我想从Dock中删除我们应用程序的图标。在安装期间,使用以下命令行将图标添加到dock:

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'

在卸载过程中,我使用以下shell脚本从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

我可以看到上面的脚本成功地从com.apple.dock.plist plist中的persistent-apps中删除了MyApplication的条目。但是,重新启动Dock后,Dock仍然具有与上一个相同的图标。

有人可以帮忙吗?

谢谢,

4 个答案:

答案 0 :(得分:2)

我和你有同样的问题。 删除项目两次将解决此问题。我成功。

#!/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'

答案 1 :(得分:1)

愚蠢的问题,可能是;-),但是你在脚本的删除部分修改了正确的用户plist,不是你。

看起来它可能是从/ root / Library中删除而不是/ Users / username / Library ....

答案 2 :(得分:0)

我意识到这是一篇旧帖子,但我刚刚找到了关于PlistBuddy的另一个链接,并认为我要分享:Things set with PlistBuddy on Mavericks need a little extra push。虽然这提到了与Finder有关的项目,但是我把你的脚本放在上面,并测试了从dock中移除的一次迭代,然后用killall杀死cfprefsd,然后杀死了Dock,图标消失了。我要测试几次以确保,但我相信这对我来说会有所帮助。

答案 3 :(得分:0)

我制作了一个快速python脚本,您可以根据此处给出的解决方案运行以删除系统中所有用户的任何图标。它需要以root身份运行。

https://github.com/npm/npm/issues/1727