[React Native] App生产模式(release)闪退,报variable not available错误的解决思路

笔者大半个月前决定放弃迭代公司最初基于Cordova+Ionic(基于Angular 1.x)构建的App,而倒戈向RN。在基于RN的App临近提交时,遭遇了一个问题:提交到Test Flight上的App下载后,打开全部闪退。

最开始怀疑是集成的Easemob(环信IM)在生产模式抛出了异常所致。这个最直接的怀疑是在集成Easemob3.0是遇到了不少坑,花费了不少精力才让Easemob和RN有了亲密合体。(环信官方提供了一个基于Web IM的RN解决方案,但该方案没有消息推送、历史会话记录、音视频消息等,因此,不适应我们的业务需要,隧放弃)。排除后发现错怪环信了。Easemob的RN原生模块,将在未来两周内提交Github开源托管,有兴趣的筒子,欢迎那啥,你懂得。

调试是王道,通过xcode将scheme切换到release模式,Run了起来,得到如下Info:


发现竟然是找不到jsbundle文件。第一反应这个估计是没有添加隐私策略。google了一通看看需要在Info.plist中添加哪些项。一股脑加了些有关访问文件系统的Privacy,再Run,闪退依旧。单点调试,报variable not available错误,错误如下:


[React Native] App生产模式(release)闪退,报variable not available错误的解决思路_第1张图片

凭以往的经验感觉应该是ios11 app settings里面的设置项有所变化,对照了下,最终发现Optimization Level的Release值与Apple LLVM 8.0不同,改为None试试看


[React Native] App生产模式(release)闪退,报variable not available错误的解决思路_第2张图片

在生成模式下,再次Run起来,App没有发生闪退,自此问题解决。感兴趣的筒子,也可以逐一试试。默认的[-Os]值易出问题。后搜索了补充对Optimization level的了解,可以参加此篇blog:问题:编译策略之代码逻辑顺序不正确(Optimization Level) 。

你可能感兴趣的:([React Native] App生产模式(release)闪退,报variable not available错误的解决思路)