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



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

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

self.modalInPopover = YES;

在 iOS 中编译干净。当我切换到"我的Mac"目的地时,我收到弃用警告:

"modalInPopover"已弃用:在macCatalyst 13.0中首次弃用

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

if (@available(iOS 13.0, *)) {
self.modalInPresentation = YES;
} else {
self.modalInPopover = YES;
}

这应该可以解决它,但我仍然收到关于在else块中使用modalInPopover的相同弃用警告。

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

if #available(iOS 13, *) {
self.isModalInPresentation = true
} else {
self.isModalInPopover = true
}

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

if (@available(iOS 13.0, macCatalyst 13.0, *)) {

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

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

#if TARGET_OS_MACCATALYST
self.modalInPresentation = YES;
#else
if (@available(iOS 13.0, *)) {
self.modalInPresentation = YES;
} else {
self.modalInPopover = YES;
}
#endif

我错过了什么还是这是一个Xcode错误?如何在不使用 Swift 中不需要的#if TARGET_OS_MACCATALYST复制代码的情况下消除 Objective-C 中的弃用警告。

我的 iOS

应用的部署目标是 iOS 11。

这就是原因。要在 Swift 中看到弃用警告,您需要在部署目标为 iOS 13 的available条款中说isModalInPopover

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

您可以使用它来检查何时在不同平台上运行它:

#if targetEnvironment(macCatalyst)
print("UIKit running on macOS")
#elseif os(watchOS)
print("Running on watchOS")
#else
print("Your regular code")
#endif

此外,它还应该删除警告。 更多细节可以在这里找到:https://www.hackingwithswift.com/example-code/catalyst/how-to-detect-your-ios-app-is-running-on-macos-catalyst

相关内容

  • 没有找到相关文章

最新更新