Вангую, что проблема здесь:
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
if status == .authorizedWhenInUse || status == .authorizedAlways {
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
if !self.videoOutput.isRecording {
self.startRecording()
}
}
}
}
В viewDidLoad() вы вызываете setupLocationManager(). Когда приложение запускается, оно запрашивает разрешение на использование геолокации. Как только пользователь дает разрешение (или если оно уже было дано ранее), срабатывает didChangeAuthorization и срабатывает условие на запись через 0.5 секунды.