Ios CMSensorRecorder未经授权,但从未提示我给予授权?

Ios CMSensorRecorder未经授权,但从未提示我给予授权?,ios,swift,xcode,core-motion,watchos-5,Ios,Swift,Xcode,Core Motion,Watchos 5,我正在制作一个应用程序,可以在Apple Watch上记录一段时间内的用户加速,并将数据发送到配对的iPhone。我正在使用CoreMotion框架来实现这一点 我的问题:我一直在使用CMSensorRecorder对象来记录数据。这工作了一段时间,但CMSensorRecorder.authorizationStatus()现在为“未授权” 我从一开始就在手表和手机应用的info.plist文件中有一个NSMotionUsageDescription。我已经删除并重新添加了这些,没有运气 我记

我正在制作一个应用程序,可以在Apple Watch上记录一段时间内的用户加速,并将数据发送到配对的iPhone。我正在使用
CoreMotion
框架来实现这一点

我的问题:我一直在使用
CMSensorRecorder
对象来记录数据。这工作了一段时间,但
CMSensorRecorder.authorizationStatus()
现在为“未授权”

我从一开始就在手表和手机应用的
info.plist
文件中有一个
NSMotionUsageDescription
。我已经删除并重新添加了这些,没有运气

我记得该应用程序显示了允许运动跟踪的提示,但无法重新创建显示提示的功能。如果您能就如何再次启用
CMSensorRecorder
提供任何建议,我们将不胜感激。干杯

我的代码初始化
CMSensorRecorder

if CMSensorRecorder.isAccelerometerRecordingAvailable(){
            if CMSensorRecorder.authorizationStatus() == .authorized {
                print("\(Date()): recorder started")
                DispatchQueue.global(qos: .background).async {
                    DispatchQueue.global(qos: .background).sync{
                        self.dateStart = Date()
                        self.recorder.recordAccelerometer(forDuration: self.duration)   
                    }
                }
            }
            else {
                print("\(CMSensorRecorder.authorizationStatus())")
                self.xAccLabel.setText("not authorised")
            }
        }
        else {
            print ("Recording not available")
            self.xAccLabel.setText("Not available")
        }
找到了线索,有一个答案是:

我发现
CMSensorRecorder.isAuthorizedForRecording()
返回
true
仅在您的应用程序在
隐私/运动
健身
中获得授权后(在 iPhone)。然后授权应用程序进行
运动
Fitenss
I 必须访问一个核心运动功能(如
startActivityUpdatesToQueue
或甚至
RecordAccelerometer配置
)。 之后,你只需要在iPhone上确认,从现在开始
CMSensorRecorder.isAuthorizedForRecording()
返回
true

但是,我无法从
CMSensorRecroding
获取任何数据。就我而言
accelerometerDataFromDate
函数不返回任何数据- 返回值始终为零。因为其他地方说它可以 数据可用需要3分钟,我正在执行 以下场景:

  • 我正在使用
    recordAccelerometerForDuration(30)
    开始重新编码会话。在此我记录当前日期:
    recordingStartDate=NSDate()

  • 我等待了3分钟以上(保持应用程序在手表上处于活动状态),之后我拨打:

    加速计数据起始日期(NSDate(时间间隔:10,sinceDate:recordingStartDate),toDate:NSDate(时间间隔:20,sinceDate:recordingStartDate)

    如你所见,我在要求的30秒录制帧内制作了一个10秒窗口

  • 我得到
    nil

  • 我还尝试缩短超时时间,立即访问数据 甚至在打电话之前启动了加速计 ecordAccelerometerForDuration.没什么帮助,我还是拿不回来 从
    加速计数据从日期开始

    我真的很想知道你们怎么能从 传感器记录器

    也许9月9日之后情况会好转

    所以对于
    授权
    我尝试了
    startActivityUpdates
    如下所示

    self.activityManager.startActivityUpdates(to: OperationQueue.main, withHandler: {(data: CMMotionActivity!) -> Void in
    
    })
    
    您需要声明
    let activityManager=CMMotionActivityManager()


    一旦用户允许,如果CMSensorRecorder.authorizationStatus()==.Authorizated{
    将为
    true

    如果提示之前已显示并响应过,则您可能已关闭设置应用程序中的权限-您需要手动将其重新打开。iOS将不会再次提示用户。