Wie man die iOS‑Version kompiliert
- Richten Sie zuerst die Entwicklungsumgebung ein.
- Installieren Sie Xcode aus dem AppStore (Zuletzt getestet 14.2).
- Installieren Sie die Xcode‑Befehlszeilentools.
$ xcode-select --install
Oder im Falle von Fehlern versuchen Sie, es von der Apple‑Website herunterzuladen und zu installieren.
- Melden Sie sich bei Ihrem Xcode‑Konto an (optional). Falls Sie kein Apple‑Entwicklerkonto haben. Öffnen Sie Xcode und gehen Sie zu den Einstellungen (über das obere Menü).
Einstellungen -> Konten
Drücken Sie die Taste +
. Sie können sich mit Ihrer Apple‑ID anmelden (Login und Passwort von Ihren iOS-/macOS‑Geräten). Folgen Sie den Anweisungen von Xcode.
Für Mitglieder des OsmAnd‑Teams: Senden Sie Ihren Apple‑ID‑Login, damit Sie zur Entwicklerliste hinzugefügt werden. Wenn Sie eine E‑Mail mit einer Einladungsnachricht erhalten, aktivieren Sie diese.
Schließen Sie Xcode.
- Installieren Sie die Befehlszeilentools – cmake, svn, cocoapods.
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# für Intel
$ echo 'eval "$(/usr/local/bin/brew shellenv)"' >> ~/.zshrc
$ eval "$(/usr/local/bin/brew shellenv)"
# für M1
$ echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zshrc
$ eval "$(/opt/homebrew/bin/brew shellenv)"
$ brew install svn
$ brew install cmake # getestet auf 3.25.2, 3.19, 3.11
# für Intel
$ sudo gem install cocoapods
# für M1
$ brew install cocoapods
- Laden Sie Java jdk 17 herunter und installieren Sie es.
# für Intel
https://download.oracle.com/java/17/archive/jdk-17.0.11_macos-x64_bin.dmg
# für M1
https://download.oracle.com/java/17/archive/jdk-17.0.11_macos-aarch64_bin.dmg
- Erstellen Sie eine neue Textdatei. Oder aktualisieren Sie sie, falls sie existiert.
$ mkdir ~/.gradle
$ nano ~/.gradle/gradle.properties
Fügen Sie diesen Inhalt ein. Speichern Sie die Datei und starten Sie den Computer neu.
## Projektweite Gradle-Einstellungen. \{#project-wide-gradle-settings}
#
# Für weitere Details zur Konfiguration Ihrer Build-Umgebung besuchen Sie \{#for-more-details-on-how-to-configure-your-build-environment-visit}
# http://www.gradle.org/docs/current/userguide/build_environment.html \{#httpwwwgradleorgdocscurrentuserguidebuildenvironmenthtml}
#
# Gibt die für den Daemon-Prozess verwendeten JVM-Argumente an. \{#specifies-the-jvm-arguments-used-for-the-daemon-process}
# Die Einstellung ist besonders nützlich zum Optimieren der Speichereinstellungen. \{#the-setting-is-particularly-useful-for-tweaking-memory-settings}
# Standardwert: -Xmx10248m -XX:MaxMetaspaceSize=256m \{#default-value--xmx10248m--xxmaxmetaspacesize256m}
# org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 \{#orggradlejvmargs-xmx2048m--xxmaxmetaspacesize512m--xxheapdumponoutofmemoryerror--dfileencodingutf-8}
org.gradle.daemon=true
org.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=2048m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
#
# Wenn konfiguriert, wird Gradle im inkubierenden Parallelmodus ausgeführt. \{#when-configured-gradle-will-run-in-incubating-parallel-mode}
# Diese Option sollte nur bei entkoppelten Projekten verwendet werden. Weitere Details finden Sie unter \{#this-option-should-only-be-used-with-decoupled-projects-more-details-visit}
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects \{#httpwwwgradleorgdocscurrentuserguidemultiprojectbuildshtmlsecdecoupledprojects}
org.gradle.parallel=true
org.gradle.caching=true
#Fri Apr 08 18:47:31 EEST 2016
# android.useDeprecatedNdk=true \{#androidusedeprecatedndktrue}
- Führen Sie
prepare.sh
aus, um die Qt‑Bibliothek zu kompilieren und externe Abhängigkeiten herunterzuladen.
$ cd ios
$ ./prepare.sh
Fehler: Xcode not set up properly. You may need to confirm the license...
.
Lösung: Schalten Sie die XcodeCommandLineTools auf die Xcode‑App um, bestätigen Sie die Lizenz und schalten Sie sie zurück.
$ sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
$ sudo xcodebuild -license accept
$ sudo xcode-select --switch /Library/Developer/CommandLineTools
Lösung 2: Prüfen Sie, ob xcrun verfügbar ist: /usr/bin/xcrun -find xcrun
. Wenn Sie erhalten: xcrun: error: unable to find utility "xcrun", not a developer tool or in PATH
. Dann öffnen Sie Xcode > Preferences > Locations und wählen Sie im Feld "Command Line Tools" Ihre Befehlszeilentools "Xcode XX.X" aus. Führen Sie dann $ ./prepare.sh
erneut aus.
Lösung 3: Fehler: CMake Error ... iphoneos is not an iOS SDK
.
$ sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
Lösung 4: Wenn Sie einen Fehler wie diesen erhalten: CMake Error at CMakeLists.txt:1 (cmake_minimum_required): CMake 3.21.2 or higher is required. You are running version 3.11.2
. Laden Sie dann das dmg‑Installationsprogramm von der CMake‑Website herunter und führen Sie eine manuelle Installation durch. Führen Sie dann $ ./prepare.sh
erneut aus.
https://cmake.org/download/
Lösung 5: Wenn Sie einen Fehler wie diesen erhalten: Failed to configure 'qtbase-ios' for 'ios.simulator.clang.static', aborting...
. Gehen Sie in den Ordner core/external/qtbase-ios/
und löschen Sie alle Ordner, die mit upstream
beginnen. Führen Sie dann $ ./prepare.sh
erneut aus.
-
Öffnen Sie
osmand.xcworkspace
in Xcode. -
Erster Build. Setzen Sie das Build‑Ziel auf
OsmAnd Maps
. (In der Nähe der Wiedergabe-/Stopp‑Schaltflächen). Wählen Sie als Ziel Ihr Gerät oder einen der iOS‑Simulatoren. Verwenden Sie jedoch nicht den Standardwert "Any iOS Device (arm64)". Kompilieren Sie das Projekt (Wiedergabetaste). -
XCode‑Ziele und Sandbox
-
Verwenden Sie "My Mac (Designed for iPad)" für die tägliche Entwicklung (beste Leistung).
-
Verwenden Sie iPhone/iPad‑Ziele für die UI/UX‑Entwicklung (langsam auf M‑Prozessoren).
-
MacOS fordert Sie möglicherweise zur Anmeldung mit der Apple‑ID auf, wenn OsmAnd läuft.
-
Verwenden Sie Ihr Sandbox‑Konto als Apple‑ID, um wiederholte Anmeldeanforderungen zu vermeiden.
-
Verwenden Sie OsmAnd Cloud mit Ihrem Promo‑Abonnement, um unbegrenzte Karten zu erhalten.
-
Fragen Sie Ihren Teamleiter nach Sandbox‑Konten und Promo‑Abonnements.
Fehlerbehebung
Bereinigen temporärer Dateien.
- Im Falle von Build‑Fehlern können Sie in Xcode drücken:
Product -> Clean build folder
- Schließen Sie Xcode.
- Löschen Sie die Ordner
baked
undbinaries
im VerzeichnisOsmAnd
(falls vorhanden). - Gehen Sie in den Ordner
core/external/qtbase-ios/
und löschen Sie alle Ordner, die mitupstream
beginnen. - Löschen Sie den Xcode DerivedData‑Ordner:
rm -rf ~/Library/Developer/Xcode/DerivedData
- Überprüfen Sie, ob alle Repositories aktuell und auf den richtigen Branches sind.
- Starten Sie Ihren Computer neu. (Ja, das kann helfen.)
- Führen Sie dann
$ ./prepare.sh
aus. - Öffnen Sie XCode und versuchen Sie erneut, das Projekt zu kompilieren.
M1 Mac
- Im Falle von
ld: library not found for -lOsmAndCore_static_standalone
: - Project Navigator -> OsmAnd_projects -> OsmAnd_projects (in der Liste Project/Targets) -> Build settings -> All -> Architectures -> Excluded Architectures -> Debug
- Fügen Sie ein Zeichenkettenfeld vom Typ
Any IOS Simulator SDK
mit dem Wertarm64
hinzu. (Sie müssen es nach jedem prepare.sh‑Lauf hinzufügen) - Kompilieren Sie das Projekt. Im Falle von Fehlern führen Sie alle Anweisungen aus
11. Fehlerbehebung - Bereinigen temporärer Dateien.
undprepare.sh
erneut aus.
Kotlin Debug Addon (optional)
$ brew install xcode-kotlin
$ xcode-kotlin install
$ xcode-kotlin sync
Siehe den Abschnitt LLDB Init File, um die Kotlin‑Debug‑Einrichtung abzuschließen.
Qt Debug Addon (optional). Wenn Sie Qt‑Werte im Debug‑Modus sehen möchten, führen Sie dies aus:
$ mkdir -p ~/qtlldb
$ git clone https://github.com/gbooker/lldb-qt-formatters ~/qtlldb
$ touch ~/.lldbinit-Xcode
$ echo "" >> ~/.lldbinit-Xcode
$ echo "command script import ~/qtlldb/both.py" >> ~/.lldbinit-Xcode
LLDB Init File (optional)
Xcode 16+ lädt ~/.lldbinit-Xcode
nicht automatisch, daher richten Sie es manuell über das Menü Product - Scheme - Edit scheme - Run - LLDB Init File
ein.
Nachdem Sie diese Parameter eingestellt haben, starten Sie Ihren Computer neu.