把 Reative Native 47 版本集成到已有的 Native iOS 工程中
一、搭建开发环境
http://reactnative.cn/docs/0.46/getting-started.html#content
二、创建一个模板
运行以下命令,创建一个最新版本的 reactive-native 的环境。RN 的版本如下:
react-native init MyTestRnWithNative
react-native -v
react-native-cli: 2.0.1
react-native: 0.47.1
得到以下的工程目录。其中iOS文件夹中是 Native 的工程,index.ios.js
是用来生成 JS 代码的。

其中打开工程文件,可以看到在 Build Phases 有额外的一个步骤,是用来启动服务器的。

三、新建一个 Native 的工程
移除 ios 文件夹中所有文件,在 ios 文件夹中用 Xcode 新建一个 iOS 的工程,并把 Allow Arbitrary Loads
的值设为 YES,允许本地服务器访问。
四、链接 RN 的库到工程中
引入 RN 的库到工程中
如下图所示,把需要引入的库拖入工程的 Library Group里

我链接了如下几个库。其中 React 库位于 node_modules/react-native/React
文件夹中,其它 5 个库分别位于 node_modules/react-native/Libraries
文件夹下。

链接静态库
方法如下,把 6 个子工程的 Products
目录下的 .a
文件拖入工程的 Link Binary With Library
选项中。

设置头文件路径
在 Build Settings
的 Header Search Paths
选项中,把工程的头文件设置正确。下面是设置完之后的截图。
五、设置启动 node 服务器的脚本


export NODE_BINARY=node
../node_modules/react-native/scripts/react-native-xcode.sh
六、写入 Demo 代码
#import <React/RCTBundleURLProvider.h>
#import <React/RCTRootView.h>
//viewDidLoad
NSURL *jsCodeLocation;
jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index.ios" fallbackResource:nil];
RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
moduleName:@"Bananas"
initialProperties:nil
launchOptions:nil];
rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1];
rootView.frame = CGRectMake(100, 200, 200, 400);
[self.view addSubview:rootView];
七、解决若干问题
'React/RCTBundleURLProvider.h' file not found
如下所示,去掉 Prarllelize Build
选项,新增一个 Target。

RCTWebSocket编译报错
打开工程中的RCTWebSocket.xcodeproj -> build settings > all -> Apple LLVM 8.0 - Custom Comple Flags -> 去掉 Other Warning Flags中-Werror -Wall 值后重新编译即可。
八、Run

参考
把 Reative Native 47 版本集成到已有的 Native iOS 工程中的更多相关文章
- react native 之 在现有的iOS工程中集成react native
在现有的iOS工程中集成react native, 或者说将react native引入到iOS 项目,是RN和iOS混合开发的必经之路 参考官网教程:https://reactnative.cn/d ...
- 集成 jpush-react-native 常见问题汇总 (iOS 篇)
给 iOS 应用添加推送功能是一件比较麻烦的事情,本篇文章收集了集成 jpush-react-native 的常见问题,目的是为了帮助用户更好地排查问题 1. 收不到推送 确保是在真机上测试,而不是在 ...
- React-Native集成到已有项目中的总结
安装Python 从官网下载并安装python 2.7.x(3.x版本不行) 安装node.js 从官网下载node.js的官方V6.X.X版本或更高版本.安装完成后检测是否安装成功:node -v ...
- React Native之支付集成(微信 支付宝)(ios android)
React Native之支付集成(微信 支付宝)(ios android) 一,需求分析 1.1,app在线充值与提现 二,技术介绍与集成 2.1,微信支付 2.1.1,Android配置 详细配置 ...
- 如何在Cordova Android 7.0.0 以下版本集成最新插件 极光插件为例
前提 Cordova Android 7.0.0开始改变了项目安卓平台的架构.新建一个空项目分别添加Android 6.4.0 和 Android 7.0.0平台: cordova platform ...
- 您的浏览器没有获得Java Virtual Machine(JVM)支持。可能由于没有安装JVM或者已安装但是没有启用。请安装JVM1.5或者以上版本,如果已安装则启用它。
您的浏览器没有获得Java Virtual Machine(JVM)支持.可能由于没有安装JVM或者已安装但是没有启用.请安装JVM1.5或者以上版本,如果已安装则启用它. https://www.j ...
- iOS 国际本地化(对新项目集成和已有项目集成)
第一推荐一篇金先生的博客,受益非浅,在这里真诚的感谢 https://www.jianshu.com/p/7cb0fad6d06f金小白 首先金小白先生把两种方式都做了介绍,第一种我就不在过多详细的讲 ...
- C++的性能C#的产能?! - .Net Native 系列《三》:.NET Native部署测试方案及样例
之前一文<c++的性能, c#的产能?!鱼和熊掌可以兼得,.NET NATIVE初窥> 获得很多朋友支持和鼓励,也更让我坚定做这项技术的推广者,希望能让更多的朋友了解这项技术,于是先从官方 ...
- React Native是一套使用 React 构建 Native app 的编程框架
React Native是一套使用 React 构建 Native app 的编程框架 React Native at first sight what is React Native? 跟据官方的描 ...
随机推荐
- 9.Palindrome Number (INT)
Determine whether an integer is a palindrome. Do this without extra space. class Solution { public: ...
- Mybatis中DAO层接口没有写实现类,Mapper中的方法和DAO接口方法是怎么绑定到一起的
参考mybatis入门基础(二)----原始dao的开发和mapper代理开发 其实也就是通过接口名与mapper的id绑定在一起,通过SQL去写实现类,返回数据.
- C#缓存-依赖 CacheHelper
缓存依赖文件或文件夹 //创建缓存依赖项 CacheDependency dep = new CacheDependency(fileName);//Server.MapPath("&quo ...
- loadrunner--vugen录制脚本提示“无Internet访问。您可能无法录制并执行业务进程”
1.vugen录制脚本提示如下,为什么会提示这个呢?这个提示忽略会对录制脚本有影响吗?最好应该怎么操作? 惠普技术支持回复: 您可以试试,若点击“Yes”,是否可以继续录制网站?若可以的话,您也确定网 ...
- marioTcp
https://github.com/nicholaszj/marioTcp MarioTCP MarioTCP 是使用libevent模型来建立的一个性能强大的TCP服务器. 1:Getting S ...
- Laravel trait 使用心得
trait 是在PHP5.4中为了方便代码复用的一种实现方式,但目前我在看的的PHP项目中较少看的有程序员去主动使用这个实现方式,在laravel中有很多 trait 的使用,关于trait 在 la ...
- JavaScript 语法总结
1. 不能为基本类型变量添加属性和方法. 如果添加了,那么也是undefined的. var str = "a string"; str.attr = "attr&quo ...
- PMP项目管理笔记
项目管理三重制约:时间.成本.范围.结果:质量(结果质量和过程质量)四个层次:复杂事情简单化:分解简单事情量化:临界值量化的事情专业化:规律专业的事情模板化:框架模板 工作分日常运作和项目.日常运作为 ...
- java中double和float精度丢失问题
为什么会出现这个问题呢,就这是java和其它计算机语言都会出现的问题,下面我们分析一下为什么会出现这个问题:float和double类型主要是为了科学计算和工程计算而设计的.他们执行二进制浮点运算,这 ...
- Nginx搭建后,图片存储在Tomcat上,前端无法回显图片问题
一.Nginx与Tomcat连接搭建的环境,Nginx设置了前端的访问路径为 (1)前端代码配置: root /usr/local/nginx/html; index index.html index ...