Mac Catalyst 中的弃用警告,但仅适用于 Objective-C,而不适用于 Swift

rma*_*ddy 9 objective-c ios swift xcode11 mac-catalyst

我在 Catalina (10.15) 的 GM 版本上使用 Xcode 11。我正在为 Mac Catalyst 构建我的 iOS 应用程序。我的 iOS 应用程序的部署目标是 iOS 11。

我在视图控制器中有一条简单的行,例如:

self.modalInPopover = YES;
Run Code Online (Sandbox Code Playgroud)

在 iOS 中编译干净。当我切换到“我的 Mac”目标时,我收到一个弃用警告:

'modalInPopover' 已弃用:首先在 macCatalyst 13.0 中弃用

好的。我可以切换到 iOS 13 中添加的新方法:

self.modalInPopover = YES;
Run Code Online (Sandbox Code Playgroud)

那应该可以解决它,但我仍然modalInPopoverelse块中使用时收到相同的弃用警告。

奇怪的是,对应的 Swift 代码没有给出任何警告。只有 Objective-C 代码继续发出警告。

if (@available(iOS 13.0, *)) {
    self.modalInPresentation = YES;
} else {
    self.modalInPopover = YES;
}
Run Code Online (Sandbox Code Playgroud)

我什至尝试将其更新@available为:

if (@available(iOS 13.0, macCatalyst 13.0, *)) {
Run Code Online (Sandbox Code Playgroud)

但这并没有改变任何事情。

以下灾难解决了问题,但不需要它:

if #available(iOS 13, *) {
    self.isModalInPresentation = true
} else {
    self.isModalInPopover = true
}
Run Code Online (Sandbox Code Playgroud)

我错过了什么还是这是一个 Xcode 错误?如何消除Objective-C中的弃用警告而不使用#if TARGET_OS_MACCATALYSTSwift中不需要的重复代码。

mat*_*att 1

\n

我的 iOS 应用程序的部署目标是 iOS 11。

\n
\n\n

这就是原因。要在 Swift 中查看弃用警告,您需要在部署目标为 iOS 13 的子句中说isModalInPopovernot 。available

\n\n

对于 Catalyst 版本,您不向后兼容(没有向后),因此就好像这是 iOS 13 部署目标,并且您会看到警告。

\n