dydyld: Symbol not found: xxx问题解决

不想看到error

1. 问题产生:

在使用CocoaPods集成Dropbox后,在iOS9.0一下设备运行时报错:
dyld: Symbol not found: _OBJC_CLASS_$_NSURLQueryItem

2. 原因:

Dropbox SDK要求使用再iOS9.0+的系统上运行,我使用iOS7的系统运行,所以发生了crash。
根本原因:Dropbox SDK中使用了NSURLQueryItem类,该类是在iOS8.0之后才有的,所以会报Symbol not found。

修改前提条件:

我的app既要在iOS7的设备上正常运行,有需要在iOS9+的设备上用到DropBox相关功能。

别问我为什么还要支持iOS7,因为TMD...NND...%$#&!!!

3.解决方案:

对于这种情况,工程环境配置上其实可以改为按需引用相关类所在的framework:

1. 查一下NSURLQueryItem属于属于哪个framework (Foundation.framework);
2. 修改 Target ==> Build Phases ==> Link Binary With Libraries
中的Foundation.framework的Status为Optional;

类似的,以下报错均可以按照这种方法解决:

dyld: Symbol not found: _OBJC_CLASS_$_UIBlurEffect
将UIKit.framework的Status为Optional即可。

dyld: Symbol not found: ___NSArray0__
将CoreFoundation.framework的Status为Optional即可。
注:NSArray数组属于CoreFoundation.framework

dyld: Symbol not found: _OBJC_CLASS_$_SFSafariViewController
将SafariService.framework的Status为Optional即可。

注:该framework是在Cocoapods里使用的,
虽然工程配置的Link Binary原本是没有这个framework的,
但是仍然可以再添加一个SafariService.framework,
然后再设置它的Status为Optional仍然可以解决报错问题。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 很可能你的应用是与一个支持HTTPS传输数据的服务器交互,但是并没有使用TLS 1.2或更高。在这种情况下,你定义...
    Www刘阅读 3,154评论 0 5
  • 今天整理微信关注过的公众号,很多了。一个一个的看消息,一个一个的清理着。一件事情刚开始做都非常用心,字里文间你能感...
    Elaine爱旅行阅读 209评论 0 0
  • 这是最开心最放松最喜欢的会议和会议形式。俗话说得好,工欲善其事必先利其器。对工具如此,对员工下属应该更甚。利其者其...
    雅Younger阅读 695评论 0 0
  • 大多数人宁肯死去也不愿思考。许多人确实是这样死的。——罗素 v1.0在指定的时候其实已经违背了“选对时机买对股”的...
    KIKO_软糖阅读 649评论 0 1
  • 任何一个人都会由他的主宰引向成功,任何一个人都有大于自己的力量,这就是“你自己” 从1997年大学毕业,到今天,已...
    耘梦儿阅读 719评论 5 21