Сборка какао для OS X 10.11 с поддержкой NSTouchbar

Я знаю, что в Swift можно использовать #available, а target-c этого не поддерживает.

Есть ли еще способ сделать приложение для OS X, которое может быть запущено на 10.11, но также поддерживает NSTouchbar (который начинается с 10.12)?

1 ответ

Решение

#available а друзья в Swift - это упрощение (и улучшение) более сложных способов работы с новыми функциями и обратной совместимостью в ObjC. Если вы используете ObjC, не существует прямого эквивалента #availableтак что вы должны вернуться к этим старым путям. Документы Apple по этому вопросу можно найти в Руководстве по совместимости SDK. Суть:

  1. Создайте свой проект с использованием последней версии Xcode 8.x / macOS 10.12.x (или более поздней версии) SDK.

  2. Установите Базовый SDK вашего проекта на macOS 10.12 (или более позднюю), а его Минимальное целевое значение развертывания - 10.11.

  3. Это делает классы / методы AppKit, которые вы ищете, "слабо связанными", так что вы можете проверить их наличие во время выполнения. Например:

    if ([NSTouchBar class]) {
        self.touchBar = [[NSTouchBar alloc] init];
        self.touchBar.delegate = self;
        self.touchBar.defaultItemIdentifiers = @[ /*...*/ ];
        //...
    }
    

    В версиях MacOS, предшествующих поддержке сенсорной панели, [NSTouchBar class] возвращает ноль, поэтому не происходит использование сенсорной панели. В версиях с поддержкой сенсорной панели ваш if тело выполняет.

Другие вопросы по тегам