React-native 模块的 podspec 中的 React 依赖

Kon*_*sov 6 objective-c ios cocoapods react-native

我正在查看Microsoft 的 React-Native 移动中心 SDK 的源代码。React-Native 有几个原生模块,推荐的安装方式是通过 Cocoapods。

现在,每个模块都有 podspec,但没有提及React依赖项。例如,appcenter-crashes.podspec具有以下依赖关系:

s.dependency 'AppCenterReactNativeShared'
s.dependency 'AppCenter/Crashes' 
Run Code Online (Sandbox Code Playgroud)

并且AppCenterReactNativeShared.podspec刚刚

s.dependency 'AppCenter/Core', '1.1.0'
Run Code Online (Sandbox Code Playgroud)

然而,该模块是反应本机桥梁,依赖于其源React并从中导入React。例如,AppCenterReactNativeCrashes.m有这些行:

#import "AppCenterReactNativeCrashes.h"

// Support React Native headers both in the React namespace, where they are in RN version 0.40+,
// and no namespace, for older versions of React Native
#if __has_include(<React/RCTAssert.h>)
#import <React/RCTAssert.h>
#import <React/RCTBridgeModule.h>
...
Run Code Online (Sandbox Code Playgroud)

接下来,在我的 React-Native 项目中,我可以链接移动中心并使用 Podfile 构建和运行我的应用程序,如下所示:

target 'example' do
  pod 'AppCenter/Crashes', '~> 1.0.1'
  pod 'AppCenter/Analytics', '~> 1.0.1'
  pod 'AppCenterReactNativeShared', '~> 1.0.1'
end
Run Code Online (Sandbox Code Playgroud)

再说一次,我不需要React在这里提及 pod 及其子规格!

现在在我自己的react-native本机模块中,我必须声明依赖项,例如:

s.dependency 'React'
s.dependency 'some-other-dependency-my-module-needs'
Run Code Online (Sandbox Code Playgroud)

然后在我的应用程序中Podfile包含Reactpod:

pod 'yoga', path: "#{rn_path}/ReactCommon/yoga/yoga.podspec"
pod 'React', path: rn_path, subspecs: [
  'Core',
  'RCTActionSheet',
...
Run Code Online (Sandbox Code Playgroud)

如果我不包含React在本机模块 podspec 中,则会收到 error fatal error: 'React/RCTBridgeModule.h' file not found。如果我不添加React到 Pofile,那么 Cocoapods 会从其存储库中拖动已弃用的 React pod,并且构建会中断。

所以,我的问题是移动中心本机模块怎么可能在其 podspec 中没有React,以及如何在我的本机模块中摆脱它?

Gui*_*rot 1

根据React Native 的 App Center SDK 文档,您必须运行react-native link它将添加 React Native for iOS 的本机依赖项。

React-native 版本实际上是在package.jsonJavascript 级别定义的,react-native link并将安装该版本相应的本机依赖项。

此外,当我们对 SDK 进行更改时,我们使用测试应用程序来托管项目,以便我们可以在同一 XCode 工作区中编辑测试应用程序和 SDK 代码。