我正在编写一个最低部署目标为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的协议?
答案 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