使用0.4版本RN框架
公司采用React Native框架在国内算是比较早的一批,目前用的是0.4.0版本,目前最新是0.17。为什么不更新呢?因为之前使用的过程中,已经对使用中的部分框架底层代码进行修改(赶需求你懂得),导致后来发现要更新的成本比较高,所以就暂且搁置更新的想法,毕竟在快速迭代版本的过程中公司不会给我们时间去重构。
command + R 飞一般的体验
那么我目前用的就是0.4.0版本了,在Xcode6.4的时候用起来还没什么问题,用模拟器调试的时候也可以通过command+R正常刷新,这种体验简直爽到哭,试想你刚改完代码就可以立刻(刷新时间不到1s)看效果,虽然这在前端的攻城狮看来没什么,但是面对Xcode的重新编译再运行,这真是彻底拯救iOS程序猿的宝贵时间,一般run一次中大型的App的时间都够你偷偷刷几次微博了吧。就在我十分舒爽的时候,隔壁安卓的同事告诉我Android Studio 2.0也可以实现这种功能,看来这是未来的趋势啊,不知道以后的Xcode xx会不会跟上这个功能。
升级Xcode7之后的悲剧
不过就在大家都升级到Xcode7并且普遍反映不能使用command+R之后,我内心是拒绝的……但是没办法,配合统一开发环境。用了一个月的Xcode7,有时候真想爆粗口,等待编译运行的时间就这么愣着,已经克制住不去刷微博刷知乎了,总之每次运行都得等待的这点时间就铁定浪费了。当然这么一来也是有好处的,就是我每次写完代码都会检查一遍再运行,但习惯了之前的体验,对比现在,真是特难受,就好像你住了8k一个月房租的房子,瞬间给你降到1k一个月的租房质量,总是适应不过来。
替代方法
为此我看了从0.4-0.17各个版本更新的内容,也在github上查了很多相关的issue,总算让我找到方法了:
通过ctrl+command+z快捷键可以弹出功能框
或者通过模拟器的顶部菜单栏,Hardware->Shake Gestrue弹出
弹出后就可以选择想要的功能了!
最想要的reload就在这!!
修改底层方法
当然通过改底层方法也是可以的,底层使用了UIKeyCommand来检测模拟器的输入。
- (void)bindKeys
{
RCTAssertMainThread();
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(reload)
name:RCTReloadNotification
object:nil];
#if TARGET_IPHONE_SIMULATOR
RCTKeyCommands *commands = [RCTKeyCommands sharedInstance];
// reload in current mode
[commands registerKeyCommandWithInput:@"r"
modifierFlags:UIKeyModifierCommand
action:^(__unused UIKeyCommand *command) {
[[NSNotificationCenter defaultCenter] postNotificationName:RCTReloadNotification
object:nil
userInfo:nil];
}];
#endif
}
官方自定义的方法registerKeyCommandWithInput,其中UIKeyModifierCommand代表了command键,‘r’代表r键。
如果你也对ReactNative感兴趣,欢迎一起研究。
网友评论