调试系统首选面板w / 10.15和系统完整性保护

时间:2019-11-05 04:21:52

标签: xcode debugging cocoa macos-catalina nspreferencepane

过去,通过自签名“系统偏好设置”应用程序的副本并将其设置为Xcode中的运行目标,我能够在“系统偏好设置”中运行/调试自行开发的“首选项窗格”。

在〜/ Library / PreferencePanes中放置一个符号链接,该链接指向Xcode构建的输出prefPane,并且一切正常……至少以前在10.11到10.14之间。

请参阅:Debug System Pref Pane w/10.11 and System Integrity Protection

在10.15下,此中断。当prefPane正确地加载了真实的(Apple签名)的“系统偏好设置”应用程序时,当我尝试在“系统偏好设置”的自签名副本中运行我的prefPane时,出现“无法加载偏好设置窗格”。尝试加载任何Apple内置的首选窗格时,也会发生同样的事情。

我都尝试过:

codesign -s "My Developer ID" -f "/Applications/System Preferences Copy.app"

codesign -s - -f "/Applications/System Preferences Copy.app"

控制台中不会产生任何错误。

我的猜测是,在加载过程中的某个地方,它正在检查系统偏好设置宿主应用程序是否已由Apple签名。如果我尝试使用真实的“系统偏好设置”应用程序作为调试目标,则会收到系统完整性保护错误。

有没有办法像10.11到10.14那样禁用SIP?

1 个答案:

答案 0 :(得分:0)

该应用可能会受到强化运行时的限制。如果没有entitlements来减轻这些限制,例如,它将阻止加载未经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>