我想在 Mac OS X 10.8 Mountain Lion 的安全性和隱私設定中從位置服務中刪除應用程式。 (即使卸載了應用程序,它們仍然列出。)我找到了這篇文章在 Mac OS X 10.7 上的“安全性和隱私”中從“位置服務”中刪除應用程式,這讓我朝著正確的方向前進。這是對我有用的 OS X 10.8.2 Mountain Lion 等效版本。主要區別在於clients.plist 檔案的位置。我還想提供一個逐步的過程。
免責聲明:這對我有用。確保您的系統有良好的備份。此過程包括對clients.plist 檔案進行備份,但永遠不會太安全。
1. 啟動終端,然後 sudo 到 root shell
sudo -s
2. 進入/var/db/locationd
cd /var/db/locationd
3. 備份clients.plist文件
cp -p clients.plist clients.plist.save
4.將clients.plist轉換為xml(可編輯格式)
plutil -convert xml1 clients.plist
5. 使用vi (vim) 編輯clients.plist 檔案並刪除應用程式。
vi clients.plist
該檔案可能包含許多應用程式條目。以下是單一應用程式條目(本範例為 Safari)的格式。需要刪除整個條目。
<key>com.apple.Safari</key>
<dict>
<key>Authorized</key>
<true/>
<key>BundleId</key>
<string>com.apple.Safari</string>
<key>Executable</key>
<string>/Applications/Safari.app/Contents/MacOS/Safari</string>
<key>LocationTimeStopped</key>
<real>376348187.80421197</real>
<key>Registered</key>
<string>/Applications/Safari.app/Contents/MacOS/Safari</string>
<key>RequirementString</key>
<string>identifier "com.apple.Safari" and anchor apple</string>
<key>Whitelisted</key>
<false/>
</dict>
6. 將clients.plist檔案轉換回二進位文件
plutil -convert binary1 clients.plist
7.重啟定位
killall locationd
如果應用程式仍然存在,請再次執行該過程,除非在確定 PID 後使用kill -9 重新啟動定位,如下所示。 PID 是 ps 輸出中的第二個欄位。
ps -ef | grep locationd | grep -v grep
輸出:205 427 1 0 6:31PM ?? 0:00.07 /usr/libexec/locationd
kill -9 427
我運行該過程兩次,一次刪除一個應用程式。第一次,killall就夠了。第二次,卻沒有。我不知道為什麼。它的作用就像 locationd 保留快取並重建clients.plist。我這樣說是因為這些條目在運行killall 後被添加回clients.plist 中——甚至在重新啟動時也是如此。無論根本原因是什麼,使用kill -9 解決了我的問題。
如果情況不好,則複製回原始檔案並重新啟動。
cp -p clients.plist.save clients.plist
killall locationd
(或kill -9方法)
我希望這有幫助。乾杯!
答案1
Xcode的屬性清單編輯器也可以用來刪除舊應用程式的條目,但由於該檔案很難訪問,因此必須暫時開啟權限:
mini-nevie:~ root# chmod o+rwx /var/db/locationd/ /var/db/locationd/clients.plist
所以所有使用者都可以讀寫該目錄和檔案。然後,為了方便起見,su 輸入您的登入 ID:
mini-nevie:~ root# su - nevinwilliams
mini-nevie:~ nevinwilliams$ open /var/db/locationd/clients.plist
這假設 Xcode 是打開 *.plist 檔案的預設應用程序,並且您熟悉屬性清單編輯器。在 Root 屬性下,有 3 個預設的字典條目:
com.appl
com.appl.locationd.executable-/usr/libexec/UserEventAgent
com.appl.aosnotifyd
這些不應該被刪除。對於屬於早已消失的應用程式的條目,您可以將滑鼠懸停在對應應用程式行的「字典」列的左側,其中會出現反灰色「-」。單擊它將刪除該項目及其所有子項目。如果您想先檢查條目,請按一下鍵字串左側的灰色三角形(對於 Finder 清單視圖使用者來說很熟悉)將展開字典並顯示其元素。
一旦您刪除或停用了滿意的金鑰,請儲存檔案並退出 Xcode。然後,回到終端,執行以下操作:
mini-nevie:~ nevinwilliams$ exit
logout
mini-nevie:~ root#
按向上箭頭兩次以調用 chmod 命令,ctrl-A轉到行的開頭,cursor-right大約八次,將“+”更改為“-”,或輸入如下所示的內容將權限恢復到原來的狀態:
mini-nevie:~ root# chmod o-rwx /var/db/locationd /var/db/locationd/clients.plist
然後 HUP 位置守護程式:
mini-nevie:~ root# killall -HUP locationd
快速檢查 Security.PrefPane 隱私權選項卡應該可以確認您的變更。
標準免責聲明、悲慘的警示故事、責罵、咯咯笑以及“這次旅行真的有必要嗎?”反射尤其適用。
答案2
使用 tccutil(OS X 命令列實用程式)
我認為最快、最安全的方法是使用 OS X 命令列實用程式tccutil
- 打開一個新的終端機視窗
- 關閉所有開啟的「安全性和隱私權」預窗格窗口
- 輸入或貼上以下突出顯示的命令
重置定位服務
tccutil reset CoreLocationAgent
重設聯絡人/地址簿的存取:
tccutil reset AddressBook
重置對提醒的訪問
tccutil reset Reminders
重置對日曆的訪問
tccutil reset Calendar
這就是全部。順便說一句,不需要 Sudo。
答案3
這是舊的解決方案,我提出的解決方案在技術上與帖子中的解決方案和已接受的解決方案沒有什麼不同,但它的麻煩要少得多,而且更容易自動化(對於調試很有用) 。做就是了
/usr/libexec/PlistBuddy -c 'Delete <bundle-id>' /var/db/locationd/clients.plist
killall -HUP locationd
作為根。
答案4
除了先前的答案之外,這個問題在更正文件所有權後才消失:
# chown -R _locationd:_locationd /var/db/locationd/
# chmod 750 /var/db/locationd/
# chmod 644 /var/db/locationd/clients.plist
然後重新啟動電腦。