ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

AvoidCrash:数组越界、插入 nil 后让 App 活下来的 iOS 防崩溃框架

AvoidCrash:数组越界、插入 nil 后让 App 活下来的 iOS 防崩溃框架 AvoidCrash数组越界、插入 nil 后让 App 活下来的 iOS 防崩溃框架【免费下载链接】AvoidCrashThis framework can effective avoid crash by potential error code. For example : If you insert a nil into a mutable array, this framework can avoid crash and note you that where cause crash.项目地址: https://gitcode.com/gh_mirrors/avo/AvoidCrash服务端返回了一条错乱数据一行代码就能让你的 App 当场倒地NSString *nilStr nil; NSArray *array [name, nilStr];系统立刻抛出 NSInvalidArgumentException系统发现数据错误时上报的崩溃异常整个应用直接消失。AvoidCrash 是一个专做这类防崩溃的小框架把危险调用先截下来App 不崩日志里还写清楚了问题出在哪一行。 原理一句话给危险方法装上保险丝AvoidCrash 用的是 Method Swizzling方法替换运行时把系统方法的实现换成自己的那一套相当于换个灯芯。启动时它把下标取元素、截取字符串这类高危方法的底层实现换成先检查、再调原方法的版本。原方法要崩的时候替补版本先接住异常、按默认策略处理顺手把事故记进日志——等于在每个系统方法和你代码之间装了一根保险丝。️ 能防哪些崩溃保护对象与场景速查表覆盖的是 Foundation 数据类型也是日常最容易翻车的地方保护对象典型崩溃场景拦截后的默认处理NSArray / NSMutableArrayarr[100]下标越界、越界插入或删除元素、字面量里混进 nil返回 nil 或忽略该次操作NSDictionary / NSMutableDictionary字面量里 key 或 value 为 nil、用 nil 作 key 写入剔除无效键值对重建字典NSString / NSMutableString截取越界子串、取越界字符、用 nil 串做替换返回 nilNSAttributedString / NSMutableAttributedString用 nil 字符串初始化拦截并记录日志NSObjectKVC键值编码setValue:forKey: 往不存在的属性上赋值跳过这次赋值NSObjectunrecognized selector调用了没实现的方法需按类白名单单独开启最后两项的开关说明见 AvoidCrash.h。 5 分钟完成集成从 Podfile 到生效Podfile 里加一行pod AvoidCrash跑 pod install。手动集成就把 AvoidCrash/ 目录下全部文件拖进工程并给 NSMutableArrayAvoidCrash.m 加-fno-objc-arc编译标记该文件按 ARC 之前的写法实现需关掉它的自动引用计数。把启动调用放进 AppDelegate 的 didFinishLaunchingWithOptions 最前面全部设置就是这一小段- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [AvoidCrash becomeEffective]; return YES; }若想连 unrecognized selector 也防住改用makeAllEffective并同步配置受保护的类白名单。白名单建议写具体类名NSString、NSNumber 这类直接填 NS、UI 前缀或 NSObject 是不允许的。✅ 查看拦截日志确认生效看四点复现开头那段代码跑一遍控制台出现以AvoidCrash Log分隔线开头的日志块就说明生效了。日志里有四个要素可以逐条核对异常名称、崩溃原因、错误位置Error Place: -[ViewController viewDidLoad]这种格式直接点名你项目里的类和方法、框架的默认处理方式。框架还会在主线程发出名为 AvoidCrashNotification 的通知userInfo 里带 errorName、errorReason、errorPlace、callStackSymbols 等完整字段监听后就能上报到自己服务器或崩溃采集 SDK。⚠️ 适用边界与坑判断要不要用给你四条可核对的判断依据而不是空泛建议保护范围是固定的只拦截上表列出的方法。你的崩溃如果主要来自内存、线程或其他异常收益有限。拦截路径存在轻微内存泄漏被接住的异常会让个别方法多占一点内存项目方的取舍是宁可一个功能不可用也要让 App 活着。Release 包控制台不打印日志日志输出只在 DEBUG 下开启生产环境必须靠 AvoidCrashNotification 通知拿信息否则线上就是黑盒。项目已停止维护作者声明暂不更新多个较新 iOS 版本未做兼容。如果你的最低支持系统版本较高先自查各分类里替换的方法清单再决定。如果你的 App 高度依赖服务端返回的数据——字典、数组、直接转出来的 JSON 对象——且一次崩溃的代价高于某个功能短暂不可用建议集成反过来数据层已有完整空值校验的话它的收益会相应变小。【免费下载链接】AvoidCrashThis framework can effective avoid crash by potential error code. For example : If you insert a nil into a mutable array, this framework can avoid crash and note you that where cause crash.项目地址: https://gitcode.com/gh_mirrors/avo/AvoidCrash创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表