Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
289 commits
Select commit Hold shift + click to select a range
1d55a53
Merge pull request #137 from traccar/dependabot/pub/firebase_core-4.4.0
tananaev Jan 20, 2026
eb4b96c
Merge pull request #138 from traccar/dependabot/pub/firebase_analytic…
tananaev Jan 20, 2026
f789d43
Bump firebase_messaging from 16.1.0 to 16.1.1
dependabot[bot] Jan 20, 2026
4c228be
Merge pull request #136 from traccar/dependabot/pub/firebase_messagin…
tananaev Jan 20, 2026
9c50a3e
Bump firebase_crashlytics from 5.0.6 to 5.0.7
dependabot[bot] Jan 20, 2026
7b99e4b
Merge pull request #139 from traccar/dependabot/pub/firebase_crashlyt…
tananaev Jan 20, 2026
d5e6d2b
Update files
tananaev Jan 21, 2026
f9b1bee
Bump shared_preferences_android from 2.4.18 to 2.4.20
dependabot[bot] Jan 27, 2026
9acd8e6
Merge pull request #140 from traccar/dependabot/pub/shared_preference…
tananaev Jan 27, 2026
9a549f2
Bump flutter_background_geolocation from 5.0.1 to 5.0.2
dependabot[bot] Jan 29, 2026
b3f33c1
Merge pull request #141 from traccar/dependabot/pub/flutter_backgroun…
tananaev Jan 29, 2026
9fa8dae
Update app version
tananaev Jan 29, 2026
e8d0081
Update app version
tananaev Jan 29, 2026
6e8a494
Update dependencies
tananaev Jan 29, 2026
2e9b1f1
Bump flutter_background_geolocation from 5.0.2 to 5.0.3
dependabot[bot] Jan 30, 2026
b3907d0
Merge pull request #142 from traccar/dependabot/pub/flutter_backgroun…
tananaev Feb 1, 2026
930fc53
Use regular storage for pass
tananaev Feb 1, 2026
3015d2d
Update dependencies
tananaev Feb 1, 2026
785ccad
Update app version
tananaev Feb 1, 2026
020e265
Remove unnecessary file
tananaev Feb 3, 2026
ac91613
Add await and logs
tananaev Feb 3, 2026
bfc35aa
Update app version
tananaev Feb 3, 2026
79cc43d
Add QR scanner torch control using MobileScannerController
r4khul Feb 4, 2026
fc640ea
Remove torchState variable in ValueListenableBuilder
r4khul Feb 4, 2026
c143f22
Merge pull request #143 from r4khul/feat/flash
tananaev Feb 4, 2026
c4f7ae2
Initialize firebase and log
tananaev Feb 6, 2026
933930e
Update app compat version
tananaev Feb 6, 2026
b98e85c
Update Android dependencies
tananaev Feb 6, 2026
85230d8
Update app version
tananaev Feb 6, 2026
35f7029
Init preferences once
tananaev Feb 8, 2026
774ccb1
Remove unnecessary breaks
tananaev Feb 8, 2026
0bf43c1
Update app version
tananaev Feb 8, 2026
8b480a9
Bump firebase_analytics from 12.1.1 to 12.1.2
dependabot[bot] Feb 10, 2026
a569c4d
Merge pull request #145 from traccar/dependabot/pub/firebase_analytic…
tananaev Feb 10, 2026
5ebcfac
Improve permission denied error handling by providing direct access t…
r4khul Feb 4, 2026
6d0ed73
Simplfy errorBuilder widget with pre-existing localized strings
r4khul Feb 10, 2026
5577b8a
Merge pull request #144 from r4khul/feat/permission
tananaev Feb 10, 2026
6cb5227
Temporary snapshot maven
tananaev Feb 13, 2026
e637f73
Update app version
tananaev Feb 13, 2026
6bd94cf
Update app version
tananaev Feb 15, 2026
a7a34ff
Extend permission denied handling functionality to location toggle tr…
r4khul Feb 14, 2026
e309a77
Check permission denial using background geolocation provider state i…
r4khul Feb 14, 2026
fcbdea0
Inline permission status check in catch block and remove _isPermissio…
r4khul Feb 15, 2026
1eb191b
Merge pull request #146 from r4khul/feat/location-permission
tananaev Feb 15, 2026
7b314e0
Update background location SDK
tananaev Feb 17, 2026
43a5355
Bump mobile_scanner from 7.1.4 to 7.2.0
dependabot[bot] Feb 19, 2026
fd6d11e
Merge pull request #147 from traccar/dependabot/pub/mobile_scanner-7.2.0
tananaev Feb 19, 2026
10bb643
Update app version
tananaev Feb 20, 2026
4819578
Update iOS project files
tananaev Feb 20, 2026
cf385de
Remove migration code
tananaev Feb 21, 2026
16e41e8
Update app version
tananaev Feb 21, 2026
4d38ab9
Improve firebase init
tananaev Feb 22, 2026
6e3532f
Update app version
tananaev Feb 22, 2026
9ba5716
Android only params
tananaev Feb 22, 2026
116283a
iOS config only
tananaev Feb 22, 2026
1552bbe
Bump flutter_background_geolocation from 5.0.4 to 5.0.5
dependabot[bot] Feb 23, 2026
c15dce3
Merge pull request #149 from traccar/dependabot/pub/flutter_backgroun…
tananaev Feb 23, 2026
7b317de
Bump shared_preferences_android from 2.4.20 to 2.4.21
dependabot[bot] Feb 27, 2026
e910a3f
Merge pull request #150 from traccar/dependabot/pub/shared_preference…
tananaev Feb 27, 2026
2936a9d
Pin library version
tananaev Feb 28, 2026
03092df
Update app version
tananaev Feb 28, 2026
2860302
Update Java version
tananaev Feb 28, 2026
7f9e97c
Bump firebase_core from 4.4.0 to 4.5.0
dependabot[bot] Mar 3, 2026
413362e
Merge pull request #151 from traccar/dependabot/pub/firebase_core-4.5.0
tananaev Mar 3, 2026
aa89a91
Bump firebase_messaging from 16.1.1 to 16.1.2
dependabot[bot] Mar 3, 2026
0c0bcf9
Merge pull request #154 from traccar/dependabot/pub/firebase_messagin…
tananaev Mar 3, 2026
9aa7169
Bump firebase_analytics from 12.1.2 to 12.1.3
dependabot[bot] Mar 3, 2026
36a23cb
Merge pull request #152 from traccar/dependabot/pub/firebase_analytic…
tananaev Mar 3, 2026
9a8215b
Bump firebase_crashlytics from 5.0.7 to 5.0.8
dependabot[bot] Mar 3, 2026
e12ca98
Merge pull request #153 from traccar/dependabot/pub/firebase_crashlyt…
tananaev Mar 3, 2026
633813c
Fix default URL
tananaev Mar 6, 2026
2816445
Update dependencies
tananaev Mar 7, 2026
c5a1a9b
Update app version
tananaev Mar 7, 2026
a490331
Update app version
tananaev Mar 14, 2026
7c762ce
Add disclosure
tananaev Mar 16, 2026
427a7d9
Inline disclosure
tananaev Mar 16, 2026
a5a7dee
Update version code
tananaev Mar 16, 2026
56c6c7a
Update translations
Mar 16, 2026
448c745
Bump firebase_core from 4.5.0 to 4.6.0
dependabot[bot] Mar 24, 2026
17c6736
Merge pull request #159 from traccar/dependabot/pub/firebase_core-4.6.0
tananaev Mar 24, 2026
56154cb
Bump firebase_analytics from 12.1.3 to 12.2.0
dependabot[bot] Mar 24, 2026
934dd15
Merge pull request #160 from traccar/dependabot/pub/firebase_analytic…
tananaev Mar 24, 2026
9b2c3a3
Bump firebase_messaging from 16.1.2 to 16.1.3
dependabot[bot] Mar 24, 2026
0e0e15e
Merge pull request #157 from traccar/dependabot/pub/firebase_messagin…
tananaev Mar 24, 2026
953cfe5
Bump firebase_crashlytics from 5.0.8 to 5.1.0
dependabot[bot] Mar 24, 2026
1206f64
Merge pull request #158 from traccar/dependabot/pub/firebase_crashlyt…
tananaev Mar 24, 2026
4be33dd
Fix Android themes
tananaev Mar 25, 2026
0205a0d
Update app version
tananaev Mar 25, 2026
13af82f
Update translations
Mar 25, 2026
b03ba52
Update project files
tananaev Mar 25, 2026
18d8f1c
Update package files
tananaev Mar 25, 2026
e0b92c9
Bump shared_preferences from 2.5.4 to 2.5.5
dependabot[bot] Mar 26, 2026
37cc963
Merge pull request #161 from traccar/dependabot/pub/shared_preference…
tananaev Mar 26, 2026
166bf7a
Bump shared_preferences_android from 2.4.21 to 2.4.23
dependabot[bot] Mar 26, 2026
1ae3dcc
Merge pull request #162 from traccar/dependabot/pub/shared_preference…
tananaev Mar 26, 2026
a0f5d4b
Bump flutter_background_geolocation from 5.0.5 to 5.0.7
dependabot[bot] Mar 27, 2026
d45f0ed
Merge pull request #163 from traccar/dependabot/pub/flutter_backgroun…
tananaev Mar 27, 2026
cc1669a
Add iOS shortcuts (fix #134)
tananaev Apr 1, 2026
76de75d
Enable start on boot for iOS
tananaev Apr 1, 2026
bc6d190
Update dependencies
tananaev Apr 3, 2026
b7c57e0
Do not reset on launch
tananaev Apr 4, 2026
3d82f3d
Update app version
tananaev Apr 4, 2026
37a3d57
Set reset when needed
tananaev Apr 4, 2026
cd8a85a
Update build code
tananaev Apr 4, 2026
d2b81a5
Bump flutter_background_geolocation from 5.0.7 to 5.1.0
dependabot[bot] Apr 8, 2026
6245918
Merge pull request #167 from traccar/dependabot/pub/flutter_backgroun…
tananaev Apr 8, 2026
d66e80b
Remove logback workaround issue
tananaev Apr 8, 2026
05c3fd5
Bump flutter_background_geolocation from 5.1.0 to 5.1.1
dependabot[bot] Apr 13, 2026
0e7608a
Merge pull request #168 from traccar/dependabot/pub/flutter_backgroun…
tananaev Apr 13, 2026
dfb5081
Bump firebase_core from 4.6.0 to 4.7.0
dependabot[bot] Apr 14, 2026
51b9a2b
Merge pull request #171 from traccar/dependabot/pub/firebase_core-4.7.0
tananaev Apr 14, 2026
c309b37
Bump firebase_messaging from 16.1.3 to 16.2.0
dependabot[bot] Apr 14, 2026
e4d8539
Merge pull request #169 from traccar/dependabot/pub/firebase_messagin…
tananaev Apr 14, 2026
17b0451
Bump firebase_analytics from 12.2.0 to 12.3.0
dependabot[bot] Apr 14, 2026
254ea4d
Merge pull request #172 from traccar/dependabot/pub/firebase_analytic…
tananaev Apr 14, 2026
5b52919
Bump firebase_crashlytics from 5.1.0 to 5.2.0
dependabot[bot] Apr 14, 2026
af82958
Merge pull request #170 from traccar/dependabot/pub/firebase_crashlyt…
tananaev Apr 14, 2026
94f670f
Bump flutter_background_geolocation from 5.1.1 to 5.1.2
dependabot[bot] Apr 21, 2026
8d7e6d7
Merge pull request #173 from traccar/dependabot/pub/flutter_backgroun…
tananaev Apr 21, 2026
561aadb
Update translations
Apr 21, 2026
f9cce76
Update project files
tananaev Apr 22, 2026
8ae1337
Update version code
tananaev Apr 22, 2026
0658a95
Bump rate_my_app from 2.3.2 to 2.4.0
dependabot[bot] May 4, 2026
3213733
Merge pull request #174 from traccar/dependabot/pub/rate_my_app-2.4.0
tananaev May 4, 2026
02c7f62
Bump flutter_secure_storage from 10.0.0 to 10.1.0
dependabot[bot] May 7, 2026
9023575
Merge pull request #175 from traccar/dependabot/pub/flutter_secure_st…
tananaev May 7, 2026
1002914
Bump firebase_core from 4.7.0 to 4.8.0
dependabot[bot] May 12, 2026
c0fd797
Bump flutter_secure_storage from 10.1.0 to 10.2.0
dependabot[bot] May 12, 2026
c7b3368
Merge pull request #176 from traccar/dependabot/pub/firebase_core-4.8.0
tananaev May 12, 2026
e5f8aaa
Merge pull request #179 from traccar/dependabot/pub/flutter_secure_st…
tananaev May 12, 2026
dcd8ee4
Bump firebase_core from 4.8.0 to 4.9.0
dependabot[bot] May 15, 2026
c9f5d8b
Bump flutter_background_geolocation from 5.1.2 to 5.2.0
dependabot[bot] May 15, 2026
247b237
Merge pull request #184 from traccar/dependabot/pub/firebase_core-4.9.0
tananaev May 15, 2026
ec329c7
Merge pull request #185 from traccar/dependabot/pub/flutter_backgroun…
tananaev May 15, 2026
4542320
Bump firebase_messaging from 16.2.1 to 16.2.2
dependabot[bot] May 15, 2026
575a941
Merge pull request #181 from traccar/dependabot/pub/firebase_messagin…
tananaev May 15, 2026
f888a1d
Bump firebase_crashlytics from 5.2.1 to 5.2.2
dependabot[bot] May 15, 2026
c7214ac
Merge pull request #182 from traccar/dependabot/pub/firebase_crashlyt…
tananaev May 15, 2026
b2c8b42
Bump firebase_analytics from 12.4.0 to 12.4.1
dependabot[bot] May 15, 2026
c8e4ee9
Merge pull request #183 from traccar/dependabot/pub/firebase_analytic…
tananaev May 15, 2026
b19dbc4
All release workflow
tananaev May 17, 2026
0cd7755
Update pubspec lock
tananaev May 17, 2026
71b9335
Update app version
tananaev May 17, 2026
de24cd1
Stop tracking pubspec.lock and ios/Podfile.lock
tananaev May 17, 2026
81f094a
Auto-expire release artifacts after one day (#186)
tananaev May 18, 2026
45ca013
Install flutterfire CLI in iOS build job (#187)
tananaev May 18, 2026
7635cfa
Add manual trigger option
tananaev May 18, 2026
213343a
Fix iOS build issue
tananaev May 18, 2026
734ec24
Fix iOS release
tananaev May 18, 2026
9cb36f8
Try another release fix
tananaev May 18, 2026
04eb003
Try codemagic-cli-tools
tananaev May 18, 2026
c067558
Another iOS release attempt
tananaev May 18, 2026
24e83a4
Fix certificate key
tananaev May 18, 2026
426b95f
Try another iOS fix
tananaev May 18, 2026
4c81a66
Another iOS release attempt
tananaev May 18, 2026
f103261
Another release fix
tananaev May 18, 2026
d701430
Another fix attempt
tananaev May 18, 2026
b1be113
Use latest MacOS for jobs
tananaev May 18, 2026
8633076
Minor workflow cleanup
tananaev May 18, 2026
659310c
Update release workflow
tananaev May 18, 2026
23558b0
Add configuration confirmation
tananaev May 21, 2026
988505c
Update translations
May 22, 2026
e75baaa
Update app version
tananaev May 22, 2026
65d5242
Migrate to our own SDK
tananaev May 30, 2026
aa37480
Update iOS project
tananaev May 31, 2026
3134552
Fix Siri shortcuts after SDK migration
tananaev May 31, 2026
1d935a3
Update SDK version
tananaev May 31, 2026
e60455a
Improve logs formatting
tananaev May 31, 2026
ad5df63
Update SDK version
tananaev Jun 1, 2026
2ae3f63
Bump share_plus from 11.1.0 to 13.1.0 (#189)
dependabot[bot] Jun 1, 2026
2bdca62
Regularly refresh logs
tananaev Jun 1, 2026
d95e096
Update SDK version
tananaev Jun 19, 2026
bf71922
Update SDK version
tananaev Jun 20, 2026
e70a178
Update SDK version
tananaev Jun 20, 2026
1e7b94a
No wait for token upload
tananaev Jun 20, 2026
526bb2e
Update app version
tananaev Jun 20, 2026
033ddfc
Update SDK version
tananaev Jun 21, 2026
33619e5
Support SOS shortcut
tananaev Jun 21, 2026
1c7ab8f
Update SDK version
tananaev Jun 22, 2026
34435ef
Bring back heartbeat support
tananaev Jun 23, 2026
c9ecdc3
Update build code
tananaev Jun 23, 2026
244f9f3
Update release workflow
tananaev Jun 23, 2026
925374c
Revert "Update release workflow"
tananaev Jun 23, 2026
0dd66cd
Update SDK and build code
tananaev Jun 24, 2026
8d1dbb7
Fix configuration deeplink
tananaev Jun 24, 2026
1cd103b
Fix double link handing
tananaev Jun 25, 2026
50cab69
Update app version
tananaev Jul 5, 2026
3f721cd
Update SDK version
tananaev Jul 7, 2026
8c8f849
Update app version
tananaev Jul 7, 2026
a8d4229
Fix mapping upload
tananaev Jul 7, 2026
51a2b1d
Fix dart error capture
tananaev Jul 7, 2026
f6a724d
Upload iOS symbols
tananaev Jul 7, 2026
c63503e
Revert iOS flag
tananaev Jul 7, 2026
0177c84
Update SDK version
tananaev Jul 7, 2026
3332dbd
Update app version
tananaev Jul 7, 2026
dcd1c9e
Add dsyms upload
tananaev Jul 8, 2026
8a27c5b
Fix rate dialog crash
tananaev Jul 8, 2026
b3b2de3
Remove unused import
tananaev Jul 8, 2026
1703947
Disable default deep links
tananaev Jul 8, 2026
6a953b6
Handle legacy configuration
tananaev Jul 8, 2026
931259e
Handle missing permissions
tananaev Jul 8, 2026
2c8a8e9
Handle missing permissions
tananaev Jul 8, 2026
c0177f5
Handle empty logs
tananaev Jul 8, 2026
cfc0565
Safer logs screen
tananaev Jul 8, 2026
24fc013
Fix release workflow
tananaev Jul 8, 2026
92b55db
Update SDK version
tananaev Jul 9, 2026
46ba281
Update app version
tananaev Jul 9, 2026
d6ab05f
Always show distance
tananaev Jul 9, 2026
2d363cd
Fix locked actions (fix #199)
tananaev Jul 10, 2026
a913cf2
Rename notification icon
tananaev Jul 10, 2026
05b9f33
Update SDK version
tananaev Jul 10, 2026
bcffce0
Update app version
tananaev Jul 10, 2026
909094e
Update SDK version
tananaev Jul 11, 2026
1ef04da
Update app version
tananaev Jul 11, 2026
f661a83
Update SDK version
tananaev Jul 14, 2026
fcab16f
Update app version
tananaev Jul 14, 2026
1d6335a
Fix firebase dependency
tananaev Jul 14, 2026
66afcbe
Bump app_settings from 7.0.0 to 8.0.0 (#203)
dependabot[bot] Jul 17, 2026
ea091d5
Update SDK version
tananaev Jul 19, 2026
1a217e1
Update app version
tananaev Jul 19, 2026
23a77ae
Update project file
tananaev Jul 25, 2026
8cd9c44
Remove cocoapods
tananaev Aug 8, 2026
3664f13
Update dependencies
tananaev Aug 8, 2026
24d9007
Update app version
tananaev Aug 8, 2026
355e097
Bump flutter_secure_storage from 10.3.1 to 11.0.0 (#206)
dependabot[bot] Aug 10, 2026
a0727e3
Update translations
Aug 10, 2026
096ac0a
Update app version
tananaev Aug 10, 2026
7464f02
Fix localization script
tananaev Aug 12, 2026
005e354
Update translations
Aug 12, 2026
0bdfc59
Update SDK version
tananaev Aug 12, 2026
7b27df5
Update app version
tananaev Aug 12, 2026
24cb26c
Update SDK version
tananaev Aug 13, 2026
5f6d576
Update app version
tananaev Aug 13, 2026
f699c24
Update android plugin
tananaev Aug 13, 2026
5062bc6
Update app code
tananaev Aug 13, 2026
90693e8
Support MDM managed configuration
tananaev Aug 15, 2026
3e4ebef
Refresh screen on deeplink (fix #209)
tananaev Aug 15, 2026
0242bc2
Update app version
tananaev Aug 15, 2026
e150af4
Update app version
tananaev Aug 19, 2026
8697b13
Bump app_settings from 8.0.3 to 9.0.0 (#210)
dependabot[bot] Aug 20, 2026
e17d831
Update dependencies
tananaev Aug 20, 2026
ebcb085
Add SOS button
tananaev Aug 20, 2026
2c5cd8f
Update app version
tananaev Aug 22, 2026
f355a9e
Update readme file
tananaev Aug 31, 2026
838652c
Update app version
tananaev Aug 31, 2026
5137c8e
Update readme file
tananaev Sep 1, 2026
320d9d9
Update readme file
tananaev Sep 1, 2026
ead1dab
Export logs as file
tananaev Sep 4, 2026
61c094b
Add location to heartbeat (fix #197)
tananaev Sep 5, 2026
29d9417
Update app version
tananaev Sep 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added .github/screenshot.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
242 changes: 242 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,242 @@
name: Release

on:
push:
tags: ['v*']
workflow_dispatch:
inputs:
platform:
description: Platforms to publish
type: choice
options: [both, android, ios]
default: both

env:
IOS_BUNDLE_ID: org.traccar.client.TraccarClient

jobs:
build-android:
if: ${{ github.event_name == 'push' || inputs.platform != 'ios' }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6

- uses: actions/setup-java@v5
with:
distribution: temurin
java-version: 17

- uses: subosito/flutter-action@v2
with:
channel: stable
cache: true

- name: Prepare keystore + key.properties
env:
KEYSTORE_BASE64: ${{ secrets.RELEASE_KEYSTORE_BASE64 }}
STORE_PASSWORD: ${{ secrets.RELEASE_KEYSTORE_PASSWORD }}
KEY_PASSWORD: ${{ secrets.RELEASE_KEY_PASSWORD }}
KEY_ALIAS: ${{ secrets.RELEASE_KEY_ALIAS }}
run: |
mkdir -p "$RUNNER_WORKSPACE/environment"
echo "$KEYSTORE_BASE64" | base64 -d > "$RUNNER_WORKSPACE/environment/android.keystore"
cat > "$RUNNER_WORKSPACE/environment/key.properties" <<EOF
storePassword=$STORE_PASSWORD
keyPassword=$KEY_PASSWORD
keyAlias=$KEY_ALIAS
storeFile=../../../environment/android.keystore
EOF

- name: Build APK
run: |
flutter pub get
flutter build apk --release

- uses: actions/upload-artifact@v5
with:
name: android-release
path: |
build/app/outputs/flutter-apk/app-release.apk
build/app/outputs/mapping/release/mapping.txt
if-no-files-found: error
retention-days: 1

smoke-test-android:
needs: build-android
runs-on: ubuntu-latest
steps:
- name: Enable KVM
run: |
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
sudo udevadm control --reload-rules
sudo udevadm trigger --name-match=kvm

- uses: actions/download-artifact@v5
with:
name: android-release
path: .

- name: Launch emulator and verify app starts
uses: reactivecircus/android-emulator-runner@v2
with:
api-level: 34
target: google_apis
arch: x86_64
profile: pixel_6
disable-animations: true
script: |
adb wait-for-device
adb install -r flutter-apk/app-release.apk
adb shell am start -W -n org.traccar.client/org.traccar.client.MainActivity
sleep 10
adb shell screencap -p /sdcard/launch.png
adb pull /sdcard/launch.png launch.png
adb shell pidof org.traccar.client > /dev/null || { echo "App process not running after launch — crashed."; exit 1; }

- uses: actions/upload-artifact@v5
with:
name: launch-screenshot
path: launch.png
if-no-files-found: error

publish-android:
needs: smoke-test-android
runs-on: ubuntu-latest
steps:
- uses: actions/download-artifact@v5
with:
name: android-release
path: .

- name: Upload to Google Play (production)
uses: r0adkll/upload-google-play@v1
with:
serviceAccountJsonPlainText: ${{ secrets.PLAY_SERVICE_ACCOUNT_JSON }}
packageName: org.traccar.client
releaseFiles: flutter-apk/app-release.apk
mappingFile: mapping/release/mapping.txt
track: production
status: completed

build-ios:
if: ${{ github.event_name == 'push' || inputs.platform != 'android' }}
runs-on: macos-26
steps:
- uses: actions/checkout@v6

- uses: subosito/flutter-action@v2
with:
channel: stable
cache: true

- name: Install flutterfire CLI
run: dart pub global activate flutterfire_cli

- name: Install codemagic-cli-tools
run: pip3 install --break-system-packages codemagic-cli-tools

- name: Initialize signing keychain
env:
KEYCHAIN_PASSWORD: ${{ secrets.IOS_KEYCHAIN_PASSWORD }}
run: keychain initialize --password "$KEYCHAIN_PASSWORD"

- name: Decode App Store Connect API key
env:
ASC_API_KEY_BASE64: ${{ secrets.ASC_API_KEY_BASE64 }}
run: echo "$ASC_API_KEY_BASE64" | base64 -d > "$RUNNER_TEMP/AuthKey.p8"

- name: Write distribution signing private key
env:
IOS_DIST_PRIVATE_KEY: ${{ secrets.IOS_DIST_PRIVATE_KEY }}
run: printf '%s' "$IOS_DIST_PRIVATE_KEY" > "$RUNNER_TEMP/dist_private_key.pem"

- name: Fetch signing files from App Store Connect
env:
APP_STORE_CONNECT_KEY_IDENTIFIER: ${{ secrets.ASC_KEY_ID }}
APP_STORE_CONNECT_ISSUER_ID: ${{ secrets.ASC_ISSUER_ID }}
run: |
app-store-connect fetch-signing-files "$IOS_BUNDLE_ID" \
--type IOS_APP_STORE \
--private-key "@file:$RUNNER_TEMP/AuthKey.p8" \
--certificate-key "@file:$RUNNER_TEMP/dist_private_key.pem" \
--create

- name: Install certificates into keychain
run: keychain add-certificates

- name: Apply profiles to Xcode project and generate ExportOptions.plist
working-directory: ios
run: xcode-project use-profiles --export-options-plist "$RUNNER_TEMP/ExportOptions.plist"

- name: Archive and export IPA
run: |
flutter pub get
flutter build ios --release --no-codesign
ARCHIVE_PATH="$RUNNER_TEMP/Runner.xcarchive"
EXPORT_PATH="$RUNNER_TEMP/ipa"
cd ios
xcodebuild \
-workspace Runner.xcworkspace \
-scheme Runner \
-configuration Release \
-archivePath "$ARCHIVE_PATH" \
archive
xcodebuild \
-exportArchive \
-archivePath "$ARCHIVE_PATH" \
-exportPath "$EXPORT_PATH" \
-exportOptionsPlist "$RUNNER_TEMP/ExportOptions.plist"

- name: Upload dSYMs to Crashlytics
run: |
UPLOAD_SYMBOLS=$(find build/ios/SourcePackages/checkouts -name upload-symbols -type f | head -1)
"$UPLOAD_SYMBOLS" \
-gsp ios/Runner/GoogleService-Info.plist \
-p ios \
"$RUNNER_TEMP/Runner.xcarchive/dSYMs"

- uses: actions/upload-artifact@v5
with:
name: ios-ipa
path: ${{ runner.temp }}/ipa/*.ipa
if-no-files-found: error
retention-days: 1

publish-ios:
needs: build-ios
runs-on: macos-26
steps:
- uses: actions/download-artifact@v5
with:
name: ios-ipa
path: ipa

- name: Upload to App Store Connect
env:
ASC_API_KEY_BASE64: ${{ secrets.ASC_API_KEY_BASE64 }}
ASC_KEY_ID: ${{ secrets.ASC_KEY_ID }}
ASC_ISSUER_ID: ${{ secrets.ASC_ISSUER_ID }}
run: |
mkdir -p ~/.appstoreconnect/private_keys
echo "$ASC_API_KEY_BASE64" | base64 -d > "$HOME/.appstoreconnect/private_keys/AuthKey_${ASC_KEY_ID}.p8"
IPA=$(ls ipa/*.ipa | head -n 1)
xcrun altool --upload-app -t ios -f "$IPA" \
--apiKey "$ASC_KEY_ID" \
--apiIssuer "$ASC_ISSUER_ID"

release-github:
needs: [publish-android, publish-ios]
if: github.event_name == 'push'
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/download-artifact@v5
with:
name: android-release
path: .

- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
files: flutter-apk/app-release.apk
2 changes: 1 addition & 1 deletion .github/workflows/translation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
for f in lib/l10n/*.arb; do
[[ $f == */app_en.arb ]] && continue
diff -q "$f" lib/l10n/app_en.arb && continue
git diff --quiet -- "$f" || git add "$f"
git add "$f"
done
git diff --cached --quiet || git commit -m "Update translations"
git push
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ migrate_working_dir/
.pub-cache/
.pub/
/build/
pubspec.lock
ios/Podfile.lock

# Symbolication related
app.*.symbols
Expand Down
33 changes: 18 additions & 15 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
# [Traccar Client app](https://www.traccar.org/client)

[![Get it on Google Play](http://www.tananaev.com/badges/google-play.svg)](https://play.google.com/store/apps/details?id=org.traccar.client) [![Download on the App Store](http://www.tananaev.com/badges/app-store.svg)](https://itunes.apple.com/app/traccar-client/id843156974)
[![Get it on Google Play](https://www.tananaev.com/badges/google-play.svg)](https://play.google.com/store/apps/details?id=org.traccar.client) [![Download on the App Store](https://www.tananaev.com/badges/app-store.svg)](https://itunes.apple.com/app/traccar-client/id843156974)

## Overview

Traccar Client is a GPS tracking app for Android and iOS. It runs in the background and sends location updates to your own server using the open-source Traccar platform.
Traccar Client is a GPS tracking app for Android and iOS. It runs in the background and sends location updates to your own server running [Traccar](https://github.com/traccar/traccar), the open-source GPS tracking platform.

- **Real-time Tracking**: See your device’s location on your private server in real time.
- **Open-Source**: 100% free and open-source, with no ads or tracking.
Expand All @@ -14,22 +14,25 @@ Traccar Client is a GPS tracking app for Android and iOS. It runs in the backgro

Just enter your server address, grant location permissions, and the app will automatically send periodic location reports in the background.

## Team
Don't have a Traccar server yet? [Try the live demo](https://www.traccar.org/demo-server/) or see the [installation guides](https://www.traccar.org/install-vps/) to set up your own for free.

- Anton Tananaev ([anton@traccar.org](mailto:anton@traccar.org))
| Client App |
|---|
| <img src=".github/screenshot.png" alt="Traccar Client app" width="200"> |

## License
## Build

Standard Flutter project:

Apache License, Version 2.0
```shell
flutter pub get
flutter run
```

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
## Team

- Anton Tananaev ([anton@traccar.org](mailto:anton@traccar.org))

http://www.apache.org/licenses/LICENSE-2.0
## License

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Apache License, Version 2.0. See [LICENSE.txt](https://github.com/traccar/traccar-client/blob/master/LICENSE.txt) for details.
20 changes: 8 additions & 12 deletions android/app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,6 @@ plugins {
id("dev.flutter.flutter-gradle-plugin")
}

val backgroundGeolocation = project(":flutter_background_geolocation")
apply { from("${backgroundGeolocation.projectDir}/background_geolocation.gradle") }

val keystoreProperties = Properties()
val keystorePropertiesFile = rootProject.file("../../environment/key.properties")
if (keystorePropertiesFile.exists()) {
Expand All @@ -24,22 +21,22 @@ if (keystorePropertiesFile.exists()) {
android {
namespace = "org.traccar.client"
compileSdk = flutter.compileSdkVersion
ndkVersion = "27.0.12077973"
ndkVersion = flutter.ndkVersion

compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}

kotlinOptions {
jvmTarget = JavaVersion.VERSION_11.toString()
jvmTarget = JavaVersion.VERSION_17.toString()
}

defaultConfig {
applicationId = "org.traccar.client"
// You can update the following values to match your application needs.
// For more information, see: https://flutter.dev/to/review-gradle-config.
minSdk = flutter.minSdkVersion
minSdk = 24
targetSdk = flutter.targetSdkVersion
versionCode = flutter.versionCode
versionName = flutter.versionName
Expand All @@ -63,11 +60,10 @@ android {
isShrinkResources = false
}
}
}

dependencies {
implementation("org.slf4j:slf4j-api:2.0.7")
implementation("com.github.tony19:logback-android:3.0.0")
lint {
disable.add("NullSafeMutableLiveData")
}
}

flutter {
Expand Down
7 changes: 5 additions & 2 deletions android/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
<application
tools:replace="android:label"
android:label="Traccar Client"
android:name=".MainApplication"
android:icon="@mipmap/ic_launcher"
android:networkSecurityConfig="@xml/network_security_config">
<activity
Expand All @@ -25,6 +24,10 @@
android:name="io.flutter.embedding.android.NormalTheme"
android:resource="@style/NormalTheme"
/>
<meta-data
android:name="flutter_deeplinking_enabled"
android:value="false"
/>
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
Expand All @@ -44,7 +47,7 @@
<!-- flutter_background_geolocation license -->
<meta-data
android:name="com.transistorsoft.locationmanager.license"
android:value="ddc599599cddaa61dfe5bb25c2b46f549c6d749fae5d0273297b304753e2e5e3" />
android:value="eyJhbGciOiJFZERTQSIsImtpZCI6ImVkMjU1MTktbWFpbi12MSJ9.eyJvcyI6ImFuZHJvaWQiLCJhcHBfaWQiOiJvcmcudHJhY2Nhci5jbGllbnQiLCJvcmRlcl9udW1iZXIiOjE0MDgzLCJyZW5ld2FsX3VybCI6Imh0dHBzOi8vc2hvcC50cmFuc2lzdG9yc29mdC5jb20vY2FydC8zMTg3NDM1NjA1MjA3MToxP25vdGU9OTQ2MSIsImN1c3RvbWVyX2lkIjo4NjE1LCJwcm9kdWN0IjoiZmx1dHRlci1iYWNrZ3JvdW5kLWdlb2xvY2F0aW9uIiwia2V5X3ZlcnNpb24iOjEsImFsbG93ZWRfc3VmZml4ZXMiOlsiLmRldiIsIi5kZXZlbG9wbWVudCIsIi5zdGFnaW5nIiwiLnN0YWdlIiwiLnFhIiwiLnVhdCIsIi50ZXN0IiwiLmRlYnVnIl0sIm1heF9idWlsZF9zdGFtcCI6MjAyNjA3MDYsImdyYWNlX2J1aWxkcyI6MCwiZW50aXRsZW1lbnRzIjpbImNvcmUiXSwiaWF0IjoxNzY1NjQyNzI2fQ.ufcC9IUak4MD7lcbB2CXIIaXHzo1xUauHIFcqyC7onBUxFcpcg2LihIk7cJGFsA_FhsHjRfkSzqQFweD1gdiCA" />
</application>
<!-- Required to query activities that can process text, see:
https://developer.android.com/training/package-visibility and
Expand Down
Loading