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
包含React
pod:
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
,以及如何在我的本机模块中摆脱它?
根据React Native 的 App Center SDK 文档,您必须运行react-native link
它将添加 React Native for iOS 的本机依赖项。
React-native 版本实际上是在package.json
Javascript 级别定义的,react-native link
并将安装该版本相应的本机依赖项。
此外,当我们对 SDK 进行更改时,我们使用测试应用程序来托管项目,以便我们可以在同一 XCode 工作区中编辑测试应用程序和 SDK 代码。
归档时间: |
|
查看次数: |
5560 次 |
最近记录: |