Jak skompilować wersję iOS
- Najpierw skonfiguruj środowisko programistyczne.
- Zainstaluj Xcode z AppStore (ostatnio testowane 14.2)
- Zainstaluj narzędzia wiersza poleceń Xcode
$ xcode-select --install
Lub w przypadku błędów spróbuj pobrać i zainstalować z: strony Apple.
- Zaloguj się na konto Xcode (opcjonalnie) Jeśli nie masz konta Apple Developer. Otwórz Xcode i przejdź do preferencji (przez górne menu)
Preferencje -> Konta
Naciśnij przycisk +
. Możesz zalogować się za pomocą swojego AppleID (login i hasło z urządzeń iOS/macOS). Postępuj zgodnie z instrukcjami Xcode.
Dla członków zespołu OsmAnd: wyślij swój login AppleID, aby zostać dodanym do listy deweloperów. Gdy otrzymasz e-mail z zaproszeniem, aktywuj je.
Zamknij Xcode.
- Zainstaluj narzędzia wiersza poleceń - cmake, svn, cocoapods
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# dla intela
$ echo 'eval "$(/usr/local/bin/brew shellenv)"' >> ~/.zshrc
$ eval "$(/usr/local/bin/brew shellenv)"
# dla m1
$ echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zshrc
$ eval "$(/opt/homebrew/bin/brew shellenv)"
$ brew install svn
$ brew install cmake # testowane na 3.25.2, 3.19, 3.11
# dla intela
$ sudo gem install cocoapods
# dla m1
$ brew install cocoapods
- Pobierz i zainstaluj Java jdk 17
# dla intela
https://download.oracle.com/java/17/archive/jdk-17.0.11_macos-x64_bin.dmg
# dla m1
https://download.oracle.com/java/17/archive/jdk-17.0.11_macos-aarch64_bin.dmg
- Utwórz nowy plik tekstowy. Lub zaktualizuj, jeśli istnieje.
$ mkdir ~/.gradle
$ nano ~/.gradle/gradle.properties
Wklej tę zawartość. Zapisz plik i uruchom ponownie komputer.
## Ustawienia Gradle dla całego projektu. \{#project-wide-gradle-settings}
#
# Aby uzyskać więcej informacji na temat konfiguracji środowiska kompilacji, odwiedź \{#for-more-details-on-how-to-configure-your-build-environment-visit}
# http://www.gradle.org/docs/current/userguide/build_environment.html \{#httpwwwgradleorgdocscurrentuserguidebuildenvironmenthtml}
#
# Określa argumenty JVM używane dla procesu demona. \{#specifies-the-jvm-arguments-used-for-the-daemon-process}
# Ustawienie jest szczególnie przydatne do dostosowywania ustawień pamięci. \{#the-setting-is-particularly-useful-for-tweaking-memory-settings}
# Wartość domyślna: -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
#
# Po skonfigurowaniu Gradle będzie działać w trybie równoległym (inkubacyjnym). \{#when-configured-gradle-will-run-in-incubating-parallel-mode}
# Ta opcja powinna być używana tylko z odseparowanymi projektami. Więcej szczegółów, odwiedź \{#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
#Pt Kwi 08 18:47:31 EEST 2016
# android.useDeprecatedNdk=true \{#androidusedeprecatedndktrue}
- Uruchom
prepare.sh
, aby skompilować bibliotekę Qt i pobrać zewnętrzne zależności
$ cd ios
$ ./prepare.sh
Błąd: Xcode nie jest poprawnie skonfigurowany. Może być konieczne potwierdzenie licencji...
.
Rozwiązanie: przełącz XcodeCommandLineTools na aplikację Xcode, potwierdź licencję i przełącz z powrotem.
$ sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
$ sudo xcodebuild -license accept
$ sudo xcode-select --switch /Library/Developer/CommandLineTools
Rozwiązanie 2: sprawdź, czy xcrun jest dostępny: /usr/bin/xcrun -find xcrun
. Jeśli otrzymasz: xcrun: błąd: nie można znaleźć narzędzia "xcrun", nie jest to narzędzie deweloperskie ani nie znajduje się w PATH
. Następnie otwórz Xcode > Preferencje > Lokalizacje i w polu "Narzędzia wiersza poleceń" wybierz swoje narzędzia wiersza poleceń "Xcode XX.X" I uruchom $ ./prepare.sh
ponownie.
Rozwiązanie 3: Błąd: CMake Error ... iphoneos nie jest pakietem SDK iOS
.
$ sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
Rozwiązanie 4: Jeśli otrzymasz błąd taki jak ten: CMake Error at CMakeLists.txt:1 (cmake_minimum_required): Wymagana jest wersja CMake 3.21.2 lub nowsza. Używasz wersji 3.11.2
. Następnie pobierz instalator dmg ze strony CMake i wykonaj ręczną instalację. I uruchom $ ./prepare.sh
ponownie.
https://cmake.org/download/
Rozwiązanie 5: Jeśli otrzymasz błąd taki jak ten: Failed to configure 'qtbase-ios' for 'ios.simulator.clang.static', aborting...
. Przejdź do folderu core/external/qtbase-ios/
i usuń wszystkie foldery zaczynające się od upstream
. I uruchom $ ./prepare.sh
ponownie.
-
Otwórz
osmand.xcworkspace
w Xcode -
Pierwsza kompilacja. Ustaw cel kompilacji na
OsmAnd Maps
. (Obok przycisków odtwarzania/zatrzymywania). Wybierz jako cel swoje urządzenie lub jeden z symulatorów iOS. Ale nie używaj domyślnego 'Dowolne urządzenie iOS (arm64)'. Zbuduj projekt (przycisk odtwarzania). -
Miejsca docelowe Xcode i piaskownica
-
Używaj "Mój Mac (zaprojektowany dla iPada)" do codziennego rozwoju (najlepsza wydajność)
-
Używaj miejsc docelowych iPhone/iPad do rozwoju UI/UX (wolno na procesorach M)
-
macOS może poprosić o zalogowanie się za pomocą Apple ID, gdy OsmAnd jest uruchomiony
-
Używaj swojego konta piaskownicy jako Apple ID, aby uniknąć powtarzających się żądań logowania
-
Używaj OsmAnd Cloud z subskrypcją promocyjną, aby uzyskać nieograniczone mapy
-
Poproś swojego lidera zespołu o konta piaskownicy i subskrypcje promocyjne
Rozwiązywanie problemów
Czyszczenie plików tymczasowych.
- W przypadku błędów kompilacji możesz nacisnąć w Xcode:
Produkt -> Wyczyść folder kompilacji
- Zamknij Xcode.
- Usuń foldery
baked
ibinaries
w kataloguOsmAnd
(jeśli już istnieją). - Przejdź do folderu
core/external/qtbase-ios/
i usuń wszystkie foldery zaczynające się odupstream
. - Usuń folder Xcode DerivedData:
rm -rf ~/Library/Developer/Xcode/DerivedData
- Sprawdź, czy wszystkie repozytoria są aktualne i na właściwych gałęziach.
- Uruchom ponownie komputer. (Tak, to może pomóc).
- Następnie uruchom
$ ./prepare.sh
- Otwórz XCode i spróbuj ponownie zbudować projekt.
Mac M1
- W przypadku
ld: library not found for -lOsmAndCore_static_standalone
: - Nawigator projektu -> OsmAnd_projects -> OsmAnd_projects (na liście Projekt/Cele) -> Ustawienia kompilacji -> Wszystkie -> Architektury -> Wykluczone architektury -> Debug
- Dodaj pole tekstowe typu
Any IOS Simulator SDK
z wartościąarm64
. (będziesz musiał je dodać po każdym uruchomieniu prepare.sh) - Zbuduj projekt. W przypadku błędów, wykonaj ponownie wszystkie instrukcje z
11. Rozwiązywanie problemów - czyszczenie plików tymczasowych.
iprepare.sh
.
Dodatek debugowania Kotlin (opcjonalnie)
$ brew install xcode-kotlin
$ xcode-kotlin install
$ xcode-kotlin sync
Zapoznaj się z sekcją Plik inicjalizacyjny LLDB, aby zakończyć konfigurację debugowania Kotlin.
Dodatek debugowania Qt (opcjonalnie). Jeśli chcesz zobaczyć wartości Qt w trybie debugowania, uruchom to:
$ 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
Plik inicjalizacyjny LLDB (opcjonalnie)
XCode 16+ nie ładuje automatycznie ~/.lldbinit-Xcode
, więc skonfiguruj go ręcznie za pomocą menu Produkt - Schemat - Edytuj schemat - Uruchom - Plik inicjalizacyjny LLDB
.
Po ustawieniu tych parametrów uruchom ponownie komputer.