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