Xcode 11 "'==' доступен только в iOS 13.0 или новее" ошибка - PullRequest
0 голосов
/ 01 ноября 2019

Я попытался построить свой проект в Xcode 11, и он выдает 26 идентичных ошибок

<unknown>:0: error: '==' is only available in iOS 13.0 or newer 

Ошибки происходят на Compile Swift source files stage при вызове CompileSwift normal arm64 /long/path/to/MyClass.swift .... Нет контекстной помощи, указывающей на что-либо в файлах. Файлы совершенно разные, но выглядят безвредными и не имеют ничего общего.

1 Ответ

1 голос
/ 01 ноября 2019

После большой боли я обнаружил, что 4-месячная версия приложения прекрасно компилируется. Таким образом, я сделал git bisect и нашел ошибочный коммит, а затем этот код:

struct Config: Equatable {
    let formatDescription: CMFormatDescription
    let orientation: CGImagePropertyOrientation
}

Оказывается, CMFormatDescription стал Equatable только в iOS 13, в то время как целью развертывания приложения является iOS 11. Вероятно, он вернулся к [NSObject isEqual:] в Xcode 10, но в Xcode 11 усложнился. Поскольку Swift автоматически генерирует соответствие Equatable под капотом, у него возникли проблемы с указанием точного места ошибки. Решение состоит в том, чтобы добавить собственную реализацию Equatable для CMFormatDescription:

extension CMFormatDescription: Equatable {
    public static func == (lhs: CMFormatDescription, rhs: CMFormatDescription) -> Bool {
        return CMFormatDescriptionEqual(lhs, otherFormatDescription: rhs)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...