Qt für macOS

Qt für macOS ermöglicht die Entwicklung von Anwendungen für die Mac-Reihe von Apple.

Um mit Qt für macOS zu entwickeln, folgen Sie der Anleitung "Erste Schritte" und erkunden Sie dann die Qt-Beispiele und verwandte Themen.

Unterstützte Konfigurationen

Die folgenden Versionen der Build-Umgebung und der Laufzeit-Zielplattform werden von Qt 6.8 unterstützt.

Build-UmgebungZielplattformArchitektur
Xcode 15 (macOS 14 SDK) oder höhermacOS 12 oder höher (einschließlich macOS 15)x86_64, x86_64h, arm64

Hinweis: Apples Vorwärtskompatibilitätsversprechen für macOS stellt im Allgemeinen sicher, dass Qt-Anwendungen auch auf neuen Betriebssystemversionen gut laufen. Eventuell auftretende Probleme werden in Übereinstimmung mit den Qt-Verzweigungs- und Supportrichtlinien priorisiert und geplant. Unterstützung für neue Betriebssystemfunktionen ist in der Regel nicht in Patch-Versionen enthalten.

Build-Umgebung

Die Build-Umgebung für macOS wird von Apples Xcode-Anwendung bereitgestellt, die sowohl die Toolchain (Compiler, Linker und andere Werkzeuge) als auch das macOS-Plattform-SDK (Header und Bibliotheken) enthält, gegen das Sie bauen und linken. Zusammen bestimmen sie, wie Ihre Anwendung erstellt wird.

Apple empfiehlt in der Regel (und im Fall des App Store ist dies sogar vorgeschrieben), dass Anwendungen mit dem neuesten verfügbaren SDK erstellt werden, daher sollten Sie immer das neueste Xcode von Apple verwenden. Dies kann ein Upgrade der macOS-Version Ihres Systems erfordern, da neue Xcode-Versionen möglicherweise nicht auf älteren macOS-Versionen laufen.

Hinweis: Die macOS-Build-Umgebung wird immer vollständig durch die Xcode-Version (seine Toolchain und SDKs) definiert, die Sie verwenden - nicht durch die Version von macOS, auf der Sie Xcode ausführen.

Ablehnung von Verhaltensänderungen

Eine Einschränkung bei der Verwendung der neuesten Xcode-Version und des neuesten SDKs zum Erstellen Ihrer Anwendung besteht darin, dass die macOS-System-Frameworks manchmal entscheiden, ob Verhaltensänderungen auf der Grundlage des SDKs, mit dem Sie Ihre Anwendung erstellt haben, aktiviert werden sollen oder nicht.

Mit dieser Technik kann Apple sicherstellen, dass Binärdateien, die mit älteren SDKs erstellt wurden, auch unter neueren macOS-Versionen ohne Regressionen ausgeführt werden können.

Als beispielsweise der dunkle Modus in macOS 10.14 Mojave eingeführt wurde, behandelte macOS nur Programme, die mit dem 10.14 SDK erstellt wurden, als unterstützend für den dunklen Modus und ließ Programme, die mit früheren SDKs erstellt wurden, mit dem Standardaussehen des hellen Modus.

Die Erstellung mit einer älteren Xcode-Version und einem älteren SDK ist eine Möglichkeit, solche Verhaltensänderungen zu umgehen, aber es ist eine Notlösung und sollte nur angewendet werden, wenn Ihre Anwendung keine andere Möglichkeit hat, das Problem zu umgehen.

Zielplattformen

Bei der Erstellung für macOS wird eine Technik namens " Weak Linking" verwendet, die es Ihnen ermöglicht, Ihre Anwendung mit den Headern und Bibliotheken des neuesten Plattform-SDK zu erstellen und gleichzeitig die Bereitstellung Ihrer Anwendung auf macOS-Versionen zu ermöglichen, die niedriger sind als die SDK-Version. Wenn die Binärdatei auf einer macOS-Version ausgeführt wird, die niedriger ist als das SDK, mit dem sie erstellt wurde, prüft Qt zur Laufzeit, ob eine Plattformfunktion verfügbar ist, bevor sie genutzt wird.

