删除 OS X 上的服务

Lri*_*Lri 15 services macos

我希望完全删除某些服务,或者至少从“键盘”首选项窗格中的列表中删除。我试过了:

  1. 服务洗涤器。它只从菜单中删除服务——您从 10.6 开始就可以从系统偏好设置中执行此操作。
  2. 删除~/Library/Services/和 中的文件/Library/Services/。只是大多数第三方应用程序没有将他们的服务放在那里。
  3. defaults delete /Applications/SomeApp.app/Contents/Info NSServices. 它确实从系统偏好设置的列表中删除了服务。但它也会使包的代码签名无效,并且更改可以通过更新恢复。

我想你只需要接受最后一个选项,并codesign在需要时分配新的签名。但是有没有更简单的方法呢?

Lri*_*Lri 3

#!/bin/sh

applist="Path Finder
Skim
TextWrangler"
IFS=$'\n'

for appname in $applist; do
    apppath=$(mdfind -onlyin /Applications/ -onlyin ~/Applications/ \
    -onlyin /Developer/Applications/ -onlyin /System/Library/CoreServices/ \
    'kMDItemKind == Application' | grep -i "/$appname.app$" | head -1)
    echo $apppath
    date=$(date '+%y%m%d%-H%M%S')
    cp "$apppath/Contents/Info.plist" "$apppath/Contents/Info-$date.plist"
    defaults delete "$apppath/Contents/Info" NSServices
    codesign -f -s - "$apppath"
done
Run Code Online (Sandbox Code Playgroud)