我可以将 Catalyst 与 MacOS 目标混合使用吗?

Posted

技术标签:

【中文标题】我可以将 Catalyst 与 MacOS 目标混合使用吗?【英文标题】:Can I mix Catalyst with MacOS target? 【发布时间】:2021-06-25 02:00:44 【问题描述】:

环境: Mac mini M1;和 iPhone 6s Plus 等 Mac OS 11+、ios 14+

我使用的是 SwiftUI/Combine Frameworks 与 Storyboard。

场景:我有一个 iOS 应用程序,我想将其扩展为 MacOS 姊妹应用程序; 并且可能还会添加更多功能。

我假设“Catalyst”是 iOS 端的一个选项,可以将其映射到 MacOS 环境,而无需编写代码。

我还假设从这个基线开始,我可以创建一个 MacOS 目标并在两者之间共享通用代码,并添加编译器指令来分隔 MacOS 和 iOS 细节。

我说的对吗?

【问题讨论】:

【参考方案1】:

给定一个启用 Catalyst 的 iOS 目标(例如选中“Mac”复选框),您可以使用任何在 iOS 和 Catalyst 中标记为可用的框架/功能。

您还可以使用以下方式有条件地为不同的系统编译:

#if targetEnvironment(macCatalyst)

或各种@available 配置(https://nshipster.com/available/)。

如果您的问题是您是否可以使用特定于 macOS 的代码(在 Catalyst 中未标记为可用),例如 AppKit,那么问题就会变得更加复杂。可以导入和使用带有 AppKit 代码的捆绑包,但这不是我所说的简化流程。见:https://www.highcaffeinecontent.com/blog/20190607-Beyond-the-Checkbox-with-Catalyst-and-AppKit

【讨论】:

该链接侧重于 AppKit 与 SwiftUI/Combine。 SwiftUI 的优点之一是纯代码可在两个平台上使用。我将尝试通过捆绑包增强 MacOS 部分的可能性。谢谢。 “纯代码”可能在两个平台上都可用。两者之间有很多功能明显不同的“陷阱”。我在两个平台的 App Store 中都有两个应用程序——一个有 Catalyst,一个没有。如果我不得不重来一遍,我可能会避免使用 Catalyst。 '避免使用催化剂'——为什么? --- 如果你已经支持 OS X,我想你就不需要催化剂了。 只有在 Catalyst 中才会出现一大堆错误,特别是与点击行为有关的错误。见:***.com/questions/65996725/… 哇。好的。我会避免使用催化剂;反正我也不需要。

以上是关于我可以将 Catalyst 与 MacOS 目标混合使用吗?的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI 将图像保存到 macOS Catalyst

SKProductsRequest 不会在 Catalyst 应用程序中返回 SKProductsResponse

苹果iOS 14代码暗示:macOS Catalyst版Messages应用将至!

如何有条件地为 Catalyst 编译代码?

腾讯 QQ 发布 macOS Catalyst 转制体验版

通过 Catalyst 工具 Xcode 11 从 Bundle for MacOS App 加载 WKWebView 中的 PDF