cocoa 为 os x 10.11 构建,支持 NSTouchbar

cocoa build for os x 10.11 with NSTouchbar support

我知道 Swift 可以os使用#available,objective-c 不支持。

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

#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 classes/methods 您正在寻找 "weak linked",因此您可以在 运行 时检查它们的存在。例如:

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

    在支持触控条之前的 macOS 版本中,[NSTouchBar class] returns 无,因此 none 的触控条使用情况发生了。在支持触摸条的版本中,您的 if 正文会执行。