ReplayKit:startRecording()完成处理程序从不input

问题描述

即使显示“允许在$ AppName中logging屏幕”popup窗口,也不会inputstartRecording()完成处理程序。 偶尔会显示“在$ AppName中允许屏幕录制”popup窗口。 这也发生在我删除应用程序,重新启动设备,并干净/build立在项目上。 我正在使用iOS 11和Xcode 9的iPad Air 2。

研究

这个问题在早期版本中似乎也是一个问题,请看这里: replaykit startrecording有时从来没有进入完成处理程序我不能批准closuresWiFi或有一个稳定的互联网连接解决这个问题,这个问题也没有解决在iOS 11。

这是我正在使用的代码:

@IBAction func recordButtonTapped(_ sender: UIButton) { if !recorder.isRecording { startRecording(sender) } else { stopRecording(sender) } } private func startRecording(_ sender: UIButton) { guard recorder.isAvailable else { print("Recording is not available at this time.") // Display UI for recording being unavailable return } recorder.startRecording(handler: { (error) in guard error == nil else { print("There was an error starting the recording.") print(error!) return } print("Started Recording Successfully") DispatchQueue.main.async { sender.setTitle("Stop Recording", for: .normal) sender.setTitleColor(.red, for: .normal) } }) } 

我想我自己find了答案。 请试试看,并确认它是否工作:

  1. 删除你的应用程序
  2. 清理Xcode项目
  3. 按住你的iOS设备的电源button
  4. 出现滑动closures时,按住主页button直到屏幕闪烁黑色,然后释放所有button
  5. 再次运行您的Xcode项目
  6. 现在应该再次调用处理程序

我的怀疑是logging器使用的共享实例中有一些错误,只能在清除设备RAM时复位。

编辑:我也观察到,这个错误只发生在logging正在进行时用Xcode停止正在运行的应用程序。 如果我将应用程序置于后台或使用iOS任务pipe理器closures应用程序,则应用程序再次启动时不会显示此错误。

结论:在录制运行时, 请勿使用Xcodeclosures应用程序。 如果您使用iOS任务pipe理器,则它将继续正常工作并提供callback。

编辑2:提交了一个错误报告,苹果回答说,他们知道这个问题,正在解决这个问题。