Вопрос или проблема
Не удается собрать проект на iOS
Ошибка: Не удается найти тип ‘RCTEventDispatcher’ в области видимости
React-native v0.73.6 + react-native-video ^6.5.0
import AVFoundation
import AVKit
import Foundation
#if USE_GOOGLE_IMA
import GoogleInteractiveMediaAds
#endif
import React
// MARK: - RCTVideo
class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverHandler {
private var _player: AVPlayer?
private var _playerItem: AVPlayerItem?
private var _source: VideoSource?
private var _playerLayer: AVPlayerLayer?
private var _chapters: [Chapter]?
private var _playerViewController: RCTVideoPlayerViewController?
private var _videoURL: NSURL?
private var _localSourceEncryptionKeyScheme: String?
/* Необходимо для публикации событий */
private var _eventDispatcher: RCTEventDispatcher?
private var _videoLoadStarted = false
init(eventDispatcher: RCTEventDispatcher!) {
super.init(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
ReactNativeVideoManager.shared.registerView(newInstance: self)
#if USE_GOOGLE_IMA
_imaAdsManager = RCTIMAAdsManager(video: self, pipEnabled: isPipEnabled)
#endif
_eventDispatcher = eventDispatcher
#if os(iOS)
if _pictureInPictureEnabled {
initPictureinPicture()
_playerViewController?.allowsPictureInPicturePlayback = true
} else {
_playerViewController?.allowsPictureInPicturePlayback = false
}
#endif
Переустановка pods не работает. Я гуглил, и все методы, описанные в следующих темах, не работают: https://github.com/TheWidlarzGroup/react-native-video/issues/3004
https://github.com/TheWidlarzGroup/react-native-video/issues/3622
https://github.com/TheWidlarzGroup/react-native-video/issues/3152 ошибка: ожидается тип – eventDispatcher:(nonnull RCTEventDispatcher *)eventDispatcher; И ошибки ‘Неопределенный символ’ во время сборки iOS
Ответ или решение
Ошибка "Cannot find type ‘RCTEventDispatcher’ in scope" возникает чаще всего из-за изменений в зависимости React Native и его внутренней архитектуры. С вашими версиями React Native (0.73.6) и react-native-video (6.5.0) стоит обратить внимание на несколько моментов.
-
Проблема с ‘RCTEventDispatcher’:
Начиная с определенных версий React Native, классRCTEventDispatcher
был заменен на другой способ обработки событий. Это означает, что старый код, который используетRCTEventDispatcher
, может не работать в новых версиях. -
Обновление импорта:
ВместоRCTEventDispatcher
, вам нужно использовать новый способ передачи событий. Например, вместо создания экземпляраRCTEventDispatcher
, используйте объект делегатаRCTBridge
. Вот пример обновленного кода:import React class RCTVideo: UIView { private var eventEmitter: RCTEventEmitter? init(bridge: RCTBridge) { super.init(frame: .zero) self.eventEmitter = bridge.eventDispatcher() // Другие инициализации } }
-
Проверка документации:
Обязательно ознакомьтесь с документацией на GitHub дляreact-native-video
и взвесьте, возможно, вам потребуется обновить вашу реализацию, чтобы соответствовать последним изменениям в библиотеке. -
Удаление и переустановка зависимостей:
Если вы не сделали этого, попробуйте удалить папкиnode_modules
иPods
, а затем снова установить зависимости:rm -rf node_modules rm -rf ios/Pods yarn install # или npm install cd ios pod install
-
Проверка совместимости версий:
Убедитесь, что версии React Native иreact-native-video
совместимы друг с другом. Проверьте на GitHub, есть ли известные проблемы с вашими версиями. -
Дополнительные шаги:
Если ошибка сохраняется, попробуйте очистить кеш:watchman watch-del-all rm -rf $TMPDIR/react-* rm -rf $TMPDIR/metro-* yarn start --reset-cache
- Обновление проекта:
Возможно, вам первоначально потребуется обновить проект до более новой версии React Native, чтобы использовать новшества в архитектуре библиотеки и избежать использования устаревших методов.
Надеюсь, эти шаги помогут решить вашу проблему. Если у вас остались вопросы, не стесняйтесь задать их!