xctest 此应用试图在没有使用说明的情况下访问隐私敏感数据

Posted

技术标签:

【中文标题】xctest 此应用试图在没有使用说明的情况下访问隐私敏感数据【英文标题】:xctest This app has attempted to access privacy-sensitive data without a usage description 【发布时间】:2017-05-15 14:21:56 【问题描述】:

我正在尝试使用单元测试 (xctest) 测试 CoreLocation,但未能通过权限阶段。我特别收到一条假定的错误消息, 见下文(*)。

我正在调整 authorizationStatus 方法,但这对我不起作用。

[MySwizzler swizzleClass:[CLLocationManager class]
                         method:@"authorizationStatus"
                 instanceMethod:NO];

+ (CLAuthorizationStatus)override_authorizationStatus 
    return myAuthorizationStatus;

只要我请求授权:

[[self locationManager] requestWhenInUseAuthorization];

我收到回调:

-(void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status 

状态为:

kCLAuthorizationStatusRestricted

我的 swizzled 方法永远不会被调用,我在日志中收到这条消息:

(*) “此应用试图在没有使用说明的情况下访问隐私敏感数据。该应用的 Info.plist 必须包含一个 NSLocationWhenInUseUsageDescription 键,其字符串值向用户解释应用如何使用此数据”。

我的 Plist 确实包含以下内容:

<plist version="1.0">
  <dict>
    <key>NSLocationUsageDescription</key>
    <string>Required</string>
    <key>NSLocationWhenInUseUsageDescription</key>
    <string>Required</string>
  </dict>
</plist>
并且我的 TestTarget Info.plist 属性设置为 Plist 的路径 文件。 方案运行配置设置为“允许位置 模拟”

我假设我在这里调错了方法,也许还有其他方法 问题。

请帮忙。

【问题讨论】:

也许你应该改用 requestWhenInUseAuthorization。 Mike.. 也许你是对的,这很明显 :) 让我试试。 【参考方案1】:

也许您改为将键添加到测试目标的 Info.plist 中?

【讨论】:

请在评论中将其更改为更自信的答案或澄清问题。你确实有你知道的评论权限。 我认为这很合适,因为这解决了我遇到的问题。我真的不知道他们是否是这种情况。 如果您不知道,请在评论中提问。或者做出一个自信但有条件的回答:“你的问题可能是你有......。在这种情况下,解决方案是......”。我提出这个措辞是为了让答案更加自信,而不是做出隐含的假设(那些真的很危险),但也没有给人留下应该在评论中提出问题的印象。否则,您可以通过添加一些背景信息或一些“......因为......”来提高答案的感知有用性。 有条件的答案,如我之前的评论中所述,我认为主要是为 50 代表以下的人提供的工具,而你不是。但是在这种情况下,问题的年龄,暗示通过commetns与OP直接接触的可能性不大,这也是非常合适的。

以上是关于xctest 此应用试图在没有使用说明的情况下访问隐私敏感数据的主要内容,如果未能解决你的问题,请参考以下文章

iOS 10 应用程序因试图访问隐私敏感数据而崩溃

Phonegap 应用 NSCalendarsUsageDescription 错误:此应用尝试在没有使用说明的情况下访问隐私敏感数据

如何在没有静态文本的情况下在 XCTest 中快速测试 Webview 是不是加载

我可以在不失败的情况下做出 XCTest 期望吗?

XCTest:如何正确设置 UITextView 的可访问性特征?

Swift要求用户允许访问照片库