我很困惑,iOS 11.4(15F79),iPhone6。无法让应用程序请求运动数据。info.plist已通过编辑器设置,并通过在textWrangler中打开的info.plist进行了双重检查,还删除了键并通过textWrangler保存。

 <key>NSMotionUsageDescription</key>
 <string>This app needs your Phones motion manager to update when the phone is tilted. Please allow this App to use your phones tilt devices</string>

我已经删除并重新安装了大约10次应用程序。我已经重新录了5次电话。我已经检查过设置,并且我的应用程序不会显示在“隐私运动和健身”或“设置”中的任何其他位置。我正在使用一个免费的开发者帐户,也许这和它有关?
我创建了一个新的Xcode游戏模板,除了导入CoreMotion和这个代码之外什么都没有改变
****编辑,抱歉我忘了说我已经启动了实例,忘了放在这里,以防有人认为这是问题所在************
let motionManager = CMMotionManager()

override func didMove(to view: SKView) {

 motionManager.startDeviceMotionUpdates()

    if motionManager.isDeviceMotionActive == true {
        motionManager.accelerometerUpdateInterval = 0.2
        motionManager.startAccelerometerUpdates(to:  OperationQueue.current!, withHandler: {
        (accelerometerData: CMAccelerometerData!, error: NSError!) in
            let acceleration = accelerometerData.acceleration
            print(accelerometerData)
        } as! CMAccelerometerHandler)
    }else{
        print(CMMotionActivityManager.authorizationStatus().rawValue)
    }

它将0(枚举大小写未确定)打印到控制台。
在我的实际应用程序中,它是3(相同的枚举-拒绝大小写)。
正如我所说的,我已经通过Xcode和文本打包器(一个代码编辑器)卸载、重新安装、编辑plist,尝试了上面代码的不同版本,在不同的地方尝试了代码(在类中确实移动到视图中)从apple docs中尝试了代码。等。。。。我还没有被问到NSUsage问题,应用程序一直在崩溃。
我已经寻找了激发警报的方法,如CLLocationManager.requestWhenInUseAuthorization()中的方法,但找不到可比的CMMotion版本(我认为没有)我已经创建了一个新的swift文件,导入了Foundation和CMMotion,并将代码放在那里,但是仍然没有请求运动数据的警告。
我尝试了一个单一的视图应用程序模板,而不是一个游戏模板,认为这可能是问题所在,不。
我该怎么办?
感谢任何帮助。谢谢

最佳答案

您混淆了两个相关但不同的类。
CMMotionManager允许访问加速度计、磁强计和陀螺仪数据。它不需要任何用户权限,因为此信息不被视为与隐私相关。
在您的else条款中,您正在检查CMMotionActivityManager的授权状态。此对象报告设备运动类型(行走、跑步、驾驶)。此信息被视为与隐私相关,当您创建此类的实例并从中请求数据时,将显示权限警报。
触发else的原因是您正在检查isDeviceMotionActive;这将是false直到您调用startDeviceMotionUpdates,这是您从未做过的。即使您使用了isAccelerometerActive,您也会遇到问题,因为您在startAccelerometerUpdates子句中调用了if,而这是永远无法达到的。
你可能想检查一下isAccelerometerAvailable。如果返回false,则没有太多操作;设备没有加速计。
更新
在调用isDeviceMotionActive后立即检查startDeviceMotion是没有意义的:
你知道它很活跃;你刚开始
我想启动需要一些时间,所以如果您立即检查,您可能会得到false
苹果公司建议,对于每种运动设备类型,不要有多个观察者,因此检查is...Active的目的是确保如果您已经这样做了,就不会再次调用start...
如果您只需要陀螺仪数据,那么您根本不需要调用startDeviceMotionUpdates

关于ios - iOS 11.4不询问隐私使用情况(已设置“隐私- Action 使用说明”),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51468997/

10-11 15:29