我正在探索Xcode 11和macOS Catalina的新可能性,以使用UIKit创建Mac版本的iPad应用程序。通常可以正常工作。
在macOS上的iOS应用中自定义 NSWindow
的最佳方法是什么?
https://developer.apple.com/documentation/uikit/creating_a_mac_version_of_your_ipad_app
您可以使用这些相同的方法来包含仅在macOS中可用的框架和代码。对于框架,请选择macOS作为平台设置,并使用#if targetEnvironment(UIKitForMac)语句将代码括起来。
作为起点,我创建了一个基本的macOS框架(例如MacMan.framework
)来配置Mac特定的行为。
尽管尽我最大的努力,但我还是遇到了错误:
#if !targetEnvironment(UIKitForMac)
override var prefersHomeIndicatorAutoHidden: Bool {
return true
}
#endif
参考文献:
https://www.highcaffeinecontent.com/blog/20190607-Beyond-the-Checkbox-with-Catalyst-and-AppKit
答案 0 :(得分:4)
根据Apple的说法,如果您的应用程序依赖于为macOS构建的框架,则您需要将其从任何iOS版本中排除,或者需要为iOS和macOS重建它,以便可以进行条件化仅在iOS或macOS中可用的代码。为此,Apple建议您将其转换为xcframework
。因为您所依赖的框架指向NSApp
和NSWindow
,它们是iOS上不可用的符号,所以您会遇到提到的错误。
因此,如果您拥有MacMan.framework
的源代码,则需要对其进行处理,以通过条件化依赖于特定平台的代码来将其转换为xcframework
,因为它们引用了到其他平台上不可用的框架。
如果您不拥有源代码,则需要与框架供应商联系,以为您提供这样的二进制文件。如果不可能,那么您将必须排除专门为macOS平台构建的MacMan.framework
。
所有这些都在WWDC 2019视频中称为“ Introducing iPad apps for Mac”进行了解释。
此外,我还建议您查看同一页面上的相关视频以了解操作。最后,要了解如何构建xcframework,请观看视频“ Binary Frameworks in Swift”。不要被后面的视频标题所迷惑:如果需要,您也可以在Objective-C中构建xcframeworks。
如果您需要自定义窗口背景,则不能通过NSWindow来实现;正如我上面解释的那样,该API不可用,但是您需要使用其iOS对应版本:UIWindow
。在这种情况下,您可以像这样更改窗口背景:
self.view.window.backgroundColor = .red
自己就是您的UIViewController。
另一种可能的自定义方法是添加工具栏,因为NSToolbar现在通过以下方式导出:
let toolbar = UIWindowScene.titlebar.toolbar
here解释了更完整的说明以及在Mac版UIKIt应用程序中添加和自定义NSToolbar的警告。