9

我在 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;
}

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

奇怪的是相应的 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 错误?如何在不重复使用#if TARGET_OS_MACCATALYSTSwift 中不需要的代码的情况下消除 Objective-C 中的弃用警告。

4

2 回答 2

2

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

#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

于 2020-01-15T09:46:41.010 回答
1

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

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

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

于 2019-10-07T01:50:37.550 回答