cocoa build for os x 10.11 with NSTouchbar support



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

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

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

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

  2. 将项目的基本 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机身会执行。

最新更新