RPScreenRecorder Как запись экрана аудио и видео приложения 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 или мне нужно использовать что-то еще для достижения этой цели? Благодарю.

2 ответа

Я почти уверен, что Apple не позволит вам сделать это по замыслу. Когда речь идет о расширениях, они, как правило, очень строги как в отношении того, что разрешено для применения, так и в отношении того, что будет проходить проверку приложения.

Даже если вы найдете хакерское решение для преодоления проблем с ReplayKit, я думаю, оно будет отклонено обзором приложения.

В общих рекомендациях по обзору приложений руководство по программированию расширений приложений упоминается как определяющая рекомендация, в которой для расширения действия конкретно указывается:

В iOS расширение Action:

  • Помогает пользователям просматривать текущий документ по-другому
  • Всегда отображается на листе действий или в полноэкранном режиме
  • Получает выбранный контент, только если он явно предоставлен хост-приложением

Не совсем уверен, как запись экрана вписывается в этот шаблон таким образом, что убеждает Apple...

Я не думаю, что это невозможно, так как я видел некоторые приложения в App Store, которые записывают видео и аудио в приложении расширения iMessage. Как: приложение SuperMoji Это приложение записывает выражение лица и аудио и отправляет в виде видео сообщения только в приложении iPhone сообщения.

Однако я не уверен, как это сделать в приложениях расширения. Я работаю над этим и сообщу вам очень скоро.

Другие вопросы по тегам