开发App也有几年了,从iOS开始,顺手捡上Android,基本打通了App端,自己也一直维护着一个小项目—我爱运动,由于是纯Native的,每次版本迭代都是先做完iOS端,提交审核,然后再回过头来开发Android端,如是多次后,跨平台的需求就逐渐清晰和强烈起来,于是React Native(以下简称 RN)开始进入我的眼帘。
10月份的时候我还心存侥幸的试了一下BuglyHotfix(JSPatch+Bugly后台,的确方便、好用),妥妥的被苹果打回来了(虽然按照Bugly的demo工程做了一些混淆),进一步促成我React Native之旅的开始。
准备工作
在正式开始前,先查看了一些集成到现有Native工程的文章,当时最新的RN版本是0.49,做了2个demo,一个纯Objective-C(以下简称 OC)的demo工程集成很顺利,一个纯Swift的demo工程就没有那么顺利了,各种折腾(好像工程的入口必须要main.m–>AppDelegate.m这样,只有AppDelegate.swift似乎无法正常读取),最后也没折腾太明白。
旧工程集成-iOS
由于我的iOS工程是Swift为主(入口是Swift的–AppDelegate.swift),OC为辅,加上前面没有彻底解决Swift工程的集成问题,便直接用 react-native init ProjectName 新建了RN项目(iOS工程默认用的OC),并将AppDelegate.swift中的内容搬到AppDelegate.m中,其它文件(包括.swift文件)倒是不用调整,直接Add Files to project即可(Xcode9下直接拖进去可能有问题)。
旧工程集成-Android
在 react-native init 时相应的工程配置已经就绪,所以直接加入原来的那些文件即可(Java文件、资源文件直接复制粘贴,Module重新导入)。
加入RN新内容
用js开发并调试好新内容后,就可以在Native中使用了。
对于iOS,只要获取到对应的RCTRootView就可以很方便的使用了。
RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:url moduleName:mName initialProperties:nil launchOptions:nil];
self.view=rootView;
对于Android来说,也基本类似。