Theoretisch würde dies die Ausführung Ihrer Anwendung auf jeder einzelnen veröffentlichten macOS-Version ermöglichen, aber aus praktischen (und technischen) Gründen gibt es eine untere Grenze für diesen Bereich, bekannt als das Einsatzziel Ihrer Anwendung. Wenn die Binärdatei auf einer macOS-Version gestartet wird, die unterhalb des Deployment-Targets liegt, gibt Qt eine Fehlermeldung aus und die Anwendung wird nicht ausgeführt.

Qt drückt das Deployment-Target über die Variablen CMAKE_OSX_DEPLOYMENT_TARGET oder QMAKE_MACOSX_DEPLOYMENT_TARGET Variablen, die standardmäßig auf das minimal unterstützte Einsatzziel für Qt gesetzt ist.

Sie müssen das Bereitstellungsziel nur dann erhöhen, wenn Ihr eigener Code APIs verwendet, die in einer höheren macOS-Version als der Standardversion von Qt hinzugefügt wurden, und Sie keine @available Prüfungen verwenden, um ihre Verwendung zur Laufzeit zu schützen.

Um das Deployment-Target mit CMake zu erhöhen:

set(CMAKE_OSX_DEPLOYMENT_TARGET "42.0")

oder mit qmake:

QMAKE_MACOSX_DEPLOYMENT_TARGET = 42.0

Hinweis: Sie sollten das Bereitstellungsziel nicht über den von Qt festgelegten Standardwert hinaus verringern. Dies wird wahrscheinlich zu Abstürzen zur Laufzeit führen, wenn die Binärdatei auf einer niedrigeren macOS-Version als der von Qt erwarteten zum Einsatz kommt.

Weitere Informationen zur SDK-basierten Entwicklung auf Apple-Plattformen finden Sie in der Entwicklerdokumentation von Apple.

Architekturen

Standardmäßig wird Qt für die Architektur Ihrer Entwicklungsmaschine gebaut - entweder x86_64, wenn Sie einen Intel Mac verwenden, oder arm64, wenn Sie einen Apple Silicon Mac verwenden.

Um für andere Architekturen zu bauen, können Sie die Variablen CMAKE_OSX_ARCHITECTURES und QMAKE_APPLE_DEVICE_ARCHS Variablen in Ihren Projektdateien oder auf der Kommandozeile verwenden. Dies ermöglicht Ihnen sowohl die Cross-Kompilierung für eine andere Architektur als auch die Erstellung universeller (Multi-Architektur-) Binärdateien. Zum Beispiel, um Ihre Anwendung sowohl für x86_64 als auch für arm64 mit CMake zu erstellen:

cmake ~/src/myapp -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64"

oder mit qmake:

qmake ~/src/myapp QMAKE_APPLE_DEVICE_ARCHS="x86_64 arm64"

Wenn man die Architekturen in einer Projektdatei angibt, sollten sie nicht in Anführungszeichen gesetzt werden, z.B.:

TEMPLATE = app
SOURCES = main.cpp
QMAKE_APPLE_DEVICE_ARCHS = x86_64 arm64

Unterstützung von Unterarchitekturen auf Intel-Macs

Zusätzlich zur Basisarchitektur x86_64 unterstützt Qt auch die Unterarchitektur x86_64h ("Haswell"), die die Leistung auf Intel Macs verbessert.

Erste Schritte

Installieren von Xcode

Xcode ist eine Voraussetzung für die Entwicklung mit Qt für macOS. Es kann aus dem App Store installiert oder von Apples Entwickler-Website heruntergeladen werden.

Nach der Installation führen Sie bitte Xcode einmal aus, damit es alle erforderlichen Abhängigkeiten installiert.

Überprüfen Sie dann, ob das System die richtige Xcode-Installation verwendet, indem Sie das Tool xcode-select verwenden.

$ xcode-select -print-path
/Applications/Xcode.app/Contents/Developer

Wenn die Ausgabe nicht den Erwartungen entspricht, wählen Sie die Xcode-Installation explizit aus.

$ sudo xcode-select --switch /Applications/Xcode.app

Qt installieren oder erstellen

Um Qt zu installieren oder zu erstellen, folgen Sie der allgemeinen Anleitung " Erste Schritte mit Qt ".

Erzeugen von Xcode-Projektdateien

