
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 對象——且一次崩潰的代價高于某個功能短暫不可用建議集成反過來數據層已有完整空值校驗的話它的收益會相應變小?!久赓M下載鏈接】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),僅供參考