RN集成到原生应用
参考
集成到现有原生应用
将RN集成到iOS原生项目中
RN嵌入到现有iOS原生应用
将RN工程嵌入到现有iOS原生应用
说明
虽然看了ReactNative官网还有网上的这些资料,有说怎么集成,但多多少少感觉不太对,写出来也是有问题,所以在这里记录一下集成成功的步骤,减少踩坑!
步骤 (以0.48.4版本RN为例)
新建相关文件
- 在原生项目.xcodeproj同级
mkdir RNUntils
新建RNUntils存放RN相关 - 在RNUntils目录下
touch package.json
新建文件
1 | { |
- 执行npm install 会自动生成node_modules
- 在RNUntils目录下
touch index.js
新建文件
注:创建一个空的index.js文件。(注意在 0.49 版本之前是 index.ios.js 文件)
1 | import React, { Component } from 'react'; |
- 在RNUntils文件下 终端运行
react-native bundle --platform ios --dev false --entry-file index.ios.js --bundle-output main.jsbundle
生成的 main.jsbundle 导入到原生项目中 再运行npm start
- 其中 index.ios.js” 根据根目录上的index.js (0.49版本之前是index.ios.js)
- ios/main.jsbundle 是根据在xcodeproj同级目录下的路径
- 其中 index.ios.js” 根据根目录上的index.js (0.49版本之前是index.ios.js)
- 编辑podfile文件
1 | # 'node_modules'目录一般位于根目录中 |
- 执行
pod install
注:(若 0.44.3之后版本 boost pod不下来 解决方案) 貌似换了 更不行 可能和网有关 可以试试! (更换后 需要先删除pod缓存 ~/Library/Caches/Cocoapods 再pod repo update 再 pod install才可以)
原生调用
需要先导入
<React/RCTRootView.h>、<React/RCTBundleURLProvider.h>
调用代码
1
2
3
4
5
6
7
8
9
10
11NSURL *jsCodeLocation =
[[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index.ios"
fallbackResource:nil];
RCTRootView *rootView =
[[RCTRootView alloc] initWithBundleURL : jsCodeLocation
moduleName : @"TestReactNative"
initialProperties :nil
launchOptions : nil];
UIViewController *vc = [[UIViewController alloc] init];
vc.view = rootView;
[self presentViewController:vc animated:YES completion:nil];- 其中 @”index” 根据根目录上的index.js (0.49版本之前是index.ios.js)
@"TestReactNative"
是js文件中最后写的名称
- 其中 @”index” 根据根目录上的index.js (0.49版本之前是index.ios.js)
需要修改info.plist文件
补充
以上是 在原生项目.xcodeproj同级 新建RNUntils文件存放RN相关 的操作流程
以下是 新建RNUntils文件存放RN相关、新建子文件ios 存放原生项目 的操作流程
区别在步骤 1、5、6上
1、新建文件夹专门放RN相关文件如RNUntils 新建子文件夹ios 将原生项目.xcodeproj同级所有文件复制到ios目录下
5、终端运行 修改 main.jsbundle
为 ios/main.jsbundle
6、在 podfile 文件 修改 :path => 'RNUntils/node_modules/react-native
为 :path => '../node_modules/react-native