我知道在 Swift 中可以使用 #available 而objective-c 不支持它。
有没有办法制作一个可以在 10.11 上运行但也支持 NSTouchbar(从 10.12 开始)的 os x 应用程序?
我知道在 Swift 中可以使用 #available 而objective-c 不支持它。
有没有办法制作一个可以在 10.11 上运行但也支持 NSTouchbar(从 10.12 开始)的 os x 应用程序?
#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
身体会执行。