【发布时间】:2020-06-12 23:44:51
【问题描述】:
我的 Qt C++ 应用程序从 Mac 上的摄像头捕捉视频。它在其 plist 文件中设置了 NSCameraUsageDescription 值。但是,毫不奇怪,如果我从命令行或 Qt Creator 使用 lldb 运行它,这将无济于事。它只是与线路崩溃:
2020-02-28 15:32:14.462735-0500 mqtt[47726:867880] [access] This app has crashed because it attempted to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSCameraUsageDescription key with a string value explaining to the user how the app uses this data.
那么我该如何为 lldb 做到这一点?它在 Qt Creator 的 Info.plist 中,但我想如果它是通过 lldb 运行的,那将无济于事。
【问题讨论】:
-
您可以尝试双击启动您的应用程序,然后使用 lldb 附加(或使用 Xcode 中的 Debug->Attach To Process)查看是否崩溃? lldb 启动不能完美模拟 LaunchServices(即 Finder 双击)启动,这可能会导致应用无法获得 LaunchServices 授予的某些权限。
-
@JimIngham 虽然我可以做到这一点,但它在启动时崩溃的情况下无济于事
-
我从您的问题中认为您的应用程序仅在 lldb 下运行时崩溃,而不是在正常运行时崩溃。但现在听起来,当 Double-Click 更普遍地启动时,它也会崩溃。是这样吗,错误是一样的吗?如果是这样,那么请求独立于调试器的相机访问的 plist 实际上一定有问题。这不是我很了解的事情。
-
是的,不在 lldb 下运行时会崩溃。我想在 lldb 下运行它来检查它。但后来我又遇到了另一个问题,因为它要使用相机,所以无法运行。
-
啊,我明白了。它在到达您的主函数之前(在库初始化或类似的东西中)会崩溃还是在主函数之后崩溃?如果它在 main 之后崩溃,则只需将
int foo = 1; while (foo) { sleep(1); }放入 main,附加 lldb,执行:expr foo = 0in lldb 并继续。