Предупреждение об устаревании в Mac Catalyst, но только в Objective-C, а не в Swift - PullRequest
2 голосов
/ 07 октября 2019

Я использую Xcode 11 на сборке GM Catalina (10.15). Я работаю над созданием своего iOS-приложения для Mac Catalyst. У моего приложения для 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.

1 Ответ

2 голосов
/ 07 октября 2019

У моего приложения для iOS есть цель развертывания iOS 11.

Вот почему. Чтобы увидеть предупреждение об устаревании в Swift, вам нужно будет сказать isModalInPopover не в предложении available с целью развертывания iOS 13.

Для сборки Catalyst вы не обладаете обратной совместимостью (естьнет назад) так что это как если бы это была цель развертывания iOS 13, и вы видите предупреждение.

...