react-native
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 多入口初始化问题