Сборка какао для OS X 10.11 с поддержкой NSTouchbar
Я знаю, что в Swift можно использовать #available, а target-c этого не поддерживает.
Есть ли еще способ сделать приложение для OS X, которое может быть запущено на 10.11, но также поддерживает NSTouchbar (который начинается с 10.12)?
1 ответ
#available
а друзья в Swift - это упрощение (и улучшение) более сложных способов работы с новыми функциями и обратной совместимостью в ObjC. Если вы используете ObjC, не существует прямого эквивалента #available
так что вы должны вернуться к этим старым путям. Документы Apple по этому вопросу можно найти в Руководстве по совместимости SDK. Суть:
Создайте свой проект с использованием последней версии Xcode 8.x / macOS 10.12.x (или более поздней версии) SDK.
Установите Базовый SDK вашего проекта на macOS 10.12 (или более позднюю), а его Минимальное целевое значение развертывания - 10.11.
Это делает классы / методы AppKit, которые вы ищете, "слабо связанными", так что вы можете проверить их наличие во время выполнения. Например:
if ([NSTouchBar class]) { self.touchBar = [[NSTouchBar alloc] init]; self.touchBar.delegate = self; self.touchBar.defaultItemIdentifiers = @[ /*...*/ ]; //... }
В версиях MacOS, предшествующих поддержке сенсорной панели,
[NSTouchBar class]
возвращает ноль, поэтому не происходит использование сенсорной панели. В версиях с поддержкой сенсорной панели вашif
тело выполняет.