代码之家  ›  专栏  ›  技术社区  ›  Trygve

调试系统首选项窗格w/10.15和系统完整性保护

  •  0
  • Trygve  · 技术社区  · 5 年前

    过去,我可以在系统首选项中运行/调试一个自行开发的首选项窗格,方法是对系统首选项应用程序的副本进行自签名,并在Xcode中将其设置为运行目标。

    一个符号链接放在~/Library/PreferencePanes中,它指向由Xcode构建的输出prefPane,一切正常。。。至少在10.11到10.14之间。

    Debug System Pref Pane w/10.11 and System Integrity Protection

    低于10.15,这就断了。当prefPane与real(Apple Signed)System Preferences应用程序一起正确加载时,当我尝试在系统首选项的自签名副本中运行prefPane时,我得到“无法加载首选项窗格”。当尝试加载任何苹果内置的pref窗格时,也会发生同样的情况。

    我试过这两种方法:

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

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

    控制台中不会生成错误。

    有没有什么方法可以在不禁用SIP的情况下,像10.11到10.14那样?

    0 回复  |  直到 5 年前
        1
  •  0
  •   Ken Thomases    5 年前

    很可能,应用程序受到强化运行时的限制。没有 entitlements 为了减轻这些限制,它将被阻止,例如,加载不是由苹果签署的代码或来自同一个团队的身份。

    --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>