6

我正在编写一个应用程序卸载程序,我想在其中从 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 的持久应用程序中删除了 MyApplication 的条目。但是在重新启动 Dock 后,Dock 仍然具有与之前相同的图标。

有人可以帮忙吗?

谢谢,

4

4 回答 4

4

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

#!/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'
于 2013-12-20T03:48:26.793 回答
1

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

看起来好像它可以从 /root/Library 而不是 /Users/username/Library...中删除。

于 2013-12-04T10:05:03.583 回答
1

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

https://github.com/jcarm010/osx-dock-remover

于 2016-08-16T21:22:10.210 回答
0

我意识到这是一篇旧帖子,但我刚刚找到了另一个关于 PlistBuddy 的链接,并认为我会分享: 在 Mavericks 上使用 PlistBuddy 设置的东西需要额外的推动。虽然这提到了与 Finder 打交道的项目,但我在上面使用了您的脚本,并测试了从 Dock 中删除的单次迭代,然后用 killall 杀死 cfprefsd,然后杀死 Dock,图标就消失了。我要测试几次以确保,但我相信这对我有用。

于 2014-04-24T13:03:44.027 回答