object"便捷的在线工具网站,无需登录就可以便捷的使用在线工具的网站。"/> object"网页工具,解决Xcode14"Application circumvented Objective-C runtime dealloc initiation for <%s> object"在线工具,解决Xcode14"Application circumvented Objective-C runtime dealloc initiation for <%s> object"工具,解决Xcode14"Application circumvented Objective-C runtime dealloc initiation for <%s> object"网页工具,在线工具,查询工具,网站工具,网页工具"/>
解决Xcode14"Application circumvented Objective-C runtime dealloc initiation for <%s> object"
2024-04-10 04:10:30  阅读数 5249

升级到Xcode14后,App莫名其妙一运行就闪退,断点也分析捕捉不到对应的地方,日志一直显示"Application circumvented Objective-C runtime dealloc initiation for <%s> object",看起来像是apple底层代码迭代后导致的问题。

后面花了很多时间排查,定位到了是老项目中引入了IQKeyboardManager ,一直没更新导致的,但根本原因是iOS16 苹果不允许在系统控件分类(Categroy)中重写 + (void)initialize方法,而该库的老版本UIView分类里违背了:

image.png

解决方法:更新IQKeyboardManager到最新版本

举一反三,根本解决方法:
不要在系统控件分类(Categroy)中重写 + (void)initialize方法,如果时间紧可以暂时用+(void)load替换+ (void)initialize。

最近还有很多朋友私信我是怎么解决的,这个问题确实很费时间,再补充下述步骤:

1.全局搜索所有+ (void)initialize 方法,如果不考虑性能影响,可暂时把涉及上诉问题的+ (void)initialize 换成+(void)load

2.更新所有老旧SDK,里面有此问题的是搜不出来的

3.都没定位到,就从- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions开始,逐步断点跟踪调试问题。