Erstellen einer iOS-App in QtCreator

Dieser Artikel ist eine Notiz an mich selbst zum Thema Erstellen einer iOS-Anwendung in der QtCreator-Umgebung.

Aufgabe: Erstellen einer Anwendung für iPhone/iPad, die in den AppStore hochgeladen werden kann. Verwenden Sie gleichzeitig so viel wie möglich QtCreator-Tools und nur minimal Xcode.

Was wir haben:

  • MacBook Pro mit macOS Catalina (ver.10.15.2) (jede Mohnblume reicht aus, ich weiß nicht, ob sie auf virtuellen Maschinen funktioniert)
  • Xcode (ver.11.3) (erforderlich, ohne geht nichts)
  • QtCreator (Version 4.10.2) und Qt 5.12.6 (neueste LTS-Version zum Zeitpunkt des Schreibens)
  • iPhone 7 Plus für Leistungstests
  • Etwas Zeit, Nerven und Ausdauer, um alles herauszufinden.

Testanwendung ausführen

Die Anwendung, für die ich mich mit dem Problem der Installation auf iOS befasst habe, arbeitet mit der Karte und Geolokalisierung des Benutzers, daher nehmen wir für diesen Artikel die Anwendung aus Standardbeispielen - Ortskarte (QML) ( link ).

Wir kopieren das Beispiel (wir werden kleine Ergänzungen daran vornehmen) und öffnen es in QtCreator.

Wir wählen einen geeigneten Wal aus (ich habe den Simulator von QtCreator nicht verwendet):

Konfigurationsdatei

Und das erste, was wir tun müssen, ist das Projekt zu bauen.

Dann gehen wir in den Build-Ordner (in meinem Fall ist es /Users/ap/Downloads/build-places_map-Qt_5_12_6_for_iOS-Debug) wir nehmen die Info.plist-Datei von dort, die wir in den ios-Ordner übertragen, in dem wir erstellen die Wurzel unseres Projekts.

Wir fügen unserem Projekt die Datei Info.plist hinzu.

Wir erhalten folgende Projektstruktur:

Es bleibt, unsere Datei der Assembly hinzuzufügen. Fügen Sie dazu der *.pro-Datei den folgenden Code hinzu - places_map.pro:

ios {
    QMAKE_INFO_PLIST = ios/Info.plist
}

Wir machen diesen Zusatz nur für die ios-Plattform.

Beim Erstellen des Projekts wird jetzt immer unsere Info.plist verwendet.

Version, Firma, ausführbar

Wir ergänzen die *.pro-Datei. Wir fügen Informationen über die Version, unser Unternehmen und den Namen der ausführbaren Datei hinzu (verwechseln Sie nicht den Namen, der dem Benutzer auf dem Telefon angezeigt wird).

VERSION = 0.1.1

QMAKE_TARGET_BUNDLE_PREFIX = "ru.mycompany"
QMAKE_BUNDLE = "places_map"
TARGET = "places_map"

QMAKE_BUNDLE und TARGET zeigen auf dasselbe. Ich habe die grundlegenden Unterschiede zwischen ihnen nicht verstanden. Und im Allgemeinen sind sie nicht obligatorisch (es sei denn, es ist für Sie wichtig, dass sich der Name der ausführbaren Datei vom Namen des Projekts unterscheidet).

Die Version ist erforderlich. Ohne eine Version wird das Projekt nicht kompiliert.

Diese Optionen sind nicht plattformspezifisch.

iOS-Mindestversion

In der *.pro-Datei können Sie auch die Mindestversion von iOS angeben, auf der Ihre Anwendung ausgeführt werden soll.

> Zu meinem Bedauern habe ich keine Hinweise darauf gefunden, mit welchen Versionen von Qt-Komponenten gearbeitet wird. Es wäre logisch anzunehmen, dass Qt selbst in der Lage sein wird, die Mindestversion während des Builds zu berechnen und zu ersetzen, aber leider musste ich zufällig handeln. Vielleicht habe ich die notwendigen Informationen einfach nicht gefunden und freue mich, wenn sie mir sagen, wo ich danach suchen soll.

Fügen Sie dazu die folgende Zeile zum Abschnitt ios *.pro der Datei hinzu:

QMAKE_IOS_DEPLOYMENT_TARGET =9.0

Im obigen Beispiel ist die Mindestversion 9.0.

Wenn die Zeichenfolge nicht angegeben ist, wird die neueste Version ersetzt (derzeit ist es 11).

