iOS10系统从AppStore打开崩溃问题

前一段无意中发现的,刚下载好的App从AppStore点击打开的时候刚启动就会崩溃,收集不到崩溃信息也无法复现这个效果。联想到之前审核的时候出现的启动崩溃可能就是这个地方,之前的一篇文章http://www.jianshu.com/p/30c535697269 。当时连崩溃的现象都无法复现只好申诉通过了,现在找到了这个现象就有了点头绪。
查了些资料和测试了几个系统版本,做了下对比。发现只有iOS10及以上的系统才会出现这个现象,而之前的系统都可以正常的打开。。。查阅了一下iOS10更新的地方也查不出个所以然来。。。那就一步一步从调用的方法中找吧。
正常的流程没有问题就暂时排除了正常流程的方法,重点看下被别的App唤起和收到推送启动这两个地方的方法。
被App唤起方法:

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url NS_DEPRECATED_IOS(2_0, 9_0, "Please use application:openURL:options:") __TVOS_PROHIBITED;
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(nullable NSString *)sourceApplication annotation:(id)annotation NS_DEPRECATED_IOS(4_2, 9_0, "Please use application:openURL:options:") __TVOS_PROHIBITED;

上面三个App之间互相唤起的方法(有两个iOS10之后就弃用了)并没有做什么操作,就是支付宝微信之类的回调,看了一下也不会造成什么影响,问题应该不是出现在这里。
那看下远程推送启动App:

- (void)receiveNotificationByLaunchingOptions:(NSDictionary *)launchOptions;

这个方法里面也没有写什么代码。。。不过有个隐藏的BUG。。。并没有判断会不会出现空值

NSDictionary *userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];

这里我并没有判断是不是为空值。。。因为推送都是我们来的。。。肯定没空值。。。直接强行处理userInfo中的信息了,可能造成崩溃,而且未对空值做正常启动的处理。当时也是猜的,后来发现猜对了。。。
于是做了些修改,为空时不解析数据,正常启动App。。。
打包上线。。。测试。。。问题解决了。。。
猜测可能是iOS10之前的系统从AppStore打开时并不去调用这个方法?因为是推送。。。这种方式打开也和推送沾不上边啊。。。或者是之前也走,但不是空吧。。。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,761评论 25 709
  • 因为要结局swift3.0中引用snapKit的问题,看到一篇介绍Xcode8,swift3变化的文章,觉得很详细...
    uniapp阅读 4,551评论 0 12
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,026评论 19 139
  • 介绍一下iOS10的通知新功能,用户体验的提升和开发者能够发挥的地方非常多,使得iOS更具有竞争力。 1.iOS ...
    F麦子阅读 3,900评论 3 4
  • 家和萨提亚领导力:自我关爱分享 第5天签到(2016.09.26) 每天坚持一件事:冥想三十分钟。今天冥想的过程里...
    孙丽霞阅读 149评论 0 0