Launchctl говорит, что plist недействителен, plutil говорит, что все в порядке

5

Я пытаюсь запустить скрипт оболочки, когда присоединяюсь к новой сети WiFi. Я создал этот файл plist (тесно связанный с ответом SuperUser ) по адресу /Users/myname/Library/LaunchAgents/my.networkChangeListener.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" \
 "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<dict>
  <key>Label</key>
  <string>my.networkChangeListener</string>
  <key>LowPriorityIO</key>
  <true/>
  <key>ProgramArguments</key>
  <array>
<string>/Users/myname/bin/networkChangeListener/onNetworkChange.sh</string>
  </array>
  <key>WatchPaths</key>
  <array>
    <string>/etc/resolv.conf</string>
    <string>/Library/Preferences/SystemConfiguration/NetworkInterfaces.plist</string>
    <string>/Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

Мой пользователь - владелец списка, а группа - "персонал".

Когда я пытаюсь загрузить файл при запуске launchctl load ~/Library/LaunchAgents/my.networkChangeListener.plist, я получаю сообщение об ошибке «Неверный список свойств».

Однако, когда я бегу plutil ~/Library/LaunchAgents/my.networkChangeListener.plist, он возвращает «ОК»

В чем проблема с моим файлом plist? Это что-то конкретное для launchd? Я полностью в тупике для того, как отладить это.

LiberalArtist
источник

Ответы:

9

Первые несколько строк должны быть

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>

В вашем файле (как и в ответе по ссылке) отсутствует <plist version="1.0">часть.

Nohillside
источник
1
Спасибо! Это решило проблему. Кажется, что-то plutilдолжно было быть поймано ... но тогда, похоже, что-то, что я должен был поймать в кучу раз, когда я перечитывал код в поисках несоответствующих тегов.
LiberalArtist
2
Как подсказка: OS X поставляется с xmllint, который является частью OpenSource libxml. Если вы просто хотите проверить xml, вы можете попробовать это: endor-3:~ garex$ xmllint /tmp/my.networkChangeListener.plist /tmp/my.networkChangeListener.plist:21: parser error : Extra content at the end of the document </plist> ^ Это показало, что ваш plist-тег был закрыт, но не открыт ...
Garex
-1

Полностью чистый лист выглядит так:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict/>
</plist>

Я использую PlistEdit Pro, когда приходится делать много изменений, так как легко допустить ошибки.

Ronanoc
источник