Удаление приложений из служб определения местоположения в разделе «Безопасность и конфиденциальность» на Mac OS X 10.8

Удаление приложений из служб определения местоположения в разделе «Безопасность и конфиденциальность» на Mac OS X 10.8

Я хотел удалить приложения из служб определения местоположения в настройках безопасности и конфиденциальности на 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.
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

Если приложения все еще там, повторите процесс, за исключением перезапуска located с помощью kill -9 после определения PID следующим образом. 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 хранил кэш и перестраивал client.plist. Я говорю это, потому что записи были добавлены обратно в client.plist после запуска killall — и даже при перезагрузке. Какова бы ни была первопричина, использование kill -9 решило для меня проблему.

Если дела пойдут плохо, то скопируйте исходный файл обратно и перезапустите locatedd.
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 к вашему идентификатору входа:

mini-nevie:~ root# su - nevinwilliams
mini-nevie:~ nevinwilliams$ open /var/db/locationd/clients.plist 

Это предполагает, что Xcode является приложением по умолчанию для открытия файлов *.plist, и вы знакомы с редактором Property List Editor. Под свойством Root есть 3 записи Dictionary по умолчанию:

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

как root.

решение4

В дополнение к предыдущим ответам, эта проблема у меня исчезла только после исправления владельца файла:

# chown -R _locationd:_locationd /var/db/locationd/
# chmod 750 /var/db/locationd/
# chmod 644 /var/db/locationd/clients.plist

Затем перезагрузите компьютер.

Связанный контент