Anmerkungen zur Plattform - iOS
Bereitstellung
Das Entwickeln, Erstellen, Ausführen und Debuggen einer Qt für iOS Anwendung kann unter macOS mit Qt Creator durchgeführt werden. Die Toolchain wird von Apples Xcode zur Verfügung gestellt, und das Ausführen von qmake oder CMake auf einem Projekt, das für iOS bestimmt ist, erzeugt auch eine Xcode-Projektdatei (.xcodeproj) mit den anfänglichen Anwendungseinstellungen. Da Qt Creator keine Schnittstelle zur Verwaltung aller für die iOS-Plattform spezifischen Einstellungen bietet, ist es manchmal notwendig, diese direkt in Xcode anzupassen. Die Überprüfung, ob die Anwendung korrekt konfiguriert ist, ist besonders wichtig, bevor eine Anwendung zur Veröffentlichung im App Store von Apple eingereicht wird.
Anwendungsbündel
iOS-Anwendungen werden in der Regel als in sich geschlossene Anwendungs-Bundles bereitgestellt. Das Anwendungs-Bundle enthält die ausführbare Datei der Anwendung sowie Abhängigkeiten, wie z. B. die Qt-Bibliotheken, Plugins, Übersetzungen und andere Ressourcen, die die Anwendung benötigt.
Um Ihre Anwendung als Anwendungs-Bundle mit CMake zu erstellen, 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.
Informationen Eigenschaftslistendateien
Die Informationseigenschaftslistendatei (Info.plist) wird unter iOS und macOS zum Konfigurieren eines Anwendungsbündels verwendet. Diese Konfigurationseinstellungen umfassen:
- Anzeigename und Bezeichner der Anwendung
- Erforderliche Gerätefunktionen
- Unterstützte Ausrichtungen der Benutzeroberfläche
- Icons und Startbilder
Weitere Informationen finden Sie in der Dokumentation zur Information Property List File in der iOS Developer Library.
Info.plist mit CMake
CMake erzeugt eine Standarddatei Info.plist
, wenn die Eigenschaft MACOSX_BUNDLE
auf TRUE
gesetzt ist. Leider ist diese Datei nicht für iOS-Projekte geeignet.
Stattdessen können Projekte qt_add_executable verwenden, das automatisch eine Info.plist
Datei mit Standardwerten erzeugt, die für iOS-Projekte geeignet sind.
Um eine benutzerdefinierte Info.plist
zu spezifizieren, können Projekte die MACOSX_BUNDLE_INFO_PLIST
target Eigenschaft wie unten gezeigt setzen. Dadurch wird die automatische Dateierzeugung durch qt_add_executable deaktiviert und stattdessen wird CMake's native Handhabung für die vom Projekt bereitgestellte Info.plist
Datei verwendet.
qt_add_executable(app) if(IOS) set_target_properties(app PROPERTIES MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/ios/Info.plist") endif()
In der CMake-Dokumentation MACOSX_BUNDLE_INFO_PLIST finden Sie Informationen darüber, welche Zieleigenschaften und Variablen für die von CMake durchgeführte Schablonensubstitution angegeben werden können.
Info.plist mit QMake
Wenn qmake ausgeführt wird, wird eine Datei Info.plist
mit entsprechenden Standardwerten erzeugt.
Es ist ratsam, die erzeugte Info.plist durch eine eigene Kopie zu ersetzen, um zu verhindern, dass sie bei der nächsten Ausführung von qmake überschrieben wird. Sie können eine eigene Liste von Informationseigenschaften mit der Variable QMAKE_INFO_PLIST in Ihrer .pro-Datei definieren.
ios { QMAKE_INFO_PLIST = ios/Info.plist }
Assets der Anwendung
Für Dateien, die nicht in Qt-Ressourcen gebündelt werden können, bietet die qmake-Variable QMAKE_BUNDLE_DATA eine Möglichkeit, einen Satz von Dateien anzugeben, die in das Anwendungsbündel kopiert werden sollen. Zum Beispiel:
ios { fontFiles.files = $$files(fonts/*.ttf) fontFiles.path = fonts QMAKE_BUNDLE_DATA += fontFiles }
Mit CMake kann das Gleiche auf die folgende Weise gemacht werden:
qt_add_executable(app) file(GLOB_RECURSE font_files CONFIGURE_DEPENDS "fonts/*.ttf") if(IOS AND font_files) target_sources(app PRIVATE ${font_files}) set_source_files_properties( ${font_files} PROPERTIES MACOSX_PACKAGE_LOCATION Resources/fonts) endif()
Für Bildressourcen können alternativ auch Asset-Kataloge in Xcode verwendet werden, die auf folgende Weise mit qmake hinzugefügt werden können:
ios { QMAKE_ASSET_CATALOGS += ios/Assets.xcassets }
Mit CMake:
qt_add_executable(app) set(asset_catalog_path "ios/Assets.xcassets") target_sources(app PRIVATE "${asset_catalog_path}") set_source_files_properties( ${asset_catalog_path} PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
Icons
Ab Xcode 13 müssen Icons zum Icon-Set eines Asset-Katalogs hinzugefügt werden, der normalerweise AppIcon
heißt. Xcode aktualisiert dann die Datei Info.plist
mit den richtigen Schlüsseln und Werten und kopiert alle erforderlichen Symboldateien direkt in das Anwendungsbündel.
Ab Xcode 14 ist nur noch ein Bild in der Größe 1024x1024 Pixel erforderlich. Xcode generiert daraus alle notwendigen Icons. Es ist auch möglich, die Bilder manuell im Asset-Katalog anzugeben.
Eine detaillierte Liste der Icons, die angegeben werden können, finden Sie unter Icon-Dateien.
Der Dateiname ist nicht wichtig, wohl aber die tatsächliche Pixelgröße. Um eine universelle iOS-Anwendung zu unterstützen, sind die folgenden Bilder erforderlich:
AppIcon60x60@2x.png
: 120 x 120 (für iPhone)AppIcon76x76@2x~ipad.png
: 152 x 152 (für iPad)AppIcon167x167.png
: 167x167 (für iPad Pro)AppIcon1024x1024.png
: 1024 x 1024 (für den App Store)
Ad-hoc-Distributionen sollten auch die folgenden Dateinamen im Programmpaket enthalten, um das Programm in iTunes zu visualisieren:
iTunesArtwork
512x512iTunesArtwork@2x
1024x1024
Am einfachsten fügen Sie die Symbole hinzu, indem Sie der Dokumentation von Xcode unter Erstellen von Asset-Katalogen und -Sets folgen.
Wenn Sie ein Projekt mit CMake erstellen, sollten Sie auch das folgende Xcode-Attribut angeben, um sicherzustellen, dass die App-Symbole von Xcode generiert werden.
set_target_properties(app_target_name PROPERTIES XCODE_ATTRIBUTE_ASSETCATALOG_COMPILER_APPICON_NAME AppIcon)
Unten sehen Sie ein Beispiel, wie eine Assets.xcassets/AppIcon.appiconset/Contents.json
Datei für Xcode 14 aussehen könnte:
{ "images" : [ { "idiom" : "universal", "platform" : "ios", "scale" : "2x", "size" : "20x20" }, { "idiom" : "universal", "platform" : "ios", "scale" : "3x", "size" : "20x20" }, { "idiom" : "universal", "platform" : "ios", "scale" : "2x", "size" : "29x29" }, { "idiom" : "universal", "platform" : "ios", "scale" : "3x", "size" : "29x29" }, { "idiom" : "universal", "platform" : "ios", "scale" : "2x", "size" : "38x38" }, { "idiom" : "universal", "platform" : "ios", "scale" : "3x", "size" : "38x38" }, { "idiom" : "universal", "platform" : "ios", "scale" : "2x", "size" : "40x40" }, { "idiom" : "universal", "platform" : "ios", "scale" : "3x", "size" : "40x40" }, { "idiom" : "universal", "platform" : "ios", "scale" : "2x", "size" : "60x60" }, { "idiom" : "universal", "platform" : "ios", "scale" : "3x", "size" : "60x60" }, { "idiom" : "universal", "platform" : "ios", "scale" : "2x", "size" : "64x64" }, { "idiom" : "universal", "platform" : "ios", "scale" : "3x", "size" : "64x64" }, { "idiom" : "universal", "platform" : "ios", "scale" : "2x", "size" : "68x68" }, { "idiom" : "universal", "platform" : "ios", "scale" : "2x", "size" : "76x76" }, { "idiom" : "universal", "platform" : "ios", "scale" : "2x", "size" : "83.5x83.5" }, { "filename" : "AppIcon1024x1024.png", "idiom" : "universal", "platform" : "ios", "size" : "1024x1024" } ], "info" : { "author" : "xcode", "version" : 1 } }
Startbildschirme und Startbilder
Startbildschirme
Jede iOS-App muss einen Startbildschirm enthalten, der beim Starten der App angezeigt wird. Ein Startbildschirm ist eine Interface Builder .xib
Datei, auch Storyboard-Datei genannt. Weitere Informationen finden Sie unter Festlegen des Startbildschirms für Ihre App.
Die Unterstützung für Startbildschirme wurde in iOS 9.0 eingeführt.
Sowohl qmake als auch CMake erzeugen einen Standard-Startbildschirm namens LaunchScreen.storyboard
.
Um einen benutzerdefinierten Startbildschirm anzugeben, muss dieser in das Anwendungsbündel kopiert werden und der Schlüssel UILaunchStoryboardName
muss auf den Namen des Startbildschirms in der Datei Info.plist
gesetzt werden.
Qt unterstützt benutzerdefinierte Startbildschirme mit CMake seit Qt 6.4, und mit qmake seit Qt 6.0.
Unter der Annahme, dass die Startdatei Launch.storyboard
heißt, kann sie wie folgt zu Info.plist
hinzugefügt werden:
<key>UILaunchStoryboardName</key> <string>Launch</string>
Um den Startbildschirm mit qmake in das Anwendungsbündel zu kopieren, verwenden Sie den folgenden Codeschnipsel in Ihrer Projekt-.pro-Datei:
ios { QMAKE_IOS_LAUNCH_SCREEN = $$PWD/Launch.storyboard }
Mit CMake:
qt_add_executable(app) if(IOS) set_target_properties(app PROPERTIES QT_IOS_LAUNCH_SCREEN "${CMAKE_CURRENT_SOURCE_DIR}/Launch.storyboard") endif()
Bilder starten
Es ist auch möglich, Startbilder (PNG-Dateien) anstelle des Startbildschirms anzugeben.
Hinweis: Die Verwendung von Startbildern wird nicht empfohlen, da die Unterstützung für diese seit iOS 13.0 veraltet ist. Erwägen Sie stattdessen den Wechsel zu Startbildschirmen.
Startbilder müssen in das Anwendungsbündel kopiert werden und ihre Namen müssen in der Datei Info.plist
mit dem Schlüssel UILaunchImages
festgelegt werden.
Die folgenden Bilder müssen vorbereitet werden:
- LaunchImage-iOS7-568h@2x.png: 640 x 1136
- LaunchImage-iOS7-Landscape.png: 1024 x 768
- LaunchImage-iOS7-Landscape@2x.png: 2048 x 1536
- LaunchImage-iOS7-Portrait.png: 768 x 1024
- LaunchImage-iOS7-Portrait@2x.png: 1536 x 2048
- LaunchImage-iOS7@2x.png: 640 x 960
Die Bilder können wie folgt zu Info.plist
hinzugefügt werden:
<key>UILaunchImages</key> <array> <dict> <key>UILaunchImageMinimumOSVersion</key> <string>7.0</string> <key>UILaunchImageName</key> <string>LaunchImage-iOS7</string> <key>UILaunchImageOrientation</key> <string>Portrait</string> <key>UILaunchImageSize</key> <string>{320, 568}</string> </dict> <dict> <key>UILaunchImageMinimumOSVersion</key> <string>7.0</string> <key>UILaunchImageName</key> <string>LaunchImage-iOS7</string> <key>UILaunchImageOrientation</key> <string>Portrait</string> <key>UILaunchImageSize</key> <string>{320, 480}</string> </dict> </array> <key>UILaunchImages~ipad</key> <array> <dict> <key>UILaunchImageMinimumOSVersion</key> <string>7.0</string> <key>UILaunchImageName</key> <string>LaunchImage-iOS7-Landscape</string> <key>UILaunchImageOrientation</key> <string>Landscape</string> <key>UILaunchImageSize</key> <string>{768, 1024}</string> </dict> <dict> <key>UILaunchImageMinimumOSVersion</key> <string>7.0</string> <key>UILaunchImageName</key> <string>LaunchImage-iOS7-Portrait</string> <key>UILaunchImageOrientation</key> <string>Portrait</string> <key>UILaunchImageSize</key> <string>{768, 1024}</string> </dict> <dict> <key>UILaunchImageMinimumOSVersion</key> <string>7.0</string> <key>UILaunchImageName</key> <string>LaunchImage-iOS7</string> <key>UILaunchImageOrientation</key> <string>Portrait</string> <key>UILaunchImageSize</key> <string>{320, 568}</string> </dict> <dict> <key>UILaunchImageMinimumOSVersion</key> <string>7.0</string> <key>UILaunchImageName</key> <string>LaunchImage-iOS7</string> <key>UILaunchImageOrientation</key> <string>Portrait</string> <key>UILaunchImageSize</key> <string>{320, 480}</string> </dict> </array>
Um die Startbilder mit qmake in das Anwendungsbündel zu kopieren, verwenden Sie den folgenden Codeschnipsel in Ihrer Projekt-.pro-Datei:
ios { app_launch_images.files = $$files($$PWD/ios/LaunchImage*.png) QMAKE_BUNDLE_DATA += app_launch_images }
Mit CMake:
qt_add_executable(app) file(GLOB_RECURSE launch_images CONFIGURE_DEPENDS "ios/LaunchImage*.png") if(IOS AND launch_images) target_sources(app PRIVATE ${launch_images}) set_source_files_properties( ${launch_images} PROPERTIES MACOSX_PACKAGE_LOCATION Resources) endif()
Hinweis: Frühere iOS-Versionen unterstützten die Angabe eines einzelnen Start-Images mit dem Schlüssel UILaunchImageFile
in Info.plist
, aber die Unterstützung dafür ist seit iOS 10.0 veraltet.
Native Image Picker
Wenn Ihre Info.plist
Datei einen Eintrag für NSPhotoLibraryUsageDescription
enthält, fügt qmake automatisch ein zusätzliches Plugin ein, das den Zugriff auf die native Bildauswahl ermöglicht.
Für CMake verknüpfen Sie den nativen Image Picker manuell mit den qt_import_plugins:
qt_import_plugins(app INCLUDE Qt6::QIosOptionalPlugin_NSPhotoLibraryPlugin)
Wenn das Verzeichnis in Ihrer QFileDialog auf gesetzt ist:
QStandardPaths::standardLocations(QStandardPaths::PicturesLocation).last();
oder alternativ der Ordner in einem FileDialog in QML auf:
shortcuts.pictures
dann wird der native Bildauswähler angezeigt, um den Zugriff auf das Fotoalbum des Benutzers zu ermöglichen.
Unterstützte iOS-Versionen ausdrücken
Apple-Plattformen verfügen über eine integrierte Möglichkeit, die von einer Anwendung unterstützten Betriebssystemversionen anzugeben. Dadurch können ältere Versionen der Plattformen automatisch eine benutzerfreundliche Fehlermeldung anzeigen, die den Benutzer auffordert, sein Betriebssystem zu aktualisieren, anstatt abzustürzen und einen Stack-Trace anzuzeigen.
Die wichtigsten Konzepte, die die Unterstützung für eine bestimmte Reihe von Betriebssystemversionen ausdrücken, sind
- DasBereitstellungsziel gibt die harte Mindestversion von macOS oder iOS an, die Ihre Anwendung unterstützt.
- SDK-Version gibt die weiche Maximalversion von macOS oder iOS an, die Ihre Anwendung unterstützt.
Wenn Sie eine Anwendung für eine Apple-Plattform entwickeln, sollten Sie immer die neueste Version von Xcode und das neueste SDK verwenden, die zum Zeitpunkt der Entwicklung verfügbar sind. Auf einigen Plattformen, wie z. B. iOS, werden Sie vom App Store zurückgewiesen, wenn Sie dies nicht tun. Daher ist die SDK-Version immer größer oder gleich dem Bereitstellungsziel.
Wenn Sie eine Anwendung für eine Apple-Plattform entwickeln, müssen Sie das Bereitstellungsziel festlegen. Verschiedene Build-Tools innerhalb der Xcode-Toolchain haben alle ein Flag, mit dem Sie diesen Wert festlegen können, einschließlich, aber nicht beschränkt auf den Compiler und Linker. Indem Sie den Wert für das Bereitstellungsziel festlegen, erklären Sie ausdrücklich, dass Ihre Anwendung mindestens mit dieser Version funktionieren muss und nicht mit früheren Versionen des Betriebssystems funktionieren wird. Es liegt dann an Ihnen, sicherzustellen, dass Ihre Verwendung der System-APIs mit dem übereinstimmt, was Sie deklariert haben. Da der Compiler weiß, was Sie deklariert haben, kann er dabei helfen, dies durchzusetzen.
Die SDK-Version gilt als weiche Maximalversion des Betriebssystems, mit der eine Anwendung kompatibel ist. Wenn die Anwendung mit einem SDK erstellt wurde, verwendet sie das Verhalten dieses SDKs auch unter neueren Betriebssystemversionen, da das Betriebssystem die Ladebefehle der Binärdatei überprüft und die Abwärtskompatibilität mit dem älteren Betriebssystem emuliert. Wenn eine Anwendung beispielsweise mit dem macOS 10.12 SDK erstellt wurde, verwendet sie auch unter 10.13 und höher weiterhin das Verhalten von 10.12.
Mach-O-Binärdateien sind jedoch von Natur aus vorwärtskompatibel. Zum Beispiel wird eine Anwendung, die mit dem iOS 9 SDK erstellt wurde, problemlos unter iOS 10 laufen, aber möglicherweise nicht in die Verhaltensänderungen einbezogen, die an bestimmten Funktionen in der neuen Version vorgenommen wurden, bis die Anwendung mit dem neueren SDK neu kompiliert wird.
Die minimale Betriebssystemversion kann dem System durch die Compiler- und Linker-Flags mitgeteilt werden, die sie in die Mach-O-Binärdatei einbetten. Darüber hinaus muss der Schlüssel LSMinimumSystemVersion
im App-Bundle der Anwendung gesetzt werden. Dieser Wert muss mit dem Wert übereinstimmen, der dem Compiler und Linker übergeben wurde, da er es dem Betriebssystem unter macOS ermöglicht, einen benutzerfreundlichen Fehlerdialog anzuzeigen, der besagt, dass die Anwendung eine neuere Version des Betriebssystems benötigt, im Gegensatz zu einem Absturzdialog. Die LSMinimumSystemVersion
ist auch der Schlüssel, den der App Store verwendet, um die erforderliche Betriebssystemversion anzuzeigen; die Compiler- und Linker-Flags haben hier keine Bedeutung.
In den meisten Fällen werden Qt-Anwendungen ohne Probleme funktionieren. In qmake zum Beispiel setzen die Qt mkspecs QMAKE_IOS_DEPLOYMENT_TARGET oder QMAKE_MACOSX_DEPLOYMENT_TARGET auf die Mindestversion, die Qt selbst unterstützt. In ähnlicher Weise setzen die Qt-Module in Qbs cpp.minimumIosVersion
, cpp.minimumMacosVersion
, cpp.minimumTvosVersion
oder cpp.minimumWatchosVersion
auf die von Qt selbst unterstützte Mindestversion.
Sie müssen jedoch vorsichtig sein, wenn Sie Ihre eigene Zielversion manuell einstellen. Wenn Sie die Version auf einen höheren Wert als den von Qt geforderten setzen und Ihre eigene Info.plist
Datei bereitstellen, müssen Sie einen LSMinimumSystemVersion
Eintrag zu Info.plist
hinzufügen, der mit dem Wert des Deployment-Ziels übereinstimmt, da das Betriebssystem den LSMinimumSystemVersion
Wert als den maßgeblichen Wert verwendet.
Wenn Sie einen niedrigeren Wert für das Deployment-Target angeben, als Qt benötigt, wird die Anwendung mit ziemlicher Sicherheit irgendwo in den Qt-Bibliotheken abstürzen, wenn sie auf einer älteren Version ausgeführt wird, als Qt unterstützt. Vergewissern Sie sich daher, dass der tatsächliche Code des Buildsystems die tatsächlich erforderliche Mindestversion des Betriebssystems widerspiegelt.
Veröffentlichung im Apple App Store
Die Überprüfung, ob Ihre Qt für iOS-Anwendung für die Veröffentlichung im App Store bereit ist, kann wie unter Einreichen der Anwendung beschrieben durchgeführt werden. Um die Anwendung einzureichen, können Sie Xcode oder den Application Loader (der mit Xcode installiert wird) verwenden. Qt Creator bietet keine Schnittstelle für die Verwaltung aller Einstellungen in einer Xcode-Projektkonfiguration.
Die Anwendung sollte auf den iOS-Versionen und Geräten getestet werden, die sie unterstützen soll. Das minimale Einsatzziel für Qt-Anwendungen variiert je nach Qt-Version. Weitere Informationen finden Sie unter Unterstützte Konfigurationen.
Der eigentliche Veröffentlichungsprozess umfasst das Erstellen eines Verteilungszertifikats und eines Bereitstellungsprofils, das Erstellen eines signierten Archivs Ihrer Anwendung und das Ausführen einer Reihe von Validierungstests für diese Anwendung.
Weitere Informationen finden Sie im App Distribution Guide in der iOS Developer Library.
Warnungen zur Sichtbarkeit von Symbolen
Im Zusammenhang mit dem Linken von C++-Bibliotheken werden Funktionen und Objekte als Symbole bezeichnet. Symbole können entweder default
oder hidden
sichtbar sein.
Aus Leistungsgründen kompilieren Qt und viele andere Bibliotheken ihre Quellen standardmäßig mit der Sichtbarkeit hidden
und markieren Symbole nur dann mit der Sichtbarkeit default
, wenn sie in Benutzerprojekten verwendet werden sollen.
Leider kann der Apple Linker Warnungen ausgeben, wenn eine Bibliothek mit hidden
Sichtbarkeit kompiliert wird und eine Benutzerprojektanwendung oder Bibliothek mit default
Sichtbarkeit kompiliert wird.
Wenn Projektentwickler die Warnung ausschalten wollen, müssen sie ihren Projektcode ebenfalls mit hidden
Sichtbarkeit kompilieren.
In CMake kann dies durch das Hinzufügen des folgenden Codes zu Ihrer CMakeLists.txt
erfolgen:
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
In qmake kann dies durch Hinzufügen des folgenden Codes zu Ihrer .pro
Datei erfolgen:
CONFIG+=hide_symbols
Wenn ein Projekt Bibliotheken baut, müssen alle Symbole in der Bibliothek, die in einer anderen Bibliothek oder Anwendung verwendet werden sollen, explizit mit default
sichtbar gemacht werden. Dies kann zum Beispiel dadurch geschehen, dass solche Funktionen oder Klassen mit Q_DECL_EXPORT annotiert werden.
Problem der Produktarchivierung mit CMake
Aufgrund eines Problems in CMake kann der Versuch, ein Produktarchiv mit einer iOS-Anwendung zu erstellen, fehlschlagen.
Dies kann sowohl beim Versuch, das Archiv in Xcode über den Menüpunkt Produkt -> Archiv zu erstellen, als auch über die Befehlszeile mit xcodebuild -archivePath
passieren.
Die Fehlermeldung kann sich auf undefinierte Symbole oder nicht existierende Dateipfade beziehen.
Um das Problem zu umgehen, stellen Sie sicher, dass Sie eine Release
Version des Projekts erstellen, bevor Sie versuchen, ein Archiv zu erstellen.
dSYM-Bundle fehlt in xcarchive, das von einem CMake-Xcode-Projekt erstellt wurde
Aufgrund eines Fehlers in Xcode und bestimmter CMake-Beschränkungen kann ein mit CMake erstelltes Xcode-Projekt das dSYM
-Bundle einer Anwendung nicht in ein xcarchive
einbinden, während Xcode archiviert.
Qt bietet eine Umgehung als Opt-In, so dass das dSYM
Bundle in xcarchive
aufgenommen wird, aber es bringt Kompromisse mit sich. Das heißt, die folgenden CMake-Funktionen werden nicht korrekt funktionieren:
- alle Ausdrücke des
$<TARGET_FILE:app>
-Generators könnten zu einem ungültigen Pfad expandieren, der nicht zur App-Binärdatei führt - die Variable
CMAKE_RUNTIME_OUTPUT_DIRECTORY
und die damit verbundene EigenschaftRUNTIME_OUTPUT_DIRECTORY
target werden ignoriert, selbst wenn sie gesetzt sind - andere unbekannte Probleme
Um die oben genannten Probleme zu entschärfen, können Sie:
- die Umgehung nur dann aktivieren, wenn Sie beabsichtigen, die
xcarchive
zu erstellen, und nicht während der Projektentwicklung - sicherstellen, dass Sie nur ausführbare Dateien und Bibliotheken im Stammverzeichnis des Projekts hinzufügen und nicht in Aufrufen von
add_subdirectory
.
Um die Umgehung zu aktivieren, konfigurieren Sie das Projekt mit der folgenden Option:
cmake . -DQT_USE_RISKY_DSYM_ARCHIVING_WORKAROUND=ON
oder setzen Sie die Variable im Projekt vor allen Aufrufen von qt_add_executable
oder qt_add_library
:
set(QT_USE_RISKY_DSYM_ARCHIVING_WORKAROUND ON) ... qt_add_executable(app)
© 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.