我正在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的错误?如何在Objective-C中消除过时警告,而无需使用#if TARGET_OS_MACCATALYST
复制代码,而这在Swift中是不需要的。
我的iOS应用的部署目标为iOS 11。
这就是原因。要在Swift中查看弃用警告,您需要说isModalInPopover
不在iOS 13部署目标的available
子句中。
对于Catalyst构建,您不向后兼容(没有向后兼容),因此就好像这是一个iOS 13部署目标,并且您会看到警告。