首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自定义CIKernel和iOS7

自定义CIKernel和iOS7
EN

Stack Overflow用户
提问于 2015-01-21 00:29:02
回答 2查看 512关注 0票数 0

我有一个iOS项目,它支持同时运行iOS 7和8 (项目部署目标: 7.0)的设备,最近我开始使用iOS 8中引入的新API实现自定义CIKernel。

虽然代码在每个iOS 8设备上都没有问题地编译和运行,但每当我试图在iOS 7设备中运行它时,我都会得到以下错误:

代码语言:javascript
复制
dyld: Symbol not found: _OBJC_CLASS_$_CIColorKernel
  Referenced from: /var/mobile/Applications/...
  Expected in: /System/Library/Frameworks/CoreImage.framework/CoreImage
 in /var/mobile/Applications/...

生成错误的代码如下:

代码语言:javascript
复制
kernel = [CIColorKernel kernelWithString:kernelStr];

kernelWithString:方法是在iOS8中引入的,CIKernel.h声明:

代码语言:javascript
复制
__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,但是这些命令只对编译时有用。

有什么线索吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-25 22:02:23

试着使用以下方法:

代码语言:javascript
复制
Class colorKernelClass = NSClassFromString(@"CIColorKernel");
kernel = [colorKernelClass kernelWithString:str];
票数 1
EN

Stack Overflow用户

发布于 2015-01-21 00:53:18

因此,我的问题是:如何使应用程序同时在iOS 7和8设备上运行,并为iOS 7设备禁用我的自定义CIKernel功能?这有可能吗?

您可以在运行时检查操作系统的版本,如下所示:

代码语言:javascript
复制
NSString *osVer = [[UIDevice currentDevice] systemVersion]

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28057644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档