Bugly的日常

Author Avatar
xiaoLit Created: Nov 22, 2018 Updated: May 17, 2019

最好不要看什么其他人写的关于buglg的具体操作,就连符号表的基本提取操作之前看了其他文章都让我绕了好多弯路,直接官方文档为准。

不记得哪位大佬发的图片了,引以为向前的目标

崩溃日志
-[CFPrefsSearchListSource alreadylocked_copyDictionary] 
-[CFPrefsSearchListSource alreadylocked_copyValueForKey:] 

日历获取在9.x之后的系统使用 [NSCalendar currentCalendar] 会出异常。在8.0之后使用系统新API,做个分类用一下代码

+ (NSCalendar *)Lit_currentCalendar {
    if ([NSCalendar respondsToSelector:@selector(calendarWithIdentifier:)]) {
        return [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian];
    }
    return [NSCalendar currentCalendar];
}

崩溃日志

libGPUSupportMercury.dylib`gpus_ReturnNotPermittedKillClient

UIWebView在app进入后台时,如果没有加载渲染完就仍然在进行绘制加载,绘制
而苹果规定:如果尝试在后台执行OpenGL ES命令,应用程序将被终止。
例如How to fix OpenGL ES application crashes when moving to the background

通过通知来监控app是否进入后台和前台,在进入后台的时候禁止OpenGL,在进入前台后重新加载。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appWillResignActive:) name:UIApplicationWillResignActiveNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appDidBecomeActive:) name:UIApplicationDidBecomeActiveNotification object:nil];
- (void)appWillResignActive:(NSNotification *)notification {
    [self.webView stopLoading];
}

- (void)appDidBecomeActive:(NSNotification *)notification {
    [self.webView reload];
}
- (void)dealloc {
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationWillResignActiveNotification object:nil];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidBecomeActiveNotification object:nil];
}

看到有人说iOS11修复了这个问题,但我用iOS12.1发现此问题仍在。


发现一个老旧的bug,再次提醒我注意代码细节。(类似有if就要有else)
switch中break的重要性
如果没有break语句,则会从满足条件的地方(即与switch(表达式)括号中表达式匹配的case)开始执行,后面的条件都将不再判断直接执行条件内的代码直到switch结构结束。