我有一个支持同时运行 iOS 7 和 8 的设备的 iOS 项目(项目部署目标: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
但这些命令仅对编译时有用。
有什么线索吗?
最佳答案
尝试使用这个:
Class colorKernelClass = NSClassFromString(@"CIColorKernel");
kernel = [colorKernelClass kernelWithString:str];
关于ios - 自定义 CIKernel 和 iOS7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28057644/