Комплект воспроизведения Не работает IPAD IOS11 BUG

Я использую следующий код для записи экрана. Он отлично работает для ios10 и ios9.

 @IBAction func btnRecordTapped(_ sender: UIButton) {

    if RPScreenRecorder.shared().isAvailable {


        if #available(iOS 10.0, *) {
            RPScreenRecorder.shared().startRecording(handler: { (error) in
                guard error == nil else {
                    print("Record failed with error \(error!.localizedDescription)")
                    return
                }

                DispatchQueue.main.async {
                    sender.removeTarget(self, action: #selector(self.btnRecordTapped(_:)), for: .touchUpInside)
                    sender.addTarget(self, action: #selector(self.stoprecording(button:)), for: .touchUpInside)

                    sender.setTitle("Stop", for: .normal)
                    sender.setTitleColor(.red, for: .normal)


                }


            })
        } else {

            RPScreenRecorder.shared().startRecording(withMicrophoneEnabled: false, handler: { (error) in

                guard error == nil else {
                    print("Record failed with error \(error!.localizedDescription)")
                    return
                }

                DispatchQueue.main.async {
                    sender.removeTarget(self, action: #selector(self.btnRecordTapped(_:)), for: .touchUpInside)
                    sender.addTarget(self, action: #selector(self.stoprecording(button:)), for: .touchUpInside)

                    sender.setTitle("Stop", for: .normal)
                    sender.setTitleColor(.red, for: .normal)


                }

            })
        }
    } else {
        print("Screen Reocrder not availble")
    }

}

Я вижу запрос на разрешение в ios10 и ios9, но не вижу для ios11

ios11 Блок завершения (закрытия) никогда не вызывается
Я уже убедился, что метод вызывается правильно, если условие if RPScreenRecorder.shared().isAvailable { Также позволяет впустить

Помогите пожалуйста, если кто знает об этом

введите здесь описание изображения

введите здесь описание изображения


person Prashant Tukadiya    schedule 03.10.2017    source источник
comment
Вы пробовали на физическом устройстве? Возможно, связано с https://stackoverflow.com/questions/40024316/reading-from-public-efficient-user-settings-in-ios-10   -  person mato    schedule 03.10.2017
comment
@mato Спасибо за ответ Запись экрана не поддерживается в симуляторе, предоставленная ссылка не имеет ничего общего с проблемой   -  person Prashant Tukadiya    schedule 03.10.2017
comment
Здесь есть соответствующая тема: forums.developer.apple.com/thread/87007 В В моем случае я перезапустил iPad, и меня снова спросили о предоставлении разрешений на запись экрана при следующем запуске приложения, а затем оно снова заработало.   -  person endavid    schedule 28.07.2018


Ответы (1)


У меня была та же проблема, что и у вас, поэтому я подумал об обновлении до iOS 11.0.2, и у меня это сработало! Надеюсь, это поможет и вам.

На всякий случай вот мои методы:

let recorder = RPScreenRecorder.shared()

@IBAction func recordingAction(_ sender: Any) {
        if recorder.isRecording {
            stopRecordAction()
        } else {
            startRecordAction()
        }
}

func startRecordAction() {
     recorder.startRecording{ (error) in
            if let error = error {
               print("❗️",error)
             }
      }
}

func stopRecordAction() {
            recorder.stopRecording{ (previewVC, error) in
                if let previewVC = previewVC {
                    previewVC.previewControllerDelegate = self
                    self.present(previewVC, animated: true, completion: nil)
                    if let error = error {
                        print("❗️",error)
                    }
                }
            }
    }

Методы RPPreviewViewControllerDelegate:

func previewControllerDidFinish(_ previewController: RPPreviewViewController) {
        dismiss(animated: true, completion: nil)
    }

    func previewController(_ previewController: RPPreviewViewController, didFinishWithActivityTypes activityTypes: Set<String>) {
        /// This path was obtained by printing the actiong captured in "activityTypes"
        if activityTypes.contains("com.apple.UIKit.activity.SaveToCameraRoll") {
            recordFinshedMessage()
        }
    }
person Maisa M.    schedule 05.10.2017
comment
У меня такая же проблема с ReplayKit. Он отлично работает на ipad pro 11 (iOS 13.3), но не на iPhone 11 (iOS 13.6). Вы знаете какую-нибудь причину? - person swiftlearneer; 26.08.2020