Xcode中C++命令行工具应用缺少info.plist文件

8
我想为一门大学课程创建一个基于OpenCV的摄像头校准应用程序。我在macOS High Sierra上创建了一个命令行工具应用程序。不幸的是,它没有info.plist文件。我的应用程序崩溃并显示以下错误信息:

CameraCalibration[2314:193066][access]该应用程序已崩溃,因为它尝试访问涉及隐私的数据,但没有包含NSCameraUsageDescription键及其字符串值的info.plist文件。要求应用程序的info.plist文件中必须包含NSCameraUsageDescription键及其字符串值,向用户说明应用程序如何使用这些数据。 程序退出代码:9

我已经尝试添加info.plist文件,并在应用程序的“常规”选项卡中进行了设置。我也已经添加了NSCameraUsageDescription键和字符串值。不幸的是,我的应用程序由于同样的错误而继续崩溃。

我也是这么认为的。但我的应用程序为什么要求一个呢? - CoderOfTheForce
1
抱歉,我之前的评论是错误的。请查看苹果的代码签名指南,其中有一个单文件工具的部分。 - mschmidt
谢谢。我会研究它的。 - CoderOfTheForce
1个回答

11

您可以通过设置在二进制文件中创建Info.plist部分并在Xcode > Target > Build Settings > Packaging中设置指向您的Info.plist文件的路径来嵌入Info.plist到您的二进制文件中(将更改标记为粗体):

Xcode target Info.plist settings

你的Info.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>CFBundleIdentifier</key>
    <string>com.mycorp.myapp</string>
    <key>CFBundleName</key>
    <string>My App</string>
    <key>NSMicrophoneUsageDescription</key>
    <string>record from the microphone</string>
    <key>NSCameraUsageDescription</key>
    <string>record from the camera</string>
</dict>
</plist>

N.B: 当在Xcode调试器中运行(11.2.1/Catalina 10.15.1),我仍然会遇到隐私异常,但是plist已经嵌入二进制文件中。我猜这是Xcode的一个bug。将Info.plist放入Products目录可以解决这个问题,尽管您似乎必须每次修改二进制文件时重新授权麦克风/摄像头的使用。


3
感谢您提供有关在产品目录中使用 Info.plist 的提示! - ibash
那对我没用;我无法使用 Swift 读取 plist 信息。 - A.HADDAD
这个问题不是关于读取您自己的 plist 的 - 您能否开一个新问题? - Rhythmic Fistman
我正在寻找一种解决方案,可以为已创建的可执行文件添加Info.plist,即不使用Xcode。我怀疑ld命令可以做到这一点。有什么确切的想法吗? 哦,这个问题特别涉及到与Xcode一起使用。我会尝试找另一个问题。 - Thomas Tempelmann
这里提到的--sectcreate参数似乎是您正在寻找的内容:https://github.com/xamarin/xamarin-macios/issues/13795#issuecomment-1021358936 - Rhythmic Fistman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接