CoreMotion 授权问题

Posted

技术标签:

【中文标题】CoreMotion 授权问题【英文标题】:CoreMotion authorization problems 【发布时间】:2016-01-17 02:19:11 【问题描述】:

我目前正在开发一个应用程序,它将使用三个库的组合:CoreLocation、CoreMotion 和 Healthkit。

我的问题是,当我初始化 CoreLocation 和 Healthkit 时,我得到了允许授权的对话框。但是,使用 CoreMotion,我没有收到任何要求授权的对话框,只有一个错误“CMErrorDomain=105”(即访问被拒绝)。 “运动与健身”的隐私设置不显示应用程序的任何条目。该应用程序的隐私设置也不会显示任何与 Motion 相关的条目。我已经多次擦拭我的测试设备以消除任何预先存在的设置。

使用 Swift 2.1 为 ios 9.2 构建的应用程序。在 5S 和 6S+ 上测试,结果相同(无授权对话框)

这是用于测试计步器是否可用以及我们是否可以收集数据(即允许)的代码。 “计步器”在类范围内声明。此功能(当前)附加到用户触发的按钮。

func checkCM() 
        pedometer.queryPedometerDataFromDate(NSDate(), toDate: NSDate()) 
            (data, error) -> Void in
            if error != nil 
               //error handler
               print(error?.description)

             else 
                // no errors!
            
        


令人困惑的部分是,此功能也已在另一个准系统应用程序上进行了测试,并且可以在相同设备上正常工作(即显示允许“运动与健身”的对话框)。所有相关系统设置均按预期配置,其他计步器\cm 应用程序将正常运行。

所以问题是关于我的应用程序的某些内容阻止了 CoreMotion 授权对话框的显示。是否有任何已知的“陷阱”或与使用 CoreMotion 和授权相关的问题?

【问题讨论】:

【参考方案1】:

我能想到的主要“陷阱”是确保您保留对 CMPedometer 对象的引用。如果您不这样做,则不会调用 queryPedometerDataFromDate 方法,这意味着它可能不会显示您正在寻找的授权对话框。

【讨论】:

【参考方案2】:

我在一周内遇到了这个问题。即使在第一次启动应用程序期间,对话框也没有出现……出现错误 105。 对我来说,这是由于我的 info.plist 以某种方式删除了我的应用程序包名称...所以请确保您在该名称中具有正确的名称;)

【讨论】:

以上是关于CoreMotion 授权问题的主要内容,如果未能解决你的问题,请参考以下文章

CoreMotion框架--加速计和陀螺仪

为啥 CoreMotion 授权消息在 iOS 8 后台出现“<APP>想要访问您的运动活动”

Core Motion 是不是需要授权/.plist 信息?

Swift CMMotionActivityManager 未显示正确的授权状态

通过 CoreMotion 检测摇动手势

如何在 WatchKit 中使用 CoreMotion?