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仍然可以解决报错问题。