Anwendungsname

> In einigen Fällen konnte ich keine Möglichkeit finden, Parameter nur in der *.pro-Datei einzugeben, ich musste mich direkt in Info.plist registrieren. Meiner Meinung nach ist dies nicht ganz korrekt, daher wäre ich dankbar, wenn sie mir sagen, wie diese Daten in * .pro eingegeben werden könnten und Info.plist nicht berühren.

Um den Namen der Anwendung zu ändern (den Namen, den der iOS-Benutzer sehen wird), müssen Sie den Wert (Zeichenfolge) des Schlüssels (Schlüssel) CFBundleDisplayName in der Datei „Info.plist“ ändern. Zum Beispiel so:

<key>CFBundleDisplayName</key>
<string>Places Map</string>

Verwendung von Geolokalisierungen

Um Geolokalisierung, Mikrofon, Kamera usw. Dienste, müssen Sie hierzu in der Datei Info.plist einen Request for Permission spezifizieren. Dies geschieht durch Hinzufügen von Sonderschlüsseln.

Falls wir während der Verwendung der App die Erlaubnis zur Verwendung der Geolokalisierung anfordern müssen, verwenden wir den NSLocationWhenInUseUsageDescription-Schlüssel. Im Schlüsselwert müssen wir eine für den Benutzer sichtbare Beschreibung angeben, in der wir den Grund angeben müssen, warum wir diesen Dienst benötigen. Ohne diese Beschreibung kann Ihr Programm im AppStore gesperrt werden.

<key>NSLocationWhenInUseUsageDescription</key>
<string>This app uses a user's locations to find nearest pizza.</string>

Weitere Informationen zu den verwendeten Schlüsseln finden Sie in der iOS-Dokumentation.

Anwendungssymbole

Eine wichtige Phase ist die Erstellung von Anwendungssymbolen. Ohne sie wird Ihre Anwendung nicht zum AppStore hinzugefügt.

Details zum Erstellen von Symbolen für verschiedene Versionen sind in den Anweisungen auf der qt.io-Website beschrieben - https://doc.qt.io/qt-5/ios-platform-notes.html.

Ich habe alles einfacher gemacht. Wir brauchen eine 1024x1024-Datei mit unserem Icon.

Wir gehen auf die Seite https://www.iconsgenerator.com/Home/AppIcons (es gibt andere, aber diese hat alle notwendigen Größen generiert, mit denen sich andere Dienste nicht rühmen konnten), laden unsere Datei hoch und laden die generierten Symbole herunter.

Holen wir uns den Ordner Assets.xcassets (der Name ist nicht wichtig, die Erweiterung ist wichtig), der unsere Symbole und JSON-Dateien mit angehängten Größen je nach Gerätetyp enthält.

Wir fügen diesen Ordner unserem Projekt im ios-Ordner hinzu.

Dann müssen wir noch Informationen zu unseren Symbolen in den ios-Abschnitt der * .pro-Datei einfügen:

    QMAKE_ASSET_CATALOGS += ios/Assets.xcassets

Ladebildschirm

Dieser Schritt ist optional, da Beim Build wird ein einfacher Startbildschirm mit dem Namen Ihrer ausführbaren Datei erstellt. Aber Sie müssen zugeben, mit einem schönen Boot-Bild sieht die Anwendung besser aus. Also lasst uns unsere eigenen erstellen.

Lassen Sie uns eine Logodatei erstellen. Nennen wir es beispielsweise CustomScreenLogo.png . Legen Sie es im ios-Ordner ab und fügen Sie es dem Projekt hinzu.

Jetzt müssen Sie das Projekt erstellen, zum Erstellungsordner gehen und die Datei * xcodeproj * finden. In unserem Fall ist dies places_map.xcodeproj . Wir klicken mit der rechten Maustaste darauf und gehen zu seinem Inhalt. Kopieren Sie die Datei LaunchScreen.xib in den ios-Ordner unserer Anwendung und benennen Sie sie in CustomScreen.xib um.

Es ist wichtig, dass die Erweiterung xib im Namen ist und dass LaunchScreen nicht im Namen erscheint.

> Bemerkenswert ist, dass Apple laut Informationen auf verschiedenen Seiten nun nach und nach versucht, alle auf das Storyboard zu übertragen. Aber ich habe trotzdem versucht, die xib-Dateioption zu verwenden, wie in der Qt-Dokumentation vorgeschlagen.

