首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“NSApp”在UIKit for Mac中不可用:如何在macOS上的iOS应用程序中嵌入macOS框架?

“NSApp”在UIKit for Mac中不可用:如何在macOS上的iOS应用程序中嵌入macOS框架?
EN

Stack Overflow用户
提问于 2019-06-30 22:49:42
回答 1查看 2.7K关注 0票数 12

Mac的UIKit

我正在探索使用Xcode 11和macOS Catalina创建一个使用UIKit的iPad应用程序的Mac版本的新可能性。一般按预期工作。

NSWindow上的iOS应用程序中定制iOS的最佳方法是什么?

超出复选框

应用程序

您可以使用这些相同的方法来包含仅在macOS中可用的框架和代码。对于框架,选择macOS作为平台设置,并在代码中加上一个#if targetEnvironment(UIKitForMac)语句。

作为起点,我创建了一个基本的macOS框架(例如MacMan.framework)来配置特定于Mac的行为。

尽管我尽了最大的努力,但我还是遇到了错误:

  • “NSApp”在Mac的UIKit中不可用
  • “NSWindow”在Mac的UIKit中不可用
  • 为Mac构建UIKit,但链接框架'MacMan.framework‘是为macOS构建的。您可能需要配置“MacMan.framework”来为Mac构建UIKit,或者限制在目标编辑器中链接此框架的平台。

相反的情况似乎正确(很容易排除代码)

代码语言:javascript
复制
#if !targetEnvironment(UIKitForMac)

override var prefersHomeIndicatorAutoHidden: Bool {
    return true
}

#endif

参考文献:

https://www.highcaffeinecontent.com/blog/20190607-Beyond-the-Checkbox-with-Catalyst-and-AppKit

EN

回答 1

Stack Overflow用户

发布于 2019-07-03 23:46:32

根据苹果的说法,如果应用程序依赖于为macOS构建的框架,则需要将其排除在任何iOS构建之外,或者需要为iOS和macOS重新构建它,这样就可以对仅在iOS或macOS中可用的代码进行条件化。为此,苹果建议您将其转换为xcframework。因为您所依赖的框架指向NSAppNSWindow (它们是iOS上不可用的符号),所以您将得到您提到的错误。

因此,如果您有MacMan.framework的源代码,则需要通过对依赖于特定平台的代码进行条件化,将其转换为xcframework,因为它们指的是在另一个平台上不可用的框架。

如果您不拥有源代码,那么您需要与框架的供应商联系,为您提供这样的二进制文件。如果这是不可能的,那么您将不得不排除MacMan.framework,它是专门为macOS平台构建的。

所有这些都是在WWDC 2019年的视频"介绍Mac的iPad应用程序“中解释的。

此外,我还建议您查看相同页面上的相关视频,以了解该做什么。最后,学习如何构建xcframework观看视频"Swift中的二进制框架“。不要被后一段视频的标题所愚弄:你也可以在目标C中构建xcframework,以防你需要它。

如果您需要自定义窗口背景,您不能通过NSWindow进行定制;正如我前面解释的那样,这个API不可用,但是您需要使用它的iOS对应:UIWindow。在这种情况下,您可以像这样更改窗口背景:

代码语言:javascript
复制
self.view.window.backgroundColor = .red

自我做你的UIViewController。

另一种可能的定制是添加工具栏,因为NSToolbar现在是通过以下方式导出的:

代码语言:javascript
复制
let toolbar = UIWindowScene.titlebar.toolbar

在Mac的NSToolbar应用程序中添加和自定义NSToolbar的更全面的解释和警告是对这里的解释。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56828573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档