CMake und qmake generieren standardmäßig Projektdateien im Makefile-Format. Wenn Sie es vorziehen, Ihre Anwendung von Xcode aus zu bauen und zu debuggen, können Sie stattdessen ein Xcode-Projekt erzeugen lassen:

cmake ~/src/myapp -GXcode

oder mit qmake:

qmake ~/src/myapp -spec macx-xcode

Bereitstellung von Anwendungen unter macOS

macOS-Anwendungen werden in der Regel als in sich geschlossene Anwendungspakete bereitgestellt. Das Programmbündel enthält das ausführbare Programm sowie Abhängigkeiten wie Qt-Bibliotheken, Plugins, Übersetzungen und andere Ressourcen, die Sie möglicherweise benötigen. Bibliotheken von Drittanbietern wie Qt werden normalerweise nicht systemweit installiert; jedes Programm stellt seine eigene Kopie bereit.

Um Ihre Anwendung als Anwendungsbündel mit CMake zu bauen, setzen Sie die MACOSX_BUNDLE Eigenschaft auf Ihr ausführbares Ziel, wie folgt:

qt_add_executable(app)
if(APPLE)
    set_target_properties(tst_manual_ios_assets PROPERTIES MACOSX_BUNDLE TRUE)
endif()

Mit qmake sind Bundles der Standard. Setzen Sie CONFIG -= app_bundle in Ihrer Projektdatei (.pro), um sie zu deaktivieren.

Eine gängige Methode zur Verteilung von Anwendungen ist die Bereitstellung eines komprimierten Disk-Images (.dmg-Datei), das der Benutzer im Finder einhängen kann. Das Verteilungswerkzeug macdeployqt (verfügbar in den macOS-Installationsprogrammen) kann verwendet werden, um in sich geschlossene Pakete zu erstellen und optional auch ein .dmg-Archiv zu erzeugen.

Programme können auch über den Mac App Store verteilt werden. macdeployqt (bin/macdeployqt) kann als Ausgangspunkt für die Verteilung im App Store verwendet werden. Um sicherzustellen, dass Qt die Sandbox-Regeln des App Stores einhält, muss Qt mit dem Argument -feature-appstore-compliant konfiguriert werden.

Details zur Bereitstellung unter macOS finden Sie unter Qt für macOS - Bereitstellung.

Hinweis: Für den Verkauf von Anwendungen im macOS App Store gelten besondere Regeln. Um die Validierung zu bestehen, muss die Anwendung das Vorhandensein einer gültigen Quittung überprüfen, bevor sie Code ausführt. Da es sich hierbei um einen Kopierschutzmechanismus handelt, sollten Schritte unternommen werden, um häufige Muster zu vermeiden und den Code, der die Quittung validiert, so weit wie möglich zu verschleiern. Daher kann dies nicht von Qt automatisiert werden, sondern erfordert einen plattformspezifischen Code, der speziell für die Anwendung selbst geschrieben wird. Weitere Informationen finden Sie in der Dokumentation von Apple.

Die folgenden Themen bieten weitere Details über Qt für macOS:

Verwendung von Objective-C-Code in Qt-Anwendungen

Clang, der Compiler, der für Anwendungen auf Apple-Plattformen verwendet wird, erlaubt das Mischen von C++- und Objective-C-Code. Um diesen Modus zu aktivieren, verwenden Sie die Erweiterung .mm für die entsprechenden Quelldateien und fügen Sie diese wie gewohnt zu Ihrem Projekt hinzu.

Mit CMake:

target_sources(myapp PRIVATE objc_code.mm)

Mit qmake:

SOURCES += objc_code.mm

Sie können dann Objective-C-Frameworks aus Apples Developer Library in Ihren Qt-Anwendungen verwenden.

Um Funktionalität für den Rest Ihrer Anwendung freizugeben, ohne alle Ihre Quelldateien umbenennen zu müssen, deklarieren Sie Hilfsfunktionen in einem Header und implementieren Sie die Funktionalität in einer Objective-C++ Quelldatei:

// objc_code.h
QString localizedHostName();

// objc_code.mm
#include <Foundation/NSHost.h>
QString localizedHostName()
{
    return QString::fromNSString(NSHost.currentHost.localizedName);
}

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.