Compare commits
1 Commits
yannikblos
...
delete_pas
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d700510c94 |
@@ -1,61 +1,48 @@
|
||||
# Configuration file for clang-format, based on docs/CPP_STYLE.md.
|
||||
|
||||
---
|
||||
BasedOnStyle: Google
|
||||
|
||||
AccessModifierOffset: -2
|
||||
AlignAfterOpenBracket: Align
|
||||
AlignConsecutiveMacros: AcrossEmptyLinesAndComments
|
||||
AlignEscapedNewlines: LeftWithLastLine
|
||||
AlignOperands: AlignAfterOperator
|
||||
AllowShortBlocksOnASingleLine: Empty
|
||||
AllowShortCaseLabelsOnASingleLine: true
|
||||
AllowShortFunctionsOnASingleLine: Inline
|
||||
AllowShortIfStatementsOnASingleLine: Never
|
||||
AllowShortLoopsOnASingleLine: false
|
||||
AllowShortCaseLabelsOnASingleLine: true
|
||||
BraceWrapping:
|
||||
AfterCaseLabel: true
|
||||
AfterClass: true
|
||||
AfterControlStatement: Always
|
||||
AfterEnum: true
|
||||
AfterExternBlock: true
|
||||
AfterFunction: true
|
||||
AfterNamespace: true
|
||||
AfterObjCDeclaration: true
|
||||
AfterStruct: true
|
||||
AfterUnion: true
|
||||
AfterExternBlock: true
|
||||
BeforeCatch: true
|
||||
BeforeElse: true
|
||||
BeforeLambdaBody: true
|
||||
BeforeWhile: true
|
||||
IndentBraces: false
|
||||
SplitEmptyFunction: false
|
||||
SplitEmptyNamespace: false
|
||||
SplitEmptyRecord: false
|
||||
BinPackArguments: true
|
||||
BinPackParameters: true
|
||||
BreakAfterJavaFieldAnnotations: true
|
||||
SplitEmptyNamespace: false
|
||||
BreakBeforeBraces: Custom
|
||||
BreakConstructorInitializers: BeforeComma
|
||||
BreakInheritanceList: BeforeComma
|
||||
ColumnLimit: 120
|
||||
ConstructorInitializerIndentWidth: 2
|
||||
ContinuationIndentWidth: 4
|
||||
ContinuationIndentWidth: 2
|
||||
DerivePointerAlignment: false
|
||||
EmptyLineBeforeAccessModifier: Always
|
||||
IncludeBlocks: Preserve
|
||||
IndentAccessModifiers: false
|
||||
IndentCaseLabels: false
|
||||
IndentExternBlock: NoIndent
|
||||
InsertBraces: false
|
||||
InsertNewlineAtEOF: true
|
||||
LambdaBodyIndentation: OuterScope
|
||||
PackConstructorInitializers: CurrentLine
|
||||
PackConstructorInitializers: Never
|
||||
PointerAlignment: Middle
|
||||
RemoveBracesLLVM: true
|
||||
RemoveSemicolon: true
|
||||
QualifierAlignment: Right
|
||||
SpacesInContainerLiterals: false
|
||||
Standard: Latest
|
||||
TabWidth: 2
|
||||
|
||||
---
|
||||
Language: Java
|
||||
AllowShortFunctionsOnASingleLine: Empty
|
||||
UseTab: Never
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
# Files that should not be formatted.
|
||||
./3party
|
||||
# A patched copy of the https://registry.khronos.org/OpenGL/api/GLES3/gl3.h
|
||||
./android/sdk/src/main/cpp/app/organicmaps/sdk/opengl/gl3stub.h
|
||||
# Formatting it leads to crashes in runtime. Newer protobuf may fix it.
|
||||
./libs/indexer/drules_struct.pb.cc
|
||||
# No need to format this 3party tool.
|
||||
tools/osmctools/*.c
|
||||
@@ -1,5 +1,6 @@
|
||||
name: 🐞 Bug Report
|
||||
description: Report a problem you've encountered
|
||||
title: "bug: "
|
||||
labels:
|
||||
- bug
|
||||
body:
|
||||
@@ -66,4 +67,4 @@ body:
|
||||
label: Additional context
|
||||
description: Add any other context or comments that may be useful.
|
||||
validations:
|
||||
required: false
|
||||
required: false
|
||||
@@ -1,5 +1,6 @@
|
||||
name: "💡 Feature Request"
|
||||
description: "Suggest an idea or improvement for CoMaps"
|
||||
title: "feat: "
|
||||
labels:
|
||||
- "enhancement"
|
||||
body:
|
||||
@@ -43,4 +44,4 @@ body:
|
||||
label: "Additional context"
|
||||
description: "Any other context, comments, or screenshots to support your request."
|
||||
validations:
|
||||
required: false
|
||||
required: false
|
||||
@@ -32,6 +32,9 @@ on:
|
||||
- track_generator/**
|
||||
- xcode/**
|
||||
|
||||
env:
|
||||
JAVA_HOME: /usr/lib/jvm/temurin-17-jdk-amd64 # Java 17 is required for Android Gradle 8 plugin
|
||||
|
||||
jobs:
|
||||
android-google-beta:
|
||||
name: Android Google Beta
|
||||
@@ -68,6 +71,10 @@ jobs:
|
||||
SECURE_PROPERTIES: ${{ secrets.SECURE_PROPERTIES }}
|
||||
RELEASE_KEYSTORE: ${{ secrets.RELEASE_KEYSTORE }}
|
||||
|
||||
- name: Configure repository
|
||||
shell: bash
|
||||
run: ./configure.sh
|
||||
|
||||
- name: Compile
|
||||
shell: bash
|
||||
working-directory: android
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
name: Android Check Store Metadata
|
||||
name: Android Check Metadata
|
||||
on:
|
||||
workflow_dispatch: # Manual trigger
|
||||
pull_request:
|
||||
@@ -21,8 +21,5 @@ jobs:
|
||||
android
|
||||
tools/python/check_store_metadata.py
|
||||
|
||||
- name: Check Google Play metadata
|
||||
run: ./tools/python/check_store_metadata.py gplay
|
||||
|
||||
- name: Check F-Droid metadata
|
||||
run: ./tools/python/check_store_metadata.py fdroid
|
||||
- name: Check metadata
|
||||
run: ./tools/python/check_store_metadata.py android
|
||||
|
||||
@@ -34,6 +34,9 @@ on:
|
||||
- track_generator/**
|
||||
- xcode/**
|
||||
|
||||
env:
|
||||
JAVA_HOME: /usr/lib/jvm/temurin-17-jdk-amd64 # Java 17 is required for Android Gradle 8 plugin
|
||||
|
||||
jobs:
|
||||
lint:
|
||||
name: Android Lint
|
||||
@@ -48,6 +51,10 @@ jobs:
|
||||
shell: bash
|
||||
run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
|
||||
|
||||
- name: Configure repository
|
||||
shell: bash
|
||||
run: ./configure.sh
|
||||
|
||||
- name: Lint
|
||||
shell: bash
|
||||
working-directory: android
|
||||
@@ -86,6 +93,10 @@ jobs:
|
||||
shell: bash
|
||||
run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
|
||||
|
||||
- name: Configure repository
|
||||
shell: bash
|
||||
run: ./configure.sh
|
||||
|
||||
- name: Configure ccache
|
||||
uses: hendrikmuhs/ccache-action@v1.2
|
||||
with:
|
||||
|
||||
@@ -4,6 +4,9 @@ on:
|
||||
schedule:
|
||||
- cron: '0 5 * * 0' # Once per week at 05:00 UTC
|
||||
|
||||
env:
|
||||
JAVA_HOME: /usr/lib/jvm/temurin-17-jdk-amd64 # Java 17 is required for Android Gradle 8 plugin
|
||||
|
||||
jobs:
|
||||
precondition:
|
||||
runs-on: ubuntu-latest
|
||||
@@ -70,6 +73,10 @@ jobs:
|
||||
SECURE_PROPERTIES: ${{ secrets.SECURE_PROPERTIES }}
|
||||
RELEASE_KEYSTORE: ${{ secrets.RELEASE_KEYSTORE }}
|
||||
|
||||
- name: Configure repository
|
||||
shell: bash
|
||||
run: ./configure.sh
|
||||
|
||||
- name: Compile
|
||||
shell: bash
|
||||
working-directory: android
|
||||
|
||||
@@ -2,29 +2,41 @@ name: Android Release Metadata
|
||||
on:
|
||||
workflow_dispatch: # Manual trigger
|
||||
|
||||
env:
|
||||
JAVA_HOME: /usr/lib/jvm/temurin-17-jdk-amd64 # Java 17 is required for Android Gradle 8 plugin
|
||||
|
||||
jobs:
|
||||
android-release-metadata:
|
||||
name: Upload Google Play metadata
|
||||
runs-on: ubuntu-latest
|
||||
environment: production
|
||||
steps:
|
||||
- name: Checkout
|
||||
- name: Checkout sources
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Parallel submodules checkout
|
||||
shell: bash
|
||||
run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
|
||||
|
||||
- name: Checkout screenshots
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 1
|
||||
sparse-checkout: |
|
||||
android
|
||||
tools/python/check_store_metadata.py
|
||||
repository: ${{ secrets.SCREENSHOTS_REPO }}
|
||||
ssh-key: ${{ secrets.SCREENSHOTS_SSH_KEY }}
|
||||
ref: main
|
||||
path: screenshots
|
||||
|
||||
- name: Restore release keys
|
||||
shell: bash
|
||||
run: |
|
||||
echo "$PRIVATE_H" | base64 -d > private.h
|
||||
echo "$GOOGLE_PLAY_JSON" | base64 -d > android/app/google-play.json
|
||||
env:
|
||||
PRIVATE_H: ${{ secrets.PRIVATE_H }}
|
||||
GOOGLE_PLAY_JSON: ${{ secrets.GOOGLE_PLAY_JSON }}
|
||||
|
||||
- name: Upload
|
||||
shell: bash
|
||||
run: ./gradlew publishGoogleReleaseListing
|
||||
run: ./gradlew prepareGoogleReleaseListing publishGoogleReleaseListing
|
||||
working-directory: android
|
||||
timeout-minutes: 5
|
||||
|
||||
@@ -5,6 +5,7 @@ on:
|
||||
env:
|
||||
RELEASE_NOTES: android/app/src/google/play/release-notes/en-US/default.txt
|
||||
FDROID_VERSION: android/app/src/fdroid/play/version.yaml
|
||||
JAVA_HOME: /usr/lib/jvm/temurin-17-jdk-amd64 # Java 17 is required for Android Gradle 8 plugin
|
||||
|
||||
jobs:
|
||||
tag:
|
||||
@@ -116,6 +117,10 @@ jobs:
|
||||
SECURE_PROPERTIES: ${{ secrets.SECURE_PROPERTIES }}
|
||||
RELEASE_KEYSTORE: ${{ secrets.RELEASE_KEYSTORE }}
|
||||
|
||||
- name: Configure repository
|
||||
shell: bash
|
||||
run: ./configure.sh
|
||||
|
||||
- name: Set up SDK
|
||||
shell: bash
|
||||
run: echo "sdk.dir=$ANDROID_SDK_ROOT" > android/local.properties
|
||||
|
||||
@@ -3,20 +3,20 @@ on:
|
||||
workflow_dispatch: # Manual trigger
|
||||
pull_request:
|
||||
paths:
|
||||
- packaging/app.comaps.comaps.metainfo.xml
|
||||
- .forgejo/workflows/appstream-check.yaml # Run check on self change
|
||||
- packaging/app.organicmaps.desktop.metainfo.xml
|
||||
- .forgejo/workflows/appstream-check.yaml # Run check on self change
|
||||
|
||||
jobs:
|
||||
validate-appstream:
|
||||
name: Validate appstream metadata xml
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: ubuntu-24.04
|
||||
steps:
|
||||
- name: Checkout sources
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 1
|
||||
sparse-checkout: |
|
||||
packaging/app.comaps.comaps.metainfo.xml
|
||||
packaging/app.organicmaps.desktop.metainfo.xml
|
||||
|
||||
- name: Install appstream validator and flatpak Builder
|
||||
shell: bash
|
||||
@@ -25,12 +25,16 @@ jobs:
|
||||
sudo apt install -y \
|
||||
flatpak
|
||||
sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
|
||||
sudo flatpak install -y org.flatpak.Builder
|
||||
sudo flatpak install -y org.freedesktop.appstream-glib org.flatpak.Builder
|
||||
|
||||
- name: Validate appstream data
|
||||
shell: bash
|
||||
run: flatpak run org.freedesktop.appstream-glib validate --nonet packaging/app.organicmaps.desktop.metainfo.xml
|
||||
|
||||
- name: Lint appstream data with flatpak Builder
|
||||
shell: bash
|
||||
run: flatpak run --command=flatpak-builder-lint org.flatpak.Builder appstream packaging/app.comaps.comaps.metainfo.xml
|
||||
run: flatpak run --command=flatpak-builder-lint org.flatpak.Builder appstream packaging/app.organicmaps.desktop.metainfo.xml
|
||||
|
||||
- name: Run appstreamcli in pedantic mode
|
||||
shell: bash
|
||||
run: flatpak run --command=appstreamcli org.flatpak.Builder validate --pedantic packaging/app.comaps.comaps.metainfo.xml
|
||||
run: flatpak run --command=appstreamcli org.flatpak.Builder validate --pedantic packaging/app.organicmaps.desktop.metainfo.xml
|
||||
|
||||
@@ -33,7 +33,7 @@ concurrency:
|
||||
jobs:
|
||||
should-run-check:
|
||||
name: Should run coverage
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: ubuntu-24.04
|
||||
outputs:
|
||||
run-from-pr: ${{ steps.run-from-pr.outputs.run-from-pr }}
|
||||
manually-triggered: ${{ steps.manually-triggered.outputs.manually-triggered }}
|
||||
@@ -59,9 +59,14 @@ jobs:
|
||||
coverage:
|
||||
needs: should-run-check
|
||||
name: Generate coverage report
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: ubuntu-24.04
|
||||
if: ${{ needs.should-run-check.outputs.run-from-pr == 'true' || needs.should-run-check.outputs.manually-triggered == 'true'}}
|
||||
steps:
|
||||
- name: Free disk space by removing .NET, Android and Haskell
|
||||
shell: bash
|
||||
run: |
|
||||
sudo rm -rf /usr/share/dotnet /usr/local/lib/android /opt/ghc
|
||||
|
||||
- name: Checkout sources
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
@@ -89,6 +94,10 @@ jobs:
|
||||
llvm \
|
||||
gcovr
|
||||
|
||||
- name: Configure repository
|
||||
shell: bash
|
||||
run: ./configure.sh
|
||||
|
||||
- name: Configure ccache
|
||||
uses: hendrikmuhs/ccache-action@v1.2
|
||||
with:
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
name: DCO
|
||||
on: [pull_request]
|
||||
|
||||
jobs:
|
||||
check:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Check for Developer Certificate of Origin (DCO) compliance
|
||||
uses: https://github.com/KineticCafe/actions-dco@fb284c903a7673a3d4b0bdd104479a6f0d46dae7 # v1.3.6
|
||||
@@ -3,20 +3,20 @@ on:
|
||||
workflow_dispatch: # Manual trigger
|
||||
pull_request:
|
||||
paths:
|
||||
- qt/res/linux/app.comaps.comaps.desktop
|
||||
- .forgejo/workflows/desktop-file-check.yaml # Run check on self change
|
||||
- qt/res/app.organicmaps.desktop.desktop
|
||||
- .forgejo/workflows/desktop-file-check.yaml # Run check on self change
|
||||
|
||||
jobs:
|
||||
validate-desktop-file:
|
||||
name: Validate .desktop file
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: ubuntu-24.04
|
||||
steps:
|
||||
- name: Checkout sources
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 1
|
||||
sparse-checkout: |
|
||||
qt/res/linux/app.comaps.comaps.desktop
|
||||
qt/res/app.organicmaps.desktop.desktop
|
||||
|
||||
- name: Install desktop-file-validate tool
|
||||
shell: bash
|
||||
@@ -27,4 +27,4 @@ jobs:
|
||||
|
||||
- name: Validate desktop file
|
||||
shell: bash
|
||||
run: desktop-file-validate qt/res/linux/app.comaps.comaps.desktop && echo "Successfully validated .desktop file"
|
||||
run: desktop-file-validate qt/res/app.organicmaps.desktop.desktop && echo "Successfully validated .desktop file"
|
||||
|
||||
@@ -35,7 +35,7 @@ jobs:
|
||||
name: Apple TestFlight
|
||||
runs-on: macos-15
|
||||
env:
|
||||
DEVELOPER_DIR: /Applications/Xcode_26.app/Contents/Developer
|
||||
DEVELOPER_DIR: /Applications/Xcode_16.app/Contents/Developer
|
||||
LANG: en_US.UTF-8 # Fastlane complains that the terminal is using ASCII.
|
||||
LANGUAGE: en_US.UTF-8
|
||||
LC_ALL: en_US.UTF-8
|
||||
|
||||
@@ -37,11 +37,11 @@ jobs:
|
||||
name: Build iOS
|
||||
runs-on: macos-15
|
||||
env:
|
||||
DEVELOPER_DIR: /Applications/Xcode_26.app/Contents/Developer
|
||||
DEVELOPER_DIR: /Applications/Xcode_16.app/Contents/Developer
|
||||
LANG: en_US.UTF-8 # Fastlane complains that the terminal is using ASCII.
|
||||
LANGUAGE: en_US.UTF-8
|
||||
LC_ALL: en_US.UTF-8
|
||||
TEST_RESULTS_BUNDLE_NAME: CoMaps-Test-Results
|
||||
TEST_RESULTS_BUNDLE_NAME: OMaps-Test-Results
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
@@ -74,8 +74,8 @@ jobs:
|
||||
shell: bash
|
||||
run: |
|
||||
xcodebuild test \
|
||||
-workspace xcode/CoMaps.xcworkspace \
|
||||
-scheme CoMaps \
|
||||
-workspace xcode/omim.xcworkspace \
|
||||
-scheme OMaps \
|
||||
-configuration Debug \
|
||||
-sdk iphonesimulator \
|
||||
-destination 'platform=iOS Simulator,name=iPhone 16 Pro Max,OS=latest' \
|
||||
@@ -97,10 +97,10 @@ jobs:
|
||||
shell: bash
|
||||
run: |
|
||||
xcodebuild build \
|
||||
-workspace xcode/CoMaps.xcworkspace \
|
||||
-scheme CoMaps \
|
||||
-workspace xcode/omim.xcworkspace \
|
||||
-scheme OMaps \
|
||||
-configuration Release \
|
||||
-destination 'generic/platform=iOS' \
|
||||
-quiet \
|
||||
CODE_SIGNING_REQUIRED=NO \
|
||||
CODE_SIGNING_ALLOWED=NO
|
||||
CODE_SIGNING_ALLOWED=NO
|
||||
@@ -7,7 +7,7 @@ jobs:
|
||||
name: iOS Release
|
||||
runs-on: macos-15
|
||||
env:
|
||||
DEVELOPER_DIR: /Applications/Xcode_26.app/Contents/Developer
|
||||
DEVELOPER_DIR: /Applications/Xcode_16.app/Contents/Developer
|
||||
LANG: en_US.UTF-8 # Fastlane complains that the terminal is using ASCII.
|
||||
LANGUAGE: en_US.UTF-8
|
||||
LC_ALL: en_US.UTF-8
|
||||
|
||||
@@ -31,13 +31,18 @@ on:
|
||||
jobs:
|
||||
linux-no-unity:
|
||||
name: Linux no unity build
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: ubuntu-24.04
|
||||
# Cancels previous jobs if the same branch or PR was updated again.
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-no-unity-${{ github.event.pull_request.number || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
steps:
|
||||
- name: Free disk space by removing .NET, Android and Haskell
|
||||
shell: bash
|
||||
run: |
|
||||
sudo rm -rf /usr/share/dotnet /usr/local/lib/android /opt/ghc
|
||||
|
||||
- name: Checkout sources
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
@@ -66,6 +71,10 @@ jobs:
|
||||
libqt6positioning6-plugins \
|
||||
libqt6positioning6
|
||||
|
||||
- name: Configure repository
|
||||
shell: bash
|
||||
run: ./configure.sh
|
||||
|
||||
- name: Configure ccache
|
||||
uses: hendrikmuhs/ccache-action@v1.2
|
||||
with:
|
||||
@@ -81,7 +90,7 @@ jobs:
|
||||
# -g1 should slightly reduce build time.
|
||||
run: |
|
||||
cmake . -B build -G Ninja -DCMAKE_BUILD_TYPE=Debug \
|
||||
-DCMAKE_CXX_FLAGS=-g1 -DCMAKE_UNITY_BUILD=OFF
|
||||
-DCMAKE_CXX_FLAGS=-g1 -DUNITY_DISABLE=ON
|
||||
|
||||
- name: Compile
|
||||
shell: bash
|
||||
@@ -90,7 +99,7 @@ jobs:
|
||||
|
||||
linux-matrix:
|
||||
name: Linux builds and tests
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: ubuntu-24.04
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
@@ -102,6 +111,11 @@ jobs:
|
||||
cancel-in-progress: true
|
||||
|
||||
steps:
|
||||
- name: Free disk space by removing .NET, Android and Haskell
|
||||
shell: bash
|
||||
run: |
|
||||
sudo rm -rf /usr/share/dotnet /usr/local/lib/android /opt/ghc
|
||||
|
||||
- name: Checkout sources
|
||||
uses: actions/checkout@v4
|
||||
|
||||
@@ -128,19 +142,15 @@ jobs:
|
||||
libqt6positioning6-plugins \
|
||||
libqt6positioning6
|
||||
|
||||
- name: Configure repository
|
||||
shell: bash
|
||||
run: ./configure.sh
|
||||
|
||||
- name: Configure ccache
|
||||
uses: hendrikmuhs/ccache-action@v1.2
|
||||
with:
|
||||
key: ${{ github.workflow }}-unity-${{ matrix.compiler.CC }}-${{ matrix.CMAKE_BUILD_TYPE }}
|
||||
|
||||
- name: Configure repository
|
||||
shell: bash
|
||||
env:
|
||||
SKIP_MAP_DOWNLOAD: 1
|
||||
SKIP_GENERATE_SYMBOLS: 1
|
||||
SKIP_GENERATE_DRULES: 1
|
||||
run: ./configure.sh
|
||||
|
||||
- name: CMake
|
||||
shell: bash
|
||||
env:
|
||||
|
||||
@@ -32,7 +32,7 @@ jobs:
|
||||
name: macOS builds and tests
|
||||
runs-on: macos-15
|
||||
env:
|
||||
DEVELOPER_DIR: /Applications/Xcode_26.app/Contents/Developer
|
||||
DEVELOPER_DIR: /Applications/Xcode_16.app/Contents/Developer
|
||||
HOMEBREW_NO_ANALYTICS: 1
|
||||
HOMEBREW_NO_INSTALL_CLEANUP: 1
|
||||
strategy:
|
||||
@@ -57,6 +57,10 @@ jobs:
|
||||
run: |
|
||||
HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 brew install ninja qt@6
|
||||
|
||||
- name: Configure repository
|
||||
shell: bash
|
||||
run: ./configure.sh
|
||||
|
||||
- name: Configure ccache
|
||||
uses: hendrikmuhs/ccache-action@v1.2
|
||||
with:
|
||||
|
||||
@@ -1,382 +0,0 @@
|
||||
name: map-generator
|
||||
on:
|
||||
workflow_dispatch: # Manual trigger
|
||||
inputs:
|
||||
jobs:
|
||||
description: 'Which job(s) to run right now?'
|
||||
required: true
|
||||
default: 'all'
|
||||
type: choice
|
||||
options:
|
||||
- all
|
||||
- copy-coasts
|
||||
- planet
|
||||
- wiki
|
||||
- isolines
|
||||
- subways
|
||||
- tiger
|
||||
- maps
|
||||
|
||||
env:
|
||||
WIKIMEDIA_USERNAME: ${{ secrets.WIKIMEDIA_USERNAME }}
|
||||
WIKIMEDIA_PASSWORD: ${{ secrets.WIKIMEDIA_PASSWORD }}
|
||||
S3_KEY_ID: ${{ secrets.S3_KEY_ID }}
|
||||
S3_SECRET_KEY: ${{ secrets.S3_SECRET_KEY }}
|
||||
S3_ENDPOINT: ${{ secrets.S3_ENDPOINT }}
|
||||
S3_BUCKET: ${{ secrets.S3_BUCKET }}
|
||||
SFTP_USER: ${{ secrets.SFTP_USER }}
|
||||
SFTP_PASSWORD: ${{ secrets.SFTP_PASSWORD }}
|
||||
SFTP_HOST: ${{ secrets.SFTP_HOST }}
|
||||
SFTP_PATH: ${{ secrets.SFTP_PATH }}
|
||||
DEBIAN_FRONTEND: noninteractive
|
||||
TZ: Etc/UTC
|
||||
|
||||
jobs:
|
||||
copy-coasts:
|
||||
if: inputs.jobs == 'copy-coasts' || inputs.jobs == 'all'
|
||||
name: Copy Previously Generated Coasts
|
||||
runs-on: mapfilemaker
|
||||
container:
|
||||
image: ubuntu:latest
|
||||
volumes:
|
||||
- /media/4tbexternal:/media/4tbexternal
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }}
|
||||
cancel-in-progress: true
|
||||
steps:
|
||||
- name: Copy Coasts
|
||||
shell: bash
|
||||
run: |
|
||||
if [ -f /media/4tbexternal/osm-maps/*/intermediate_data/WorldCoasts.geom ]; then
|
||||
cp /media/4tbexternal/osm-maps/*/intermediate_data/WorldCoasts.geom /media/4tbexternal/osm-planet/latest_coasts.geom
|
||||
cp /media/4tbexternal/osm-maps/*/intermediate_data/WorldCoasts.rawgeom /media/4tbexternal/osm-planet/latest_coasts.rawgeom
|
||||
fi
|
||||
|
||||
update-planet:
|
||||
if: inputs.jobs == 'planet' || inputs.jobs == 'all'
|
||||
name: Update Planet
|
||||
runs-on: mapfilemaker
|
||||
container:
|
||||
image: ubuntu:latest
|
||||
volumes:
|
||||
- /media/4tbexternal:/media/4tbexternal
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }}
|
||||
cancel-in-progress: true
|
||||
steps:
|
||||
- name: Install dependencies
|
||||
shell: bash
|
||||
run: |
|
||||
apt-get update -y
|
||||
apt-get install -y pyosmium osmium-tool python3-venv python3-pip wget2
|
||||
rm -f /usr/lib/python*/EXTERNALLY-MANAGED
|
||||
pip3 install "protobuf<4"
|
||||
- name: Download Planet File if Absent
|
||||
shell: bash
|
||||
run: |
|
||||
if [ ! -d /media/4tbexternal/osm-planet/planet/ ]; then
|
||||
mkdir -p /media/4tbexternal/osm-planet/planet/
|
||||
fi
|
||||
if [ ! -f /media/4tbexternal/osm-planet/planet/planet-latest.osm.pbf ]; then
|
||||
cd /media/4tbexternal/osm-planet/planet/
|
||||
wget2 --verbose --progress=bar --continue --debug https://ftpmirror.your.org/pub/openstreetmap/pbf/planet-latest.osm.pbf
|
||||
fi
|
||||
- name: Update Planet
|
||||
shell: bash
|
||||
run: |
|
||||
cd /media/4tbexternal/osm-planet/planet/
|
||||
pyosmium-up-to-date planet-latest.osm.pbf -o planet-latest-new.osm.pbf -vv --size 16384
|
||||
mv planet-latest-new.osm.pbf planet-latest.osm.pbf
|
||||
- name: Converting planet-latest.osm.pbf to planet.o5m
|
||||
run: /root/OM/osmctools/osmconvert planet-latest.osm.pbf -o=planet.o5m
|
||||
|
||||
wiki-update:
|
||||
if: inputs.jobs == 'wiki' || inputs.jobs == 'all'
|
||||
name: Update Wikipedia
|
||||
runs-on: mapfilemaker
|
||||
container:
|
||||
image: ubuntu:latest
|
||||
volumes:
|
||||
- /media/4tbexternal:/media/4tbexternal
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }}
|
||||
cancel-in-progress: true
|
||||
steps:
|
||||
- name: Install dependencies
|
||||
shell: bash
|
||||
run: |
|
||||
apt-get update -y
|
||||
apt-get install -y jq curl wget2 rustc cargo git ca-certificates
|
||||
- name: Clone wikiparser if necessary
|
||||
shell: bash
|
||||
run: |
|
||||
if [ ! -d /media/4tbexternal/wikiparser ]; then
|
||||
cd /media/4tbexternal
|
||||
git clone https://codeberg.org/comaps/wikiparser.git
|
||||
fi
|
||||
- name: Check for planet file
|
||||
shell: bash
|
||||
run: |
|
||||
if [ ! -f /media/4tbexternal/osm-planet/planet/planet-latest.osm.pbf ]; then
|
||||
echo "ERROR: No file at /media/4tbexternal/osm-planet/planet/planet-latest.osm.pbf"
|
||||
ls -al /media/4tbexternal/
|
||||
ls -al /media/4tbexternal/osm-planet/
|
||||
ls -al /media/4tbexternal/osm-planet/planet/
|
||||
exit 1
|
||||
fi
|
||||
- name: Update Wikipedia from Enterprise API
|
||||
shell: bash
|
||||
run: |
|
||||
mkdir -p /media/4tbexternal/osm-planet/wikipedia/dumps
|
||||
mkdir -p /media/4tbexternal/osm-planet/wikipedia/build
|
||||
cd /media/4tbexternal/wikiparser
|
||||
ls -al
|
||||
echo "Downloading ..."
|
||||
./download.sh /media/4tbexternal/osm-planet/wikipedia/dumps
|
||||
echo "Running ..."
|
||||
./run.sh /media/4tbexternal/osm-planet/wikipedia/build \
|
||||
/media/4tbexternal/osm-planet/planet/planet-latest.osm.pbf \
|
||||
/media/4tbexternal/osm-planet/wikipedia/dumps/latest/*.tar.gz
|
||||
echo "DONE"
|
||||
|
||||
update-isolines:
|
||||
if: inputs.jobs == 'isolines' || inputs.jobs == 'all'
|
||||
name: Update Isolines
|
||||
runs-on: mapfilemaker
|
||||
container:
|
||||
image: ubuntu:latest
|
||||
volumes:
|
||||
- /media/4tbexternal:/media/4tbexternal
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }}
|
||||
cancel-in-progress: true
|
||||
steps:
|
||||
- name: Install dependencies
|
||||
shell: bash
|
||||
run: |
|
||||
apt-get update -qq \
|
||||
&& apt-get install -y --no-install-recommends \
|
||||
curl \
|
||||
osmctools \
|
||||
rclone \
|
||||
git \
|
||||
ca-certificates \
|
||||
openssh-client \
|
||||
sshpass \
|
||||
vim \
|
||||
wget \
|
||||
build-essential \
|
||||
clang \
|
||||
cmake \
|
||||
python3 \
|
||||
python3-pip \
|
||||
python3.12-venv \
|
||||
qt6-base-dev \
|
||||
qt6-positioning-dev \
|
||||
libc++-dev \
|
||||
libfreetype-dev \
|
||||
libglvnd-dev \
|
||||
libgl1-mesa-dev \
|
||||
libharfbuzz-dev \
|
||||
libicu-dev \
|
||||
libqt6svg6-dev \
|
||||
libqt6positioning6-plugins \
|
||||
libqt6positioning6 \
|
||||
libsqlite3-dev \
|
||||
libxrandr-dev \
|
||||
libxinerama-dev \
|
||||
libxcursor-dev \
|
||||
libxi-dev \
|
||||
zlib1g-dev
|
||||
rm -f /usr/lib/python*/EXTERNALLY-MANAGED
|
||||
pip3 install "protobuf<4"
|
||||
- name: Clone main repo if necessary
|
||||
shell: bash
|
||||
run: |
|
||||
if [ ! -d /media/4tbexternal/comaps-init ]; then
|
||||
apt-get update -qq && apt-get install -y --no-install-recommends git
|
||||
cd /media/4tbexternal
|
||||
git clone --recurse-submodules --shallow-submodules -b rebase-generator-pastk-wb251014 --single-branch https://codeberg.org/comaps/comaps.git comaps-init
|
||||
fi
|
||||
- name: Update Isolines
|
||||
shell: bash
|
||||
run: |
|
||||
cd /media/4tbexternal/comaps-init/
|
||||
./tools/unix/build_omim.sh -R topography_generator_tool
|
||||
rm -rf ../osm-planet/isolines/
|
||||
mkdir ../osm-planet/isolines/
|
||||
../omim-build-relwithdebinfo/topography_generator_tool \
|
||||
--profiles_path=./data/conf/isolines/isolines-profiles.json \
|
||||
--countries_to_generate_path=./data/conf/isolines/countries-to-generate.json \
|
||||
--tiles_isolines_out_dir=../osm-planet/isolines/tmp-tiles/ \
|
||||
--countries_isolines_out_dir=../osm-planet/isolines/ \
|
||||
--data_dir=./data/ \
|
||||
--srtm_path=../osm-planet/SRTM-patched-europe/ \
|
||||
--threads=22
|
||||
|
||||
update-subways:
|
||||
if: inputs.jobs == 'subways' || inputs.jobs == 'all'
|
||||
name: Update Subways
|
||||
runs-on: mapfilemaker
|
||||
container:
|
||||
image: ubuntu:latest
|
||||
volumes:
|
||||
- /media/4tbexternal:/media/4tbexternal
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }}
|
||||
cancel-in-progress: true
|
||||
steps:
|
||||
- name: Install dependencies
|
||||
shell: bash
|
||||
run: |
|
||||
apt-get update -qq && apt-get install -y --no-install-recommends curl osmctools osmium-tool python3-venv ca-certificates git python3-pip
|
||||
rm -f /usr/lib/python*/EXTERNALLY-MANAGED
|
||||
pip3 install "protobuf<4"
|
||||
- name: Clone subways if necessary
|
||||
shell: bash
|
||||
run: |
|
||||
if [ ! -d /media/4tbexternal/subways ]; then
|
||||
cd /media/4tbexternal
|
||||
git clone https://codeberg.org/comaps/subways.git
|
||||
fi
|
||||
- name: Clone main repo if necessary
|
||||
shell: bash
|
||||
run: |
|
||||
if [ ! -d /media/4tbexternal/comaps-init ]; then
|
||||
cd /media/4tbexternal
|
||||
git clone --recurse-submodules --shallow-submodules -b rebase-generator-pastk-wb251014 --single-branch https://codeberg.org/comaps/comaps.git comaps-init
|
||||
fi
|
||||
- name: Update Subways
|
||||
shell: bash
|
||||
run: |
|
||||
cd /media/4tbexternal/comaps-init/
|
||||
cp tools/unix/maps/settings.sh.prod tools/unix/maps/settings.sh
|
||||
./tools/unix/maps/generate_subways.sh
|
||||
|
||||
update-tiger:
|
||||
if: inputs.jobs == 'tiger' || inputs.jobs == 'all'
|
||||
name: Update TIGER
|
||||
runs-on: mapfilemaker
|
||||
container:
|
||||
image: ubuntu:latest
|
||||
volumes:
|
||||
- /media/4tbexternal:/media/4tbexternal
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }}
|
||||
cancel-in-progress: true
|
||||
steps:
|
||||
- name: Install dependencies
|
||||
shell: bash
|
||||
run: |
|
||||
apt-get update -qq && apt-get install -y --no-install-recommends \
|
||||
build-essential \
|
||||
clang \
|
||||
cmake \
|
||||
ninja-build \
|
||||
ca-certificates \
|
||||
git \
|
||||
wget2
|
||||
- name: Clone main repo if necessary
|
||||
shell: bash
|
||||
run: |
|
||||
if [ ! -d /media/4tbexternal/comaps-init ]; then
|
||||
cd /media/4tbexternal
|
||||
git clone --recurse-submodules --shallow-submodules -b rebase-generator-pastk-wb251014 --single-branch https://codeberg.org/comaps/comaps.git comaps-init
|
||||
fi
|
||||
- name: Build address_parser
|
||||
shell: bash
|
||||
run: |
|
||||
cd /media/4tbexternal/comaps-init
|
||||
rm -rf ../omim-build-relwithdebinfo/CMakeCache.txt
|
||||
rm -rf ../omim-build-relwithdebinfo/CMakeFiles
|
||||
./tools/unix/build_omim.sh -R address_parser_tool
|
||||
- name: Update TIGER from Nominatim
|
||||
shell: bash
|
||||
run: |
|
||||
cd /media/4tbexternal/osm-planet/
|
||||
wget2 https://nominatim.org/data/tiger-nominatim-preprocessed-latest.csv.tar.gz
|
||||
tar -xOzf tiger-nominatim-preprocessed-latest.csv.tar.gz | /media/4tbexternal/omim-build-relwithdebinfo/address_parser_tool --output_path=./tiger
|
||||
|
||||
generate-maps:
|
||||
if: inputs.jobs == 'maps' || inputs.jobs == 'all'
|
||||
name: Generate Maps
|
||||
runs-on: mapfilemaker
|
||||
container:
|
||||
image: ubuntu:latest
|
||||
volumes:
|
||||
- /media/4tbexternal:/media/4tbexternal
|
||||
options: --ulimit nofile=262144:262144
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }}
|
||||
cancel-in-progress: true
|
||||
steps:
|
||||
- name: Install dependencies
|
||||
shell: bash
|
||||
run: |
|
||||
apt-get update -qq \
|
||||
&& apt-get install -y --no-install-recommends \
|
||||
curl \
|
||||
osmctools \
|
||||
rclone \
|
||||
git \
|
||||
ca-certificates \
|
||||
openssh-client \
|
||||
sshpass \
|
||||
vim \
|
||||
wget \
|
||||
build-essential \
|
||||
clang \
|
||||
cmake \
|
||||
ninja-build \
|
||||
python3 \
|
||||
python3-pip \
|
||||
python3.12-venv \
|
||||
qt6-base-dev \
|
||||
qt6-positioning-dev \
|
||||
libc++-dev \
|
||||
libfreetype-dev \
|
||||
libglvnd-dev \
|
||||
libgl1-mesa-dev \
|
||||
libharfbuzz-dev \
|
||||
libicu-dev \
|
||||
libqt6svg6-dev \
|
||||
libqt6positioning6-plugins \
|
||||
libqt6positioning6 \
|
||||
libsqlite3-dev \
|
||||
libxrandr-dev \
|
||||
libxinerama-dev \
|
||||
libxcursor-dev \
|
||||
libxi-dev \
|
||||
zlib1g-dev
|
||||
- name: Clone repo if necessary
|
||||
shell: bash
|
||||
run: |
|
||||
if [ ! -d /media/4tbexternal/comaps-init ]; then
|
||||
cd /media/4tbexternal
|
||||
git clone --recurse-submodules --shallow-submodules -b rebase-generator-pastk-wb251014 --single-branch https://codeberg.org/comaps/comaps.git comaps-init
|
||||
fi
|
||||
- name: Make output folders if necessary
|
||||
shell: bash
|
||||
run: |
|
||||
if [ ! -d /media/4tbexternal/osm-maps ]; then
|
||||
mkdir -p /media/4tbexternal/osm-maps
|
||||
fi
|
||||
- name: Get SRTM if necessary
|
||||
shell: bash
|
||||
run: |
|
||||
if [ ! -d /media/4tbexternal/osm-planet/SRTM-patched-europe/ ]; then
|
||||
echo "ERROR: NO SRTM"
|
||||
exit 1
|
||||
fi
|
||||
- name: Symlink paths for repo scripts
|
||||
shell: bash
|
||||
run: |
|
||||
mkdir -p /root/OM
|
||||
ln -s /media/4tbexternal/comaps-init /root/OM/organicmaps
|
||||
ln -s /media/4tbexternal/osm-planet /home/planet
|
||||
ln -s /media/4tbexternal/osm-maps /root/OM/maps_build
|
||||
- name: Run docker_maps_generator.sh
|
||||
shell: bash
|
||||
run: |
|
||||
cd /root/OM/organicmaps
|
||||
./tools/unix/docker_maps_generator.sh
|
||||
22
.forgejo/workflows/stale.yml
Normal file
@@ -0,0 +1,22 @@
|
||||
name: Close stale PRs
|
||||
on:
|
||||
schedule:
|
||||
- cron: "0 0 * * *" # Runs every day at midnight
|
||||
|
||||
jobs:
|
||||
stale:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
pull-requests: write
|
||||
steps:
|
||||
- uses: actions/stale@v9
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
days-before-pr-stale: 180 # 6 months before warning
|
||||
days-before-pr-close: 365 # Closed after 12 months
|
||||
stale-pr-label: "stale"
|
||||
stale-pr-message: "Hi! This PR has been inactive for 6 months. If it's still relevant, please update it to let us know you’d like to keep it open 😊"
|
||||
close-pr-message: "This PR has been automatically closed after 12 months of inactivity."
|
||||
days-before-issue-stale: -1 # Issues are never stale
|
||||
days-before-issue-close: -1 # Issues are never closed
|
||||
remove-stale-when-updated: true
|
||||
20
.github/workflows/android-check.yaml
vendored
@@ -6,8 +6,7 @@ on:
|
||||
- main
|
||||
|
||||
env:
|
||||
JAVA_HOME: /usr/lib/jvm/temurin-21-jdk-amd64 # Java 21 is required for Android Gradle 8 plugin
|
||||
SKIP_MAP_DOWNLOAD: true
|
||||
JAVA_HOME: /usr/lib/jvm/temurin-17-jdk-amd64 # Java 17 is required for Android Gradle 8 plugin
|
||||
|
||||
jobs:
|
||||
lint:
|
||||
@@ -23,13 +22,6 @@ jobs:
|
||||
shell: bash
|
||||
run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
|
||||
|
||||
- name: Install protobuf
|
||||
shell: bash
|
||||
run: |
|
||||
sudo apt-get update -y
|
||||
sudo apt-get install -y python3-pip
|
||||
pip install "protobuf<3.21" --break-system-packages
|
||||
|
||||
- name: Configure repository
|
||||
shell: bash
|
||||
run: ./configure.sh
|
||||
@@ -73,9 +65,7 @@ jobs:
|
||||
libxinerama-dev \
|
||||
libxcursor-dev \
|
||||
libxi-dev \
|
||||
python3-pip \
|
||||
zlib1g-dev
|
||||
pip install "protobuf<3.21" --break-system-packages
|
||||
|
||||
- name: Checkout sources
|
||||
uses: actions/checkout@v4
|
||||
@@ -86,6 +76,14 @@ jobs:
|
||||
shell: bash
|
||||
run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
|
||||
|
||||
- name: Configure repository
|
||||
shell: bash
|
||||
run: ./configure.sh
|
||||
|
||||
- name: Generate symbols
|
||||
shell: bash
|
||||
run: ./tools/unix/generate_symbols.sh
|
||||
|
||||
- name: Configure ccache
|
||||
uses: hendrikmuhs/ccache-action@v1.2
|
||||
with:
|
||||
|
||||
51
.github/workflows/code-style-check.yaml
vendored
@@ -1,51 +0,0 @@
|
||||
name: Code style check
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches: [ master ]
|
||||
paths: # Should stay in sync with tools/unix/clang-format.sh
|
||||
- '.github/workflows/code-style-check.yaml'
|
||||
- 'android/app/src/**.java'
|
||||
- 'android/sdk/src/**.java'
|
||||
- 'android/sdk/src/main/cpp/**.[ch]pp'
|
||||
- 'dev_sandbox/**.[ch]pp'
|
||||
- 'generator/**.[ch]pp'
|
||||
- 'iphone/**.[ch]pp'
|
||||
- 'iphone/**.[hm]'
|
||||
- 'iphone/**.mm'
|
||||
- 'libs/**.[ch]pp'
|
||||
- 'libs/**.[hm]'
|
||||
- '!libs/indexer/drules_struct.pb.h'
|
||||
- 'libs/**.mm'
|
||||
- 'qt/**.[ch]pp'
|
||||
- 'qt/**.h'
|
||||
- 'tools/**.[ch]pp'
|
||||
- '.clang-format'
|
||||
- '.clang-format-ignore'
|
||||
|
||||
jobs:
|
||||
code-style-check:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Install clang-format
|
||||
run: |
|
||||
sudo apt purge -y clang-format-18 # Remove default old version of clang-format
|
||||
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
|
||||
echo 'deb http://apt.llvm.org/noble/ llvm-toolchain-noble-20 main' | sudo tee /etc/apt/sources.list.d/llvm-toolchain-noble-20.list
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y clang-format-20
|
||||
sudo update-alternatives --force --install /usr/bin/clang-format clang-format /usr/bin/clang-format-20 10
|
||||
sudo update-alternatives --force --install /usr/bin/git-clang-format git-clang-format /usr/bin/git-clang-format-20 10
|
||||
clang-format --version
|
||||
- name: Checkout sources
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Check code style
|
||||
run: tools/unix/clang-format.sh
|
||||
|
||||
- name: Post clang-format comments
|
||||
if: failure()
|
||||
uses: reviewdog/action-suggester@v1.21.0
|
||||
with:
|
||||
tool_name: clang-format
|
||||
fail_level: error
|
||||
31
.github/workflows/ios-check.yaml
vendored
@@ -10,12 +10,11 @@ jobs:
|
||||
name: Build iOS
|
||||
runs-on: macos-15
|
||||
env:
|
||||
DEVELOPER_DIR: /Applications/Xcode_26.app/Contents/Developer
|
||||
DEVELOPER_DIR: /Applications/Xcode_16.app/Contents/Developer
|
||||
LANG: en_US.UTF-8 # Fastlane complains that the terminal is using ASCII.
|
||||
LANGUAGE: en_US.UTF-8
|
||||
LC_ALL: en_US.UTF-8
|
||||
TEST_RESULTS_BUNDLE_NAME: CoMaps-Test-Results
|
||||
SIMULATOR_DEVICE: 'iPhone 16 Pro Max'
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
@@ -29,8 +28,9 @@ jobs:
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
brew install qt \
|
||||
freetype \
|
||||
harfbuzz \
|
||||
optipng
|
||||
pip3 install "protobuf<3.21" --break-system-packages
|
||||
- name: Checkout sources
|
||||
uses: actions/checkout@v4
|
||||
|
||||
@@ -38,10 +38,20 @@ jobs:
|
||||
shell: bash
|
||||
run: git submodule update --depth 1 --init --recursive --jobs=$(($(sysctl -n hw.logicalcpu) * 20))
|
||||
|
||||
- name: Configure repository
|
||||
- name: Configure repository
|
||||
shell: bash
|
||||
run: ./configure.sh
|
||||
|
||||
- name: Download MWM files
|
||||
shell: bash
|
||||
run: |
|
||||
wget https://cdn.comaps.app/maps/latest/World.mwm -P ./data/
|
||||
wget https://cdn.comaps.app/maps/latest/WorldCoasts.mwm -P ./data/
|
||||
|
||||
- name: Generate symbols
|
||||
shell: bash
|
||||
run: ./tools/unix/generate_symbols.sh
|
||||
|
||||
- name: Configure XCode cache
|
||||
uses: irgaly/xcode-cache@v1
|
||||
with:
|
||||
@@ -52,15 +62,12 @@ jobs:
|
||||
if: matrix.buildType == 'Debug'
|
||||
shell: bash
|
||||
run: |
|
||||
# Start sim before the build to make sure it's booted when tests start.
|
||||
xcrun simctl boot "${{ env.SIMULATOR_DEVICE }}" || true
|
||||
xcrun simctl bootstatus "${{ env.SIMULATOR_DEVICE }}" -b
|
||||
xcodebuild test \
|
||||
-workspace xcode/CoMaps.xcworkspace \
|
||||
-scheme CoMaps \
|
||||
-workspace xcode/omim.xcworkspace \
|
||||
-scheme OMaps \
|
||||
-configuration Debug \
|
||||
-sdk iphonesimulator \
|
||||
-destination "platform=iOS Simulator,name=${{ env.SIMULATOR_DEVICE }},OS=latest" \
|
||||
-destination 'platform=iOS Simulator,name=iPhone 16 Pro Max,OS=latest' \
|
||||
-quiet \
|
||||
-resultBundlePath ${{ env.TEST_RESULTS_BUNDLE_NAME }}.xcresult \
|
||||
CODE_SIGNING_REQUIRED=NO \
|
||||
@@ -79,8 +86,8 @@ jobs:
|
||||
shell: bash
|
||||
run: |
|
||||
xcodebuild build \
|
||||
-workspace xcode/CoMaps.xcworkspace \
|
||||
-scheme CoMaps \
|
||||
-workspace xcode/omim.xcworkspace \
|
||||
-scheme OMaps \
|
||||
-configuration Release \
|
||||
-destination 'generic/platform=iOS' \
|
||||
-quiet \
|
||||
|
||||
38
.gitignore
vendored
@@ -14,29 +14,18 @@ stxxl.errlog
|
||||
stxxl.log
|
||||
screenlog.0
|
||||
|
||||
data/styles/*/*/out/*
|
||||
data/resources-*_design/*
|
||||
# symbols png/sdf are now generated at build
|
||||
data/symbols/**/symbols.png
|
||||
data/symbols/**/symbols.sdf
|
||||
|
||||
data/resources-*_*/symbols.png
|
||||
data/resources-*_*/symbols.sdf
|
||||
data/drules_proto_default_design.bin
|
||||
data/colors_design.txt
|
||||
data/patterns_design.txt
|
||||
data/bookmarks
|
||||
data/edits.xml
|
||||
data/World.mwm
|
||||
data/WorldCoasts.mwm
|
||||
data/world_mwm/*
|
||||
data/*_hash
|
||||
data/drules_proto*
|
||||
data/classificator.txt*
|
||||
data/types.txt*
|
||||
data/visibility.txt*
|
||||
data/colors.txt*
|
||||
data/patterns.txt*
|
||||
# TODO: designer is not used at the moment
|
||||
# data/symbols/*/design/
|
||||
# data/colors_design.txt
|
||||
# data/patterns_design.txt
|
||||
|
||||
# Auto-generated from data/categories-strings/* by tools/unix/generate_categories.sh
|
||||
data/categories.txt
|
||||
|
||||
# Compiled Python
|
||||
*.pyc
|
||||
@@ -55,9 +44,10 @@ omim.sdf
|
||||
*.suo
|
||||
*.aps
|
||||
*.rc
|
||||
!qt/res/windows/windows.rc
|
||||
!qt/res/windows.rc
|
||||
*.pdb
|
||||
out/
|
||||
out/*
|
||||
qt/mapswithme.log
|
||||
|
||||
# XCode
|
||||
xcode/keys/*
|
||||
@@ -72,7 +62,7 @@ iphone/*/build/*
|
||||
tools/emacsmode/build
|
||||
**/DerivedData/*
|
||||
**/xcshareddata/*
|
||||
!iphone/Maps/Maps.xcodeproj/xcshareddata/xcschemes/CoMaps.xcscheme
|
||||
!iphone/Maps/Maps.xcodeproj/xcshareddata/xcschemes/OMaps.xcscheme
|
||||
**/xcuserdata
|
||||
**/xcschemes
|
||||
iphone/**/*.moved-aside
|
||||
@@ -197,3 +187,9 @@ tools/unix/maps/settings.sh
|
||||
# VS Code
|
||||
.vscode
|
||||
.cache
|
||||
|
||||
# AppStore metadata
|
||||
screenshots/
|
||||
android/src/google/play/listings/
|
||||
keywords/
|
||||
iphone/metadata/**/keywords.txt
|
||||
|
||||
12
.gitmodules
vendored
@@ -1,12 +1,12 @@
|
||||
[submodule "tools/osmctools"]
|
||||
path = tools/osmctools
|
||||
url = https://github.com/organicmaps/osmctools.git
|
||||
url = https://git.omaps.dev/organicmaps/osmctools.git
|
||||
[submodule "tools/kothic"]
|
||||
path = tools/kothic
|
||||
url = https://codeberg.org/comaps/kothic.git
|
||||
url = https://git.omaps.dev/organicmaps/kothic.git
|
||||
[submodule "3party/protobuf/protobuf"]
|
||||
path = 3party/protobuf/protobuf
|
||||
url = https://codeberg.org/comaps/protobuf.git
|
||||
url = https://git.omaps.dev/organicmaps/protobuf.git
|
||||
[submodule "3party/Vulkan-Headers"]
|
||||
path = 3party/Vulkan-Headers
|
||||
url = https://github.com/KhronosGroup/Vulkan-Headers.git
|
||||
@@ -17,7 +17,7 @@
|
||||
ignore = dirty
|
||||
[submodule "3party/just_gtfs"]
|
||||
path = 3party/just_gtfs
|
||||
url = https://github.com/organicmaps/just_gtfs.git
|
||||
url = https://git.omaps.dev/organicmaps/just_gtfs.git
|
||||
branch = for-usage-as-submodule
|
||||
[submodule "3party/expat"]
|
||||
path = 3party/expat
|
||||
@@ -65,7 +65,3 @@
|
||||
[submodule "3party/imgui/imgui"]
|
||||
path = 3party/imgui/imgui
|
||||
url = https://github.com/ocornut/imgui
|
||||
[submodule "3party/glaze"]
|
||||
path = 3party/glaze
|
||||
url = https://github.com/stephenberry/glaze
|
||||
branch = main
|
||||
|
||||
@@ -31,10 +31,9 @@ if (NOT WITH_SYSTEM_PROVIDED_3PARTY)
|
||||
set(JANSSON_WITHOUT_TESTS ON)
|
||||
add_subdirectory(jansson/jansson/)
|
||||
target_include_directories(jansson INTERFACE "${PROJECT_BINARY_DIR}/3party/jansson/jansson/include")
|
||||
add_library(jansson::jansson ALIAS jansson)
|
||||
|
||||
# Add gflags library.
|
||||
set(GFLAGS_BUILD_TESTING OFF)
|
||||
set(GFLAGS_BUILD_PACKAGING OFF)
|
||||
add_subdirectory(gflags)
|
||||
target_compile_options(gflags_nothreads_static PRIVATE $<$<CXX_COMPILER_ID:GNU>:-Wno-subobject-linkage>)
|
||||
|
||||
@@ -57,7 +56,6 @@ endif()
|
||||
|
||||
add_subdirectory(agg)
|
||||
add_subdirectory(bsdiff-courgette)
|
||||
add_subdirectory(glaze)
|
||||
add_subdirectory(minizip)
|
||||
add_subdirectory(open-location-code)
|
||||
add_subdirectory(opening_hours)
|
||||
|
||||
@@ -4,9 +4,7 @@ set(FT_DISABLE_HARFBUZZ ON)
|
||||
add_subdirectory(freetype)
|
||||
|
||||
# Fix warning with ONE_PIXEL macro clash.
|
||||
if(NOT MSVC)
|
||||
target_compile_options(freetype PRIVATE -Wno-macro-redefined)
|
||||
endif()
|
||||
target_compile_options(freetype PRIVATE -Wno-macro-redefined)
|
||||
|
||||
# Use ft2build.h from the current directory instead of the default.
|
||||
target_include_directories(freetype
|
||||
|
||||
@@ -11,23 +11,14 @@ target_include_directories(${PROJECT_NAME}
|
||||
harfbuzz/src
|
||||
)
|
||||
|
||||
if (MSVC)
|
||||
target_compile_options(${PROJECT_NAME}
|
||||
PRIVATE
|
||||
/GR-
|
||||
/EHsc-
|
||||
/Zc:threadSafeInit-
|
||||
)
|
||||
else()
|
||||
# Keep these settings in sync with xcode/harfbuzz project.
|
||||
target_compile_options(${PROJECT_NAME}
|
||||
PRIVATE
|
||||
-fno-rtti
|
||||
-fno-exceptions
|
||||
-fno-threadsafe-statics
|
||||
$<$<OR:$<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:AppleClang>>:-Wno-format-pedantic>
|
||||
)
|
||||
endif()
|
||||
# Keep these settigns in sync with xcode/harfbuzz project.
|
||||
target_compile_options(${PROJECT_NAME}
|
||||
PRIVATE
|
||||
-fno-rtti
|
||||
-fno-exceptions
|
||||
-fno-threadsafe-statics
|
||||
$<$<OR:$<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:AppleClang>>:-Wno-format-pedantic>
|
||||
)
|
||||
|
||||
target_compile_definitions(${PROJECT_NAME}
|
||||
PRIVATE
|
||||
@@ -37,20 +28,14 @@ target_compile_definitions(${PROJECT_NAME}
|
||||
#$<$<BOOL:${APPLE}>:HAVE_CORETEXT>
|
||||
HAVE_ATEXIT
|
||||
HAVE_GETPAGESIZE
|
||||
HAVE_MMAP
|
||||
HAVE_MPROTECT
|
||||
HAVE_PTHREAD
|
||||
HAVE_SYSCONF
|
||||
HAVE_SYS_MMAN_H
|
||||
HAVE_UNISTD_H
|
||||
)
|
||||
|
||||
if (NOT MSVC)
|
||||
target_compile_definitions(${PROJECT_NAME}
|
||||
PRIVATE
|
||||
HAVE_MMAP
|
||||
HAVE_PTHREAD
|
||||
HAVE_SYS_MMAN_H
|
||||
HAVE_UNISTD_H
|
||||
)
|
||||
endif()
|
||||
|
||||
target_link_libraries(${PROJECT_NAME} Freetype::Freetype)
|
||||
|
||||
add_library(harfbuzz::harfbuzz ALIAS harfbuzz)
|
||||
|
||||
@@ -172,7 +172,6 @@ add_library(icuuc
|
||||
icu/icu4c/source/common/uvector.cpp
|
||||
icu/icu4c/source/common/uvectr32.cpp
|
||||
icu/icu4c/source/common/uvectr64.h
|
||||
icu/icu4c/source/common/wintz.cpp
|
||||
icu/icu4c/source/common/wintz.h
|
||||
)
|
||||
|
||||
|
||||
@@ -11,7 +11,6 @@ set(SRC
|
||||
protobuf/src/google/protobuf/message_lite.cc
|
||||
protobuf/src/google/protobuf/repeated_field.cc
|
||||
protobuf/src/google/protobuf/stubs/atomicops_internals_x86_gcc.cc
|
||||
protobuf/src/google/protobuf/stubs/atomicops_internals_x86_msvc.cc
|
||||
protobuf/src/google/protobuf/stubs/bytestream.cc
|
||||
protobuf/src/google/protobuf/stubs/common.cc
|
||||
protobuf/src/google/protobuf/stubs/int128.cc
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
#include <boost/utility/enable_if.hpp>
|
||||
#include <boost/utility.hpp>
|
||||
#include <boost/type_traits/is_pod.hpp>
|
||||
#include <boost/iostreams/device/mapped_file.hpp>
|
||||
|
||||
#include "mappable_vector.hpp"
|
||||
|
||||
@@ -282,6 +283,12 @@ namespace succinct { namespace mapper {
|
||||
return mapper.bytes_read();
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
size_t map(T& val, boost::iostreams::mapped_file_source const& m, uint64_t flags = 0, const char* friendly_name = "<TOP>")
|
||||
{
|
||||
return map(val, m.data(), flags, friendly_name);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
uint64_t size_of(T& val)
|
||||
{
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
#include <stdint.h>
|
||||
|
||||
#include <boost/iterator/iterator_facade.hpp>
|
||||
#include <boost/iostreams/device/mapped_file.hpp>
|
||||
|
||||
namespace succinct { namespace util {
|
||||
|
||||
@@ -204,6 +205,29 @@ namespace succinct { namespace util {
|
||||
std::string m_cur_value;
|
||||
};
|
||||
|
||||
struct mmap_lines
|
||||
{
|
||||
typedef buffer_line_iterator iterator;
|
||||
typedef buffer_line_iterator const_iterator;
|
||||
|
||||
mmap_lines(std::string filename)
|
||||
: m_map(filename)
|
||||
{}
|
||||
|
||||
const_iterator begin() const
|
||||
{
|
||||
return const_iterator(m_map.data(), m_map.size());
|
||||
}
|
||||
|
||||
const_iterator end() const
|
||||
{
|
||||
return const_iterator();
|
||||
}
|
||||
|
||||
private:
|
||||
boost::iostreams::mapped_file_source m_map;
|
||||
};
|
||||
|
||||
struct input_error : std::invalid_argument
|
||||
{
|
||||
input_error(std::string const& what)
|
||||
|
||||
@@ -19,18 +19,7 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
#include "vulkan_wrapper.h"
|
||||
|
||||
#if defined(_WIN32)
|
||||
#ifndef WIN32_LEAN_AND_MEAN
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#endif
|
||||
#ifndef NOMINMAX
|
||||
#define NOMINMAX
|
||||
#endif
|
||||
#include <windows.h>
|
||||
#else
|
||||
#include <dlfcn.h>
|
||||
#endif
|
||||
|
||||
int InitVulkan(void) {
|
||||
#if defined(__APPLE__)
|
||||
@@ -41,9 +30,6 @@ int InitVulkan(void) {
|
||||
if (!libvulkan) {
|
||||
libvulkan = dlopen("libMoltenVK.dylib", RTLD_NOW | RTLD_LOCAL);
|
||||
}
|
||||
#elif defined( _WIN32 )
|
||||
HMODULE libvulkan = LoadLibraryA("vulkan-1.dll");
|
||||
auto dlsym = [](HMODULE h, char const * name) { return GetProcAddress(h, name); };
|
||||
#else
|
||||
void* libvulkan = dlopen("libvulkan.so.1", RTLD_NOW | RTLD_LOCAL);
|
||||
if (!libvulkan) {
|
||||
|
||||
300
CMakeLists.txt
@@ -1,9 +1,8 @@
|
||||
cmake_minimum_required(VERSION 3.22.1)
|
||||
|
||||
project(omim C CXX)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 23)
|
||||
set(CMAKE_C_STANDARD 23)
|
||||
set(CMAKE_CXX_STANDARD 20)
|
||||
set(CMAKE_C_STANDARD 17)
|
||||
# Our code does not rely on gnu extensions.
|
||||
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||
set(CMAKE_C_EXTENSIONS OFF)
|
||||
@@ -12,53 +11,46 @@ set(CMAKE_C_VISIBILITY_PRESET hidden)
|
||||
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
|
||||
set(CMAKE_VISIBILITY_INLINES_HIDDEN ON)
|
||||
|
||||
# Disable build-id generation to make builds reproducible.
|
||||
if (NOT APPLE)
|
||||
add_link_options("LINKER:--build-id=none")
|
||||
endif()
|
||||
|
||||
# Fixes warning ld: warning: ignoring duplicate libraries on Mac and Windows.
|
||||
if (POLICY CMP0156)
|
||||
cmake_policy(SET CMP0156 NEW)
|
||||
endif()
|
||||
|
||||
set(OMIM_ROOT ${CMAKE_SOURCE_DIR})
|
||||
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${OMIM_ROOT}/cmake")
|
||||
|
||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
|
||||
|
||||
include(OmimPlatform)
|
||||
include(OmimOptions)
|
||||
include(OmimConfig)
|
||||
include(OmimHelpers)
|
||||
include(OmimTesting)
|
||||
|
||||
if (APPLE AND NOT ("${CMAKE_SYSTEM_NAME}" STREQUAL Android))
|
||||
# OBJC/OBJCXX are needed to skip m/mm files in Unity builds.
|
||||
# https://gitlab.kitware.com/cmake/cmake/-/issues/21963
|
||||
enable_language(OBJC)
|
||||
set(CMAKE_OBJC_EXTENSIONS OFF)
|
||||
set(CMAKE_OBJC_STANDARD 23)
|
||||
set(CMAKE_OBJC_STANDARD 11)
|
||||
set(CMAKE_OBJC_FLAGS -fobjc-arc)
|
||||
set(CMAKE_OBJC_VISIBILITY_PRESET hidden)
|
||||
enable_language(OBJCXX)
|
||||
set(CMAKE_OBJCXX_EXTENSIONS OFF)
|
||||
set(CMAKE_OBJCXX_STANDARD 23)
|
||||
set(CMAKE_OBJCXX_STANDARD 20)
|
||||
set(CMAKE_OBJCXX_FLAGS -fobjc-arc)
|
||||
set(CMAKE_OBJCXX_VISIBILITY_PRESET hidden)
|
||||
endif()
|
||||
|
||||
message(STATUS "Using compiler ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION}")
|
||||
|
||||
if (CMAKE_UNITY_BUILD)
|
||||
message(STATUS "Using Unity Build with batch ${CMAKE_UNITY_BUILD_BATCH_SIZE}, use -DCMAKE_UNITY_BUILD=OFF to disable it.")
|
||||
option(COVERAGE_REPORT "Configure for coverage report" OFF)
|
||||
|
||||
option(UNITY_DISABLE "Disable unity build" OFF)
|
||||
if (NOT UNITY_DISABLE AND NOT DEFINED ENV{UNITY_DISABLE})
|
||||
set(CMAKE_UNITY_BUILD ON)
|
||||
if (DEFINED ENV{UNITY_BUILD_BATCH_SIZE})
|
||||
set(CMAKE_UNITY_BUILD_BATCH_SIZE $ENV{UNITY_BUILD_BATCH_SIZE})
|
||||
else()
|
||||
set(CMAKE_UNITY_BUILD_BATCH_SIZE 50)
|
||||
endif()
|
||||
message(STATUS "Using Unity Build with batch ${CMAKE_UNITY_BUILD_BATCH_SIZE}, export UNITY_DISABLE=1 or use -DUNITY_DISABLE=ON to disable it.")
|
||||
endif()
|
||||
|
||||
if (USE_CCACHE)
|
||||
option(CCACHE_DISABLE "Disable ccache" OFF)
|
||||
if (NOT CCACHE_DISABLE AND NOT DEFINED ENV{CCACHE_DISABLE})
|
||||
find_program(CCACHE_PROGRAM ccache HINTS /usr/local/bin/)
|
||||
if (CCACHE_PROGRAM)
|
||||
message(STATUS "Using ccache, use -DUSE_CCACHE=OFF to disable it.")
|
||||
message(STATUS "Using ccache, export CCACHE_DISABLE=1 or use -DCCACHE_DISABLE=ON to disable it.")
|
||||
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE_PROGRAM}")
|
||||
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK "${CCACHE_PROGRAM}")
|
||||
set(CMAKE_C_COMPILER_LAUNCHER "${CCACHE_PROGRAM}")
|
||||
@@ -66,13 +58,44 @@ if (USE_CCACHE)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
option(COLORS_DISABLE "Disable colored compiler output" OFF)
|
||||
if (NOT DEFINED ENV{COLORS_DISABLE} AND CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
|
||||
message(STATUS "export COLORS_DISABLE=1 or use -DCOLORS_DISABLE=ON to disable colored compiler output.")
|
||||
add_compile_options($<$<CXX_COMPILER_ID:GNU>:-fdiagnostics-color=always> $<$<CXX_COMPILER_ID:Clang,AppleClang>:-fcolor-diagnostics>)
|
||||
add_link_options($<$<CXX_COMPILER_ID:GNU>:-fdiagnostics-color=always> $<$<CXX_COMPILER_ID:Clang,AppleClang>:-fcolor-diagnostics>)
|
||||
endif()
|
||||
|
||||
option(WITH_SYSTEM_PROVIDED_3PARTY "Enable compilation with system provided dependencies" OFF)
|
||||
set(OMIM_ROOT ${CMAKE_SOURCE_DIR})
|
||||
|
||||
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${OMIM_ROOT}/cmake")
|
||||
|
||||
include(OmimHelpers)
|
||||
include(OmimTesting)
|
||||
|
||||
set(PLATFORM_DESKTOP TRUE)
|
||||
if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||
set(PLATFORM_LINUX TRUE)
|
||||
elseif (CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
||||
set(PLATFORM_MAC TRUE)
|
||||
elseif (CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
||||
set(PLATFORM_WIN TRUE)
|
||||
elseif (CMAKE_SYSTEM_NAME STREQUAL "Android")
|
||||
set(PLATFORM_ANDROID TRUE)
|
||||
set(PLATFORM_DESKTOP FALSE)
|
||||
elseif (CMAKE_SYSTEM_NAME STREQUAL "iOS")
|
||||
set(PLATFORM_IPHONE TRUE)
|
||||
set(PLATFORM_DESKTOP FALSE)
|
||||
else()
|
||||
message(FATAL_ERROR "Unsupported platform: ${CMAKE_SYSTEM_NAME}")
|
||||
endif()
|
||||
|
||||
if(${PLATFORM_MAC})
|
||||
set(XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC YES)
|
||||
|
||||
# Metal language support
|
||||
list(APPEND CMAKE_MODULE_PATH ${OMIM_ROOT}/3party/CMake-MetalShaderSupport/cmake)
|
||||
include(CheckLanguage)
|
||||
include(CMakeMetalInformation)
|
||||
include(MetalShaderSupport)
|
||||
check_language(Metal)
|
||||
if(CMAKE_Metal_COMPILER)
|
||||
@@ -80,12 +103,29 @@ if(${PLATFORM_MAC})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Sanitizer
|
||||
if (PLATFORM_DESKTOP)
|
||||
# https://clang.llvm.org/docs/UsersManual.html#controlling-code-generation
|
||||
set(BUILD_WITH_SANITIZER None CACHE STRING "Set to 'address' or others to enable sanitizer")
|
||||
|
||||
if (NOT ${BUILD_WITH_SANITIZER} MATCHES "None")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=${BUILD_WITH_SANITIZER} -fno-omit-frame-pointer")
|
||||
set(CMAKE_LINKER_FLAGS "${CMAKE_LINKER_FLAGS} -fsanitize=${BUILD_WITH_SANITIZER} -fno-omit-frame-pointer")
|
||||
message(STATUS "Enable sanitizer: ${BUILD_WITH_SANITIZER}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Set build type:
|
||||
if (NOT CMAKE_BUILD_TYPE)
|
||||
set(CMAKE_BUILD_TYPE "Release")
|
||||
endif()
|
||||
|
||||
# Global compile options for all configurations.
|
||||
if (MSVC)
|
||||
add_compile_options(/utf-8)
|
||||
add_link_options(/INCREMENTAL:NO)
|
||||
else()
|
||||
add_compile_options(-ffast-math $<$<CXX_COMPILER_ID:GNU>:-Wno-psabi>)
|
||||
add_compile_options(-ffast-math)
|
||||
endif()
|
||||
|
||||
if (PLATFORM_WIN)
|
||||
@@ -104,30 +144,105 @@ if (${CMAKE_BUILD_TYPE} STREQUAL "Debug")
|
||||
elseif (${CMAKE_BUILD_TYPE} MATCHES "Rel")
|
||||
add_definitions(-DRELEASE)
|
||||
if (NOT MSVC)
|
||||
add_compile_options(-O3 $<$<CXX_COMPILER_ID:GNU>:-flto=auto>)
|
||||
add_compile_options(-Ofast) # Also enables -ffast-math
|
||||
endif()
|
||||
else()
|
||||
message(FATAL_ERROR "Unknown build type: " ${CMAKE_BUILD_TYPE})
|
||||
endif()
|
||||
|
||||
if (${CMAKE_BUILD_TYPE} STREQUAL "RelWithDebInfo")
|
||||
add_compile_options(-fno-omit-frame-pointer)
|
||||
endif()
|
||||
|
||||
# Linux GCC LTO plugin fix.
|
||||
if (PLATFORM_LINUX AND (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_BUILD_TYPE MATCHES "^Rel"))
|
||||
# To force errors if LTO was not enabled.
|
||||
add_compile_options(-fno-fat-lto-objects)
|
||||
# To fix ar and ranlib "plugin needed to handle lto object".
|
||||
string(REGEX MATCH "[0-9]+" GCC_MAJOR_VERSION ${CMAKE_CXX_COMPILER_VERSION})
|
||||
file(GLOB_RECURSE plugin /usr/lib/gcc/*/${GCC_MAJOR_VERSION}*/liblto_plugin.so)
|
||||
set(CMAKE_C_ARCHIVE_CREATE "<CMAKE_AR> --plugin ${plugin} qcs <TARGET> <OBJECTS>")
|
||||
set(CMAKE_C_ARCHIVE_FINISH "<CMAKE_RANLIB> --plugin ${plugin} <TARGET>")
|
||||
set(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> --plugin ${plugin} qcs <TARGET> <OBJECTS>")
|
||||
set(CMAKE_CXX_ARCHIVE_FINISH "<CMAKE_RANLIB> --plugin ${plugin} <TARGET>")
|
||||
endif()
|
||||
|
||||
message(STATUS "Build type: " ${CMAKE_BUILD_TYPE})
|
||||
# End of setting build type
|
||||
|
||||
# Options
|
||||
|
||||
# Call `make package` after cmake to build design tool.
|
||||
option(BUILD_DESIGNER "Build application as design tool" OFF)
|
||||
if (BUILD_DESIGNER)
|
||||
message(STATUS "Designer tool building is enabled")
|
||||
add_definitions(-DBUILD_DESIGNER)
|
||||
endif()
|
||||
|
||||
option(BUILD_STANDALONE "Build standalone application" OFF)
|
||||
if (BUILD_STANDALONE)
|
||||
message(STATUS "Standalone building is enabled")
|
||||
add_definitions(-DBUILD_STANDALONE)
|
||||
endif()
|
||||
|
||||
option(USE_ASAN "Enable Address Sanitizer" OFF)
|
||||
option(USE_TSAN "Enable Thread Sanitizer" OFF)
|
||||
option(USE_LIBFUZZER "Enable LibFuzzer" OFF)
|
||||
option(PYBINDINGS "Create makefiles for building python bindings" OFF)
|
||||
option(SKIP_QT_GUI "Skip building of Qt GUI" OFF)
|
||||
option(USE_PCH "Use precompiled headers" OFF)
|
||||
option(NJOBS "Number of parallel processes" OFF)
|
||||
option(ENABLE_VULKAN_DIAGNOSTICS "Enable Vulkan diagnostics" OFF)
|
||||
option(ENABLE_TRACE "Enable Tracing" OFF)
|
||||
|
||||
if (NJOBS)
|
||||
message(STATUS "Number of parallel processes: ${NJOBS}")
|
||||
set(CMAKE_JOB_POOLS custom=${NJOBS})
|
||||
set(CMAKE_JOB_POOL_COMPILE custom)
|
||||
set(CMAKE_JOB_POOL_LINK custom)
|
||||
set(CMAKE_JOB_POOL_PRECOMPILE_HEADER custom)
|
||||
endif()
|
||||
|
||||
# GCC 10.0 is required to support <charconv> header inclusion in base/string_utils.hpp
|
||||
if (CMAKE_CXX_COMPILER_ID MATCHES "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 10.0)
|
||||
message(FATAL_ERROR "Minimum supported g++ version is 10.0, yours is ${CMAKE_CXX_COMPILER_VERSION}")
|
||||
endif()
|
||||
|
||||
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
||||
set(PCH_EXTENSION "pch")
|
||||
endif()
|
||||
|
||||
if (CMAKE_CXX_COMPILER_ID MATCHES "GNU")
|
||||
set(PCH_EXTENSION "gch")
|
||||
endif()
|
||||
|
||||
if (PLATFORM_LINUX)
|
||||
option(USE_PPROF "Enable Google Profiler" OFF)
|
||||
endif()
|
||||
|
||||
if (USE_ASAN)
|
||||
message(STATUS "Address Sanitizer is enabled")
|
||||
endif()
|
||||
|
||||
if (USE_TSAN)
|
||||
message(STATUS "Thread Sanitizer is enabled")
|
||||
endif()
|
||||
|
||||
if (USE_ASAN AND USE_TSAN)
|
||||
message(FATAL_ERROR "Can't use two different sanitizers together")
|
||||
endif()
|
||||
|
||||
if (USE_LIBFUZZER)
|
||||
message(STATUS "LibFuzzer is enabled")
|
||||
endif()
|
||||
|
||||
if (USE_PPROF)
|
||||
message(STATUS "Google Profiler is enabled")
|
||||
add_definitions(-DUSE_PPROF)
|
||||
endif()
|
||||
|
||||
if (USE_HEAPPROF)
|
||||
message(STATUS "Heap Profiler is enabled")
|
||||
endif()
|
||||
|
||||
if (ENABLE_VULKAN_DIAGNOSTICS)
|
||||
message(WARNING "Vulkan diagnostics are enabled. Be aware of performance impact!")
|
||||
add_definitions(-DENABLE_VULKAN_DIAGNOSTICS)
|
||||
endif()
|
||||
|
||||
if (ENABLE_TRACE)
|
||||
message(STATUS "Tracing is enabled")
|
||||
add_definitions(-DENABLE_TRACE)
|
||||
endif()
|
||||
|
||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
||||
|
||||
# Set environment variables
|
||||
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR})
|
||||
set(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR})
|
||||
|
||||
if (PLATFORM_LINUX OR PLATFORM_ANDROID)
|
||||
find_program(LLD_FOUND ld.lld)
|
||||
@@ -175,15 +290,37 @@ if (NOT PLATFORM_IPHONE AND NOT PLATFORM_ANDROID)
|
||||
find_package(Qt6 COMPONENTS REQUIRED ${qt_components} PATHS $ENV{QT_PATH} /opt/homebrew/opt/qt@6 /usr/local/opt/qt@6 /usr/lib/x86_64-linux-gnu/qt6)
|
||||
|
||||
set(MINIMUM_REQUIRED_QT_VERSION 6.4.0)
|
||||
if (Qt6_VERSION VERSION_LESS ${MINIMUM_REQUIRED_QT_VERSION})
|
||||
message(FATAL_ERROR "Unsupported Qt version: ${Qt6_VERSION}, the minimum required is ${MINIMUM_REQUIRED_QT_VERSION}")
|
||||
if (Qt6Widgets_VERSION VERSION_LESS ${MINIMUM_REQUIRED_QT_VERSION})
|
||||
message(FATAL_ERROR "Unsupported Qt version: ${Qt6Widgets_VERSION}, the minimum required is ${MINIMUM_REQUIRED_QT_VERSION}")
|
||||
else()
|
||||
message(STATUS "Found Qt version: ${Qt6_VERSION}")
|
||||
message(STATUS "Found Qt version: ${Qt6Widgets_VERSION}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# To allow #include "base/file_name.hpp" in all sources.
|
||||
include_directories("${CMAKE_HOME_DIRECTORY}" "${CMAKE_HOME_DIRECTORY}/libs" "${CMAKE_HOME_DIRECTORY}/tools")
|
||||
include_directories(${CMAKE_HOME_DIRECTORY})
|
||||
|
||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
||||
|
||||
if (USE_ASAN)
|
||||
add_compile_options(
|
||||
"-fsanitize=address"
|
||||
"-fno-omit-frame-pointer"
|
||||
)
|
||||
endif()
|
||||
|
||||
if (USE_TSAN)
|
||||
add_compile_options(
|
||||
"-fsanitize=thread"
|
||||
"-fno-omit-frame-pointer"
|
||||
)
|
||||
endif()
|
||||
|
||||
if (USE_LIBFUZZER)
|
||||
add_compile_options(
|
||||
"-fsanitize=fuzzer"
|
||||
)
|
||||
endif()
|
||||
|
||||
if (USE_PCH)
|
||||
message(STATUS "Precompiled headers are ON")
|
||||
@@ -195,7 +332,7 @@ if (USE_PCH)
|
||||
endif()
|
||||
|
||||
# Should be on the root level, not in 3party, so tests can get these dependencies.
|
||||
if (PLATFORM_LINUX)
|
||||
if (PLATFORM_LINUX OR PLATFORM_WIN)
|
||||
find_package(ICU COMPONENTS uc i18n data REQUIRED)
|
||||
find_package(Freetype REQUIRED)
|
||||
find_package(harfbuzz REQUIRED)
|
||||
@@ -225,43 +362,46 @@ endif()
|
||||
# Used in qt/ and shaders/
|
||||
find_package(Python3 REQUIRED COMPONENTS Interpreter)
|
||||
|
||||
execute_process(
|
||||
COMMAND ${Python3_EXECUTABLE} -c "import google.protobuf;
|
||||
print(google.protobuf.__version__)"
|
||||
RESULT_VARIABLE PROTOBUF_CHECK
|
||||
OUTPUT_VARIABLE PROTOBUF_VERSION
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
ERROR_QUIET
|
||||
)
|
||||
|
||||
if(PROTOBUF_CHECK EQUAL 0)
|
||||
if(PROTOBUF_VERSION VERSION_LESS "4.0.0")
|
||||
message(STATUS "Python protobuf ${PROTOBUF_VERSION} found (< 4.0)")
|
||||
else()
|
||||
message(FATAL_ERROR "Python protobuf ${PROTOBUF_VERSION} found, but version < 4.0 required")
|
||||
endif()
|
||||
else()
|
||||
message(FATAL_ERROR "Python protobuf not found. Install version <4.0")
|
||||
endif()
|
||||
|
||||
|
||||
add_subdirectory(libs)
|
||||
add_subdirectory(base)
|
||||
add_subdirectory(coding)
|
||||
add_subdirectory(descriptions)
|
||||
add_subdirectory(drape)
|
||||
add_subdirectory(drape_frontend)
|
||||
add_subdirectory(editor)
|
||||
add_subdirectory(ge0)
|
||||
add_subdirectory(generator/mwm_diff)
|
||||
add_subdirectory(geometry)
|
||||
add_subdirectory(indexer)
|
||||
add_subdirectory(kml)
|
||||
add_subdirectory(map)
|
||||
add_subdirectory(cppjansson)
|
||||
add_subdirectory(platform)
|
||||
add_subdirectory(routing)
|
||||
add_subdirectory(routing_common)
|
||||
add_subdirectory(search)
|
||||
add_subdirectory(shaders)
|
||||
add_subdirectory(storage)
|
||||
add_subdirectory(tracking)
|
||||
add_subdirectory(traffic)
|
||||
add_subdirectory(transit)
|
||||
|
||||
if (PLATFORM_DESKTOP)
|
||||
add_subdirectory(dev_sandbox)
|
||||
omim_add_tool_subdirectory(feature_list)
|
||||
add_subdirectory(generator)
|
||||
add_subdirectory(tools)
|
||||
add_subdirectory(openlr)
|
||||
add_subdirectory(poly_borders)
|
||||
omim_add_tool_subdirectory(topography_generator)
|
||||
add_subdirectory(track_analyzing)
|
||||
omim_add_tool_subdirectory(track_generator)
|
||||
if (NOT SKIP_QT_GUI)
|
||||
add_subdirectory(qt)
|
||||
omim_add_tool_subdirectory(skin_generator)
|
||||
endif()
|
||||
if (GENERATOR_TOOL)
|
||||
add_compile_options(-march=native -mtune=native)
|
||||
message(STATUS "target CPU optimizations enabled, produced binaries will NOT work on a different CPU")
|
||||
endif()
|
||||
add_subdirectory(dev_sandbox)
|
||||
endif()
|
||||
|
||||
omim_add_test_subdirectory(libs/qt_tstfrm)
|
||||
omim_add_test_subdirectory(qt_tstfrm)
|
||||
|
||||
if (PLATFORM_ANDROID)
|
||||
add_subdirectory(android/sdk/src/main/cpp)
|
||||
add_subdirectory(android/app/src/main/cpp)
|
||||
endif()
|
||||
|
||||
@@ -7,12 +7,6 @@ CoMaps contributors:
|
||||
(in alphabetic order)
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
Bastian Greshake Tzovaras
|
||||
clover sage
|
||||
Harry Bond <me@hbond.xyz>
|
||||
vikiawv
|
||||
Yannik Bloscheck
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
Organic Maps (formerly OMaps) contributors:
|
||||
(in alphabetic order)
|
||||
|
||||
@@ -1 +1 @@
|
||||
See [docs/INSTALL.md](docs/INSTALL.md)
|
||||
See [docs/INSTALL.md](docs/INSTALL.md)
|
||||
195
README.md
@@ -1,93 +1,65 @@
|
||||
<!-- Navigation Bar -->
|
||||
<p align="center">
|
||||
<a href="https://codeberg.org/comaps#comaps">Project Intro</a> |
|
||||
<a href="https://codeberg.org/comaps/Governance#comaps-project-governance-docs">Governance</a> |
|
||||
<a href="https://codeberg.org/comaps/Governance/src/branch/main/FAQ.md">FAQ</a> |
|
||||
<a href="#contributing">Contribute</a> |
|
||||
<a href="https://www.comaps.app/donate">Donate</a> |
|
||||
<a href="https://codeberg.org/comaps#keep-connected">Keep Connected</a>
|
||||
<!--<div align="center">
|
||||
<img src="qt/res/logo.png" height="100"/>
|
||||
</div>-->
|
||||
|
||||
<!-- a nav bar -->
|
||||
[Project Intro](https://codeberg.org/comaps#comaps)
|
||||
| [Governance](https://codeberg.org/comaps/Governance#comaps-project-governance-docs)
|
||||
| [FAQ](https://codeberg.org/comaps/Governance/src/branch/main/FAQ.md)
|
||||
| [Contribute](#contributing)
|
||||
| [Donate](https://www.comaps.app/donate)
|
||||
| [Keep Connected](https://codeberg.org/comaps#keep-connected)
|
||||
|
||||
# [CoMaps](https://comaps.app) – Hike, Bike, Drive Offline – Easy Map Navigation with Privacy
|
||||
|
||||
[
|
||||

|
||||
](https://github.com/comaps/comaps/actions/workflows/android-check.yaml)
|
||||
[
|
||||

|
||||
](https://github.com/comaps/comaps/actions/workflows/ios-check.yaml)
|
||||
[
|
||||

|
||||
](https://opencollective.com/comaps)
|
||||
[
|
||||

|
||||
](https://liberapay.com/CoMaps)
|
||||
|
||||
|
||||
|
||||
A community-led free & open source maps app based on [OpenStreetMap](https://www.openstreetmap.org) data and reinforced with commitment to transparency, privacy and being not-for-profit. CoMaps is a fork/spin-off of Organic Maps, which in turn is a fork of Maps.ME.
|
||||
|
||||
There are apps for Android and iOS (and ARM macOS).
|
||||
An alpha linux / macOS Qt desktop version, which is also suitable for linux phones.
|
||||
|
||||
**We're working on getting first app releases out soon, please stay tuned!**
|
||||
|
||||
<!--
|
||||
[<img src="docs/badges/apple-appstore.png" alt="App Store" width="160">](https://apps.apple.com/app/comaps/id1567437057)
|
||||
[<img src="docs/badges/google-play.png" alt="Google Play" width="160">](https://play.google.com/store/apps/details?id=app.comaps)
|
||||
[<img src="docs/badges/fdroid.png" alt="F-Droid" width="160">](https://f-droid.org/en/packages/app.comaps/)
|
||||
-->
|
||||
|
||||
<p float="left">
|
||||
<img src="android/app/src/fdroid/play/listings/en-US/graphics/phone-screenshots/1.jpg" width="180" />
|
||||
<img src="android/app/src/fdroid/play/listings/en-US/graphics/phone-screenshots/2.jpg" width="180" />
|
||||
<img src="android/app/src/fdroid/play/listings/en-US/graphics/phone-screenshots/3.jpg" width="180" />
|
||||
<img src="android/app/src/fdroid/play/listings/en-US/graphics/phone-screenshots/4.jpg" width="180" />
|
||||
</p>
|
||||
|
||||
<div align="center" >
|
||||
<img src="docs/badges/logo.svg" width="150">
|
||||
</div>
|
||||
**Offline-focused**: Plan and navigate your trip abroad without the need for cellular service, search waypoints while on a distant hike, etc. All app functions are designed to work offline.
|
||||
|
||||
**Respecting Privacy**: The app is designed with privacy in mind - does not identify people, does not track, and does not collect personal information. Ads-free.
|
||||
|
||||
<div align="center">
|
||||
<h1><a href="https://comaps.app/">CoMaps</a></h1>
|
||||
<h2>Hike, Bike, Drive Offline - Easy Map Navigation with Privacy</h2>
|
||||
</div>
|
||||
<div align="center">
|
||||
<p align="center">
|
||||
<a href="https://codeberg.org/comaps/comaps/src/branch/main/LICENSE">
|
||||
<img src="https://img.shields.io/github/license/comaps/comaps?style=for-the-badge&logo=opensourceinitiative&logoColor=white&color=588157" alt="License"/>
|
||||
</a>
|
||||
<a href="https://github.com/comaps/comaps/actions/workflows/android-check.yaml">
|
||||
<img src="https://img.shields.io/github/actions/workflow/status/comaps/comaps/.github/workflows/android-check.yaml?label=Android%20Build&logo=android&logoColor=white&style=for-the-badge" alt="Android Build Status"/>
|
||||
</a>
|
||||
<a href="https://github.com/comaps/comaps/actions/workflows/ios-check.yaml">
|
||||
<img src="https://img.shields.io/github/actions/workflow/status/comaps/comaps/.github/workflows/ios-check.yaml?label=iOS%20Build&logo=apple&logoColor=white&style=for-the-badge" alt="iOS Build Status"/>
|
||||
</a>
|
||||
<a href="https://opencollective.com/comaps">
|
||||
<img src="https://img.shields.io/opencollective/all/comaps?label=Open%20Collective%20Donors&logo=opencollective&logoColor=white&style=for-the-badge&color=588157" alt="Open Collective Donors"/>
|
||||
</a>
|
||||
<a href="https://liberapay.com/CoMaps">
|
||||
<img src="https://img.shields.io/liberapay/patrons/CoMaps.svg?label=Liberapay%20Patrons&logo=liberapay&logoColor=white&style=for-the-badge&color=588157" alt="Liberapay Patrons"/>
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
**Simple and Polished**: essential easy to use features that just work.
|
||||
|
||||
---
|
||||
**Saves Your Battery and Space**: Doesn’t drain your battery like other navigation apps. Compact maps save precious space on your phone.
|
||||
|
||||
A community-led free & open source maps app based on [OpenStreetMap](https://www.openstreetmap.org), built for transparency, privacy, and not-for-profit values. A fork of Organic Maps, originally based on Maps.ME.
|
||||
**Free and Built by the Community**: People like you helped build the app by adding places to [OpenStreetMap](https://www.openstreetmap.org), testing and giving feedback on features and contributing their development skills and money.
|
||||
|
||||
<p align="center">
|
||||
<a href="https://apps.apple.com/app/comaps/id6747180809">
|
||||
<img src="docs/badges/apple-appstore.png" alt="App Store" width="160"/>
|
||||
</a>
|
||||
<a href="https://play.google.com/store/apps/details?id=app.comaps.google">
|
||||
<img src="docs/badges/google-play.png" alt="Google Play" width="160"/>
|
||||
</a>
|
||||
<a href="https://f-droid.org/en/packages/app.comaps.fdroid/">
|
||||
<img src="docs/badges/fdroid.png" alt="F-Droid" width="160"/>
|
||||
</a>
|
||||
<a href="https://apt.izzysoft.de/fdroid/index/apk/app.comaps">
|
||||
<img src="docs/badges/izzyondroid.png" alt="Obtainium" width="160"/>
|
||||
</a>
|
||||
<a href="https://apps.obtainium.imranr.dev/redirect?r=obtainium://add/https://codeberg.org/comaps/comaps">
|
||||
<img src="docs/badges/obtainium.png" alt="Obtainium" width="160"/>
|
||||
</a>
|
||||
<a href="https://codeberg.org/comaps/comaps/releases">
|
||||
<img src="docs/badges/codeberg.png" alt="Codeberg" width="160"/>
|
||||
</a>
|
||||
</p>
|
||||
**Open and Transparent Decision-making and Financials, Not-for-profit and Fully Open Source.**
|
||||
|
||||
|
||||
<!-- Screenshots -->
|
||||
<p align="center">
|
||||
<img src="android/app/src/fdroid/play/listings/en-US/graphics/phone-screenshots/1.png" width="180" />
|
||||
<img src="android/app/src/fdroid/play/listings/en-US/graphics/phone-screenshots/2.png" width="180" />
|
||||
<img src="android/app/src/fdroid/play/listings/en-US/graphics/phone-screenshots/3.png" width="180" />
|
||||
<img src="android/app/src/fdroid/play/listings/en-US/graphics/phone-screenshots/4.png" width="180" />
|
||||
<img src="android/app/src/fdroid/play/listings/en-US/graphics/phone-screenshots/5.png" width="180" />
|
||||
<img src="android/app/src/fdroid/play/listings/en-US/graphics/phone-screenshots/6.png" width="180" />
|
||||
</p>
|
||||
|
||||
---
|
||||
|
||||
## ⚡️ Highlights
|
||||
|
||||
- **Offline-first**: Navigate without a connection
|
||||
- **Privacy-respecting**: No tracking, ads or data collection
|
||||
- **Lightweight**: Battery- and space-efficient
|
||||
- **Simple**: Polished, user-focused interface
|
||||
- **Cross-platform**: Available for Android, iOS, MacOS, and Linux.
|
||||
- **Community-built**: Free, open source, and collaborative
|
||||
- **Transparent**: Open finances and governance
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Main Features
|
||||
### Main Features
|
||||
|
||||
- Downloadable detailed maps with places which are not available with Google Maps
|
||||
|
||||
@@ -117,56 +89,37 @@ A community-led free & open source maps app based on [OpenStreetMap](https://www
|
||||
|
||||
- Android Auto and CarPlay support
|
||||
|
||||
***Freedom Is Here – Navigate the world with privacy and community at the forefront.***
|
||||
*Freedom Is Here - Discover your journey, navigate the world with privacy and community at the forefront!*
|
||||
|
||||
---
|
||||
|
||||
## 🤝 Contributing
|
||||
## Contributing
|
||||
|
||||
You can help by donating, contributing code, translating, or by telling others about it. To build the best maps app there is a need for software development, design, product, community development, and other areas. Reach out to us and let us know how you want to help.
|
||||
|
||||
- Build instructions: [docs/INSTALL.md](docs/INSTALL.md)
|
||||
- Contribution guide: [docs/CONTRIBUTING.md](docs/CONTRIBUTING.md)
|
||||
If you want to build the project, check [docs/INSTALL.md](docs/INSTALL.md). If you want to help the project,
|
||||
see [docs/CONTRIBUTING.md](docs/CONTRIBUTING.md). You can help in many ways, the ability to code is not necessary.
|
||||
|
||||
There is a dedicated [Zulip](https://codeberg.org/comaps/Governance/src/branch/main/contribute.md#3-team-messaging) chat for active contributors.
|
||||
Some docs might be outdated, contain broken links or old references to Organic Maps, etc. Its a work in progress and help is much appreciated!
|
||||
|
||||
---
|
||||
There is a dedicated Zulip chat for active contributors: [comaps.zulipchat.com](https://comaps.zulipchat.com)
|
||||
|
||||
## 💬 Feedback
|
||||
### Feedback
|
||||
|
||||
- Rate us on [App Store](https://apps.apple.com/app/comaps/id6747180809) and [Google Play](https://play.google.com/store/apps/details?id=app.comaps.google)
|
||||
- Star our repos on Codeberg
|
||||
- Report bugs or request features on the [issue tracker](https://codeberg.org/comaps/comaps/issues)
|
||||
<!-- uncomment when linked resources are ready
|
||||
- **Rate us on the [App Store](https://apps.apple.com/app/comaps/id1567437057)
|
||||
and [Google Play](https://play.google.com/store/apps/details?id=app.comaps)**. -->
|
||||
- Star our repos on Codeberg
|
||||
- Report bugs and discuss features at [the issue tracker](https://codeberg.org/comaps/comaps/issues)
|
||||
|
||||
---
|
||||
## How is development funded?
|
||||
|
||||
## 💸 Funding
|
||||
The app is free for everyone, so we rely on donations. Please [donate](https://opencollective.com/comaps/donate) to support the CoMaps community and see this open project thrive!
|
||||
|
||||
CoMaps is free. To fund development, we rely on your voluntary support ♥️
|
||||
Donate via [OpenCollective](https://opencollective.com/comaps/donate) or [Liberapay](https://liberapay.com/CoMaps).
|
||||
The project's financial information is completely open and transparent at [our Open Collective](https://opencollective.com/comaps).
|
||||
|
||||
---
|
||||
## License and Copyright
|
||||
|
||||
## 🔒 Privacy
|
||||
|
||||
The Android app has been reviewed by [Exodus Privacy](https://reports.exodus-privacy.eu.org/en/reports/app.comaps.google/latest/).
|
||||
|
||||
To [verify](https://developer.android.com/studio/command-line/apksigner#usage-verify) the APK, use the following signing certificate fingerprints:
|
||||
```
|
||||
SHA-256: 4894e8e6963627ef660031d8593fe77297f835acb4e23810003e926135023b4c
|
||||
SHA-1: 8b7b5739f917e9f7c681671ced0c9c8562123ade
|
||||
MD5: 9cce0ffea281dc2f0e0a154d6d2e281e
|
||||
```
|
||||
|
||||
To verify CoMaps via [AppVerifier](https://github.com/soupslurpr/AppVerifier), use the following signing certificate fingerprint:
|
||||
```
|
||||
app.comaps
|
||||
48:94:E8:E6:96:36:27:EF:66:00:31:D8:59:3F:E7:72:97:F8:35:AC:B4:E2:38:10:00:3E:92:61:35:02:3B:4C
|
||||
```
|
||||
---
|
||||
|
||||
## ⚖️ License
|
||||
|
||||
Licensed under the Apache License 2.0.
|
||||
See [LICENSE](LICENSE), [NOTICE](NOTICE), and [data/copyright.html](data/copyright.html).
|
||||
Licensed under the Apache License, Version 2.0. See
|
||||
[LICENSE](LICENSE),
|
||||
[NOTICE](NOTICE)
|
||||
and [data/copyright.html](data/copyright.html)
|
||||
for more information.
|
||||
|
||||
12
android/.idea/icon.svg
generated
@@ -1,4 +1,8 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="64pt" height="64pt" viewBox="0 0 835 835">
|
||||
<path d="M698.5 141.1a20 20 0 0 1 30.8-1.3A416 416 0 0 1 835 417.4a416 416 0 0 1-93.3 263 20 20 0 0 1-31.3-.6l-43-56.6a20 20 0 0 1-.2-24 307 307 0 0 0 59.3-181.8c0-74.2-26.2-142.3-69.9-195.6a20 20 0 0 1-.5-24.8zM260.7 456.4a20 20 0 0 1-7.7-36.7l282-177.4a20 20 0 0 1 29.9 22.7l-97 318.9a20 20 0 0 1-37.5 2.2l-49.2-111.5z" style="fill:#ccdfca"/>
|
||||
<path d="M626.3 753a20 20 0 0 1-6.2 29.6A416 416 0 0 1 417.5 835 417.7 417.7 0 0 1 0 417.4 417.7 417.7 0 0 1 603.3 43.5a20 20 0 0 1 7 30l-42.4 55.8a20 20 0 0 1-24.2 6.1 307 307 0 0 0-126.2-27 309 309 0 0 0-309 309c0 170.6 138.5 309 309 309a307 307 0 0 0 141.6-34.3 20 20 0 0 1 25.1 5.6z" style="fill:#fefdf6"/>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg version="1.1" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape">
|
||||
<g inkscape:groupmode="layer" inkscape:label="Layer 1">
|
||||
<rect fill="#006c35" fill-opacity="1.0" x="0" y="0" width="1024" height="1024"/>
|
||||
<path fill="#ffffff" d="m861.3562052 256.9139426c18.220574 48.4374573-79.2585233 166.2022835-172.1806378 196.4226995-168.0803471-58.2153969-173.5457836 39.5504743-311.1096159 132.4296677 162.6149552 112.4329497 332.9737882 24.8856325 329.7844002-85.7673036-127.9956457 73.3254376-208.1650824 81.3238121-254.1719349 79.1032962 154.8710218-30.6636026 322.0404219-125.7633124 357.0667834-165.7616685 0.032202 1.7749817 0.049863 3.5523114 0.049863 5.33456 0 191.0905993-295.1650572 474.6148576-295.1650572 474.6148576s-154.5086464-147.95159-239.9499331-302.4701423c-11.943516-0.1614425-83.8230022 25.9633002-110.3310391-9.051445-29.6082623-39.1049397 80.1693081-170.2028122 175.3699196-209.3102117 170.3563508 77.3261904 263.7351577-123.0971499 317.0292402-134.2068293-158.9688193-94.2135154-316.1183714-55.5493358-333.8847017 84.4353407 88.3675802-50.2172465 196.7775505-78.65765 246.8822227-76.4346744-140.7606999 28.7623957-301.9981102 132.8752019-350.2809443 172.4255642 0-159.041983 132.1505407-287.9677052 295.1650569-287.9677052 96.4018995 0 182.0095151 45.0859887 235.8744518 114.8252613 0.00335 0 96.1884344-31.2834041 109.851981 11.3787329zm-33.7059144 14.218972c-12.6607646-17.2289278-56.7341326 2.8936807-56.7341326 2.8936807 6.1678152 10.3446685 11.7002555 21.0960758 16.5352245 32.2084942 4.8995467 11.2622344 9.0867303 22.8954305 12.5044868 34.8382086 0 0 45.0041042-46.3863227 27.6944213-69.9403835zm-629.5734431 294.3797539c13.6858848 18.6189721 61.3258973-3.1309266 61.3258973-3.1309266-6.6716772-11.1802827-12.6484216-22.8033047-17.8755617-34.8139472-5.2966478-12.1727565-9.8213865-24.7454316-13.5171072-37.6545218 0 0-48.6427553 50.1397674-29.9332284 75.5993956z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 753 B After Width: | Height: | Size: 2.0 KiB |
@@ -18,4 +18,6 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
libxi-dev \
|
||||
optipng
|
||||
WORKDIR /root/comaps
|
||||
RUN ./configure.sh
|
||||
RUN ./tools/unix/generate_symbols.sh
|
||||
CMD ./gradlew -Parm64 assembleFdroidDebug
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
To build, install and run e.g. a Web Debug version on your device/emulator: './gradlew runWebDebug'
|
||||
|
||||
Or to compile a redistributable Fdroid Test apk for testing: './gradlew assembleFdroidBeta'
|
||||
Or to compile a redistributable Fdroid Beta apk for testing: './gradlew assembleFdroidBeta'
|
||||
|
||||
Or to build test apks for all flavors: './gradlew assembleBeta'
|
||||
Or to build beta apks for all flavors: './gradlew assembleBeta'
|
||||
|
||||
To see all available build targets './gradlew tasks'
|
||||
|
||||
|
||||
12
android/app/.gitignore
vendored
@@ -2,14 +2,14 @@
|
||||
/nativeOutputs
|
||||
|
||||
# ignore private keys
|
||||
/secure.properties.test
|
||||
/secure.properties.release
|
||||
/comaps-test.keystore
|
||||
/comaps-release.keystore
|
||||
/secure.properties
|
||||
/release.keystore
|
||||
/secure.properties
|
||||
/libnotify.properties
|
||||
/google-play.json
|
||||
/huawei-appgallery.json
|
||||
/agconnect-services.json
|
||||
/src/main/res/xml/network_security_config.xml
|
||||
|
||||
# ignore flags symlinks
|
||||
/src/main/res/drawable-xhdpi/??.png
|
||||
@@ -25,5 +25,5 @@
|
||||
/src/main/res/drawable-mdpi/uk_scotland.png
|
||||
/src/main/res/drawable-mdpi/uk_wales.png
|
||||
|
||||
# Symlinked to F-Droid relnotes by tools/unix/link_gplay_relnotes.sh
|
||||
/src/google/play/release-notes
|
||||
# ignore autogenerated metadata (see prepareGoogleReleaseListing in build.gradle)
|
||||
/src/google/play/listings
|
||||
|
||||
@@ -7,6 +7,7 @@ buildscript {
|
||||
// Detect flavors from the task name.
|
||||
def taskName = getGradle().getStartParameter().getTaskRequests().toString().toLowerCase()
|
||||
def isFdroid = taskName.contains('fdroid')
|
||||
def isBeta = taskName.contains('beta')
|
||||
|
||||
dependencies {
|
||||
classpath libs.android.tools
|
||||
@@ -15,70 +16,135 @@ buildscript {
|
||||
}
|
||||
}
|
||||
|
||||
repositories {
|
||||
google()
|
||||
mavenCentral()
|
||||
maven { url 'https://www.jitpack.io' } // MPAndroidChart
|
||||
}
|
||||
|
||||
apply plugin: 'com.android.application'
|
||||
apply plugin: 'com.github.triplet.play'
|
||||
apply plugin: 'ru.cian.huawei-publish-gradle-plugin'
|
||||
|
||||
def run(cmd) {
|
||||
def stdout = new ByteArrayOutputStream()
|
||||
exec {
|
||||
commandLine = cmd
|
||||
standardOutput = stdout
|
||||
}
|
||||
return stdout.toString()
|
||||
}
|
||||
|
||||
|
||||
import com.github.triplet.gradle.androidpublisher.ReleaseStatus
|
||||
import org.gradle.nativeplatform.platform.internal.DefaultNativePlatform
|
||||
|
||||
def getVersion() {
|
||||
def isWindows = DefaultNativePlatform.getCurrentOperatingSystem().isWindows()
|
||||
def bash = isWindows ? 'C:\\Program Files\\Git\\bin\\bash.exe' : 'bash'
|
||||
def versionCode = Integer.parseInt(run([bash, '../../tools/unix/version.sh', 'android_code']).trim())
|
||||
def versionName = run([bash, '../../tools/unix/version.sh', 'android_name']).trim()
|
||||
return new Tuple2(versionCode, versionName)
|
||||
}
|
||||
|
||||
def getCommitMessage() {
|
||||
return run(['git', '--no-pager', 'show', '-s', '--format=%s%n%n%b', 'HEAD']).trim()
|
||||
}
|
||||
|
||||
def osName = System.properties['os.name'].toLowerCase()
|
||||
|
||||
project.ext.appId = 'app.comaps'
|
||||
project.ext.appName = 'CoMaps'
|
||||
|
||||
|
||||
java {
|
||||
toolchain {
|
||||
languageVersion.set(JavaLanguageVersion.of(21))
|
||||
}
|
||||
}
|
||||
// I have Java 21 installed, but this doesn't work on MacOS.
|
||||
//java {
|
||||
// toolchain {
|
||||
// languageVersion.set(JavaLanguageVersion.of(17))
|
||||
// }
|
||||
//}
|
||||
|
||||
android {
|
||||
namespace = 'app.organicmaps'
|
||||
|
||||
// TODO: it should not be here, but in sdk/build.gradle. But for some reason it should be specified here as well.
|
||||
ndkVersion = '28.2.13676358'
|
||||
|
||||
dependenciesInfo {
|
||||
// Disables dependency metadata when building APKs (for IzzyOnDroid/F-Droid)
|
||||
includeInApk = false
|
||||
// Disables dependency metadata when building Android App Bundles (for Google Play)
|
||||
includeInBundle = false
|
||||
}
|
||||
namespace 'app.organicmaps'
|
||||
|
||||
buildFeatures {
|
||||
dataBinding = true
|
||||
buildConfig = true
|
||||
}
|
||||
|
||||
// Users are complaining that the app should be re-downloaded from the Play Store after changing the language.
|
||||
bundle {
|
||||
language {
|
||||
enableSplit = false
|
||||
}
|
||||
}
|
||||
|
||||
// All properties are read from gradle.properties file
|
||||
compileSdk = propCompileSdkVersion.toInteger()
|
||||
compileSdk propCompileSdkVersion.toInteger()
|
||||
|
||||
ndkVersion '27.2.12479018'
|
||||
|
||||
defaultConfig {
|
||||
versionCode = rootProject.ext.versionCode
|
||||
versionName = rootProject.ext.versionName
|
||||
// Default package name is taken from the manifest and should be app.comaps
|
||||
def ver = getVersion()
|
||||
versionCode = ver.V1
|
||||
versionName = ver.V2
|
||||
println('Version: ' + versionName)
|
||||
println('VersionCode: ' + versionCode)
|
||||
minSdk = propMinSdkVersion.toInteger()
|
||||
targetSdk = propTargetSdkVersion.toInteger()
|
||||
minSdk propMinSdkVersion.toInteger()
|
||||
targetSdk propTargetSdkVersion.toInteger()
|
||||
applicationId project.ext.appId
|
||||
buildConfigField 'String', 'SUPPORT_MAIL', '"android@comaps.app"'
|
||||
// Should be customized in flavors.
|
||||
buildConfigField 'String', 'REVIEW_URL', '""'
|
||||
resourceConfigurations += [project.ext.supportedLocalizations]
|
||||
|
||||
base.archivesName = appName.replaceAll('\\s','') + '-' + defaultConfig.versionCode
|
||||
externalNativeBuild {
|
||||
def pchFlag = 'OFF'
|
||||
if (project.hasProperty('pch')) pchFlag = 'ON'
|
||||
|
||||
ndk.debugSymbolLevel = 'full'
|
||||
def njobs = ''
|
||||
if (project.hasProperty('njobs')) njobs = project.getProperty('njobs')
|
||||
|
||||
def enableVulkanDiagnostics = 'OFF'
|
||||
if (project.hasProperty('enableVulkanDiagnostics')) {
|
||||
enableVulkanDiagnostics = project.getProperty('enableVulkanDiagnostics')
|
||||
}
|
||||
|
||||
def enableTrace = 'OFF'
|
||||
if (project.hasProperty('enableTrace')) {
|
||||
enableTrace = project.getProperty('enableTrace')
|
||||
}
|
||||
|
||||
cmake {
|
||||
cppFlags '-fexceptions', '-frtti'
|
||||
// There is no sense to enable sections without gcc's --gc-sections flag.
|
||||
cFlags '-fno-function-sections', '-fno-data-sections',
|
||||
'-Wno-extern-c-compat'
|
||||
arguments '-DANDROID_TOOLCHAIN=clang', '-DANDROID_STL=c++_static',
|
||||
"-DOS=$osName", '-DSKIP_TESTS=ON', '-DSKIP_TOOLS=ON', "-DUSE_PCH=$pchFlag",
|
||||
"-DNJOBS=$njobs", "-DENABLE_VULKAN_DIAGNOSTICS=$enableVulkanDiagnostics",
|
||||
"-DENABLE_TRACE=$enableTrace"
|
||||
targets 'organicmaps'
|
||||
}
|
||||
}
|
||||
|
||||
// Use, for example, -Parm32 gradle parameter to build only for armeabi-v7a.
|
||||
ndk {
|
||||
abiFilters = new HashSet<>()
|
||||
if (project.hasProperty('arm32') || project.hasProperty('armeabi-v7a')) {
|
||||
abiFilters.add('armeabi-v7a')
|
||||
}
|
||||
if (project.hasProperty('arm64') || project.hasProperty('arm64-v8a')) {
|
||||
abiFilters.add('arm64-v8a')
|
||||
}
|
||||
if (project.hasProperty('x86')) {
|
||||
abiFilters.add('x86')
|
||||
}
|
||||
if (project.hasProperty('x86_64') || project.hasProperty('x64')) {
|
||||
abiFilters.add('x86_64')
|
||||
}
|
||||
if (abiFilters.isEmpty()) {
|
||||
abiFilters.add('armeabi-v7a')
|
||||
abiFilters.add('arm64-v8a')
|
||||
// For the emulator, chromebooks and some Intel Atom devices.
|
||||
abiFilters.add('x86_64')
|
||||
}
|
||||
println('Building for ' + abiFilters + ' archs.')
|
||||
}
|
||||
|
||||
setProperty('archivesBaseName', appName.replaceAll('\\s','') + '-' + defaultConfig.versionCode)
|
||||
}
|
||||
|
||||
flavorDimensions += 'default'
|
||||
@@ -128,197 +194,125 @@ android {
|
||||
splits.abi {
|
||||
boolean enabled = project.hasProperty('splitApk')
|
||||
println ('Create separate apks: ' + enabled)
|
||||
enable = enabled
|
||||
enable enabled
|
||||
reset()
|
||||
include 'x86', 'armeabi-v7a', 'arm64-v8a', 'x86_64'
|
||||
universalApk = true
|
||||
universalApk true
|
||||
}
|
||||
|
||||
lint {
|
||||
disable 'MissingTranslation'
|
||||
// https://github.com/organicmaps/organicmaps/issues/3551
|
||||
disable 'MissingQuantity', 'UnusedQuantity'
|
||||
// https://github.com/organicmaps/organicmaps/issues/3550
|
||||
disable 'ByteOrderMark'
|
||||
// https://github.com/organicmaps/organicmaps/issues/1077
|
||||
disable 'CustomSplashScreen'
|
||||
// https://github.com/organicmaps/organicmaps/issues/3610
|
||||
disable 'InsecureBaseConfiguration'
|
||||
abortOnError = true
|
||||
abortOnError true
|
||||
}
|
||||
|
||||
gradle.projectsEvaluated {
|
||||
android.applicationVariants.all { variant ->
|
||||
def task = variant.name.capitalize()
|
||||
project.task(type: Exec, "run${task}", dependsOn: "install${task}") {
|
||||
commandLine android.getAdbExe(), 'shell', 'am', 'start', '-n', "$applicationId/app.organicmaps.DownloadResourcesActivity", '-a', 'android.intent.action.MAIN', '-c', 'android.intent.category.LAUNCHER'
|
||||
commandLine android.getAdbExe(), 'shell', 'am', 'start', '-n', "$applicationId/app.comaps.DownloadResourcesActivity", '-a', 'android.intent.action.MAIN', '-c', 'android.intent.category.LAUNCHER'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
def secureReleasePropertiesFileExists = file('secure.properties.release').exists()
|
||||
if (secureReleasePropertiesFileExists) {
|
||||
apply from: 'secure.properties.release'
|
||||
}
|
||||
|
||||
def secureTestPropertiesFileExists = file('secure.properties.test').exists()
|
||||
if (secureTestPropertiesFileExists) {
|
||||
apply from: 'secure.properties.test'
|
||||
def securityPropertiesFileExists = file('secure.properties').exists()
|
||||
if (securityPropertiesFileExists) {
|
||||
apply from: 'secure.properties'
|
||||
}
|
||||
|
||||
signingConfigs {
|
||||
debug {
|
||||
storeFile file('comaps-debug.keystore')
|
||||
storeFile file('debug.keystore')
|
||||
storePassword '12345678'
|
||||
keyAlias 'CoMaps Debug'
|
||||
keyAlias 'debug'
|
||||
keyPassword '12345678'
|
||||
}
|
||||
|
||||
test {
|
||||
if (secureTestPropertiesFileExists) {
|
||||
storeFile file(secretTestStoreFile)
|
||||
storePassword secretTestStorePassword
|
||||
keyAlias secretTestKeyAlias
|
||||
keyPassword secretTestKeyPassword
|
||||
} else {
|
||||
println('secure.properties.test doesn\'t exist')
|
||||
}
|
||||
}
|
||||
|
||||
release {
|
||||
if (secureReleasePropertiesFileExists) {
|
||||
storeFile file(secretReleaseStoreFile)
|
||||
storePassword secretReleaseStorePassword
|
||||
keyAlias secretReleaseKeyAlias
|
||||
keyPassword secretReleaseKeyPassword
|
||||
if (securityPropertiesFileExists) {
|
||||
println('The release signing keys are available')
|
||||
storeFile file(spropStoreFile)
|
||||
storePassword spropStorePassword
|
||||
keyAlias spropKeyAlias
|
||||
keyPassword spropKeyPassword
|
||||
} else {
|
||||
println('secure.properties.release doesn\'t exist')
|
||||
println('The release signing keys are unavailable')
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
def taskName = getGradle().getStartParameter().getTaskRequests().toString().toLowerCase()
|
||||
|
||||
debug {
|
||||
applicationIdSuffix '.debug' // Allows to install debug and release builds together
|
||||
versionNameSuffix '-debug'
|
||||
jniDebuggable true // Enable jni debug build
|
||||
zipAlignEnabled true
|
||||
signingConfig = signingConfigs.debug
|
||||
signingConfig signingConfigs.debug
|
||||
resValue 'string', 'app_name', 'CoMaps Debug'
|
||||
// Do not generate separate debug symbols for debug apps, because we don't distribute them.
|
||||
ndk.debugSymbolLevel = 'none'
|
||||
}
|
||||
|
||||
release {
|
||||
if (taskName.contains('release')) {
|
||||
if (secureReleasePropertiesFileExists) {
|
||||
println('Using RELEASE signing keys from secure.properties.release')
|
||||
signingConfig = signingConfigs.release
|
||||
} else {
|
||||
println('NO RELEASE signing keys found')
|
||||
println('Using DEBUG signing keys')
|
||||
signingConfig = signingConfigs.debug
|
||||
}
|
||||
}
|
||||
|
||||
signingConfig signingConfigs.release
|
||||
minifyEnabled true
|
||||
shrinkResources = true
|
||||
shrinkResources true
|
||||
// Includes the default ProGuard rules files that are packaged with the Android Gradle plugin.
|
||||
// To learn more, go to the documentation section about R8 configuration files.
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
resValue 'string', 'app_name', project.ext.appName
|
||||
// Full size symbols are too big for Google, 217mb aab vs 95mb.
|
||||
ndk.debugSymbolLevel = 'symbol_table'
|
||||
}
|
||||
|
||||
// TODO(@pastk): rename to "test" everywhere in code
|
||||
beta {
|
||||
applicationIdSuffix '.test'
|
||||
versionNameSuffix '-test'
|
||||
if (taskName.contains('beta')) {
|
||||
if (secureTestPropertiesFileExists) {
|
||||
println('Using TEST signing keys from secure.properties.test')
|
||||
signingConfig = signingConfigs.test
|
||||
} else {
|
||||
println('NO TEST signing keys found')
|
||||
println('Using DEBUG signing keys')
|
||||
signingConfig = signingConfigs.debug
|
||||
}
|
||||
}
|
||||
signingConfig signingConfigs.release
|
||||
minifyEnabled true
|
||||
shrinkResources = true
|
||||
shrinkResources true
|
||||
// Includes the default ProGuard rules files that are packaged with the Android Gradle plugin.
|
||||
// To learn more, go to the documentation section about R8 configuration files.
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
matchingFallbacks = ['release'] // use dependencies of "release" build type
|
||||
resValue 'string', 'app_name', 'CoMaps Test'
|
||||
// Full size symbols are too big for Google, 217mb aab vs 95mb.
|
||||
ndk.debugSymbolLevel = 'symbol_table'
|
||||
}
|
||||
}
|
||||
|
||||
externalNativeBuild {
|
||||
cmake {
|
||||
version '3.22.1+'
|
||||
buildStagingDirectory './nativeOutputs'
|
||||
path '../../CMakeLists.txt'
|
||||
}
|
||||
}
|
||||
|
||||
// We don't compress these extensions in assets/ because our random FileReader can't read zip-compressed files from apk.
|
||||
// TODO: Load all minor files via separate call to ReadAsString which can correctly handle compressed files in zip containers.
|
||||
androidResources {
|
||||
ignoreAssetsPattern = '!.svn:!.git:!.DS_Store:!*.scc:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~'
|
||||
ignoreAssetsPattern '!.svn:!.git:!.DS_Store:!*.scc:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~'
|
||||
noCompress = ['txt', 'bin', 'html', 'png', 'json', 'mwm', 'ttf', 'sdf', 'ui', 'config', 'csv', 'spv', 'obj']
|
||||
localeFilters += [
|
||||
"af",
|
||||
"ar",
|
||||
"az",
|
||||
"be",
|
||||
"bg",
|
||||
"ca",
|
||||
"cs",
|
||||
"da",
|
||||
"de",
|
||||
"el",
|
||||
"en",
|
||||
"en-rGB",
|
||||
"es",
|
||||
"es-rMX",
|
||||
"et",
|
||||
"eu",
|
||||
"fa",
|
||||
"fi",
|
||||
"fr",
|
||||
"fr-rCA",
|
||||
"iw",
|
||||
"hi",
|
||||
"hu",
|
||||
"in",
|
||||
"it",
|
||||
"ja",
|
||||
"ko",
|
||||
"lt",
|
||||
"lv",
|
||||
"mr",
|
||||
"mt",
|
||||
"nb",
|
||||
"nl",
|
||||
"pl",
|
||||
"pt",
|
||||
"pt-rBR",
|
||||
"ro",
|
||||
"ru",
|
||||
"sk",
|
||||
"sr",
|
||||
"sv",
|
||||
"sw",
|
||||
"th",
|
||||
"tr",
|
||||
"uk",
|
||||
"vi",
|
||||
"zh",
|
||||
"zh-rHK",
|
||||
"zh-rMO",
|
||||
"zh-rTW"
|
||||
]
|
||||
}
|
||||
|
||||
compileOptions {
|
||||
coreLibraryDesugaringEnabled = true
|
||||
coreLibraryDesugaringEnabled true
|
||||
|
||||
sourceCompatibility JavaVersion.VERSION_21
|
||||
targetCompatibility JavaVersion.VERSION_21
|
||||
sourceCompatibility JavaVersion.VERSION_17
|
||||
targetCompatibility JavaVersion.VERSION_17
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation project(':sdk')
|
||||
|
||||
coreLibraryDesugaring libs.android.tools.desugar
|
||||
|
||||
// Google Play Location Services
|
||||
@@ -355,12 +349,18 @@ dependencies {
|
||||
// Fix for app/organicmaps/util/FileUploadWorker.java:14: error: cannot access ListenableFuture
|
||||
// https://github.com/organicmaps/organicmaps/issues/6106
|
||||
implementation libs.google.guava
|
||||
implementation libs.appdevnext.androidchart
|
||||
implementation libs.devnullorthrow.mpandroidchart
|
||||
implementation libs.jcip.annotations
|
||||
|
||||
// Test Dependencies
|
||||
androidTestImplementation libs.androidx.test.junit
|
||||
testImplementation libs.junit
|
||||
testImplementation libs.mockito.core
|
||||
testImplementation libs.mockito.inline
|
||||
}
|
||||
|
||||
tasks.withType(JavaCompile) {
|
||||
options.compilerArgs << '-Xlint:unchecked' << '-Xlint:deprecation'
|
||||
}
|
||||
|
||||
android.applicationVariants.all { variant ->
|
||||
@@ -372,6 +372,32 @@ android.applicationVariants.all { variant ->
|
||||
variant.resValue 'string', 'app_id', variant.applicationId
|
||||
}
|
||||
|
||||
task prepareGoogleReleaseListing {
|
||||
// Prepares Google Play metainfo from F-Droid metainfo.
|
||||
final sourceFlavor = 'fdroid'
|
||||
final targetFlavor = 'google'
|
||||
doLast {
|
||||
final sourceDir = new File("${projectDir}/src/$sourceFlavor/play/listings")
|
||||
final targetDir = new File("${projectDir}/src/$targetFlavor/play/listings")
|
||||
final sourceFiles = fileTree(dir: sourceDir,
|
||||
include: '**/*.txt', exclude: "**/*-${targetFlavor}.txt")
|
||||
sourceFiles.each { File sourceFile ->
|
||||
final locale = sourceFile.parentFile.getName()
|
||||
final targetLocaleDir = new File(targetDir, locale)
|
||||
if (!targetLocaleDir.isDirectory())
|
||||
targetLocaleDir.mkdirs()
|
||||
final targetFile = new File(targetLocaleDir, sourceFile.getName())
|
||||
// Override Google-specific values by using ${name}-google.txt files.
|
||||
final overrideFile = new File(sourceFile.getPath().replace('.txt', "-${targetFlavor}.txt"))
|
||||
targetFile.text = overrideFile.exists() ? overrideFile.text : sourceFile.text
|
||||
}
|
||||
copy {
|
||||
from "${projectDir}/../../screenshots/android"
|
||||
into targetDir
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
play {
|
||||
enabled.set(false)
|
||||
track.set('production')
|
||||
@@ -410,7 +436,3 @@ huaweiPublish {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tasks.withType(JavaCompile).configureEach {
|
||||
options.compilerArgs << '-Xlint:unchecked' << '-Xlint:deprecation'
|
||||
}
|
||||
|
||||
BIN
android/app/debug.keystore
Normal file
BIN
android/app/ic_launcher-playstore.png
Normal file
|
After Width: | Height: | Size: 34 KiB |
@@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/bg_app_icon_test"/>
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground_test"/>
|
||||
<monochrome android:drawable="@drawable/ic_launcher_foreground_monochrome"/>
|
||||
</adaptive-icon>
|
||||
BIN
android/app/src/beta/res/mipmap-hdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 4.2 KiB |
BIN
android/app/src/beta/res/mipmap-hdpi/ic_launcher_round.png
Normal file
|
After Width: | Height: | Size: 7.1 KiB |
BIN
android/app/src/beta/res/mipmap-mdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
BIN
android/app/src/beta/res/mipmap-mdpi/ic_launcher_round.png
Normal file
|
After Width: | Height: | Size: 4.8 KiB |
BIN
android/app/src/beta/res/mipmap-xhdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 5.5 KiB |
BIN
android/app/src/beta/res/mipmap-xhdpi/ic_launcher_round.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
android/app/src/beta/res/mipmap-xxhdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 8.6 KiB |
BIN
android/app/src/beta/res/mipmap-xxhdpi/ic_launcher_round.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
android/app/src/beta/res/mipmap-xxxhdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
android/app/src/beta/res/mipmap-xxxhdpi/ic_launcher_round.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
@@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/bg_app_icon_debug"/>
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground_debug"/>
|
||||
<monochrome android:drawable="@drawable/ic_launcher_foreground_monochrome"/>
|
||||
</adaptive-icon>
|
||||
BIN
android/app/src/debug/res/mipmap-hdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 8.4 KiB |
BIN
android/app/src/debug/res/mipmap-hdpi/ic_launcher_foreground.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
android/app/src/debug/res/mipmap-mdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 4.9 KiB |
BIN
android/app/src/debug/res/mipmap-mdpi/ic_launcher_foreground.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
android/app/src/debug/res/mipmap-xhdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 36 KiB |
BIN
android/app/src/debug/res/mipmap-xxhdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 63 KiB |
BIN
android/app/src/debug/res/mipmap-xxxhdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 37 KiB |
|
After Width: | Height: | Size: 97 KiB |
@@ -1 +0,0 @@
|
||||
CoMaps - Mapas ensin conexón con privacidá
|
||||
@@ -1 +0,0 @@
|
||||
Лесна навигация - Открийте повече от вашето пътуване - Подкрепен от общността
|
||||
@@ -1 +0,0 @@
|
||||
CoMaps - Хайкинг, Велосипед, Пътуване без Интернет
|
||||
@@ -1 +0,0 @@
|
||||
মানচিত্র নেভিগেশন - আপনার যাত্রা সম্পর্কে আরও জানুন - সম্প্রদায় কর্তৃক পরিচালিত
|
||||
@@ -1 +0,0 @@
|
||||
কোম্যাপস - অফলাইনে হাইকিং, সাইকেলিং ও ড্রাইভিং
|
||||
@@ -1 +0,0 @@
|
||||
Navegació intuïtiva - Descobreix el teu camí - El poder de la comunitat
|
||||
@@ -1 +0,0 @@
|
||||
CoMaps - Camina, pedala o condueix privadament
|
||||
@@ -1,32 +0,0 @@
|
||||
Komunitou vedená bezplatná a otevřená mapová aplikace založená na datech z projektu OpenStreetMap a posílená závazkem k transparentnosti, soukromí a neziskovosti. Aplikace CoMaps je fork/odnož aplikace Organic Maps, která je zase forkem aplikace Maps.ME.
|
||||
|
||||
Důvody vzniku projektu a jeho směr si můžete přečíst na adrese <b><i>codeberg.org/comaps</i></b>.
|
||||
Můžete se zde také připojit ke komunitě pomáhat s vytvářením nejlepší mapové aplikace
|
||||
• Používejte aplikaci a sdílejte ji se známými
|
||||
• Poskytujte zpětnou vazbu a nahlašujte problémy
|
||||
• Aktualizujte mapová data v aplikaci nebo na webu OpenStreetMap
|
||||
|
||||
‣ <b>Zaměřené na offline použití</b>: Plánujte a navigujte své cesty do zahraničí bez nutnosti mobilních dat, hledejte body na vzdálených túrách apod. Všechny funkce aplikace jsou navrženy tak, aby fungovaly offline.
|
||||
‣ <b>S ohledem na soukromí</b>: Aplikace je navržená s důrazem na soukromí – neidentifikuje lidi, nesleduje vás a nesbírá osobní údaje. Bez reklam.
|
||||
‣ <b>Jednoduché a vyladěné</b>: Základní, snadno použitelné funkce, které prostě fungují.
|
||||
‣ <b>Šetří vaši baterii a místo</b>: Nevybíjí vaší baterii, jako ostatní navigační aplikace. Kompaktní mapy šetří cenné místo ve vašem telefonu.
|
||||
‣ <b>Bezplatné a vytvořené komunitou</b>: S vytvářením aplikace pomáhají lidé, jako jste vy, přidáváním míst do projektu OpenStreetMap, testováním a poskytováním zpětné vazby k funkcím a přispíváním svými vývojářskými schopnostmi a penězi.
|
||||
‣ <b>Otevřené a transparentní rozhodování a nakládání s financemi, neziskovost a plně otevřený zdrojový kód.</b>
|
||||
|
||||
<b>Hlavní funkce</b>:
|
||||
• Stahovatelné podrobné mapy s místy, která nenajdete ani v Mapách Google
|
||||
• Outdoorový režim se zvýrazněnými turistickými trasami, tábořišti, vodními zdroji, vrcholy, vrstevnicemi atd.
|
||||
• Pěší trasy a cyklostezky
|
||||
• Body zájmu, jako jsou restaurace, čerpací stanice, hotely, obchody, vyhlídky a mnoho dalšího
|
||||
• Hledání podle názvu nebo adresy nebo podle kategorie bodů zájmu
|
||||
• Navigace s hlasovými pokyny pro chůzi, jízdu na kole nebo řízení
|
||||
• Uložení oblíbených míst jedním klepnutím
|
||||
• Offline články z Wikipedie
|
||||
• Vrstva metra a navigace v něm
|
||||
• Záznam tras
|
||||
• Export a import záložek a tras ve formátech KML, KMZ a GPX
|
||||
• Tmavý režim k použití během noci
|
||||
• Zlepšování mapových dat pro všechny pomocí jednoduchého vestavěného editoru
|
||||
|
||||
<b>Svoboda je tady</b>
|
||||
Objevujte své cesty, navigujte se světem se soukromím a komunitou na prvním místě!
|
||||
@@ -1 +0,0 @@
|
||||
Jednoduchá navigace v mapě – Objevte více na své cestě – Vyvíjeno komunitou
|
||||
@@ -1 +0,0 @@
|
||||
CoMaps – pěšky, na kole a autem offline a soukromě
|
||||
@@ -1 +0,0 @@
|
||||
Nem kortnavigation - Oplev mere af din rejse - Drevet af fællesskabet
|
||||
@@ -1 +0,0 @@
|
||||
CoMaps - vandr, cykl og kør offline med privatliv
|
||||
@@ -1,32 +0,0 @@
|
||||
Eine von der Community betriebene, kostenlose Open-Source Karten-App, die auf OpenStreetMap Daten basiert. Transparent und nicht gewinnorientiert. CoMaps ist ein Fork/Abspaltung von Organic Maps, die wiederum ein Fork/Abspaltung von Maps.Me ist.
|
||||
|
||||
Lese mehr über die Gründe und Ziele des Projektes unter <b><i>codeberg.org/comaps</i></b>.
|
||||
Werde Teil der Community und hilf mit, die beste Karten-App zu entwickeln
|
||||
• Nutze die App und erzähle anderen davon
|
||||
• Gib Feedback und melde Probleme
|
||||
• Aktualisiere Kartendaten in der App oder auf der OpenStreetMap-Webseite
|
||||
|
||||
‣ <b>Einfach und ausgereift</b>: Essenzielle, leicht zu bedienende Funktionen, die einfach funktionieren.
|
||||
‣ <b>Offline-orientiert</b>: Plane und navigiere im Ausland ohne Mobilfunkverbindung, finde Wegpunkte auf abgelegenen Wanderungen usw. Alle Funktionen sind für den Offline-Einsatz konzipiert.
|
||||
‣ <b>Datenschutzfreundlich</b>: Die App wurde mit Fokus auf Privatsphäre entwickelt – keine Personenidentifikation, kein Tracking, keine Erfassung persönlicher Daten, keine Werbung.
|
||||
‣ <b>Spart Akku und Speicherplatz</b>: Verbraucht nicht unnötig Akku wie andere Navi-Apps. Kompakte Karten sparen Speicherplatz auf deinem Gerät.
|
||||
‣ <b>Kostenlos und von der Community entwickelt</b>: Menschen wie du haben geholfen, diese App zu entwickeln – durch das Hinzufügen von Orten zu OpenStreetMap, Testen von neuen Funktionen, Softwareentwicklung oder Spenden.
|
||||
‣ <b>Offen und transparent bei Entscheidungen und Finanzen, gemeinnützig und vollständig Open-Source</b>
|
||||
|
||||
<b>Hauptfunktionen</b>:
|
||||
• Detaillierte, herunterladbare Karten mit Orten, die bei Google Maps oft fehlen
|
||||
• Outdoor-Modus mit hervorgehobenen Wanderwegen, Campingplätzen, Wasserquellen, Gipfeln, Höhenlinien usw.
|
||||
• Geh- und Radwege
|
||||
• Orte wie Restaurants, Tankstellen, Hotels, Geschäfte, Sehenswürdigkeiten und viele mehr
|
||||
• Suche nach Namen, Adressen oder Kategorien
|
||||
• Sprachausgabe bei der Navigation zu Fuß, Rad oder Auto
|
||||
• Lesezeichen mit einem einzigen Tippen speichern
|
||||
• Offline verfügbare Wikipedia-Artikel
|
||||
• U- und S-Bahn-Netze
|
||||
• Aufzeichnen von GPS-Tracks
|
||||
• Import und Export von Favoriten und Routen im KML-, KMZ- oder GPX-Format
|
||||
• Dunkler Modus für die Nutzung bei Nacht
|
||||
• Kartenbearbeitung direkt in der App mit einem einfachen Editor
|
||||
|
||||
<b>Entdecke die Unabhängigkeit</b>
|
||||
Entdecke deine Reise – navigiere in der Welt mit Datenschutz!
|
||||
@@ -1,8 +0,0 @@
|
||||
• OpenStreetMap-Daten vom 4. November
|
||||
• Aktualisierte Karten-Icons, inkl. Farben für Unterhaltungs-, Sport- & andere Unternehmen
|
||||
• Informationen zu Steckdosen an EV-Ladestationen
|
||||
• Symbole für Sportzentren, Veranstaltungsorte, Massagesalons, Gästehäuser und einige stillgelegte Unternehmen
|
||||
• Verbesserungen bei der Suche
|
||||
• Behebung eines Absturzes bei der Suche
|
||||
• Verbesserte Sprachführung während der Navigation
|
||||
Weitere Änderungen finden in unseren Codeberg-Versionshinweisen!
|
||||
@@ -1 +0,0 @@
|
||||
Einfache Navigation - Entdecken Sie mehr von Ihrer Reise - Community-Entwickelt
|
||||
@@ -1 +0,0 @@
|
||||
CoMaps – Offline navigieren mit Datenschutz
|
||||
@@ -1,11 +1,5 @@
|
||||
A community-led free & open source maps app based on OpenStreetMap data and reinforced with commitment to transparency, privacy and being not-for-profit. CoMaps is a fork/spin-off of Organic Maps, which in turn is a fork of Maps.ME.
|
||||
|
||||
Read on about reasons for the project and its direction at <b><i>codeberg.org/comaps</i></b>.
|
||||
Join the community there and help make the best maps app
|
||||
• Use the app and spread the word about it
|
||||
• Give feedback and report issues
|
||||
• Update map data in the app or on the OpenStreetMap website
|
||||
|
||||
‣ <b>Offline-focused</b>: Plan and navigate your trip abroad without the need for cellular service, search waypoints while on a distant hike, etc. All app functions are designed to work offline.
|
||||
‣ <b>Respecting Privacy</b>: The app is designed with privacy in mind - does not identify people, does not track, and does not collect personal information. Ads-free.
|
||||
‣ <b>Simple and Polished</b>: essential easy to use features that just work.
|
||||
@@ -14,19 +8,21 @@ Join the community there and help make the best maps app
|
||||
‣ <b>Open and Transparent Decision-making and Financials, Not-for-profit and Fully Open Source.</b>
|
||||
|
||||
<b>Main Features</b>:
|
||||
• Downloadable detailed maps with places which are not available with Google Maps
|
||||
• Outdoor mode with highlighted hiking trails, campsites, water sources, peaks, contour lines, etc
|
||||
• Walking paths and cycleways
|
||||
• Points of interest like restaurants, gas stations, hotels, shops, sightseeings and many more
|
||||
• Search by name or an address or by point of interest category
|
||||
• Navigation with voice announcements for walking, cycling, or driving
|
||||
• Bookmark your favorite places with a single tap
|
||||
• Offline Wikipedia articles
|
||||
• Subway transit layer and directions
|
||||
• Track recording
|
||||
• Export and import bookmarks and tracks in KML, KMZ, GPX formats
|
||||
• A dark mode to use during the night
|
||||
• Improve map data for everyone using a basic built-in editor
|
||||
<ul>
|
||||
<li>Downloadable detailed maps with places which are not available with Google Maps</li>
|
||||
<li>Outdoor mode with highlighted hiking trails, campsites, water sources, peaks, contour lines, etc</li>
|
||||
<li>Walking paths and cycleways</li>
|
||||
<li>Points of interest like restaurants, gas stations, hotels, shops, sightseeings and many more</li>
|
||||
<li>Search by name or an address or by point of interest category</li>
|
||||
<li>Navigation with voice announcements for walking, cycling, or driving</li>
|
||||
<li>Bookmark your favorite places with a single tap</li>
|
||||
<li>Offline Wikipedia articles</li>
|
||||
<li>Subway transit layer and directions</li>
|
||||
<li>Track recording</li>
|
||||
<li>Export and import bookmarks and tracks in KML, KMZ, GPX formats</li>
|
||||
<li>A dark mode to use during the night</li>
|
||||
<li>Improve map data for everyone using a basic built-in editor</li>
|
||||
<li>Android Auto and CarPlay support</li>
|
||||
</ul>
|
||||
|
||||
<b>Freedom Is Here</b>
|
||||
Discover your journey, navigate the world with privacy and community at the forefront!
|
||||
<i>Freedom Is Here - Discover your journey, navigate the world with privacy and community at the forefront!</i>
|
||||
|
||||
|
Before Width: | Height: | Size: 249 KiB |
BIN
android/app/src/fdroid/play/listings/en-US/graphics/icon/1.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 747 KiB |
|
Before Width: | Height: | Size: 628 KiB |
|
After Width: | Height: | Size: 749 KiB |
|
Before Width: | Height: | Size: 532 KiB |
|
After Width: | Height: | Size: 730 KiB |
|
Before Width: | Height: | Size: 391 KiB |