Qt для macOS
macOS (ранее известная как OS X или Mac OS X) — это операционная система Apple для компьютеров Mac. Это платформа UNIX, основанная на ядре Darwin, и в значительной степени схожа с другими платформами на основе UNIX. Основное отличие состоит в том, что X11 не используется в качестве системного средства отображения. Вместо этого macOS использует собственную нативную систему отображения, доступную через API Cocoa.
Для загрузки и установки Qt для macOS следуйте инструкциям на странице Начало работы с Qt.
Поддерживаемые версии
При обсуждении поддержки версий macOS важно различать среду разработки (платформу, на которой вы компилируете) и целевые платформы (платформы, для которых вы компилируете). Поддерживаются следующие версии macOS.
| Целевая платформа | Архитектура | Среда разработки |
|---|---|---|
| macOS 10.13, 10.14, 10.15 |
x86_64 и x86_64h
|
Xcode 11 (SDK 10.15) |
Среда разработки
Среда разработки на macOS определяется исключительно версией Xcode, используемой для компиляции приложения. Xcode содержит как цепочку инструментов (компилятор, компоновщик и другие инструменты), так и платформенный SDK macOS (заголовки и библиотеки). Вместе они определяют способ компиляции вашего приложения.
Примечание: Версия macOS, на которой вы запускаете Xcode, не имеет значения. Достаточно, чтобы Apple выпустила указанную версию Xcode, работающую на вашей операционной системе; среда разработки будет определена этой версией Xcode.
Xcode можно загрузить с веб-сайта разработчиков Apple https://developer.apple.com/download/ (включая более ранние версии 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 https://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/cross_development/Introduction/Introduction.html.
Исключение изменений поведения 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 не взаимодействует полностью со средой разработки (например, плагины для обозначения файла как "мокабельного" из интерфейса пользователя 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.
Примечание: Для продажи приложений в Mac App Store действуют особые правила. Для прохождения проверки приложение должно проверить существование действительного квитанции перед выполнением любого кода. Поскольку это механизм защиты копирования, необходимо принять меры, чтобы избежать распространённых шаблонов и замаскировать код, который проверяет квитанцию, насколько это возможно. Поэтому это не может быть автоматизировано Qt, но требует написания некоторого специфичного для платформы кода, написанного специально для самого приложения. Дополнительную информацию можно найти в документации Apple.
Проблемы с 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.15/macos.html