私は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します。
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 を使用して locationd を再起動する以外は、プロセスを再度実行します。PID は、ps 出力の 2 番目のフィールドです。
ps -ef | grep locationd | grep -v grep
出力:205 427 1 0 6:31PM ?? 0:00.07 /usr/libexec/locationd
kill -9 427
一度に 1 つのアプリを削除するために、このプロセスを 2 回実行しました。1 回目は killall で十分でした。2 回目は十分ではありませんでした。理由はわかりません。locationd がキャッシュを保持し、clients.plist を再構築しているように動作しました。killall を実行した後、再起動後もエントリが clients.plist に再度追加されたため、このように言いました。根本的な原因が何であれ、kill -9 を使用することで問題は解決しました。
うまくいかない場合は、元のファイルをコピーして locationd を再起動します。
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
こうすることで、ディレクトリとファイルはすべてのユーザーによって読み書きできるようになります。次に、便宜上、ログイン ID に su します。
mini-nevie:~ root# su - nevinwilliams
mini-nevie:~ nevinwilliams$ open /var/db/locationd/clients.plist
これは、Xcode が *.plist ファイルを開くためのデフォルトのアプリであり、プロパティ リスト エディターに精通していることを前提としています。ルート プロパティの下には、3 つのデフォルトの辞書エントリがあります。
com.appl
com.appl.locationd.executable-/usr/libexec/UserEventAgent
com.appl.aosnotifyd
これらは削除すべきではありません。長い間使用されていないアプリに属するエントリについては、対応するアプリの行の辞書列の左側にマウスを移動すると、灰色の逆矢印「-」が表示されます。それをクリックすると、その項目とそのすべての子項目が削除されます。最初にエントリを調べたい場合は、キー文字列の左側にある灰色の三角形 (Finder リスト ビューのユーザーにはおなじみ) をクリックすると、辞書が展開され、その要素が表示されます。
満足のいくまでキーを削除または無効にしたら、ファイルを保存して Xcode を終了します。次に、ターミナルに戻って、次の操作を実行します。
mini-nevie:~ nevinwilliams$ exit
logout
mini-nevie:~ root#
上矢印を 2 回押して chmod コマンドを呼び出し、ctrl-A行の先頭に移動し、cursor-right8 回ほど押して '+' を '-' に変更するか、次のように入力して権限を元の状態に戻します。
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
その後、コンピューターを再起動します。