如何在10.7+应用程序中有条件地使用JSExport协议?

时间:2014-06-11 16:50:48

标签: objective-c macos javascriptcore

我正在编写一个最低部署目标为10.7的应用。因此,每当我尝试包含符合JSExport的协议时,编译器就会发现它找不到JSExport'的协议声明。

如果我将最低部署目标设置为10.9,那么编译就可以了。以下是非编译代码的示例。

#import <Cocoa/Cocoa.h>
#import <JavaScriptCore/JavaScriptCore.h>
#import <WebKit/WebKit.h>

@protocol MyJSExport <JSExport>
-(void)doSomething;
@end

我已经尝试按照示例集here在运行时动态创建MyJSExport协议,但他们的结论是它没有用。

那么如何在保持10.7最低部署目标的同时编写符合JSExport的协议?

1 个答案:

答案 0 :(得分:0)

JSExport协议导致为协议中的属性定义Javascript getter / setter,并为协议中定义的方法定义Javascript包装函数。

它在10.9之前并不存在。

答案取决于您对低于10.9的目标的期望是什么

假设您只是希望在旧目标中默默地忽略此功能,那么检查<JSExport.h>提供了如何执行此操作的线索 - 通过为JSExport插入您自己的空协议(就像<JSExport.h>一样)如果尚未定义(如下所示),则为编译10.7 vs 10.9时不需要更改的代码提供

但是:检查JavaScriptCore标头,我希望在编译10.9的目标之前,将禁用10.9引入的其余Objective-C Javascript桥接功能 - 是否使用JSContext还是JSValue?

#import <Cocoa/Cocoa.h>
#import <JavaScriptCore/JavaScriptCore.h>
#import <WebKit/WebKit.h>

// Check if JSExport functionality is available
#if !JSC_OBJC_API_ENABLED
@protocol JSExport
@end
#endif

@protocol MyJSExport <JSExport>
-(void)doSomething;
@end