应用程序的Info.plist文件必须包含一个NSMotionUsageDescription键。

4
我在运行时遇到了以下错误:
该应用程序崩溃,因为它尝试访问涉及隐私的数据却没有提供使用说明。该应用程序的 Info.plist 必须包含一个 NSMotionUsageDescription 键和一个字符串值,向用户解释应用程序如何使用此数据。
我已经将该键添加到 plist 文件中:
<!--  Motion -->
<key>NSMotionUsageDescription</key>
<string>This app needs to be able to access your motion use</string>

这是AppDelegate中的代码:

if ([CMMotionActivityManager isActivityAvailable])
{
    CMMotionActivityManager *motionManager = [[CMMotionActivityManager alloc] init];
    NSOperationQueue *motionActivityQueue = [[NSOperationQueue alloc] init];

    [motionManager queryActivityStartingFromDate:[NSDate distantPast] toDate:[NSDate date] toQueue:motionActivityQueue withHandler:^(NSArray *activities, NSError *error) {
        if (error && (error.domain == CMErrorDomain) && (error.code == CMErrorMotionActivityNotAuthorized)) {

        } else if (activities || !error) {

        }

        dispatch_async(dispatch_get_main_queue(), ^{

        });
    }];        
}

为什么我一直收到崩溃报告?我已经删除了所有派生文件夹,清理了项目。但仍然要求密钥!这是苹果的bug吗?


常见错误:通常有3个.plist文件。只在第一个文件中添加此键,而不是在Tests组下的.plist文件中添加。 - Sharad Chauhan
@sharadchauhan,感谢您的评论。项目设置->构建设置->打包->Info.plist文件:xxx.plist。我已经在这个文件中添加了密钥。您所说的第一个是什么意思? - thus
如果你在左下角搜索项目并使用字符串“.plist”,你会得到3个“.plist”文件,我认为这可能是错误的原因。但是,是的,你需要将它添加到刚才提到的同一个“.plist”文件中。 - Sharad Chauhan
1
我找到了问题。希望有一天它能帮助到别人。前往项目设置 -> 信息 -> 在自定义iOS目标属性部分中找到所需的后台模式,并在此处添加您的密钥。我不知道为什么我的plist文件键并不全都在这里。 - thus
@因此您可以将其作为答案添加并接受/关闭问题。 - rishi
1
@rishi 我已经做了。谢谢你的评论。 - thus
2个回答

5

我发现了问题。希望有一天这个解决方法能帮到别人。请前往项目设置-> 信息 -> 在"自定义iOS目标属性"部分中找到"所需的后台模式",并在此处添加您的键。我不知道为什么我的plist文件中并不是所有的键都在此处。


工作正常。关键是每个目标都有自己的Info.plist文件。 - Pelanes
1
版本11中的“项目设置”在哪里? - Pete Alvin

0
前往目标 -> 您的项目目标 -> 构建设置 -> 搜索 NSMotionUsageDescription。
请参考以下截图: enter image description here

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