Файл 'React / RCTBridgeModule.h' не найден в React Native 0.61.2 - PullRequest
1 голос
/ 21 апреля 2020

Я пытаюсь создать собственный собственный модуль для React 0.61.2.

Я создал версию Android, однако, похоже, что есть проблема с iOS.

Я пытаюсь выполнить следующую команду:

#import <React/RCTBridgeModule.h>

@interface PaypalSdk : NSObject <RCTBridgeModule>

@end

И получаю:

'React/RCTBridgeModule.h' file not found

Похоже, что в ранних версиях React Native было много изменений .6 версии.

В другой, более ранней версии React я добавил React.xcodeproj в свои библиотеки, и это сработало, однако это не представляется возможным, поскольку React.xcodeproj был удален.

Я прохожу эту проблему и проверил все, но ни одна из этих вещей не работает:

https://github.com/facebook/react-native/issues/25838

У меня также есть Здесь тоже все перепробовал, включая удаление React из моих схем и его повторное добавление:

https://github.com/facebook/react-native/issues/24363

Что может быть причиной этого?

РЕДАКТИРОВАТЬ: часть моего файла PaypalSdk.m:

#import "PaypalSdk.h"
#import <PayPal-iOS-SDK/PayPalMobile.h>
#import <PayPal-iOS-SDK/PayPalConfiguration.h>
#import <PayPal-iOS-SDK/PayPalOAuthScopes.h>
#import <PayPal-iOS-SDK/PayPalProfileSharingViewController.h>
#import <QuartzCore/QuartzCore.h>


@implementation PaypalSdk

... various methods and properties here

RCT_EXPORT_MODULE()

RCT_EXPORT_METHOD(generateCode:(NSString *)code callback:(RCTResponseSenderBlock)callback)
{
... more code here
    callback(@[[NSString stringWithFormat: @"code: %@", "test"]]);
}

@end

1 Ответ

0 голосов
/ 28 апреля 2020

Вместо:

#import <React/RCTBridgeModule.h>

Обычно вы решаете использовать это в 0.59x версиях:

#if __has_include("RCTBridgeModule.h")
#import "RCTBridgeModule.h"
#else
#import <React/RCTBridgeModule.h>
#endif

Однако из RN > = v0.60x , нам нужно добавить .podspe c в podfile для любой сторонней / пользовательской библиотеки, которая жалуется, что не может найти React / {what.h}. Поэтому, пожалуйста, не добавляйте файл .a в ваш Xcode Linked Framework and Libraries.

. Чтобы решить эту проблему, мы можем начать делать:

  1. Скопируйте podspec из другой сторонней библиотеки (например, RNDeviceInfo / et c ..);

  2. Создайте собственный podspec, заменив несколько элементов (например, s.name , s.source , s.source_files )

s.name   = "MyPayPalLib"
s.source = { :git => "https://github.com/my-super-repo/paypal-lib-repo.git", :tag => "v#{s.version}" }

.

Следуйте следующим шагам, следя за тем, чтобы ваша библиотека размещалась на npm / yarn / git (удаленно) или сохранялась локально в директории вашего проекта.

.

A. Если удаленная библиотека:

  1. Добавьте это для отслеживания всех ваших файлов lib: s.source_files = "ios/**/*.{h,m}"

  2. Добавьте новую библиотеку в Podfile: pod 'MyPayPalLib', :path => '../node_modules/MyPayPalLib'

  3. Do pod install

B. Если Локальная библиотека:

  1. Создайте этот custom.podspe c по тому же пути к пользовательской библиотеке, в противном случае вам потребуется изменить указанный выше путь s.source по мере необходимости.
s.source       = { :http => 'file:' + __dir__ + '/' }
s.source_files = "customLib/*.{h,m}"

Добавить новую библиотеку в Podfile: pod 'MyPayPalLib', :path => '../localLibFolder/MyPayPalLib'

Сделать pod install


РЕШЕНИЕ:

После исправления ошибки: 'React/RCTBridgeModule.h' file not found in React Native 0.61.2, объект NativeModules был пуст.

Итак, после некоторых исследований мы обнаружили проблему: s.source_files prop имел неправильное значение!

Всегда соблюдайте осторожность при использовании правильного s.source_files podspe c prop.

ОП использовал: s.source_files = "react-native-paypal-sdk/*.{h,m}"

Однако это должно быть: s.source_files = "ios/**/*.{h,m}"

Это рекомендуемый способ для удаленного хранилища.

...