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

Posted

技术标签:

【中文标题】如何有条件地为 Catalyst 编译代码?【英文标题】:How can I conditionally compile code for Catalyst? 【发布时间】:2020-02-06 02:01:25 【问题描述】:

我正在将 ios 应用程序移植到 Catalyst。 Catalyst (Mac) 版本将有自己的目标。

是否有官方方法可以为 Catalyst 有条件地编译代码?否则,我可以添加特定于目标的定义,但最好使用更通用的定义。

【问题讨论】:

你看到developer.apple.com/documentation/xcode/…了吗 - 它显示了你可以做什么。 我确实读过,但我没有看到任何关于条件编译的内容。 【参考方案1】:

如文档 Creating a Mac Version of Your iPad App 中所见,您可以:

斯威夫特:

#if targetEnvironment(macCatalyst)
    // Code specific to Mac.
#else
    // Code to exclude from Mac.
#endif

目标-C:

#if TARGET_OS_MACCATALYST
    // Code specific to Mac.
#else
    // Code to exclude from Mac.
#endif

【讨论】:

谢谢!我专门寻找 Objective-C 并没有在那里看到答案。我应该在我的问题中说明这一点。 就在我提供的链接中。只需在页面顶部选择 Objective-C 而不是 Swift。 如果在桥接头中使用这个,还需要#import <TargetConditionals.h> 嘿,您知道是否有针对特定 mac 版本的方法吗?【参考方案2】:

也可以运行从 macCatalyst 中排除的代码,而无需使用 #else。注意使用! (不是)。

#if !targetEnvironment(macCatalyst)
    print("This code will not run on macCatalyst")
#endif

【讨论】:

以上是关于如何有条件地为 Catalyst 编译代码?的主要内容,如果未能解决你的问题,请参考以下文章

如何有条件地为呼叫添加资源

如何使用 Angular 8 有条件地为一个组件制作两个 HTML 模板

有条件地为响应式设计加载图像

有条件地为活动/非活动用户呈现徽章

如何在 Mac 上的 Mac Catalyst 应用程序中使用钥匙串?

如何在 Catalyst 应用程序中将搜索栏放入 NSToolbar?