Qt для macOS
macOS (ранее известная как OS X или Mac OS X) — это операционная система Apple для компьютеров Mac. Это платформа UNIX, основанная на ядре Darwin, и в значительной степени схожа с другими платформами на базе UNIX. Основное различие заключается в том, что X11 не используется в качестве системы окон. Вместо этого macOS использует собственную нативную систему окон, доступную через API Cocoa.
Чтобы загрузить и установить Qt для macOS, следуйте инструкциям на странице Начало работы с Qt.
Поддерживаемые версии
При обсуждении поддержки версий macOS важно различать среду разработки (платформу, на которой вы разрабатываете) и целевые платформы (платформы, для которых вы разрабатываете). Ниже приведены поддерживаемые версии macOS.
| Целевая платформа | Архитектура | Среда разработки |
|---|---|---|
| macOS 10.12, 10.13, 10.14 |
x86_64 и x86_64h
|
Xcode 10 (SDK 10.14), Xcode 9* (SDK 10.13) |
Примечание: Xcode 9 поддерживается только для разработки приложений (для возможности отказаться от функций, таких как отслеживание слоёв и темный режим), а не для разработки самого Qt.
Среда разработки
Среда разработки на macOS определяется исключительно версией Xcode, используемой для сборки приложения. Xcode содержит как инструмент сборки (компилятор, компоновщик и другие инструменты), так и платформенный SDK macOS (заголовки и библиотеки). Вместе они определяют, как собирается ваше приложение.
Примечание: Версия macOS, на которой вы запускаете Xcode, не имеет значения. Достаточно, чтобы Apple выпустила заданную версию Xcode, которая работает на вашей операционной системе, и среда разработки будет определена этой версией Xcode.
Xcode можно загрузить с веб-сайта разработчиков Apple developer website (включая более старые версии Xcode). После установки выбор установки Xcode осуществляется с помощью инструмента xcode-select.
$ sudo xcode-select --switch /Applications/Xcode.app
Вы можете проверить глобально выбранную установку Xcode, используя тот же инструмент.
$ xcode-select -print-path /Applications/Xcode.app/Contents/Developer
Затем можно использовать команду xcrun, чтобы найти конкретный инструмент в инструменте сборки.
$ xcrun -sdk macosx -find clang /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
или показать путь к платформенному SDK, используемый при сборке.
$ xcrun -sdk macosx --show-sdk-path /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk
Целевые платформы
Сборка для macOS использует технику слабой связи, которая позволяет вам собирать приложение по отношению к заголовкам и библиотекам последнего платформенного SDK, при этом позволяя вашему приложению быть развернутым на версиях macOS, более ранних, чем версия SDK. Когда двоичный файл запускается на версии macOS, более ранней, чем версия SDK, с которой он был собран, Qt будет проверять во время выполнения, доступна ли та или иная платформа функция, прежде чем использовать её.
Теоретически это позволит запускать ваше приложение на каждой версии macOS, выпущенной, но по практическим (и техническим) причинам существует нижний предел этого диапазона, известный как целевая версия вашего приложения. Если двоичный файл запускается на версии macOS ниже целевой версии macOS или Qt, вы получите сообщение об ошибке, и приложение не запустится.
Qt выражает целевую версию через переменную qmake QMAKE_MACOSX_DEPLOYMENT_TARGET, которая имеет значение по умолчанию, заданное в makespec для macOS. Вам не нужно изменять это значение по умолчанию, но при необходимости вы можете увеличить его в файле проекта:
QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.13
Примечание: Не следует уменьшать целевую версию ниже значения по умолчанию, заданного Qt. В противном случае это может привести к сбоям во время выполнения, если двоичный файл затем развернут на версии macOS ниже той, на которой ожидается запуск Qt.
Всегда создавая приложение на основе последнего доступного платформенного SDK, вы гарантируете, что Qt сможет использовать новые функции, введённые в последних версиях macOS.
Дополнительную информацию о разработке на основе SDK на macOS см. в документации разработчиков Apple developer documentation.
Отказ от изменений поведения macOS
Одно замечание при использовании последней версии Xcode и SDK для сборки приложения заключается в том, что системные фреймворки macOS иногда сами принимают решение о включении или выключении изменений поведения, исходя из SDK, с которым было создано ваше приложение.
Например, когда темный режим был введён в macOS 10.14 Mojave, macOS будет рассматривать только приложения, собранные с SDK 10.14, как поддерживающие темный режим, и приложения, собранные с более ранними SDK, останутся в светлом режиме по умолчанию. Эта техника позволяет Apple обеспечить, чтобы двоичные файлы, созданные задолго до выпуска нового SDK и операционной системы, по-прежнему продолжали работать без регрессий в новых выпусках macOS.
Следствием этого является то, что если у Qt возникнут проблемы с некоторыми из этих функций macOS (темный режим, слоистые представления), единственный способ отказаться от них — это сборка с более ранним SDK (SDK 10.13, доступный через Xcode 9). Это крайнее решение, которое следует применять только в том случае, если в приложении нет других способов решения проблемы.
Архитектуры
По умолчанию Qt собирается для x86_64. Чтобы собрать для x86_64h (Haswell), используйте переменную QMAKE_APPLE_DEVICE_ARCHS qmake. Это можно выбрать во время конфигурации:
./configure -platform macx-clang QMAKE_APPLE_DEVICE_ARCHS=x86_64h
QMAKE_APPLE_DEVICE_ARCHS также можно указать как список, разделённый пробелами, для одновременной сборки для нескольких архитектур:
./configure -platform macx-clang QMAKE_APPLE_DEVICE_ARCHS="x86_64 x86_64h"
Дополнительные параметры командной строки
В командной строке приложения можно собрать с помощью qmake и make. При необходимости qmake может создавать файлы проекта для Xcode с -spec macx-xcode. Если вы используете двоичный пакет, qmake по умолчанию создаёт проекты Xcode; используйте -spec macx-gcc для генерации make файлов. Например:
qmake -spec macx-xcode project.pro
Конфигурация с -spec macx-xcode генерирует файл проекта Xcode из project.pro. С qmake вам не нужно беспокоиться о правилах для препроцессоров Qt (moc и uic), поскольку qmake автоматически обрабатывает их и гарантирует, что всё необходимое подключено к вашему приложению.
Qt не взаимодействует полностью со средой разработки (например, плагины для установки файла «mocable» из пользовательского интерфейса Xcode).
Результатом процесса сборки является пакет приложения, который представляет собой структуру каталогов, содержащую фактический исполняемый файл приложения. Приложение можно запустить, дважды щелкнув его в Finder или указав его исполняемый файл напрямую в командной строке, например myApp.app/Contents/MacOS/myApp.
Если вам нужно иметь инструмент командной строки, который не использует графический интерфейс, например moc, uic или ls, вы можете указать qmake отключить создание пакета из переменной CONFIG в файле проекта:
CONFIG -= app_bundle
Развёртывание приложений на macOS
Приложения macOS обычно развёртываются как автономные пакеты приложений. Пакет приложения содержит исполняемый файл приложения, а также зависимости, такие как библиотеки Qt, плагины, переводы и другие необходимые ресурсы. Библиотеки сторонних производителей, такие как Qt, обычно не устанавливаются в систему; каждое приложение предоставляет свою собственную копию.
Распространённый способ распространения приложений — предоставление сжатого образа диска (.dmg-файл), который пользователь может смонтировать в Finder. Инструмент развёртывания macdeployqt (доступный из установочных пакетов macOS) можно использовать для создания автономных пакетов и, при необходимости, для создания архива .dmg. Приложения также можно распространять через Mac App Store. Qt 5 стремится оставаться в рамках правил песочницы App Store. macdeployqt (bin/macdeployqt) может служить отправной точкой для развертывания в App Store.
Проблемы macOS
На следующей странице описаны конкретные проблемы и рекомендации по созданию приложений macOS.
Куда двигаться дальше
Мы приглашаем вас изучить остальную часть Qt. Мы подготовили обзоры, которые помогут вам выбрать нужные API, а наши примеры демонстрируют, как использовать наш API.
- Обзоры Qt — список тем по разработке приложений
- Примеры и учебники — примеры кода и учебники
- Справочные страницы Qt — перечень C++ и QML API
Веб-сайт активного и динамичного сообщества Qt, http://qt.io, содержит вики, форум и дополнительные учебные руководства и презентации.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.12/macos.html