iOS10系统从AppStore打开崩溃问题

2016-11-15  本文已影响339人  举个栗子wow

前一段无意中发现的,刚下载好的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打开时并不去调用这个方法?因为是推送。。。这种方式打开也和推送沾不上边啊。。。或者是之前也走,但不是空吧。。。

上一篇 下一篇

猜你喜欢

热点阅读