一个诡异bug---symbol not found: objc_setProperty_atomic

bug描述

用户反馈,最新版的百度音乐HD安装闪退。删除后安装仍然闪退。
从用户设备上导出的log如下:

Exception Type: EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x00000001, 0xe7ffdefe
Crashed Thread: 18

Dyld Error Message:
Symbol not found: _objc_setProperty_atomic
Referenced from: /var/mobile/Applications/689E98D3-93F1-4FF9-AF14-8F16BE854104/MusicHD.app/MusicHD
Expected in: /usr/lib/libobjc.A.dylib
Dyld Version: 199.6

Thread 18 Crashed:
0 dyld 0x2fe3e080 dyld_fatal_error + 0
1 dyld 0x2fe40efc dyld::halt(char const*) + 72
2 dyld 0x2fe40fda dyld::fastBindLazySymbol(ImageLoader**,unsigned long) + 214
3 libdyld.dylib 0x32e083ec dyld_stub_binder + 12

bug跟踪

从log来看,是运行时动态链接库未能找符号objc_setProperty_atomic。可是为什么会导致该符号找不到呢?属性不是OC 2.0支持的么

bug解决

最后经过在stackoverflow等网站上查找,原来是我们使用的第三方库的deployment target高于MusicHD的deployment target. 在用户设备的系统上,虽然可以安装上MusicHD, 但当运行时调用了第三方库的方法时crash。

结语

决定能否在某系统上安装app的,是app的deployment target;但app所使用的第三方库的deployment target若高于该系统, 会导致虽然能安装成功,但运行时crash, 出现objc_setProperty_atomic符号找不到的诡异bug

原文地址:https://www.cnblogs.com/mindyme/p/4509998.html