ReplayKit:从未输入 startRecording() 完成处理程序
ReplayKit: startRecording() completion handler is never entered
问题描述
即使显示了 "Allow screen recording in $AppName" 弹出窗口,也从未输入 startRecording() 完成处理程序。偶尔会显示 "Allow screen recording in $AppName" 弹出窗口。当我删除应用程序、重新启动设备并对项目执行 clean/build 时,也会发生这种情况。我正在使用 iPad Air 2 和 iOS 11 和 Xcode 9.
研究
这个问题在早期版本中似乎也是一个问题,请参见此处:replaykit startrecording sometimes never enters completion handler
我不同意关闭 WiFi 或拥有稳定的互联网连接可以解决这个问题,这个问题也没有在 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)
}
})
}
我想我自己找到了答案。请尝试并确认它是否有效:
- 删除您的应用程序
- 清理 Xcode 项目
- 按住 iOS 设备的电源按钮
- 出现滑动关闭时,按住主屏幕按钮直到屏幕闪烁黑色,然后松开所有按钮
- 运行 你的 Xcode 项目又来了
- 现在应该再次调用处理程序
我怀疑是在使用的记录器共享实例中存在一些错误,只能在清理设备 RAM 时重置。
编辑:
我还观察到,只有当我在录制过程中使用 Xcode 停止 运行 应用程序时才会发生此错误。如果我将应用程序置于后台或使用iOS任务管理器关闭应用程序,则再次启动应用程序时不会出现此错误。
结论:不要使用Xcode关闭您的应用程序,而录制是运行。如果您改用 iOS 任务管理器,它将继续正常工作并提供回调。
编辑 2:
提交了一份错误报告,Apple 回答说他们已经知道这个问题,正在努力解决它。
问题描述
即使显示了 "Allow screen recording in $AppName" 弹出窗口,也从未输入 startRecording() 完成处理程序。偶尔会显示 "Allow screen recording in $AppName" 弹出窗口。当我删除应用程序、重新启动设备并对项目执行 clean/build 时,也会发生这种情况。我正在使用 iPad Air 2 和 iOS 11 和 Xcode 9.
研究
这个问题在早期版本中似乎也是一个问题,请参见此处:replaykit startrecording sometimes never enters completion handler 我不同意关闭 WiFi 或拥有稳定的互联网连接可以解决这个问题,这个问题也没有在 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)
}
})
}
我想我自己找到了答案。请尝试并确认它是否有效:
- 删除您的应用程序
- 清理 Xcode 项目
- 按住 iOS 设备的电源按钮
- 出现滑动关闭时,按住主屏幕按钮直到屏幕闪烁黑色,然后松开所有按钮
- 运行 你的 Xcode 项目又来了
- 现在应该再次调用处理程序
我怀疑是在使用的记录器共享实例中存在一些错误,只能在清理设备 RAM 时重置。
编辑: 我还观察到,只有当我在录制过程中使用 Xcode 停止 运行 应用程序时才会发生此错误。如果我将应用程序置于后台或使用iOS任务管理器关闭应用程序,则再次启动应用程序时不会出现此错误。
结论:不要使用Xcode关闭您的应用程序,而录制是运行。如果您改用 iOS 任务管理器,它将继续正常工作并提供回调。
编辑 2: 提交了一份错误报告,Apple 回答说他们已经知道这个问题,正在努力解决它。