20

Я хотел удалить приложения из служб определения местоположения в настройках безопасности и конфиденциальности на MaC OS X 10.8 Mountain Lion. (Приложения все еще были в списке, хотя они были удалены.) Я обнаружил сообщение « Удалить приложение из Location Services» в разделе « Безопасность и конфиденциальность» в 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

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

Если что-то пойдет не так, скопируйте исходный файл и перезапустите его.
cp -p clients.plist.save clients.plist
killall locationd (или метод kill -9)

Надеюсь, это поможет. Ура!

4 ответа4

5

Редактор списка свойств XCode также можно использовать для удаления записей старых приложений, но, поскольку к файлу трудно получить доступ, необходимо временно открыть разрешения:

mini-nevie:~ root# chmod o+rwx /var/db/locationd/ /var/db/locationd/clients.plist

поэтому каталог и файл могут быть прочитаны и записаны всеми пользователями. Тогда, для удобства, введите ваш логин:

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, чтобы перейти к началу строки, курсор восемь раз вправо , изменить «+» на «-» или ввести следующее, как показано для восстановления разрешения на то, что они были:

mini-nevie:~ root# chmod o-rwx /var/db/locationd /var/db/locationd/clients.plist 

тогда HUP демон локации:

 mini-nevie:~ root# killall -HUP locationd

быстрая проверка безопасности.Вкладка PrefPane Privacy должна подтвердить ваши изменения.

Стандартные заявления об отказе от ответственности, предостерегающие истории о горе, ругательствах, хлопотах и «Действительно ли эта поездка необходима?«Отражения особенно применимы.

3

Использование tccutil (утилита командной строки OS X)

Я думаю, что самый быстрый и безопасный способ сделать это, с помощью утилиты командной строки OS X tccutil

  • Откройте новое окно терминала
  • Закройте все открытые окна «Безопасность и конфиденциальность»
  • Введите или вставьте из следующих выделенных команд

Сбросить службы определения местоположения

tccutil reset CoreLocationAgent

Сбросить доступ к контактам / адресной книге:

tccutil reset AddressBook

Сбросить доступ к напоминаниям

tccutil reset Reminders

Сбросить доступ к календарям

tccutil reset Calendar

И это все, что нужно сделать. Кстати, судо не нужно.

0

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

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

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

0

Это старое, и решение, которое я предлагаю, технически не отличается от решения, описанного в посте, и принятого, но оно намного меньше хлопот и гораздо проще автоматизировать (полезно для отладки). Просто делать

/usr/libexec/PlistBuddy -c 'Delete <bundle-id>' /var/db/locationd/clients.plist
killall -HUP locationd

как корень.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .