我知道在Swift中可以使用#available而objective-c不支持。
还有办法制作可以在10.11上运行的os x应用程序,但也支持NSTouchbar(从10.12开始)?
答案 0 :(得分:4)
#available
和Swift中的朋友简化(并改进)处理ObjC中新功能和向后兼容性的更复杂方法。如果您使用的是ObjC,则没有直接等效于#available
,因此您必须回归那些旧的方式。 Apple的文档可以在SDK Compatibility Guide中找到。要点:
使用最新的Xcode 8.x / macOS 10.12.x(或更高版本)SDK构建项目。
将项目的Base SDK设置为macOS 10.12(或更高版本),将其最低部署目标设置为10.11。
这使得您正在寻找“弱链接”的AppKit类/方法,因此您可以在运行时检查它们的存在。例如:
if ([NSTouchBar class]) {
self.touchBar = [[NSTouchBar alloc] init];
self.touchBar.delegate = self;
self.touchBar.defaultItemIdentifiers = @[ /*...*/ ];
//...
}
在早于触摸栏支持的macOS版本中,[NSTouchBar class]
返回nil,因此没有触摸条使用。在支持触控栏的版本中,您的if
正文执行。