Не удается найти тип ‘RCTEventDispatcher’ в области видимости | react-native-video

Вопрос или проблема

Не удается собрать проект на 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

Ошибка в Xcode

Ошибка в Xcode

Переустановка 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) стоит обратить внимание на несколько моментов.

  1. Проблема с ‘RCTEventDispatcher’:
    Начиная с определенных версий React Native, класс RCTEventDispatcher был заменен на другой способ обработки событий. Это означает, что старый код, который использует RCTEventDispatcher, может не работать в новых версиях.

  2. Обновление импорта:
    Вместо RCTEventDispatcher, вам нужно использовать новый способ передачи событий. Например, вместо создания экземпляра RCTEventDispatcher, используйте объект делегата RCTBridge. Вот пример обновленного кода:

    import React
    
    class RCTVideo: UIView {
       private var eventEmitter: RCTEventEmitter?
    
       init(bridge: RCTBridge) {
           super.init(frame: .zero)
           self.eventEmitter = bridge.eventDispatcher()
           // Другие инициализации
       }
    }
  3. Проверка документации:
    Обязательно ознакомьтесь с документацией на GitHub для react-native-video и взвесьте, возможно, вам потребуется обновить вашу реализацию, чтобы соответствовать последним изменениям в библиотеке.

  4. Удаление и переустановка зависимостей:
    Если вы не сделали этого, попробуйте удалить папки node_modules и Pods, а затем снова установить зависимости:

    rm -rf node_modules
    rm -rf ios/Pods
    yarn install # или npm install
    cd ios
    pod install
  5. Проверка совместимости версий:
    Убедитесь, что версии React Native и react-native-video совместимы друг с другом. Проверьте на GitHub, есть ли известные проблемы с вашими версиями.

  6. Дополнительные шаги:
    Если ошибка сохраняется, попробуйте очистить кеш:

    watchman watch-del-all
    rm -rf $TMPDIR/react-*
    rm -rf $TMPDIR/metro-*
    yarn start --reset-cache
  7. Обновление проекта:
    Возможно, вам первоначально потребуется обновить проект до более новой версии React Native, чтобы использовать новшества в архитектуре библиотеки и избежать использования устаревших методов.

Надеюсь, эти шаги помогут решить вашу проблему. Если у вас остались вопросы, не стесняйтесь задать их!

Оцените материал
Добавить комментарий

Капча загружается...