Панель настроек системы отладки с 10.15 и защитой целостности системы
Раньше мне удавалось запускать / отлаживать самостоятельно разработанную панель настроек в системных настройках, подписывая копию приложения "Системные настройки" и задавая ее в качестве цели запуска в Xcode.
В ~/Library/PreferencePanes помещается символическая ссылка, которая указывает на выходную prefPane, созданную Xcode, и все работает... по крайней мере, это было в версиях с 10.11 по 10.14.
См.: Панель настроек отладки системы с 10.11 и Защита целостности системы.
При 10.15 это перерыв. Хотя prefPane правильно загружается с реальным (подписанным Apple) приложением системных настроек, когда я пытаюсь запустить prefPane в самоподписанной копии системных настроек, я получаю сообщение "Не удалось загрузить панель настроек". То же самое происходит при попытке загрузить любую из встроенных в Apple панелей pref.
Я пробовал оба:
codesign -s "My Developer ID" -f "/Applications/System Preferences Copy.app"
а также
codesign -s - -f "/Applications/System Preferences Copy.app"
В консоли ошибок не возникает.
Я предполагаю, что где-то в процессе загрузки он проверяет, подписано ли хост-приложение системных настроек Apple. Если я попытаюсь использовать реальное приложение "Системные настройки" в качестве цели отладки, я получаю сообщение об ошибке защиты целостности системы.
Есть ли способ сделать это без отключения SIP, как это было в 10.11–10.14?
1 ответ
Вероятно, на приложение действуют ограничения усиленной среды выполнения. Без прав на смягчение этих ограничений будет запрещено, например, загрузка кода, который не подписан Apple, или удостоверения личности от той же команды.
Вам нужно будет подписать свою копию --options runtime --entitlements <path>
параметры. Путь должен указывать на файл plist словаря, ключи которого являются правами, а значения обычно являются логическими. Например:
<?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>
<key>com.apple.security.cs.disable-library-validation</key>
<true/>
</dict>
</plist>