我想用目标动作扩展程序记录我的应用的屏幕,音频和视频。
如果我将此代码放在普通应用程序中,它可以正常工作,但在Action Extension中则不行。
@IBAction func recButton(_ sender: Any) {
if recButton.currentTitle == "stop" {
stopRecording()
recButton.setTitle("rec", for: .normal)
}
else {
recButton.setTitle("stop", for: .normal)
RPScreenRecorder.shared().isMicrophoneEnabled = true
RPScreenRecorder.shared().startRecording(handler: {[unowned self] (error) in
//Handler - never called
if let unwrappedError = error {
print(unwrappedError.localizedDescription)
}
})
}
}
func stopRecording() {
RPScreenRecorder.shared().stopRecording(handler: {(previewController, error) -> Void in
//Handler - never called
if previewController != nil {
let alertController = UIAlertController(title: "Recording", message: "Do you want to discard or view your recording?", preferredStyle: .alert)
let discardAction = UIAlertAction(title: "Discard", style: .default) { (action: UIAlertAction) in
RPScreenRecorder.shared().discardRecording(handler: { () -> Void in
// Executed once recording has successfully been discarded
})
}
let viewAction = UIAlertAction(title: "View", style: .default, handler: { (action: UIAlertAction) -> Void in
self.present(previewController!, animated: true, completion: nil)
})
alertController.addAction(discardAction)
alertController.addAction(viewAction)
self.present(alertController, animated: true, completion: nil)
} else {
// Handle error
}
})
}
是否有其他方法可以使用AVCaptureSession实现此目标,还是需要使用其他方法来实现此目标?感谢。
答案 0 :(得分:1)
我很确定Apple不会让你设计。在扩展方面,它们通常非常严格,无论是在允许的范围内还是通过应用审核的内容方面。
即使你找到一个克服 ReplayKit 问题的hacky解决方案,我想它会被应用评论拒绝。
在一般App Review Guidelines中,app extension programming guide被引用作为定义指南,其中明确指出了行动扩展:
在iOS中,一个Action扩展名:
- 帮助用户以不同的方式查看当前文档
- 始终显示在操作表或全屏模式视图中
- 仅在主机应用程序明确提供的情况下接收所选内容
不太确定屏幕录制如何以一种说服Apple的方式适合该模式......
答案 1 :(得分:0)
我不认为这是不可能的,因为我在App Store上看到了一些应用程序,它们在iMessage扩展应用程序中录制视频和音频。喜欢:SuperMoji App此应用程序记录面部表情和音频 并仅在iPhone的消息应用程序中作为视频消息发送。
但是,我不确定如何在扩展程序中执行此操作。我正在努力,很快就会让你知道。