自定义 CIKernel 和 iOS7

Custom CIKernel and iOS7

我有一个 iOS 项目支持设备 运行ning iOS 7 和 8(项目部署目标:7.0),我最近开始使用自定义 CIKernel在 iOS 8.

中引入了新的 API

虽然代码在每个 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 从 'Required' 更改为 'Optional',并且 iOS7.0 设备中的应用程序 运行s 但是老实说,感觉真的很糟糕。

我也试过预处理器命令:__IPHONE_OS_VERSION_MIN_REQUIRED__IPHONE_OS_VERSION_MAX_ALLOWED 但这些只对编译时有用。

有什么线索吗?

So my question is: How can I make the app run on both iOS 7 and 8 devices and just have my custom CIKernel feature disabled for the iOS 7 devices? Is that possible?

您可以像这样在运行时检查 OS 的版本:

NSString *osVer = [[UIDevice currentDevice] systemVersion]

这给出了一个字符串,您可以解析并提取主要版本...

试试这个:

Class colorKernelClass = NSClassFromString(@"CIColorKernel");
kernel = [colorKernelClass kernelWithString:str];