我有一个iOS项目,它支持同时运行iOS 7和8 (项目部署目标: 7.0)的设备,最近我开始使用iOS 8中引入的新API实现自定义CIKernel。
虽然代码在每个iOS 8设备上都没有问题地编译和运行,但每当我试图在iOS 7设备中运行它时,我都会得到以下错误:
dyld: Symbol not found: _OBJC_CLASS_$_CIColorKernel
Referenced from: /var/mobile/Applications/...
Expected in: /System/Library/Frameworks/CoreImage.framework/CoreImage
in /var/mobile/Applications/...生成错误的代码如下:
kernel = [CIColorKernel kernelWithString:kernelStr];kernelWithString:方法是在iOS8中引入的,CIKernel.h声明:
__OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_8_0);因此,我的问题是:如何使应用程序同时在iOS 7和8设备上运行,并为iOS 7设备禁用我的自定义CIKernel功能?这有可能吗?
请注意,我已经将CoreImage.framework从项目设置中的“必需”改为“可选”,并且应用程序运行在iOS7.0设备中,但老实说,我觉得这真的是黑客攻击。
我也尝试过预处理器命令:__IPHONE_OS_VERSION_MIN_REQUIRED和__IPHONE_OS_VERSION_MAX_ALLOWED,但是这些命令只对编译时有用。
有什么线索吗?
发布于 2015-01-25 22:02:23
试着使用以下方法:
Class colorKernelClass = NSClassFromString(@"CIColorKernel");
kernel = [colorKernelClass kernelWithString:str];发布于 2015-01-21 00:53:18
因此,我的问题是:如何使应用程序同时在iOS 7和8设备上运行,并为iOS 7设备禁用我的自定义CIKernel功能?这有可能吗?
您可以在运行时检查操作系统的版本,如下所示:
NSString *osVer = [[UIDevice currentDevice] systemVersion]这提供了一个字符串,您可以解析和提取主要版本.
https://stackoverflow.com/questions/28057644
复制相似问题