react-native

2017-12-05  本文已影响0人  jason_master

1.集成到现有原生应用

项目的需求一直是需要集成新的功能到现有的原生应用。所以 最终选择了使用 RN。

按照官网步骤,配置好相关环境

RN版本更新较快

http://reactnative.cn/docs/0.47/getting-started.html#content

有时候中文网的翻译不够准确,需要看英文原版的。(此处踩过坑)

pods 已经很好的集成了RN 所以更轻松的引入react-native

0.45版本发布后,有重大更新。如果你正在使用 Cocoapods, 你必须更新你的 Podfile ,给其中的 React subspec 添加 ‘BatchedBridge’ 依赖。

2.增量更新

最开始每次更新都是新发布一个bundle 然后压缩为zip,然后每次在不同的情况下都会去下载新包,下载完成后解压,替换本地bundle,完成更新。但是后来包越来越来,需要优化。更新也不足够的稳定。

2.1使用code-push

efe.baidu.com/blog/react-native-code-push-ios/

根据步骤完成后,搭建本地的服务器

www.jianshu.com/p/eb7fdee307dc

修改加载方式,不用自己的更新机制

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {NSURL *jsCodeLocation;#ifdef DEBUG//    NSString *path = [[NSBundle mainBundle] pathForResource:@"index.ios" ofType:@"bundle"];//    jsCodeLocation = [NSURL URLWithString:path];//    jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"main" fallbackResource:nil];jsCodeLocation = [CodePush bundleURLForResource:@"index_test.ios" withExtension:@"bundle"];#elsejsCodeLocation = [CodePush bundleURLForResource:@"index.ios" withExtension:@"bundle"];#endifRCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocationmoduleName:@"nazgrel"initialProperties:nillaunchOptions:launchOptions];rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1];self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];UIViewController *rootViewController = [UIViewController new];rootViewController.view = rootView;self.window.rootViewController = rootViewController;[self.window makeKeyAndVisible];return YES;}

本地倒入要加载的bundle文件,修改info.plist

Bundle versions string, short 要对应发布的版本

添加 CodePushDeploymentKey  Staging  CodePushServerURL  分别对应线上环境key 预发测试环境key 和服务器地址

2.2 React_Native拆分bundle之patch拆包

njafei.github.io/2017/04/06/React-Native-Seperate-Bundle/

RCTRootView 多入口初始化问题

www.jianshu.com/p/56589100d386

上一篇下一篇

猜你喜欢

热点阅读