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 中找到。要点:
使用最新的 Xcode 8.x / macOS 10.12.x(或更高版本)SDK 构建您的项目。
将项目的 Base SDK 设置为 macOS 10.12(或更高版本),并将其最低部署目标设置为 10.11。
这使得 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
正文会执行。
我知道 Swift 可以os使用#available,objective-c 不支持。
还有没有办法制作一个 os x 应用程序,它可以在 10.11 上 运行 但也支持 NSTouchbar(从 10.12 开始)?
#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 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
正文会执行。