Fügen Sie der *.pro-Datei im Abschnitt ios die folgenden Zeilen hinzu:

    app_launch_screen.files = $$PWD/ios/CustomScreen.xib $$files($$PWD/ios/CustomScreenLogo.png)
    QMAKE_BUNDLE_DATA += app_launch_screen

Und in der Datei Info.plist geben wir im Schlüssel UILaunchStoryboardName CustomScreen (den Namen unserer xib-Datei ohne Erweiterung) an.

Und bauen Sie das Projekt neu auf. Und führen Sie die xcodeproj-Datei in Xcode aus.

Im BundleData-Ordner sollten wir jetzt unsere hinzugefügten Dateien haben:

Öffnen Sie die CustomScreen.xib-Datei.

Labels Label und places_map löschen. Wir klicken auf das Pluszeichen oben rechts und fügen das Element Image View dem Abschnitt View hinzu. Wählen Sie auf der rechten Seite im Bildbereich unser CustomScreenLogo.png-Logo aus.

Öffnen Sie die Registerkarte „Size Inspector“ und geben Sie „Autoresizing“ an, damit unser Logo auf verschiedenen Geräten die Größe ändert.

Es lohnt sich auch, die Hintergrundfarbe der Ansicht zu ändern.

Dann speichern wir alles, schließen Xcode und bauen das Projekt erneut in QtCreator.

Gesundheitskontrolle

Jetzt können Sie das Projekt auf Ihrem iOS-Gerät ausführen und prüfen, ob es funktioniert.

Ich werde nicht darüber sprechen, wie man das Projekt in den AppStore stellt – es ist vollständig bereit zum Hochladen wie ein normales Xcode-Projekt, und es gibt ziemlich viele Anweisungen im Internet, wie man das macht. Verwenden Sie nur zum Entladen die Release-Baugruppe.

Gebrauchte Materialien

Plattformnotizen – iOS

QMAKE-Variablenreferenz

Symbolgenerator

Fragen, die ich noch habe

  • Wie kann überprüft werden, ob der Benutzer die Nutzung von Geolokalisierung und anderen Diensten erlaubt hat? Wie kann ich bei Bedarf eine Erlaubnis anfordern, während die Anwendung ausgeführt wird?
  • Beim Erstellen wird ein Fehler angezeigt - `AppIcon.appiconset/[][ipad][76x76][][][1x][][]:-1: Fehler: Hinweis: 76x76@1x-App-Symbole gelten nur für iPad-Apps Ausrichtung auf iOS-Versionen vor 10.0.“ Es kann vermieden werden, indem Symbole direkt in Info.plist geschrieben werden, aber ein solches Schreiben verhindert dann, dass das Programm in den AppStore hochgeladen wird. Theoretisch stört der Fehler nichts, ist aber ärgerlich. Gibt es eine Möglichkeit, es irgendwie zu entfernen?
  • Wie kann ich die Größe des Bildes im Artikel einstellen? Und es war quälend groß, einige der Bilder stellten sich heraus.
Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

Алексей Внуков
  • 26. Dezember 2019 05:17

для последнего Xcode и для последних версий iOS нужно брать Qt 5.14.
по поводу виртуалки - все работает нормально но без сборки на живой айфон у меня не получилось получить бинарник который принимает стор.
согласно последним соглашениям в Info.plist дожны быть обязательно указаны поля NSCameraUsageDescription, NSLocationAlwaysUsageDescription, NSLocationWhenInUseUsageDescription.
после первого создания Info.plist и вносения в него изменений - рекомендую его бекапить, посколько при каждой сборке он будет перезатираться

Kommentare

Nur autorisierte Benutzer können Kommentare posten.
Bitte Anmelden oder Registrieren
Letzte Kommentare
ИМ
Игорь Максимов5. Oktober 2024 07:51
Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas55. Juli 2024 11:02
QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
k
kmssr8. Februar 2024 18:43
Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
EVA
EVA25. Dezember 2023 10:30
Boost - statisches Verknüpfen im CMake-Projekt unter Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
Jetzt im Forum diskutieren
J
JacobFib17. Oktober 2024 03:27
добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
JW
Jhon Wick1. Oktober 2024 15:52
Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
КГ
Кирилл Гусарев27. September 2024 09:09
Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
F
Fynjy22. Juli 2024 04:15
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

Folgen Sie uns in sozialen Netzwerken