支持NSTouchbar的os x 10.11的cocoa构建

时间:2017-01-10 21:12:58

标签: objective-c cocoa osx-elcapitan nstouchbar

我知道在Swift中可以使用#available而objective-c不支持。

还有办法制作可以在10.11上运行的os x应用程序,但也支持NSTouchbar(从10.12开始)?

1 个答案:

答案 0 :(得分:4)

#available和Swift中的朋友简化(并改进)处理ObjC中新功能和向后兼容性的更复杂方法。如果您使用的是ObjC,则没有直接等效于#available,因此您必须回归那些旧的方式。 Apple的文档可以在SDK Compatibility Guide中找到。要点:

  1. 使用最新的Xcode 8.x / macOS 10.12.x(或更高版本)SDK构建项目。

  2. 将项目的Base SDK设置为macOS 10.12(或更高版本),将其最低部署目标设置为10.11。

  3. 这使得您正在寻找“弱链接”的AppKit类/方法,因此您可以在运行时检查它们的存在。例如:

    if ([NSTouchBar class]) {
        self.touchBar = [[NSTouchBar alloc] init];
        self.touchBar.delegate = self;
        self.touchBar.defaultItemIdentifiers = @[ /*...*/ ];
        //...
    }
    

    在早于触摸栏支持的macOS版本中,[NSTouchBar class]返回nil,因此没有触摸条使用。在支持触控栏的版本中,您的if正文执行。