前一段無意中發(fā)現(xiàn)的穷缤,剛下載好的App從AppStore點(diǎn)擊打開的時候剛啟動就會崩潰,收集不到崩潰信息也無法復(fù)現(xiàn)這個效果箩兽。聯(lián)想到之前審核的時候出現(xiàn)的啟動崩潰可能就是這個地方津肛,之前的一篇文章http://www.reibang.com/p/30c535697269 。當(dāng)時連崩潰的現(xiàn)象都無法復(fù)現(xiàn)只好申訴通過了汗贫,現(xiàn)在找到了這個現(xiàn)象就有了點(diǎn)頭緒身坐。
查了些資料和測試了幾個系統(tǒng)版本,做了下對比落包。發(fā)現(xiàn)只有iOS10及以上的系統(tǒng)才會出現(xiàn)這個現(xiàn)象部蛇,而之前的系統(tǒng)都可以正常的打開。妥色。搪花。查閱了一下iOS10更新的地方也查不出個所以然來遏片。嘹害。。那就一步一步從調(diào)用的方法中找吧吮便。
正常的流程沒有問題就暫時排除了正常流程的方法笔呀,重點(diǎn)看下被別的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之后就棄用了)并沒有做什么操作髓需,就是支付寶微信之類的回調(diào)许师,看了一下也不會造成什么影響,問題應(yīng)該不是出現(xiàn)在這里。
那看下遠(yuǎn)程推送啟動App:
- (void)receiveNotificationByLaunchingOptions:(NSDictionary *)launchOptions微渠;
這個方法里面也沒有寫什么代碼搭幻。。逞盆。不過有個隱藏的BUG檀蹋。。云芦。并沒有判斷會不會出現(xiàn)空值
NSDictionary *userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
這里我并沒有判斷是不是為空值俯逾。。舅逸。因?yàn)橥扑投际俏覀儊淼淖离取!A鹄坠七?隙]空值。旗笔。灼捂。直接強(qiáng)行處理userInfo中的信息了,可能造成崩潰换团,而且未對空值做正常啟動的處理悉稠。當(dāng)時也是猜的,后來發(fā)現(xiàn)猜對了艘包。的猛。。
于是做了些修改想虎,為空時不解析數(shù)據(jù)卦尊,正常啟動App。舌厨。岂却。
打包上線。裙椭。躏哩。測試。揉燃。扫尺。問題解決了。炊汤。正驻。
猜測可能是iOS10之前的系統(tǒng)從AppStore打開時并不去調(diào)用這個方法弊攘?因?yàn)槭峭扑汀9檬铩=蠼弧_@種方式打開也和推送沾不上邊啊。伤靠。婿着。或者是之前也走醋界,但不是空吧竟宋。。形纺。