├── .github
└── ISSUE_TEMPLATE
│ ├── bug_report.md
│ └── feature_request.md
├── .gitignore
├── .pubignore
├── CHANGELOG.md
├── ISSUE_TEMPLATE.md
├── LICENSE
├── README.md
├── android
├── .gitignore
├── build.gradle
├── gradle.properties
├── gradle
│ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── libs
│ └── com
│ │ └── transistorsoft
│ │ └── tsfirebaseproxy
│ │ ├── 0.1.1
│ │ ├── tsfirebaseproxy-0.1.1.aar
│ │ ├── tsfirebaseproxy-0.1.1.aar.md5
│ │ ├── tsfirebaseproxy-0.1.1.aar.sha1
│ │ ├── tsfirebaseproxy-0.1.1.aar.sha256
│ │ ├── tsfirebaseproxy-0.1.1.aar.sha512
│ │ ├── tsfirebaseproxy-0.1.1.pom
│ │ ├── tsfirebaseproxy-0.1.1.pom.md5
│ │ ├── tsfirebaseproxy-0.1.1.pom.sha1
│ │ ├── tsfirebaseproxy-0.1.1.pom.sha256
│ │ └── tsfirebaseproxy-0.1.1.pom.sha512
│ │ └── maven-metadata.xml
├── settings.gradle
└── src
│ └── main
│ ├── AndroidManifest.xml
│ └── java
│ └── com
│ └── transistorsoft
│ └── flutter
│ └── backgroundgeolocation
│ ├── BackgroundGeolocationFirebaseModule.java
│ └── BackgroundGeolocationFirebasePlugin.java
├── example
├── .gitignore
├── .metadata
├── README.md
├── android
│ ├── .gitignore
│ ├── app
│ │ ├── build.gradle
│ │ └── src
│ │ │ ├── debug
│ │ │ └── AndroidManifest.xml
│ │ │ ├── main
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── kotlin
│ │ │ │ └── com
│ │ │ │ │ └── transistorsoft
│ │ │ │ │ └── flutter
│ │ │ │ │ └── backgroundgeolocation
│ │ │ │ │ └── backgroundgeolocationfirebaseexample
│ │ │ │ │ └── MainActivity.kt
│ │ │ └── res
│ │ │ │ ├── drawable
│ │ │ │ └── launch_background.xml
│ │ │ │ ├── mipmap-hdpi
│ │ │ │ └── ic_launcher.png
│ │ │ │ ├── mipmap-mdpi
│ │ │ │ └── ic_launcher.png
│ │ │ │ ├── mipmap-xhdpi
│ │ │ │ └── ic_launcher.png
│ │ │ │ ├── mipmap-xxhdpi
│ │ │ │ └── ic_launcher.png
│ │ │ │ ├── mipmap-xxxhdpi
│ │ │ │ └── ic_launcher.png
│ │ │ │ └── values
│ │ │ │ └── styles.xml
│ │ │ └── profile
│ │ │ └── AndroidManifest.xml
│ ├── build.gradle
│ ├── gradle.properties
│ ├── gradle
│ │ └── wrapper
│ │ │ └── gradle-wrapper.properties
│ └── settings.gradle
├── ios
│ ├── .gitignore
│ ├── Flutter
│ │ ├── AppFrameworkInfo.plist
│ │ ├── Debug.xcconfig
│ │ └── Release.xcconfig
│ ├── Podfile
│ ├── Podfile.lock
│ ├── Runner.xcodeproj
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ │ └── WorkspaceSettings.xcsettings
│ │ └── xcshareddata
│ │ │ └── xcschemes
│ │ │ └── Runner.xcscheme
│ ├── Runner.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── WorkspaceSettings.xcsettings
│ └── Runner
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets
│ │ ├── AppIcon.appiconset
│ │ │ ├── Contents.json
│ │ │ ├── Icon-App-1024x1024@1x.png
│ │ │ ├── Icon-App-20x20@1x.png
│ │ │ ├── Icon-App-20x20@2x.png
│ │ │ ├── Icon-App-20x20@3x.png
│ │ │ ├── Icon-App-29x29@1x.png
│ │ │ ├── Icon-App-29x29@2x.png
│ │ │ ├── Icon-App-29x29@3x.png
│ │ │ ├── Icon-App-40x40@1x.png
│ │ │ ├── Icon-App-40x40@2x.png
│ │ │ ├── Icon-App-40x40@3x.png
│ │ │ ├── Icon-App-60x60@2x.png
│ │ │ ├── Icon-App-60x60@3x.png
│ │ │ ├── Icon-App-76x76@1x.png
│ │ │ ├── Icon-App-76x76@2x.png
│ │ │ └── Icon-App-83.5x83.5@2x.png
│ │ └── LaunchImage.imageset
│ │ │ ├── Contents.json
│ │ │ ├── LaunchImage.png
│ │ │ ├── LaunchImage@2x.png
│ │ │ ├── LaunchImage@3x.png
│ │ │ └── README.md
│ │ ├── Base.lproj
│ │ ├── LaunchScreen.storyboard
│ │ └── Main.storyboard
│ │ ├── Info.plist
│ │ └── Runner-Bridging-Header.h
├── lib
│ └── main.dart
├── pubspec.yaml
└── test
│ └── widget_test.dart
├── help
├── INSTALL-ANDROID.md
└── INSTALL-IOS.md
├── ios
├── .gitignore
├── Assets
│ └── .gitkeep
├── Classes
│ ├── BackgroundGeolocationFirebasePlugin.h
│ └── BackgroundGeolocationFirebasePlugin.m
└── background_geolocation_firebase.podspec
├── lib
└── background_geolocation_firebase.dart
├── pubspec.yaml
└── scripts
├── logcat
└── simulate-fetch
/.github/ISSUE_TEMPLATE/bug_report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug report
3 | about: Create a report to help us improve
4 | title: "[BUG]"
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Your Environment**
11 | * Plugin version:
12 | * Platform: iOS or Android
13 | * OS version:
14 | * Device manufacturer / model:
15 | * Flutter info (`flutter info`, `flutter doctor`):
16 | * Plugin config
17 |
18 | **To Reproduce**
19 | Steps to reproduce the behavior:
20 | 1.
21 | 2.
22 | 3.
23 | 4.
24 |
25 | **Debug logs**
26 | - ios XCode logs,
27 | - Android: `$ adb logcat`
28 |
29 | **Additional context**
30 | Add any other context about the problem here.
31 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature request
3 | about: Suggest an idea for this project
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Is your feature request related to a problem? Please describe.**
11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
12 |
13 | **Describe the solution you'd like**
14 | A clear and concise description of what you want to happen.
15 |
16 | **Describe alternatives you've considered**
17 | A clear and concise description of any alternative solutions or features you've considered.
18 |
19 | **Additional context**
20 | Add any other context or screenshots about the feature request here.
21 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | .atom/
3 | .dart_tool/
4 | .idea
5 | .packages
6 | packages
7 | *.iml
8 | ios/.generated
9 | .gradle
10 | .pub/
11 | pubspec.lock
12 | doc/
13 | build/
14 | example/android/app/google-services.json
15 | example/ios/Runner/GoogleService-Info.plist
16 |
--------------------------------------------------------------------------------
/.pubignore:
--------------------------------------------------------------------------------
1 | example
2 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # CHANGELOG
2 |
3 | ## 1.1.0 - 2024-10-16
4 | * Update Firebase/Firestore dependencies for both iOS and Android.
5 | * [Android] Update Gradle config. Add required `namespace` attribute.
6 | * [Android] Introduce new Gradle `ext.FirebaseSDKVersion` param for controlling / aligning the imported version of Firebase SDK with other libraries.
7 |
8 | ## 1.0.1 - 2023-08-20
9 | * [Android] Update example gradle version. Update plugin default firebaseCoreVersion, firestoreVersion to latest versions.
10 |
11 | ## 1.0.0 - 2021-09-21
12 | * [Fixed][Android] Update Android plugin to V2 spec.
13 |
14 | ## 1.0.0-nullsafety.1 - 2021-05-07
15 | * [Changed] Add nullsafety support
16 |
17 | ## 0.2.0 - 2020-07-13
18 | * [Fixed][Android] `com.android.tools.build:gradle:4.0.0` no longer allows "*direct local aar dependencies*". The Android Setup now requires a custom __`maven url`__ to be added to your app's root __`android/build.gradle`__:
19 |
20 | ```diff
21 | allprojects {
22 | repositories {
23 | google()
24 | jcenter()
25 | + maven {
26 | + // [required] background_geolocation_firebase
27 | + url "${project(':background_geolocation_firebase').projectDir}/libs"
28 | + }
29 | }
30 | }
31 | ```
32 |
33 | ## 0.1.0 — 2019-08-20
34 | * Release to pub.dev
35 |
36 | ## 0.0.2 — 2019-05-24
37 | * [Fixed] Android issue not registering plugin in terminated state.
38 |
39 | ## 0.0.1 — 2019-05-23
40 |
41 | * First working implementation
42 |
--------------------------------------------------------------------------------
/ISSUE_TEMPLATE.md:
--------------------------------------------------------------------------------
1 |
8 |
9 |
12 | ## Your Environment
13 | * Plugin version:
14 | * Platform: iOS or Android
15 | * OS version:
16 | * Device manufacturer / model:
17 | * Flutter info (`flutter doctor`):
18 | * Plugin config:
19 | ```dart <-- Syntax highlighting: DO NOT REMOVE -->
20 | PASTE_YOUR_CODE_HERE
21 | ```
22 |
23 | ## Expected Behavior
24 |
25 |
26 | ## Actual Behavior
27 |
28 |
29 | ## Steps to Reproduce
30 |
31 | 1.
32 | 2.
33 | 3.
34 | 4.
35 |
36 | ## Context
37 |
38 |
39 | ## Debug logs
40 |
45 |
46 | Logs
47 |
48 | ```
49 | PASTE_YOUR_LOGS_HERE
50 | ```
51 |
52 |
53 |
54 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2018 Transistor Software
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | `background_geolocation_firebase`
2 | ============================================================================
3 |
4 | [](https://www.transistorsoft.com)
5 |
6 | -------------------------------------------------------------------------------
7 |
8 | Firebase Proxy for [Flutter Background Geolocation](https://github.com/transistorsoft/flutter_background_geolocation). The plugin will automatically post locations to your own Firestore database, overriding the `flutter_background_geolocation` plugin's SQLite / HTTP services.
9 |
10 | 
11 |
12 | ----------------------------------------------------------------------------
13 |
14 | The **[Android module](https://shop.transistorsoft.com/collections/frontpage/products/background-geolocation-firebase)** requires [purchasing a license](https://shop.transistorsoft.com/collections/frontpage/products/background-geolocation-firebase). However, it *will* work for **DEBUG** builds. It will **not** work with **RELEASE** builds [without purchasing a license](https://shop.transistorsoft.com/collections/frontpage/products/background-geolocation-firebase).
15 |
16 | ----------------------------------------------------------------------------
17 |
18 | # Contents
19 |
20 | - ### :books: [API Documentation](https://pub.dartlang.org/documentation/background_geolocation_firebase/latest/background_geolocation_firebase/BackgroundGeolocationFirebase-class.html)
21 | - ### [Installing the Plugin](#large_blue_diamond-installing-the-plugin)
22 | - ### [Setup Guides](#large_blue_diamond-setup-guides)
23 | - ### [Configuration Options](#large_blue_diamond-configuration-options)
24 | - ### [Example](#large_blue_diamond-example)
25 | - ### [Demo Application](./example)
26 |
27 |
28 | ## :large_blue_diamond: Installing the Plugin
29 |
30 | :open_file_folder: **`pubspec.yaml`**:
31 |
32 | ```yaml
33 | dependencies:
34 | background_geolocation_firebase: '^0.1.0'
35 | ```
36 |
37 | ### Or latest from Git:
38 |
39 | ```yaml
40 | dependencies:
41 | background_geolocation_firebase:
42 | git:
43 | url: https://github.com/transistorsoft/flutter_background_geolocation_firebase
44 | ```
45 |
46 | ## :large_blue_diamond: Setup Guides
47 |
48 | - [iOS](./help/INSTALL-IOS.md)
49 | - [Android](./help/INSTALL-ANDROID.md)
50 |
51 |
52 | ## :large_blue_diamond: Example
53 |
54 | ```dart
55 | import 'dart:async';
56 | import 'package:flutter/material.dart';
57 | import 'package:flutter/services.dart';
58 |
59 | import 'package:background_geolocation_firebase/background_geolocation_firebase.dart';
60 | import 'package:flutter_background_geolocation/flutter_background_geolocation.dart' as bg;
61 |
62 | void main() {
63 | runApp(new MyApp());
64 | }
65 |
66 | class MyApp extends StatefulWidget {
67 | @override
68 | _MyAppState createState() => new _MyAppState();
69 | }
70 |
71 | class _MyAppState extends State {
72 |
73 | @override
74 | void initState() {
75 | super.initState();
76 | initPlatformState();
77 | }
78 |
79 | // Platform messages are asynchronous, so we initialize in an async method.
80 | Future initPlatformState() async {
81 |
82 | // 1. First configure the Firebase Adapter.
83 | BackgroundGeolocationFirebase.configure(BackgroundGeolocationFirebaseConfig(
84 | locationsCollection: "locations",
85 | geofencesCollection: "geofences",
86 | updateSingleDocument: false
87 | ));
88 |
89 | // 2. Configure BackgroundGeolocation as usual.
90 | bg.BackgroundGeolocation.onLocation((bg.Location location) {
91 | print('[location] $location');
92 | });
93 |
94 | bg.BackgroundGeolocation.ready(bg.Config(
95 | debug: true,
96 | logLevel: bg.Config.LOG_LEVEL_VERBOSE,
97 | stopOnTerminate: false,
98 | startOnBoot: true
99 | )).then((bg.State state) {
100 | if (!state.enabled) {
101 | bg.BackgroundGeolocation.start();
102 | }
103 | });
104 |
105 | // If the widget was removed from the tree while the asynchronous platform
106 | // message was in flight, we want to discard the reply rather than calling
107 | // setState to update our non-existent appearance.
108 | if (!mounted) return;
109 | }
110 |
111 | @override
112 | Widget build(BuildContext context) {
113 | return new MaterialApp(
114 | home: new Scaffold(
115 | appBar: new AppBar(
116 | title: const Text('BGGeo Firebase Example', style: TextStyle(color: Colors.black)),
117 | backgroundColor: Colors.amberAccent,
118 | brightness: Brightness.light,
119 |
120 | ),
121 | body: Text("BGGeo Firebase")
122 | ),
123 | );
124 | }
125 | }
126 | ```
127 |
128 | ## :large_blue_diamond: Firebase Functions
129 |
130 | `BackgroundGeolocation` will post its [default "Location Data Schema"](https://github.com/transistorsoft/flutter_background_geolocation/wiki/Location-Data-Schema) to your Firebase app.
131 |
132 | ```json
133 | {
134 | "location":{},
135 | "param1": "param 1",
136 | "param2": "param 2"
137 | }
138 | ```
139 |
140 | You should implement your own [Firebase Functions](https://firebase.google.com/docs/functions) to "*massage*" the incoming data in your collection as desired. For example:
141 |
142 | ```typescript
143 | import * as functions from 'firebase-functions';
144 |
145 | exports.createLocation = functions.firestore
146 | .document('locations/{locationId}')
147 | .onCreate((snap, context) => {
148 | const record = snap.data();
149 |
150 | const location = record.location;
151 |
152 | console.log('[data] - ', record);
153 |
154 | return snap.ref.set({
155 | uuid: location.uuid,
156 | timestamp: location.timestamp,
157 | is_moving: location.is_moving,
158 | latitude: location.coords.latitude,
159 | longitude: location.coords.longitude,
160 | speed: location.coords.speed,
161 | heading: location.coords.heading,
162 | altitude: location.coords.altitude,
163 | event: location.event,
164 | battery_is_charging: location.battery.is_charging,
165 | battery_level: location.battery.level,
166 | activity_type: location.activity.type,
167 | activity_confidence: location.activity.confidence,
168 | extras: location.extras
169 | });
170 | });
171 |
172 |
173 | exports.createGeofence = functions.firestore
174 | .document('geofences/{geofenceId}')
175 | .onCreate((snap, context) => {
176 | const record = snap.data();
177 |
178 | const location = record.location;
179 |
180 | console.log('[data] - ', record);
181 |
182 | return snap.ref.set({
183 | uuid: location.uuid,
184 | identifier: location.geofence.identifier,
185 | action: location.geofence.action,
186 | timestamp: location.timestamp,
187 | latitude: location.coords.latitude,
188 | longitude: location.coords.longitude,
189 | extras: location.extras,
190 | });
191 | });
192 |
193 | ```
194 |
195 | ## :large_blue_diamond: Configuration Options
196 |
197 | #### `@param {String} locationsCollection [locations]`
198 |
199 | The collection name to post `location` events to. Eg:
200 |
201 | ```javascript
202 | BackgroundGeolocationFirebase.configure(BackgroundGeolocationFirebaseConfig(
203 | locationsCollection: '/locations'
204 | ));
205 |
206 | BackgroundGeolocationFirebase.configure(BackgroundGeolocationFirebaseConfig(
207 | locationsCollection: '/users/123/locations'
208 | ));
209 |
210 | BackgroundGeolocationFirebase.configure(BackgroundGeolocationFirebaseConfig(
211 | locationsCollection: '/users/123/routes/456/locations'
212 | ));
213 |
214 | ```
215 |
216 | #### `@param {String} geofencesCollection [geofences]`
217 |
218 | The collection name to post `geofence` events to. Eg:
219 |
220 | ```javascript
221 | BackgroundGeolocationFirebase.configure(BackgroundGeolocationFirebaseConfig(
222 | geofencesCollection: '/geofences'
223 | ));
224 |
225 | BackgroundGeolocationFirebase.configure(BackgroundGeolocationFirebaseConfig(
226 | locationsCollection: '/users/123/geofences'
227 | ));
228 |
229 | BackgroundGeolocationFirebase.configure(BackgroundGeolocationFirebaseConfig(
230 | locationsCollection: '/users/123/routes/456/geofences'
231 | ));
232 |
233 | ```
234 |
235 |
236 | #### `@param {Boolean} updateSingleDocument [false]`
237 |
238 | If you prefer, you can instruct the plugin to update a *single document* in Firebase rather than creating a new document for *each* `location` / `geofence`. In this case, you would presumably implement a *Firebase Function* to deal with updates upon this single document and store the location in some other collection as desired. If this is your use-case, you'll also need to ensure you configure your `locationsCollection` / `geofencesCollection` accordingly with an even number of "parts", taking the form `/collection_name/document_id`, eg:
239 |
240 | ```javascript
241 | BackgroundGeolocationFirebase.configure(BackgroundGeolocationFirebaseConfig(
242 | locationsCollection: '/locations/latest' // <-- 2 "parts": even
243 | ));
244 |
245 | // or
246 | BackgroundGeolocationFirebase.configure(BackgroundGeolocationFirebaseConfig(
247 | locationsCollection: '/users/123/routes/456/the_location' // <-- 4 "parts": even
248 | ));
249 |
250 | // Don't use an odd number of "parts"
251 | BackgroundGeolocationFirebase.configure(BackgroundGeolocationFirebaseConfig(
252 | locationsCollection: '/users/123/latest_location' // <-- 3 "parts": odd!! No!
253 | ));
254 |
255 | ```
256 |
257 |
258 | # License
259 |
260 | The MIT License (MIT)
261 |
262 | Copyright (c) 2018 Chris Scott, Transistor Software
263 |
264 | Permission is hereby granted, free of charge, to any person obtaining a copy
265 | of this software and associated documentation files (the "Software"), to deal
266 | in the Software without restriction, including without limitation the rights
267 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
268 | copies of the Software, and to permit persons to whom the Software is
269 | furnished to do so, subject to the following conditions:
270 |
271 | The above copyright notice and this permission notice shall be included in all
272 | copies or substantial portions of the Software.
273 |
274 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
275 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
276 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
277 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
278 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
279 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
280 | SOFTWARE.
281 |
282 |
283 |
--------------------------------------------------------------------------------
/android/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | /local.properties
4 | /.idea/workspace.xml
5 | /.idea/libraries
6 | .DS_Store
7 | /build
8 | /captures
9 |
--------------------------------------------------------------------------------
/android/build.gradle:
--------------------------------------------------------------------------------
1 | group 'com.transistorsoft.flutter.backgroundgeolocation'
2 | version '1.0-SNAPSHOT'
3 |
4 | rootProject.allprojects {
5 | repositories {
6 | google()
7 | mavenCentral()
8 | }
9 | }
10 |
11 | apply plugin: 'com.android.library'
12 |
13 | def DEFAULT_COMPILE_SDK_VERSION = 34
14 | def DEFAULT_FIREBASE_SDK_VERSION = "33.4.0"
15 | def DEFAULT_LOGBACK_VERSION = "3.0.0"
16 | def DEFAULT_SLF4J_VERSION = "2.0.7"
17 |
18 | def safeExtGet(prop, fallback) {
19 | rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback
20 | }
21 |
22 | android {
23 | if (project.android.hasProperty("namespace")) {
24 | namespace("com.transistorsoft.flutter.backgroundgeolocation.firebase")
25 | }
26 | compileSdkVersion safeExtGet('compileSdkVersion', DEFAULT_COMPILE_SDK_VERSION)
27 |
28 | defaultConfig {
29 | minSdkVersion 16
30 | testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
31 | }
32 | lintOptions {
33 | disable 'InvalidPackage'
34 | }
35 | }
36 |
37 | repositories {
38 | maven {
39 | url './libs'
40 | }
41 | }
42 |
43 | dependencies {
44 | def FirebaseSDKVersion = safeExtGet("FirebaseSDKVersion", DEFAULT_FIREBASE_SDK_VERSION);
45 |
46 | def logbackVersion = safeExtGet('logbackVersion', DEFAULT_LOGBACK_VERSION);
47 | def slf4jVersion = safeExtGet('slf4jVersion', DEFAULT_SLF4J_VERSION);
48 |
49 | api(group: 'com.transistorsoft', name:'tsfirebaseproxy', version: '+')
50 | implementation 'org.greenrobot:eventbus:3.3.1'
51 | // Import the Firebase BoM
52 | implementation(platform("com.google.firebase:firebase-bom:$FirebaseSDKVersion"))
53 | implementation "com.google.firebase:firebase-firestore"
54 |
55 | implementation "org.slf4j:slf4j-api:$slf4jVersion"
56 | implementation "com.github.tony19:logback-android:$logbackVersion"
57 | }
58 |
--------------------------------------------------------------------------------
/android/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx1536M
2 | android.enableJetifier=true
3 | android.useAndroidX=true
4 |
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/transistorsoft/flutter_background_geolocation_firebase/71e2423dffd512814107151f193421d2f3990ae3/android/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 |
--------------------------------------------------------------------------------
/android/gradlew:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env sh
2 |
3 | ##############################################################################
4 | ##
5 | ## Gradle start up script for UN*X
6 | ##
7 | ##############################################################################
8 |
9 | # Attempt to set APP_HOME
10 | # Resolve links: $0 may be a link
11 | PRG="$0"
12 | # Need this for relative symlinks.
13 | while [ -h "$PRG" ] ; do
14 | ls=`ls -ld "$PRG"`
15 | link=`expr "$ls" : '.*-> \(.*\)$'`
16 | if expr "$link" : '/.*' > /dev/null; then
17 | PRG="$link"
18 | else
19 | PRG=`dirname "$PRG"`"/$link"
20 | fi
21 | done
22 | SAVED="`pwd`"
23 | cd "`dirname \"$PRG\"`/" >/dev/null
24 | APP_HOME="`pwd -P`"
25 | cd "$SAVED" >/dev/null
26 |
27 | APP_NAME="Gradle"
28 | APP_BASE_NAME=`basename "$0"`
29 |
30 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
31 | DEFAULT_JVM_OPTS=""
32 |
33 | # Use the maximum available, or set MAX_FD != -1 to use that value.
34 | MAX_FD="maximum"
35 |
36 | warn () {
37 | echo "$*"
38 | }
39 |
40 | die () {
41 | echo
42 | echo "$*"
43 | echo
44 | exit 1
45 | }
46 |
47 | # OS specific support (must be 'true' or 'false').
48 | cygwin=false
49 | msys=false
50 | darwin=false
51 | nonstop=false
52 | case "`uname`" in
53 | CYGWIN* )
54 | cygwin=true
55 | ;;
56 | Darwin* )
57 | darwin=true
58 | ;;
59 | MINGW* )
60 | msys=true
61 | ;;
62 | NONSTOP* )
63 | nonstop=true
64 | ;;
65 | esac
66 |
67 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
68 |
69 | # Determine the Java command to use to start the JVM.
70 | if [ -n "$JAVA_HOME" ] ; then
71 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
72 | # IBM's JDK on AIX uses strange locations for the executables
73 | JAVACMD="$JAVA_HOME/jre/sh/java"
74 | else
75 | JAVACMD="$JAVA_HOME/bin/java"
76 | fi
77 | if [ ! -x "$JAVACMD" ] ; then
78 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
79 |
80 | Please set the JAVA_HOME variable in your environment to match the
81 | location of your Java installation."
82 | fi
83 | else
84 | JAVACMD="java"
85 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
86 |
87 | Please set the JAVA_HOME variable in your environment to match the
88 | location of your Java installation."
89 | fi
90 |
91 | # Increase the maximum file descriptors if we can.
92 | if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
93 | MAX_FD_LIMIT=`ulimit -H -n`
94 | if [ $? -eq 0 ] ; then
95 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
96 | MAX_FD="$MAX_FD_LIMIT"
97 | fi
98 | ulimit -n $MAX_FD
99 | if [ $? -ne 0 ] ; then
100 | warn "Could not set maximum file descriptor limit: $MAX_FD"
101 | fi
102 | else
103 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
104 | fi
105 | fi
106 |
107 | # For Darwin, add options to specify how the application appears in the dock
108 | if $darwin; then
109 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
110 | fi
111 |
112 | # For Cygwin, switch paths to Windows format before running java
113 | if $cygwin ; then
114 | APP_HOME=`cygpath --path --mixed "$APP_HOME"`
115 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
116 | JAVACMD=`cygpath --unix "$JAVACMD"`
117 |
118 | # We build the pattern for arguments to be converted via cygpath
119 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
120 | SEP=""
121 | for dir in $ROOTDIRSRAW ; do
122 | ROOTDIRS="$ROOTDIRS$SEP$dir"
123 | SEP="|"
124 | done
125 | OURCYGPATTERN="(^($ROOTDIRS))"
126 | # Add a user-defined pattern to the cygpath arguments
127 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then
128 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
129 | fi
130 | # Now convert the arguments - kludge to limit ourselves to /bin/sh
131 | i=0
132 | for arg in "$@" ; do
133 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
134 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
135 |
136 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
137 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
138 | else
139 | eval `echo args$i`="\"$arg\""
140 | fi
141 | i=$((i+1))
142 | done
143 | case $i in
144 | (0) set -- ;;
145 | (1) set -- "$args0" ;;
146 | (2) set -- "$args0" "$args1" ;;
147 | (3) set -- "$args0" "$args1" "$args2" ;;
148 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
149 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
150 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
151 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
152 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
153 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
154 | esac
155 | fi
156 |
157 | # Escape application args
158 | save () {
159 | for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
160 | echo " "
161 | }
162 | APP_ARGS=$(save "$@")
163 |
164 | # Collect all arguments for the java command, following the shell quoting and substitution rules
165 | eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
166 |
167 | # by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
168 | if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
169 | cd "$(dirname "$0")"
170 | fi
171 |
172 | exec "$JAVACMD" "$@"
173 |
--------------------------------------------------------------------------------
/android/gradlew.bat:
--------------------------------------------------------------------------------
1 | @if "%DEBUG%" == "" @echo off
2 | @rem ##########################################################################
3 | @rem
4 | @rem Gradle startup script for Windows
5 | @rem
6 | @rem ##########################################################################
7 |
8 | @rem Set local scope for the variables with windows NT shell
9 | if "%OS%"=="Windows_NT" setlocal
10 |
11 | set DIRNAME=%~dp0
12 | if "%DIRNAME%" == "" set DIRNAME=.
13 | set APP_BASE_NAME=%~n0
14 | set APP_HOME=%DIRNAME%
15 |
16 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
17 | set DEFAULT_JVM_OPTS=
18 |
19 | @rem Find java.exe
20 | if defined JAVA_HOME goto findJavaFromJavaHome
21 |
22 | set JAVA_EXE=java.exe
23 | %JAVA_EXE% -version >NUL 2>&1
24 | if "%ERRORLEVEL%" == "0" goto init
25 |
26 | echo.
27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
28 | echo.
29 | echo Please set the JAVA_HOME variable in your environment to match the
30 | echo location of your Java installation.
31 |
32 | goto fail
33 |
34 | :findJavaFromJavaHome
35 | set JAVA_HOME=%JAVA_HOME:"=%
36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
37 |
38 | if exist "%JAVA_EXE%" goto init
39 |
40 | echo.
41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
42 | echo.
43 | echo Please set the JAVA_HOME variable in your environment to match the
44 | echo location of your Java installation.
45 |
46 | goto fail
47 |
48 | :init
49 | @rem Get command-line arguments, handling Windows variants
50 |
51 | if not "%OS%" == "Windows_NT" goto win9xME_args
52 |
53 | :win9xME_args
54 | @rem Slurp the command line arguments.
55 | set CMD_LINE_ARGS=
56 | set _SKIP=2
57 |
58 | :win9xME_args_slurp
59 | if "x%~1" == "x" goto execute
60 |
61 | set CMD_LINE_ARGS=%*
62 |
63 | :execute
64 | @rem Setup the command line
65 |
66 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
67 |
68 | @rem Execute Gradle
69 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
70 |
71 | :end
72 | @rem End local scope for the variables with windows NT shell
73 | if "%ERRORLEVEL%"=="0" goto mainEnd
74 |
75 | :fail
76 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
77 | rem the _cmd.exe /c_ return code!
78 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
79 | exit /b 1
80 |
81 | :mainEnd
82 | if "%OS%"=="Windows_NT" endlocal
83 |
84 | :omega
85 |
--------------------------------------------------------------------------------
/android/libs/com/transistorsoft/tsfirebaseproxy/0.1.1/tsfirebaseproxy-0.1.1.aar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/transistorsoft/flutter_background_geolocation_firebase/71e2423dffd512814107151f193421d2f3990ae3/android/libs/com/transistorsoft/tsfirebaseproxy/0.1.1/tsfirebaseproxy-0.1.1.aar
--------------------------------------------------------------------------------
/android/libs/com/transistorsoft/tsfirebaseproxy/0.1.1/tsfirebaseproxy-0.1.1.aar.md5:
--------------------------------------------------------------------------------
1 | 123fba721976d53c46a6665c42ac919f
--------------------------------------------------------------------------------
/android/libs/com/transistorsoft/tsfirebaseproxy/0.1.1/tsfirebaseproxy-0.1.1.aar.sha1:
--------------------------------------------------------------------------------
1 | 7db05e2d1ff8e5221ad423c6ca6ad9d6fccb804c
--------------------------------------------------------------------------------
/android/libs/com/transistorsoft/tsfirebaseproxy/0.1.1/tsfirebaseproxy-0.1.1.aar.sha256:
--------------------------------------------------------------------------------
1 | b440376956aa9324020fe81e6a0fff43be75507e848dfe462ec7c0c5c4dc1141
--------------------------------------------------------------------------------
/android/libs/com/transistorsoft/tsfirebaseproxy/0.1.1/tsfirebaseproxy-0.1.1.aar.sha512:
--------------------------------------------------------------------------------
1 | 470cf8853e1331fd09079f3875006b1b2149fb8e0393a1bb15b45e423820a0e9cde0390a8680402d6dc50804025fb27a676f332b7f6519d5014670e4bc3cc1ef
--------------------------------------------------------------------------------
/android/libs/com/transistorsoft/tsfirebaseproxy/0.1.1/tsfirebaseproxy-0.1.1.pom:
--------------------------------------------------------------------------------
1 |
2 |
4 | 4.0.0
5 | com.transistorsoft
6 | tsfirebaseproxy
7 | 0.1.1
8 | aar
9 |
10 |
--------------------------------------------------------------------------------
/android/libs/com/transistorsoft/tsfirebaseproxy/0.1.1/tsfirebaseproxy-0.1.1.pom.md5:
--------------------------------------------------------------------------------
1 | ee3966c52628cf18e8ddbf51b69afbef
--------------------------------------------------------------------------------
/android/libs/com/transistorsoft/tsfirebaseproxy/0.1.1/tsfirebaseproxy-0.1.1.pom.sha1:
--------------------------------------------------------------------------------
1 | cec9011d227c085944a513ec822ca9427c9bbfd4
--------------------------------------------------------------------------------
/android/libs/com/transistorsoft/tsfirebaseproxy/0.1.1/tsfirebaseproxy-0.1.1.pom.sha256:
--------------------------------------------------------------------------------
1 | 9b4b176bb5075dcc27c73d2f7e514ef61ca0fdd870c5fed45dc9090a1fba0687
--------------------------------------------------------------------------------
/android/libs/com/transistorsoft/tsfirebaseproxy/0.1.1/tsfirebaseproxy-0.1.1.pom.sha512:
--------------------------------------------------------------------------------
1 | 53a62ba8258927cb111d8d15848ecb6745a50dbfed9fa565906c4bfc215dce63a223f098e03d5723b879b506e81f1e543f898a0feb01ffe5d0eb20331658c4dd
--------------------------------------------------------------------------------
/android/libs/com/transistorsoft/tsfirebaseproxy/maven-metadata.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | com.transistorsoft
4 | tsfirebaseproxy
5 |
6 | 0.1.1
7 | 0.1.1
8 |
9 | 0.1.1
10 |
11 | 20241011154105
12 |
13 |
14 |
--------------------------------------------------------------------------------
/android/settings.gradle:
--------------------------------------------------------------------------------
1 | rootProject.name = 'background_geolocation_firebase'
2 |
--------------------------------------------------------------------------------
/android/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/android/src/main/java/com/transistorsoft/flutter/backgroundgeolocation/BackgroundGeolocationFirebaseModule.java:
--------------------------------------------------------------------------------
1 | package com.transistorsoft.flutter.backgroundgeolocation;
2 |
3 | import android.app.Activity;
4 | import android.content.Context;
5 | import android.util.Log;
6 |
7 | import androidx.annotation.NonNull;
8 |
9 | import com.transistorsoft.tsfirebaseproxy.TSFirebaseProxy;
10 |
11 | import java.util.Map;
12 | import java.util.concurrent.atomic.AtomicBoolean;
13 |
14 | import io.flutter.plugin.common.BinaryMessenger;
15 | import io.flutter.plugin.common.MethodCall;
16 | import io.flutter.plugin.common.MethodChannel;
17 |
18 | public class BackgroundGeolocationFirebaseModule implements MethodChannel.MethodCallHandler {
19 |
20 | private static BackgroundGeolocationFirebaseModule sInstance;
21 |
22 | static BackgroundGeolocationFirebaseModule getInstance() {
23 | if (sInstance == null) {
24 | sInstance = getInstanceSynchronized();
25 | }
26 | return sInstance;
27 | }
28 |
29 | private static synchronized BackgroundGeolocationFirebaseModule getInstanceSynchronized() {
30 | if (sInstance == null) sInstance = new BackgroundGeolocationFirebaseModule();
31 | return sInstance;
32 | }
33 |
34 | public static final String TAG = "TSFirebaseProxy";
35 | static final String PLUGIN_ID = "com.transistorsoft/flutter_background_geolocation_firebase";
36 |
37 | private static final String METHOD_CHANNEL_NAME = PLUGIN_ID + "/methods";
38 |
39 | private Context mContext;
40 | private boolean isRegistered;
41 | private final AtomicBoolean mIsAttachedToEngine = new AtomicBoolean(false);
42 | private MethodChannel mMethodChannel;
43 |
44 | private BackgroundGeolocationFirebaseModule() {
45 |
46 | }
47 |
48 | void onAttachedToEngine(Context context, BinaryMessenger messenger) {
49 | mIsAttachedToEngine.set(true);
50 | mContext = context;
51 |
52 | mMethodChannel = new MethodChannel(messenger, METHOD_CHANNEL_NAME);
53 | mMethodChannel.setMethodCallHandler(this);
54 | }
55 |
56 | void onDetachedFromEngine() {
57 | mIsAttachedToEngine.set(false);
58 | }
59 |
60 | void setActivity(Activity activity) {
61 | if (activity != null) {
62 | // Doing nothing currently.
63 | }
64 | isRegistered = false;
65 | }
66 |
67 | @SuppressWarnings("unchecked")
68 | @Override
69 | public void onMethodCall(MethodCall call, @NonNull MethodChannel.Result result) {
70 | if (call.method.equals("configure")) {
71 | Map params = (Map) call.arguments;
72 | configure(params, result);
73 | } else {
74 | result.notImplemented();
75 | }
76 | }
77 |
78 | private void configure(Map params, @NonNull MethodChannel.Result result) {
79 | TSFirebaseProxy proxy = TSFirebaseProxy.getInstance(mContext);
80 | if (params.containsKey("locationsCollection")) {
81 | proxy.setLocationsCollection((String) params.get("locationsCollection"));
82 | }
83 | if (params.containsKey("geofencesCollection")) {
84 | proxy.setGeofencesCollection((String) params.get("geofencesCollection"));
85 | }
86 | if (params.containsKey("updateSingleDocument")) {
87 | proxy.setUpdateSingleDocument((boolean) params.get("updateSingleDocument"));
88 | }
89 |
90 | proxy.save(mContext);
91 | if (!isRegistered) {
92 | isRegistered = true;
93 | proxy.register(mContext);
94 | }
95 | result.success(true);
96 | }
97 | }
98 |
--------------------------------------------------------------------------------
/android/src/main/java/com/transistorsoft/flutter/backgroundgeolocation/BackgroundGeolocationFirebasePlugin.java:
--------------------------------------------------------------------------------
1 | package com.transistorsoft.flutter.backgroundgeolocation;
2 |
3 | import androidx.annotation.NonNull;
4 | import io.flutter.embedding.engine.plugins.FlutterPlugin;
5 | import io.flutter.embedding.engine.plugins.activity.ActivityAware;
6 | import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding;
7 | import io.flutter.plugin.common.PluginRegistry;
8 | import io.flutter.plugin.common.PluginRegistry.Registrar;
9 |
10 | /** BackgroundFetchPlugin */
11 | public class BackgroundGeolocationFirebasePlugin implements FlutterPlugin, ActivityAware {
12 |
13 | // @deprecated Not used by v2.
14 | public static void registerWith(Registrar registrar) {
15 | BackgroundGeolocationFirebaseModule module = BackgroundGeolocationFirebaseModule.getInstance();
16 | module.onAttachedToEngine(registrar.context(), registrar.messenger());
17 | if (registrar.activity() != null) {
18 | module.setActivity(registrar.activity());
19 | }
20 | }
21 |
22 | // @deprecated Called by Application#onCreate
23 | public static void setPluginRegistrant(PluginRegistry.PluginRegistrantCallback callback) {
24 |
25 | }
26 |
27 | public BackgroundGeolocationFirebasePlugin() { }
28 |
29 | @Override
30 | public void onAttachedToEngine(FlutterPlugin.FlutterPluginBinding binding) {
31 | BackgroundGeolocationFirebaseModule.getInstance().onAttachedToEngine(binding.getApplicationContext(), binding.getBinaryMessenger());
32 | }
33 |
34 | @Override
35 | public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) {
36 | BackgroundGeolocationFirebaseModule.getInstance().onDetachedFromEngine();
37 | }
38 |
39 | @Override
40 | public void onAttachedToActivity(ActivityPluginBinding activityPluginBinding) {
41 | BackgroundGeolocationFirebaseModule.getInstance().setActivity(activityPluginBinding.getActivity());
42 | }
43 |
44 | @Override
45 | public void onDetachedFromActivityForConfigChanges() {
46 | // TODO: the Activity your plugin was attached to was
47 | // destroyed to change configuration.
48 | // This call will be followed by onReattachedToActivityForConfigChanges().
49 | }
50 |
51 | @Override
52 | public void onReattachedToActivityForConfigChanges(@NonNull ActivityPluginBinding activityPluginBinding) {
53 | // TODO: your plugin is now attached to a new Activity
54 | // after a configuration change.
55 | }
56 |
57 | @Override
58 | public void onDetachedFromActivity() {
59 | BackgroundGeolocationFirebaseModule.getInstance().setActivity(null);
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/example/.gitignore:
--------------------------------------------------------------------------------
1 | # Miscellaneous
2 | *.class
3 | *.log
4 | *.pyc
5 | *.swp
6 | .DS_Store
7 | .atom/
8 | .buildlog/
9 | .history
10 | .svn/
11 |
12 | # IntelliJ related
13 | *.iml
14 | *.ipr
15 | *.iws
16 | .idea/
17 |
18 | # The .vscode folder contains launch configuration and tasks you configure in
19 | # VS Code which you may wish to be included in version control, so this line
20 | # is commented out by default.
21 | #.vscode/
22 |
23 | # Flutter/Dart/Pub related
24 | **/doc/api/
25 | .dart_tool/
26 | .flutter-plugins
27 | .flutter-plugins-dependencies
28 | .packages
29 | .pub-cache/
30 | .pub/
31 | /build/
32 |
33 | # Web related
34 | lib/generated_plugin_registrant.dart
35 |
36 | # Symbolication related
37 | app.*.symbols
38 |
39 | # Obfuscation related
40 | app.*.map.json
41 |
42 | # Exceptions to above rules.
43 | !/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
44 |
--------------------------------------------------------------------------------
/example/.metadata:
--------------------------------------------------------------------------------
1 | # This file tracks properties of this Flutter project.
2 | # Used by Flutter tool to assess capabilities and perform upgrades etc.
3 | #
4 | # This file should be version controlled and should not be manually edited.
5 |
6 | version:
7 | revision: 8af6b2f038c1172e61d418869363a28dffec3cb4
8 | channel: stable
9 |
10 | project_type: app
11 |
--------------------------------------------------------------------------------
/example/README.md:
--------------------------------------------------------------------------------
1 | # backgroundgeolocationfirebaseexample
2 |
3 | A new Flutter project.
4 |
5 | ## Getting Started
6 |
7 | This project is a starting point for a Flutter application.
8 |
9 | A few resources to get you started if this is your first Flutter project:
10 |
11 | - [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab)
12 | - [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook)
13 |
14 | For help getting started with Flutter, view our
15 | [online documentation](https://flutter.dev/docs), which offers tutorials,
16 | samples, guidance on mobile development, and a full API reference.
17 |
--------------------------------------------------------------------------------
/example/android/.gitignore:
--------------------------------------------------------------------------------
1 | gradle-wrapper.jar
2 | /.gradle
3 | /captures/
4 | /gradlew
5 | /gradlew.bat
6 | /local.properties
7 | GeneratedPluginRegistrant.java
8 |
--------------------------------------------------------------------------------
/example/android/app/build.gradle:
--------------------------------------------------------------------------------
1 | plugins {
2 | id "com.android.application"
3 | id "kotlin-android"
4 | id "dev.flutter.flutter-gradle-plugin"
5 | id "com.google.gms.google-services"
6 | }
7 |
8 | def localProperties = new Properties()
9 | def localPropertiesFile = rootProject.file('local.properties')
10 | if (localPropertiesFile.exists()) {
11 | localPropertiesFile.withReader('UTF-8') { reader ->
12 | localProperties.load(reader)
13 | }
14 | }
15 |
16 | def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
17 | if (flutterVersionCode == null) {
18 | flutterVersionCode = '1'
19 | }
20 |
21 | def flutterVersionName = localProperties.getProperty('flutter.versionName')
22 | if (flutterVersionName == null) {
23 | flutterVersionName = '1.0'
24 | }
25 |
26 | def keystoreProperties = new Properties()
27 | def keystorePropertiesFile = rootProject.file('key.properties')
28 | if (keystorePropertiesFile.exists()) {
29 | keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
30 | }
31 |
32 | // flutter_background_geolocation
33 | Project background_geolocation = project(':flutter_background_geolocation')
34 | apply from: "${background_geolocation.projectDir}/background_geolocation.gradle"
35 |
36 | android {
37 | if (project.android.hasProperty("namespace")) {
38 | namespace 'com.transistorsoft.flutter.backgroundgeolocation.backgroundgeolocationfirebaseexample'
39 | }
40 | compileSdkVersion rootProject.ext.compileSdkVersion
41 |
42 | ndkVersion flutter.ndkVersion
43 |
44 | compileOptions {
45 | sourceCompatibility JavaVersion.VERSION_1_8
46 | targetCompatibility JavaVersion.VERSION_1_8
47 | }
48 |
49 | kotlinOptions {
50 | jvmTarget = '1.8'
51 | }
52 |
53 | sourceSets {
54 | main.java.srcDirs += 'src/main/kotlin'
55 | }
56 |
57 | defaultConfig {
58 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
59 | applicationId "com.transistorsoft.flutter.backgroundgeolocation.backgroundgeolocationfirebaseexample"
60 | minSdkVersion rootProject.ext.minSdkVersion
61 | targetSdkVersion rootProject.ext.targetSdkVersion
62 | versionCode flutterVersionCode.toInteger()
63 | versionName flutterVersionName
64 | multiDexEnabled true
65 | }
66 |
67 | buildTypes {
68 | release {
69 | // TODO: Add your own signing config for the release build.
70 | // Signing with the debug keys for now, so `flutter run --release` works.
71 | signingConfig signingConfigs.debug
72 | minifyEnabled true
73 | shrinkResources false
74 | proguardFiles "${background_geolocation.projectDir}/proguard-rules.pro"
75 | }
76 | }
77 | compileOptions {
78 | sourceCompatibility JavaVersion.VERSION_11
79 | targetCompatibility JavaVersion.VERSION_11
80 | }
81 | }
82 |
83 | flutter {
84 | source '../..'
85 | }
86 |
--------------------------------------------------------------------------------
/example/android/app/src/debug/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/example/android/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
8 |
13 |
21 |
25 |
29 |
34 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
50 |
53 |
54 |
55 |
--------------------------------------------------------------------------------
/example/android/app/src/main/kotlin/com/transistorsoft/flutter/backgroundgeolocation/backgroundgeolocationfirebaseexample/MainActivity.kt:
--------------------------------------------------------------------------------
1 | package com.transistorsoft.flutter.backgroundgeolocation.backgroundgeolocationfirebaseexample
2 |
3 | import io.flutter.embedding.android.FlutterActivity
4 |
5 | class MainActivity: FlutterActivity() {
6 | }
7 |
--------------------------------------------------------------------------------
/example/android/app/src/main/res/drawable/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/transistorsoft/flutter_background_geolocation_firebase/71e2423dffd512814107151f193421d2f3990ae3/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/transistorsoft/flutter_background_geolocation_firebase/71e2423dffd512814107151f193421d2f3990ae3/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/transistorsoft/flutter_background_geolocation_firebase/71e2423dffd512814107151f193421d2f3990ae3/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/transistorsoft/flutter_background_geolocation_firebase/71e2423dffd512814107151f193421d2f3990ae3/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/transistorsoft/flutter_background_geolocation_firebase/71e2423dffd512814107151f193421d2f3990ae3/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/example/android/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
15 |
18 |
19 |
--------------------------------------------------------------------------------
/example/android/app/src/profile/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/example/android/build.gradle:
--------------------------------------------------------------------------------
1 | ext {
2 | kotlin_version = '1.7.10'
3 | compileSdkVersion = 34
4 | targetSdkVersion = 34
5 | minSdkVersion = 21
6 | playServicesLocationVersion = "21.0.1"
7 | FirebaseSDKVersion = "33.4.0"
8 | }
9 |
10 | allprojects {
11 | repositories {
12 | google()
13 | mavenCentral()
14 | // [required] background_geolocation_firebase
15 | maven { url "${project(':background_geolocation_firebase').projectDir}/libs" }
16 | // [required] flutter_background_geolocation
17 | maven { url "${project(':flutter_background_geolocation').projectDir}/libs" }
18 | maven { url 'https://developer.huawei.com/repo/' }
19 | // [required] background_fetch
20 | maven { url "${project(':background_fetch').projectDir}/libs" }
21 | }
22 | }
23 |
24 | rootProject.buildDir = '../build'
25 | subprojects {
26 | project.buildDir = "${rootProject.buildDir}/${project.name}"
27 | }
28 | subprojects {
29 | project.evaluationDependsOn(':app')
30 | }
31 |
32 | tasks.register("clean", Delete) {
33 | delete rootProject.buildDir
34 | }
35 |
--------------------------------------------------------------------------------
/example/android/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx1536M
2 | android.enableJetifier=true
3 | android.useAndroidX=true
4 | android.enableR8=true
5 | org.gradle.warning.mode=all
6 |
--------------------------------------------------------------------------------
/example/android/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Mon Jul 13 10:09:57 EDT 2020
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip
7 |
--------------------------------------------------------------------------------
/example/android/settings.gradle:
--------------------------------------------------------------------------------
1 | pluginManagement {
2 | def flutterSdkPath = {
3 | def properties = new Properties()
4 | file("local.properties").withInputStream { properties.load(it) }
5 | def flutterSdkPath = properties.getProperty("flutter.sdk")
6 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
7 | return flutterSdkPath
8 | }
9 | settings.ext.flutterSdkPath = flutterSdkPath()
10 |
11 | includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle")
12 |
13 | repositories {
14 | google()
15 | mavenCentral()
16 | gradlePluginPortal()
17 | }
18 | }
19 |
20 | plugins {
21 | id "dev.flutter.flutter-plugin-loader" version "1.0.0"
22 | id "com.android.application" version "7.3.1" apply false
23 | id "org.jetbrains.kotlin.android" version "1.7.10" apply false
24 | id 'com.google.gms.google-services' version '4.3.15' apply false
25 | }
26 |
27 | include ":app"
28 |
--------------------------------------------------------------------------------
/example/ios/.gitignore:
--------------------------------------------------------------------------------
1 | *.mode1v3
2 | *.mode2v3
3 | *.moved-aside
4 | *.pbxuser
5 | *.perspectivev3
6 | **/*sync/
7 | .sconsign.dblite
8 | .tags*
9 | **/.vagrant/
10 | **/DerivedData/
11 | Icon?
12 | **/Pods/
13 | **/.symlinks/
14 | profile
15 | xcuserdata
16 | **/.generated/
17 | Flutter/App.framework
18 | Flutter/Flutter.framework
19 | Flutter/Flutter.podspec
20 | Flutter/Generated.xcconfig
21 | Flutter/app.flx
22 | Flutter/app.zip
23 | Flutter/flutter_assets/
24 | Flutter/flutter_export_environment.sh
25 | ServiceDefinitions.json
26 | Runner/GeneratedPluginRegistrant.*
27 |
28 | # Exceptions to above rules.
29 | !default.mode1v3
30 | !default.mode2v3
31 | !default.pbxuser
32 | !default.perspectivev3
33 |
--------------------------------------------------------------------------------
/example/ios/Flutter/AppFrameworkInfo.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | App
9 | CFBundleIdentifier
10 | io.flutter.flutter.app
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | App
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1.0
23 | MinimumOSVersion
24 | 12.0
25 |
26 |
27 |
--------------------------------------------------------------------------------
/example/ios/Flutter/Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
2 | #include "Generated.xcconfig"
3 |
--------------------------------------------------------------------------------
/example/ios/Flutter/Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
2 | #include "Generated.xcconfig"
3 |
--------------------------------------------------------------------------------
/example/ios/Podfile:
--------------------------------------------------------------------------------
1 | # Uncomment this line to define a global platform for your project
2 | platform :ios, '18.0'
3 |
4 | # CocoaPods analytics sends network stats synchronously affecting flutter build latency.
5 | ENV['COCOAPODS_DISABLE_STATS'] = 'true'
6 |
7 | project 'Runner', {
8 | 'Debug' => :debug,
9 | 'Profile' => :release,
10 | 'Release' => :release,
11 | }
12 |
13 | def flutter_root
14 | generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)
15 | unless File.exist?(generated_xcode_build_settings_path)
16 | raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first"
17 | end
18 |
19 | File.foreach(generated_xcode_build_settings_path) do |line|
20 | matches = line.match(/FLUTTER_ROOT\=(.*)/)
21 | return matches[1].strip if matches
22 | end
23 | raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get"
24 | end
25 |
26 | require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
27 |
28 | flutter_ios_podfile_setup
29 |
30 | target 'Runner' do
31 | use_frameworks!
32 | use_modular_headers!
33 |
34 | flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
35 | #target 'RunnerTests' do
36 | # inherit! :search_paths
37 | #end
38 | end
39 |
40 | post_install do |installer|
41 | installer.pods_project.targets.each do |target|
42 | if target.name == 'BoringSSL-GRPC'
43 | target.source_build_phase.files.each do |file|
44 | if file.settings && file.settings['COMPILER_FLAGS']
45 | flags = file.settings['COMPILER_FLAGS'].split
46 | flags.reject! { |flag| flag == '-GCC_WARN_INHIBIT_ALL_WARNINGS' }
47 | file.settings['COMPILER_FLAGS'] = flags.join(' ')
48 | end
49 | end
50 | end
51 | flutter_additional_ios_build_settings(target)
52 | target.build_configurations.each do |config|
53 | config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '18.0'
54 | end
55 | end
56 | end
57 |
58 |
59 |
60 |
--------------------------------------------------------------------------------
/example/ios/Podfile.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - abseil/algorithm (1.20240116.2):
3 | - abseil/algorithm/algorithm (= 1.20240116.2)
4 | - abseil/algorithm/container (= 1.20240116.2)
5 | - abseil/algorithm/algorithm (1.20240116.2):
6 | - abseil/base/config
7 | - abseil/xcprivacy
8 | - abseil/algorithm/container (1.20240116.2):
9 | - abseil/algorithm/algorithm
10 | - abseil/base/core_headers
11 | - abseil/base/nullability
12 | - abseil/meta/type_traits
13 | - abseil/xcprivacy
14 | - abseil/base (1.20240116.2):
15 | - abseil/base/atomic_hook (= 1.20240116.2)
16 | - abseil/base/base (= 1.20240116.2)
17 | - abseil/base/base_internal (= 1.20240116.2)
18 | - abseil/base/config (= 1.20240116.2)
19 | - abseil/base/core_headers (= 1.20240116.2)
20 | - abseil/base/cycleclock_internal (= 1.20240116.2)
21 | - abseil/base/dynamic_annotations (= 1.20240116.2)
22 | - abseil/base/endian (= 1.20240116.2)
23 | - abseil/base/errno_saver (= 1.20240116.2)
24 | - abseil/base/fast_type_id (= 1.20240116.2)
25 | - abseil/base/log_severity (= 1.20240116.2)
26 | - abseil/base/malloc_internal (= 1.20240116.2)
27 | - abseil/base/no_destructor (= 1.20240116.2)
28 | - abseil/base/nullability (= 1.20240116.2)
29 | - abseil/base/prefetch (= 1.20240116.2)
30 | - abseil/base/pretty_function (= 1.20240116.2)
31 | - abseil/base/raw_logging_internal (= 1.20240116.2)
32 | - abseil/base/spinlock_wait (= 1.20240116.2)
33 | - abseil/base/strerror (= 1.20240116.2)
34 | - abseil/base/throw_delegate (= 1.20240116.2)
35 | - abseil/base/atomic_hook (1.20240116.2):
36 | - abseil/base/config
37 | - abseil/base/core_headers
38 | - abseil/xcprivacy
39 | - abseil/base/base (1.20240116.2):
40 | - abseil/base/atomic_hook
41 | - abseil/base/base_internal
42 | - abseil/base/config
43 | - abseil/base/core_headers
44 | - abseil/base/cycleclock_internal
45 | - abseil/base/dynamic_annotations
46 | - abseil/base/log_severity
47 | - abseil/base/nullability
48 | - abseil/base/raw_logging_internal
49 | - abseil/base/spinlock_wait
50 | - abseil/meta/type_traits
51 | - abseil/xcprivacy
52 | - abseil/base/base_internal (1.20240116.2):
53 | - abseil/base/config
54 | - abseil/meta/type_traits
55 | - abseil/xcprivacy
56 | - abseil/base/config (1.20240116.2):
57 | - abseil/xcprivacy
58 | - abseil/base/core_headers (1.20240116.2):
59 | - abseil/base/config
60 | - abseil/xcprivacy
61 | - abseil/base/cycleclock_internal (1.20240116.2):
62 | - abseil/base/base_internal
63 | - abseil/base/config
64 | - abseil/xcprivacy
65 | - abseil/base/dynamic_annotations (1.20240116.2):
66 | - abseil/base/config
67 | - abseil/base/core_headers
68 | - abseil/xcprivacy
69 | - abseil/base/endian (1.20240116.2):
70 | - abseil/base/base
71 | - abseil/base/config
72 | - abseil/base/core_headers
73 | - abseil/base/nullability
74 | - abseil/xcprivacy
75 | - abseil/base/errno_saver (1.20240116.2):
76 | - abseil/base/config
77 | - abseil/xcprivacy
78 | - abseil/base/fast_type_id (1.20240116.2):
79 | - abseil/base/config
80 | - abseil/xcprivacy
81 | - abseil/base/log_severity (1.20240116.2):
82 | - abseil/base/config
83 | - abseil/base/core_headers
84 | - abseil/xcprivacy
85 | - abseil/base/malloc_internal (1.20240116.2):
86 | - abseil/base/base
87 | - abseil/base/base_internal
88 | - abseil/base/config
89 | - abseil/base/core_headers
90 | - abseil/base/dynamic_annotations
91 | - abseil/base/raw_logging_internal
92 | - abseil/xcprivacy
93 | - abseil/base/no_destructor (1.20240116.2):
94 | - abseil/base/config
95 | - abseil/xcprivacy
96 | - abseil/base/nullability (1.20240116.2):
97 | - abseil/base/core_headers
98 | - abseil/meta/type_traits
99 | - abseil/xcprivacy
100 | - abseil/base/prefetch (1.20240116.2):
101 | - abseil/base/config
102 | - abseil/base/core_headers
103 | - abseil/xcprivacy
104 | - abseil/base/pretty_function (1.20240116.2):
105 | - abseil/xcprivacy
106 | - abseil/base/raw_logging_internal (1.20240116.2):
107 | - abseil/base/atomic_hook
108 | - abseil/base/config
109 | - abseil/base/core_headers
110 | - abseil/base/errno_saver
111 | - abseil/base/log_severity
112 | - abseil/xcprivacy
113 | - abseil/base/spinlock_wait (1.20240116.2):
114 | - abseil/base/base_internal
115 | - abseil/base/core_headers
116 | - abseil/base/errno_saver
117 | - abseil/xcprivacy
118 | - abseil/base/strerror (1.20240116.2):
119 | - abseil/base/config
120 | - abseil/base/core_headers
121 | - abseil/base/errno_saver
122 | - abseil/xcprivacy
123 | - abseil/base/throw_delegate (1.20240116.2):
124 | - abseil/base/config
125 | - abseil/base/raw_logging_internal
126 | - abseil/xcprivacy
127 | - abseil/cleanup/cleanup (1.20240116.2):
128 | - abseil/base/config
129 | - abseil/base/core_headers
130 | - abseil/cleanup/cleanup_internal
131 | - abseil/xcprivacy
132 | - abseil/cleanup/cleanup_internal (1.20240116.2):
133 | - abseil/base/base_internal
134 | - abseil/base/core_headers
135 | - abseil/utility/utility
136 | - abseil/xcprivacy
137 | - abseil/container/common (1.20240116.2):
138 | - abseil/meta/type_traits
139 | - abseil/types/optional
140 | - abseil/xcprivacy
141 | - abseil/container/common_policy_traits (1.20240116.2):
142 | - abseil/meta/type_traits
143 | - abseil/xcprivacy
144 | - abseil/container/compressed_tuple (1.20240116.2):
145 | - abseil/utility/utility
146 | - abseil/xcprivacy
147 | - abseil/container/container_memory (1.20240116.2):
148 | - abseil/base/config
149 | - abseil/memory/memory
150 | - abseil/meta/type_traits
151 | - abseil/utility/utility
152 | - abseil/xcprivacy
153 | - abseil/container/fixed_array (1.20240116.2):
154 | - abseil/algorithm/algorithm
155 | - abseil/base/config
156 | - abseil/base/core_headers
157 | - abseil/base/dynamic_annotations
158 | - abseil/base/throw_delegate
159 | - abseil/container/compressed_tuple
160 | - abseil/memory/memory
161 | - abseil/xcprivacy
162 | - abseil/container/flat_hash_map (1.20240116.2):
163 | - abseil/algorithm/container
164 | - abseil/base/core_headers
165 | - abseil/container/container_memory
166 | - abseil/container/hash_function_defaults
167 | - abseil/container/raw_hash_map
168 | - abseil/memory/memory
169 | - abseil/xcprivacy
170 | - abseil/container/flat_hash_set (1.20240116.2):
171 | - abseil/algorithm/container
172 | - abseil/base/core_headers
173 | - abseil/container/container_memory
174 | - abseil/container/hash_function_defaults
175 | - abseil/container/raw_hash_set
176 | - abseil/memory/memory
177 | - abseil/xcprivacy
178 | - abseil/container/hash_function_defaults (1.20240116.2):
179 | - abseil/base/config
180 | - abseil/hash/hash
181 | - abseil/strings/cord
182 | - abseil/strings/strings
183 | - abseil/xcprivacy
184 | - abseil/container/hash_policy_traits (1.20240116.2):
185 | - abseil/container/common_policy_traits
186 | - abseil/meta/type_traits
187 | - abseil/xcprivacy
188 | - abseil/container/hashtable_debug_hooks (1.20240116.2):
189 | - abseil/base/config
190 | - abseil/xcprivacy
191 | - abseil/container/hashtablez_sampler (1.20240116.2):
192 | - abseil/base/base
193 | - abseil/base/config
194 | - abseil/base/core_headers
195 | - abseil/base/raw_logging_internal
196 | - abseil/debugging/stacktrace
197 | - abseil/memory/memory
198 | - abseil/profiling/exponential_biased
199 | - abseil/profiling/sample_recorder
200 | - abseil/synchronization/synchronization
201 | - abseil/time/time
202 | - abseil/utility/utility
203 | - abseil/xcprivacy
204 | - abseil/container/inlined_vector (1.20240116.2):
205 | - abseil/algorithm/algorithm
206 | - abseil/base/core_headers
207 | - abseil/base/throw_delegate
208 | - abseil/container/inlined_vector_internal
209 | - abseil/memory/memory
210 | - abseil/meta/type_traits
211 | - abseil/xcprivacy
212 | - abseil/container/inlined_vector_internal (1.20240116.2):
213 | - abseil/base/config
214 | - abseil/base/core_headers
215 | - abseil/container/compressed_tuple
216 | - abseil/memory/memory
217 | - abseil/meta/type_traits
218 | - abseil/types/span
219 | - abseil/xcprivacy
220 | - abseil/container/layout (1.20240116.2):
221 | - abseil/base/config
222 | - abseil/base/core_headers
223 | - abseil/debugging/demangle_internal
224 | - abseil/meta/type_traits
225 | - abseil/strings/strings
226 | - abseil/types/span
227 | - abseil/utility/utility
228 | - abseil/xcprivacy
229 | - abseil/container/raw_hash_map (1.20240116.2):
230 | - abseil/base/config
231 | - abseil/base/core_headers
232 | - abseil/base/throw_delegate
233 | - abseil/container/container_memory
234 | - abseil/container/raw_hash_set
235 | - abseil/xcprivacy
236 | - abseil/container/raw_hash_set (1.20240116.2):
237 | - abseil/base/config
238 | - abseil/base/core_headers
239 | - abseil/base/dynamic_annotations
240 | - abseil/base/endian
241 | - abseil/base/prefetch
242 | - abseil/base/raw_logging_internal
243 | - abseil/container/common
244 | - abseil/container/compressed_tuple
245 | - abseil/container/container_memory
246 | - abseil/container/hash_policy_traits
247 | - abseil/container/hashtable_debug_hooks
248 | - abseil/container/hashtablez_sampler
249 | - abseil/hash/hash
250 | - abseil/memory/memory
251 | - abseil/meta/type_traits
252 | - abseil/numeric/bits
253 | - abseil/utility/utility
254 | - abseil/xcprivacy
255 | - abseil/crc/cpu_detect (1.20240116.2):
256 | - abseil/base/base
257 | - abseil/base/config
258 | - abseil/xcprivacy
259 | - abseil/crc/crc32c (1.20240116.2):
260 | - abseil/base/config
261 | - abseil/base/core_headers
262 | - abseil/base/endian
263 | - abseil/base/prefetch
264 | - abseil/crc/cpu_detect
265 | - abseil/crc/crc_internal
266 | - abseil/crc/non_temporal_memcpy
267 | - abseil/strings/str_format
268 | - abseil/strings/strings
269 | - abseil/xcprivacy
270 | - abseil/crc/crc_cord_state (1.20240116.2):
271 | - abseil/base/config
272 | - abseil/crc/crc32c
273 | - abseil/numeric/bits
274 | - abseil/strings/strings
275 | - abseil/xcprivacy
276 | - abseil/crc/crc_internal (1.20240116.2):
277 | - abseil/base/config
278 | - abseil/base/core_headers
279 | - abseil/base/endian
280 | - abseil/base/prefetch
281 | - abseil/base/raw_logging_internal
282 | - abseil/crc/cpu_detect
283 | - abseil/memory/memory
284 | - abseil/numeric/bits
285 | - abseil/xcprivacy
286 | - abseil/crc/non_temporal_arm_intrinsics (1.20240116.2):
287 | - abseil/base/config
288 | - abseil/xcprivacy
289 | - abseil/crc/non_temporal_memcpy (1.20240116.2):
290 | - abseil/base/config
291 | - abseil/base/core_headers
292 | - abseil/crc/non_temporal_arm_intrinsics
293 | - abseil/xcprivacy
294 | - abseil/debugging/debugging_internal (1.20240116.2):
295 | - abseil/base/config
296 | - abseil/base/core_headers
297 | - abseil/base/dynamic_annotations
298 | - abseil/base/errno_saver
299 | - abseil/base/raw_logging_internal
300 | - abseil/xcprivacy
301 | - abseil/debugging/demangle_internal (1.20240116.2):
302 | - abseil/base/base
303 | - abseil/base/config
304 | - abseil/base/core_headers
305 | - abseil/xcprivacy
306 | - abseil/debugging/examine_stack (1.20240116.2):
307 | - abseil/base/config
308 | - abseil/base/core_headers
309 | - abseil/base/raw_logging_internal
310 | - abseil/debugging/stacktrace
311 | - abseil/debugging/symbolize
312 | - abseil/xcprivacy
313 | - abseil/debugging/stacktrace (1.20240116.2):
314 | - abseil/base/config
315 | - abseil/base/core_headers
316 | - abseil/base/dynamic_annotations
317 | - abseil/base/raw_logging_internal
318 | - abseil/debugging/debugging_internal
319 | - abseil/xcprivacy
320 | - abseil/debugging/symbolize (1.20240116.2):
321 | - abseil/base/base
322 | - abseil/base/config
323 | - abseil/base/core_headers
324 | - abseil/base/dynamic_annotations
325 | - abseil/base/malloc_internal
326 | - abseil/base/raw_logging_internal
327 | - abseil/debugging/debugging_internal
328 | - abseil/debugging/demangle_internal
329 | - abseil/strings/strings
330 | - abseil/xcprivacy
331 | - abseil/flags/commandlineflag (1.20240116.2):
332 | - abseil/base/config
333 | - abseil/base/fast_type_id
334 | - abseil/flags/commandlineflag_internal
335 | - abseil/strings/strings
336 | - abseil/types/optional
337 | - abseil/xcprivacy
338 | - abseil/flags/commandlineflag_internal (1.20240116.2):
339 | - abseil/base/config
340 | - abseil/base/fast_type_id
341 | - abseil/xcprivacy
342 | - abseil/flags/config (1.20240116.2):
343 | - abseil/base/config
344 | - abseil/base/core_headers
345 | - abseil/flags/path_util
346 | - abseil/flags/program_name
347 | - abseil/strings/strings
348 | - abseil/synchronization/synchronization
349 | - abseil/xcprivacy
350 | - abseil/flags/flag (1.20240116.2):
351 | - abseil/base/base
352 | - abseil/base/config
353 | - abseil/base/core_headers
354 | - abseil/flags/config
355 | - abseil/flags/flag_internal
356 | - abseil/flags/reflection
357 | - abseil/strings/strings
358 | - abseil/xcprivacy
359 | - abseil/flags/flag_internal (1.20240116.2):
360 | - abseil/base/base
361 | - abseil/base/config
362 | - abseil/base/core_headers
363 | - abseil/base/dynamic_annotations
364 | - abseil/flags/commandlineflag
365 | - abseil/flags/commandlineflag_internal
366 | - abseil/flags/config
367 | - abseil/flags/marshalling
368 | - abseil/flags/reflection
369 | - abseil/memory/memory
370 | - abseil/meta/type_traits
371 | - abseil/strings/strings
372 | - abseil/synchronization/synchronization
373 | - abseil/utility/utility
374 | - abseil/xcprivacy
375 | - abseil/flags/marshalling (1.20240116.2):
376 | - abseil/base/config
377 | - abseil/base/core_headers
378 | - abseil/base/log_severity
379 | - abseil/numeric/int128
380 | - abseil/strings/str_format
381 | - abseil/strings/strings
382 | - abseil/types/optional
383 | - abseil/xcprivacy
384 | - abseil/flags/path_util (1.20240116.2):
385 | - abseil/base/config
386 | - abseil/strings/strings
387 | - abseil/xcprivacy
388 | - abseil/flags/private_handle_accessor (1.20240116.2):
389 | - abseil/base/config
390 | - abseil/flags/commandlineflag
391 | - abseil/flags/commandlineflag_internal
392 | - abseil/strings/strings
393 | - abseil/xcprivacy
394 | - abseil/flags/program_name (1.20240116.2):
395 | - abseil/base/config
396 | - abseil/base/core_headers
397 | - abseil/flags/path_util
398 | - abseil/strings/strings
399 | - abseil/synchronization/synchronization
400 | - abseil/xcprivacy
401 | - abseil/flags/reflection (1.20240116.2):
402 | - abseil/base/config
403 | - abseil/base/core_headers
404 | - abseil/base/no_destructor
405 | - abseil/container/flat_hash_map
406 | - abseil/flags/commandlineflag
407 | - abseil/flags/commandlineflag_internal
408 | - abseil/flags/config
409 | - abseil/flags/private_handle_accessor
410 | - abseil/strings/strings
411 | - abseil/synchronization/synchronization
412 | - abseil/xcprivacy
413 | - abseil/functional/any_invocable (1.20240116.2):
414 | - abseil/base/base_internal
415 | - abseil/base/config
416 | - abseil/base/core_headers
417 | - abseil/meta/type_traits
418 | - abseil/utility/utility
419 | - abseil/xcprivacy
420 | - abseil/functional/bind_front (1.20240116.2):
421 | - abseil/base/base_internal
422 | - abseil/container/compressed_tuple
423 | - abseil/meta/type_traits
424 | - abseil/utility/utility
425 | - abseil/xcprivacy
426 | - abseil/functional/function_ref (1.20240116.2):
427 | - abseil/base/base_internal
428 | - abseil/base/core_headers
429 | - abseil/functional/any_invocable
430 | - abseil/meta/type_traits
431 | - abseil/xcprivacy
432 | - abseil/hash/city (1.20240116.2):
433 | - abseil/base/config
434 | - abseil/base/core_headers
435 | - abseil/base/endian
436 | - abseil/xcprivacy
437 | - abseil/hash/hash (1.20240116.2):
438 | - abseil/base/config
439 | - abseil/base/core_headers
440 | - abseil/base/endian
441 | - abseil/container/fixed_array
442 | - abseil/functional/function_ref
443 | - abseil/hash/city
444 | - abseil/hash/low_level_hash
445 | - abseil/meta/type_traits
446 | - abseil/numeric/bits
447 | - abseil/numeric/int128
448 | - abseil/strings/strings
449 | - abseil/types/optional
450 | - abseil/types/variant
451 | - abseil/utility/utility
452 | - abseil/xcprivacy
453 | - abseil/hash/low_level_hash (1.20240116.2):
454 | - abseil/base/config
455 | - abseil/base/endian
456 | - abseil/base/prefetch
457 | - abseil/numeric/int128
458 | - abseil/xcprivacy
459 | - abseil/log/absl_check (1.20240116.2):
460 | - abseil/log/internal/check_impl
461 | - abseil/xcprivacy
462 | - abseil/log/absl_log (1.20240116.2):
463 | - abseil/log/internal/log_impl
464 | - abseil/xcprivacy
465 | - abseil/log/absl_vlog_is_on (1.20240116.2):
466 | - abseil/base/config
467 | - abseil/base/core_headers
468 | - abseil/log/internal/vlog_config
469 | - abseil/strings/strings
470 | - abseil/xcprivacy
471 | - abseil/log/check (1.20240116.2):
472 | - abseil/log/internal/check_impl
473 | - abseil/log/internal/check_op
474 | - abseil/log/internal/conditions
475 | - abseil/log/internal/log_message
476 | - abseil/log/internal/strip
477 | - abseil/xcprivacy
478 | - abseil/log/globals (1.20240116.2):
479 | - abseil/base/atomic_hook
480 | - abseil/base/config
481 | - abseil/base/core_headers
482 | - abseil/base/log_severity
483 | - abseil/base/raw_logging_internal
484 | - abseil/hash/hash
485 | - abseil/log/internal/vlog_config
486 | - abseil/strings/strings
487 | - abseil/xcprivacy
488 | - abseil/log/internal/append_truncated (1.20240116.2):
489 | - abseil/base/config
490 | - abseil/strings/strings
491 | - abseil/types/span
492 | - abseil/xcprivacy
493 | - abseil/log/internal/check_impl (1.20240116.2):
494 | - abseil/base/core_headers
495 | - abseil/log/internal/check_op
496 | - abseil/log/internal/conditions
497 | - abseil/log/internal/log_message
498 | - abseil/log/internal/strip
499 | - abseil/xcprivacy
500 | - abseil/log/internal/check_op (1.20240116.2):
501 | - abseil/base/config
502 | - abseil/base/core_headers
503 | - abseil/log/internal/nullguard
504 | - abseil/log/internal/nullstream
505 | - abseil/log/internal/strip
506 | - abseil/strings/strings
507 | - abseil/xcprivacy
508 | - abseil/log/internal/conditions (1.20240116.2):
509 | - abseil/base/base
510 | - abseil/base/config
511 | - abseil/base/core_headers
512 | - abseil/log/internal/voidify
513 | - abseil/xcprivacy
514 | - abseil/log/internal/config (1.20240116.2):
515 | - abseil/base/config
516 | - abseil/base/core_headers
517 | - abseil/xcprivacy
518 | - abseil/log/internal/fnmatch (1.20240116.2):
519 | - abseil/base/config
520 | - abseil/strings/strings
521 | - abseil/xcprivacy
522 | - abseil/log/internal/format (1.20240116.2):
523 | - abseil/base/config
524 | - abseil/base/core_headers
525 | - abseil/base/log_severity
526 | - abseil/log/internal/append_truncated
527 | - abseil/log/internal/config
528 | - abseil/log/internal/globals
529 | - abseil/strings/str_format
530 | - abseil/strings/strings
531 | - abseil/time/time
532 | - abseil/types/span
533 | - abseil/xcprivacy
534 | - abseil/log/internal/globals (1.20240116.2):
535 | - abseil/base/config
536 | - abseil/base/core_headers
537 | - abseil/base/log_severity
538 | - abseil/base/raw_logging_internal
539 | - abseil/strings/strings
540 | - abseil/time/time
541 | - abseil/xcprivacy
542 | - abseil/log/internal/log_impl (1.20240116.2):
543 | - abseil/log/absl_vlog_is_on
544 | - abseil/log/internal/conditions
545 | - abseil/log/internal/log_message
546 | - abseil/log/internal/strip
547 | - abseil/xcprivacy
548 | - abseil/log/internal/log_message (1.20240116.2):
549 | - abseil/base/base
550 | - abseil/base/config
551 | - abseil/base/core_headers
552 | - abseil/base/errno_saver
553 | - abseil/base/log_severity
554 | - abseil/base/raw_logging_internal
555 | - abseil/base/strerror
556 | - abseil/container/inlined_vector
557 | - abseil/debugging/examine_stack
558 | - abseil/log/globals
559 | - abseil/log/internal/append_truncated
560 | - abseil/log/internal/format
561 | - abseil/log/internal/globals
562 | - abseil/log/internal/log_sink_set
563 | - abseil/log/internal/nullguard
564 | - abseil/log/internal/proto
565 | - abseil/log/log_entry
566 | - abseil/log/log_sink
567 | - abseil/log/log_sink_registry
568 | - abseil/memory/memory
569 | - abseil/strings/strings
570 | - abseil/time/time
571 | - abseil/types/span
572 | - abseil/xcprivacy
573 | - abseil/log/internal/log_sink_set (1.20240116.2):
574 | - abseil/base/base
575 | - abseil/base/config
576 | - abseil/base/core_headers
577 | - abseil/base/log_severity
578 | - abseil/base/no_destructor
579 | - abseil/base/raw_logging_internal
580 | - abseil/cleanup/cleanup
581 | - abseil/log/globals
582 | - abseil/log/internal/config
583 | - abseil/log/internal/globals
584 | - abseil/log/log_entry
585 | - abseil/log/log_sink
586 | - abseil/strings/strings
587 | - abseil/synchronization/synchronization
588 | - abseil/types/span
589 | - abseil/xcprivacy
590 | - abseil/log/internal/nullguard (1.20240116.2):
591 | - abseil/base/config
592 | - abseil/base/core_headers
593 | - abseil/xcprivacy
594 | - abseil/log/internal/nullstream (1.20240116.2):
595 | - abseil/base/config
596 | - abseil/base/core_headers
597 | - abseil/base/log_severity
598 | - abseil/strings/strings
599 | - abseil/xcprivacy
600 | - abseil/log/internal/proto (1.20240116.2):
601 | - abseil/base/base
602 | - abseil/base/config
603 | - abseil/base/core_headers
604 | - abseil/strings/strings
605 | - abseil/types/span
606 | - abseil/xcprivacy
607 | - abseil/log/internal/strip (1.20240116.2):
608 | - abseil/base/log_severity
609 | - abseil/log/internal/log_message
610 | - abseil/log/internal/nullstream
611 | - abseil/xcprivacy
612 | - abseil/log/internal/vlog_config (1.20240116.2):
613 | - abseil/base/base
614 | - abseil/base/config
615 | - abseil/base/core_headers
616 | - abseil/base/no_destructor
617 | - abseil/log/internal/fnmatch
618 | - abseil/memory/memory
619 | - abseil/strings/strings
620 | - abseil/synchronization/synchronization
621 | - abseil/types/optional
622 | - abseil/xcprivacy
623 | - abseil/log/internal/voidify (1.20240116.2):
624 | - abseil/base/config
625 | - abseil/xcprivacy
626 | - abseil/log/log (1.20240116.2):
627 | - abseil/log/internal/log_impl
628 | - abseil/log/vlog_is_on
629 | - abseil/xcprivacy
630 | - abseil/log/log_entry (1.20240116.2):
631 | - abseil/base/config
632 | - abseil/base/core_headers
633 | - abseil/base/log_severity
634 | - abseil/log/internal/config
635 | - abseil/strings/strings
636 | - abseil/time/time
637 | - abseil/types/span
638 | - abseil/xcprivacy
639 | - abseil/log/log_sink (1.20240116.2):
640 | - abseil/base/config
641 | - abseil/log/log_entry
642 | - abseil/xcprivacy
643 | - abseil/log/log_sink_registry (1.20240116.2):
644 | - abseil/base/config
645 | - abseil/log/internal/log_sink_set
646 | - abseil/log/log_sink
647 | - abseil/xcprivacy
648 | - abseil/log/vlog_is_on (1.20240116.2):
649 | - abseil/log/absl_vlog_is_on
650 | - abseil/xcprivacy
651 | - abseil/memory (1.20240116.2):
652 | - abseil/memory/memory (= 1.20240116.2)
653 | - abseil/memory/memory (1.20240116.2):
654 | - abseil/base/core_headers
655 | - abseil/meta/type_traits
656 | - abseil/xcprivacy
657 | - abseil/meta (1.20240116.2):
658 | - abseil/meta/type_traits (= 1.20240116.2)
659 | - abseil/meta/type_traits (1.20240116.2):
660 | - abseil/base/config
661 | - abseil/base/core_headers
662 | - abseil/xcprivacy
663 | - abseil/numeric/bits (1.20240116.2):
664 | - abseil/base/config
665 | - abseil/base/core_headers
666 | - abseil/xcprivacy
667 | - abseil/numeric/int128 (1.20240116.2):
668 | - abseil/base/config
669 | - abseil/base/core_headers
670 | - abseil/numeric/bits
671 | - abseil/xcprivacy
672 | - abseil/numeric/representation (1.20240116.2):
673 | - abseil/base/config
674 | - abseil/xcprivacy
675 | - abseil/profiling/exponential_biased (1.20240116.2):
676 | - abseil/base/config
677 | - abseil/base/core_headers
678 | - abseil/xcprivacy
679 | - abseil/profiling/sample_recorder (1.20240116.2):
680 | - abseil/base/config
681 | - abseil/base/core_headers
682 | - abseil/synchronization/synchronization
683 | - abseil/time/time
684 | - abseil/xcprivacy
685 | - abseil/random/bit_gen_ref (1.20240116.2):
686 | - abseil/base/core_headers
687 | - abseil/base/fast_type_id
688 | - abseil/meta/type_traits
689 | - abseil/random/internal/distribution_caller
690 | - abseil/random/internal/fast_uniform_bits
691 | - abseil/random/random
692 | - abseil/xcprivacy
693 | - abseil/random/distributions (1.20240116.2):
694 | - abseil/base/base_internal
695 | - abseil/base/config
696 | - abseil/base/core_headers
697 | - abseil/meta/type_traits
698 | - abseil/numeric/bits
699 | - abseil/random/internal/distribution_caller
700 | - abseil/random/internal/fast_uniform_bits
701 | - abseil/random/internal/fastmath
702 | - abseil/random/internal/generate_real
703 | - abseil/random/internal/iostream_state_saver
704 | - abseil/random/internal/traits
705 | - abseil/random/internal/uniform_helper
706 | - abseil/random/internal/wide_multiply
707 | - abseil/strings/strings
708 | - abseil/xcprivacy
709 | - abseil/random/internal/distribution_caller (1.20240116.2):
710 | - abseil/base/config
711 | - abseil/base/fast_type_id
712 | - abseil/utility/utility
713 | - abseil/xcprivacy
714 | - abseil/random/internal/fast_uniform_bits (1.20240116.2):
715 | - abseil/base/config
716 | - abseil/meta/type_traits
717 | - abseil/random/internal/traits
718 | - abseil/xcprivacy
719 | - abseil/random/internal/fastmath (1.20240116.2):
720 | - abseil/numeric/bits
721 | - abseil/xcprivacy
722 | - abseil/random/internal/generate_real (1.20240116.2):
723 | - abseil/meta/type_traits
724 | - abseil/numeric/bits
725 | - abseil/random/internal/fastmath
726 | - abseil/random/internal/traits
727 | - abseil/xcprivacy
728 | - abseil/random/internal/iostream_state_saver (1.20240116.2):
729 | - abseil/meta/type_traits
730 | - abseil/numeric/int128
731 | - abseil/xcprivacy
732 | - abseil/random/internal/nonsecure_base (1.20240116.2):
733 | - abseil/base/core_headers
734 | - abseil/container/inlined_vector
735 | - abseil/meta/type_traits
736 | - abseil/random/internal/pool_urbg
737 | - abseil/random/internal/salted_seed_seq
738 | - abseil/random/internal/seed_material
739 | - abseil/types/span
740 | - abseil/xcprivacy
741 | - abseil/random/internal/pcg_engine (1.20240116.2):
742 | - abseil/base/config
743 | - abseil/meta/type_traits
744 | - abseil/numeric/bits
745 | - abseil/numeric/int128
746 | - abseil/random/internal/fastmath
747 | - abseil/random/internal/iostream_state_saver
748 | - abseil/xcprivacy
749 | - abseil/random/internal/platform (1.20240116.2):
750 | - abseil/base/config
751 | - abseil/xcprivacy
752 | - abseil/random/internal/pool_urbg (1.20240116.2):
753 | - abseil/base/base
754 | - abseil/base/config
755 | - abseil/base/core_headers
756 | - abseil/base/endian
757 | - abseil/base/raw_logging_internal
758 | - abseil/random/internal/randen
759 | - abseil/random/internal/seed_material
760 | - abseil/random/internal/traits
761 | - abseil/random/seed_gen_exception
762 | - abseil/types/span
763 | - abseil/xcprivacy
764 | - abseil/random/internal/randen (1.20240116.2):
765 | - abseil/base/raw_logging_internal
766 | - abseil/random/internal/platform
767 | - abseil/random/internal/randen_hwaes
768 | - abseil/random/internal/randen_slow
769 | - abseil/xcprivacy
770 | - abseil/random/internal/randen_engine (1.20240116.2):
771 | - abseil/base/endian
772 | - abseil/meta/type_traits
773 | - abseil/random/internal/iostream_state_saver
774 | - abseil/random/internal/randen
775 | - abseil/xcprivacy
776 | - abseil/random/internal/randen_hwaes (1.20240116.2):
777 | - abseil/base/config
778 | - abseil/random/internal/platform
779 | - abseil/random/internal/randen_hwaes_impl
780 | - abseil/xcprivacy
781 | - abseil/random/internal/randen_hwaes_impl (1.20240116.2):
782 | - abseil/base/config
783 | - abseil/base/core_headers
784 | - abseil/numeric/int128
785 | - abseil/random/internal/platform
786 | - abseil/xcprivacy
787 | - abseil/random/internal/randen_slow (1.20240116.2):
788 | - abseil/base/config
789 | - abseil/base/core_headers
790 | - abseil/base/endian
791 | - abseil/numeric/int128
792 | - abseil/random/internal/platform
793 | - abseil/xcprivacy
794 | - abseil/random/internal/salted_seed_seq (1.20240116.2):
795 | - abseil/container/inlined_vector
796 | - abseil/meta/type_traits
797 | - abseil/random/internal/seed_material
798 | - abseil/types/optional
799 | - abseil/types/span
800 | - abseil/xcprivacy
801 | - abseil/random/internal/seed_material (1.20240116.2):
802 | - abseil/base/core_headers
803 | - abseil/base/dynamic_annotations
804 | - abseil/base/raw_logging_internal
805 | - abseil/random/internal/fast_uniform_bits
806 | - abseil/strings/strings
807 | - abseil/types/optional
808 | - abseil/types/span
809 | - abseil/xcprivacy
810 | - abseil/random/internal/traits (1.20240116.2):
811 | - abseil/base/config
812 | - abseil/numeric/bits
813 | - abseil/numeric/int128
814 | - abseil/xcprivacy
815 | - abseil/random/internal/uniform_helper (1.20240116.2):
816 | - abseil/base/config
817 | - abseil/meta/type_traits
818 | - abseil/numeric/int128
819 | - abseil/random/internal/traits
820 | - abseil/xcprivacy
821 | - abseil/random/internal/wide_multiply (1.20240116.2):
822 | - abseil/base/config
823 | - abseil/numeric/bits
824 | - abseil/numeric/int128
825 | - abseil/random/internal/traits
826 | - abseil/xcprivacy
827 | - abseil/random/random (1.20240116.2):
828 | - abseil/random/distributions
829 | - abseil/random/internal/nonsecure_base
830 | - abseil/random/internal/pcg_engine
831 | - abseil/random/internal/pool_urbg
832 | - abseil/random/internal/randen_engine
833 | - abseil/random/seed_sequences
834 | - abseil/xcprivacy
835 | - abseil/random/seed_gen_exception (1.20240116.2):
836 | - abseil/base/config
837 | - abseil/xcprivacy
838 | - abseil/random/seed_sequences (1.20240116.2):
839 | - abseil/base/config
840 | - abseil/random/internal/pool_urbg
841 | - abseil/random/internal/salted_seed_seq
842 | - abseil/random/internal/seed_material
843 | - abseil/random/seed_gen_exception
844 | - abseil/types/span
845 | - abseil/xcprivacy
846 | - abseil/status/status (1.20240116.2):
847 | - abseil/base/atomic_hook
848 | - abseil/base/config
849 | - abseil/base/core_headers
850 | - abseil/base/no_destructor
851 | - abseil/base/nullability
852 | - abseil/base/raw_logging_internal
853 | - abseil/base/strerror
854 | - abseil/container/inlined_vector
855 | - abseil/debugging/stacktrace
856 | - abseil/debugging/symbolize
857 | - abseil/functional/function_ref
858 | - abseil/memory/memory
859 | - abseil/strings/cord
860 | - abseil/strings/str_format
861 | - abseil/strings/strings
862 | - abseil/types/optional
863 | - abseil/types/span
864 | - abseil/xcprivacy
865 | - abseil/status/statusor (1.20240116.2):
866 | - abseil/base/base
867 | - abseil/base/config
868 | - abseil/base/core_headers
869 | - abseil/base/nullability
870 | - abseil/base/raw_logging_internal
871 | - abseil/meta/type_traits
872 | - abseil/status/status
873 | - abseil/strings/has_ostream_operator
874 | - abseil/strings/str_format
875 | - abseil/strings/strings
876 | - abseil/types/variant
877 | - abseil/utility/utility
878 | - abseil/xcprivacy
879 | - abseil/strings/charset (1.20240116.2):
880 | - abseil/base/core_headers
881 | - abseil/strings/string_view
882 | - abseil/xcprivacy
883 | - abseil/strings/cord (1.20240116.2):
884 | - abseil/base/base
885 | - abseil/base/config
886 | - abseil/base/core_headers
887 | - abseil/base/endian
888 | - abseil/base/nullability
889 | - abseil/base/raw_logging_internal
890 | - abseil/container/inlined_vector
891 | - abseil/crc/crc32c
892 | - abseil/crc/crc_cord_state
893 | - abseil/functional/function_ref
894 | - abseil/meta/type_traits
895 | - abseil/numeric/bits
896 | - abseil/strings/cord_internal
897 | - abseil/strings/cordz_functions
898 | - abseil/strings/cordz_info
899 | - abseil/strings/cordz_statistics
900 | - abseil/strings/cordz_update_scope
901 | - abseil/strings/cordz_update_tracker
902 | - abseil/strings/internal
903 | - abseil/strings/strings
904 | - abseil/types/optional
905 | - abseil/types/span
906 | - abseil/xcprivacy
907 | - abseil/strings/cord_internal (1.20240116.2):
908 | - abseil/base/base_internal
909 | - abseil/base/config
910 | - abseil/base/core_headers
911 | - abseil/base/endian
912 | - abseil/base/raw_logging_internal
913 | - abseil/base/throw_delegate
914 | - abseil/container/compressed_tuple
915 | - abseil/container/container_memory
916 | - abseil/container/inlined_vector
917 | - abseil/container/layout
918 | - abseil/crc/crc_cord_state
919 | - abseil/functional/function_ref
920 | - abseil/meta/type_traits
921 | - abseil/strings/strings
922 | - abseil/types/span
923 | - abseil/xcprivacy
924 | - abseil/strings/cordz_functions (1.20240116.2):
925 | - abseil/base/config
926 | - abseil/base/core_headers
927 | - abseil/base/raw_logging_internal
928 | - abseil/profiling/exponential_biased
929 | - abseil/xcprivacy
930 | - abseil/strings/cordz_handle (1.20240116.2):
931 | - abseil/base/base
932 | - abseil/base/config
933 | - abseil/base/raw_logging_internal
934 | - abseil/synchronization/synchronization
935 | - abseil/xcprivacy
936 | - abseil/strings/cordz_info (1.20240116.2):
937 | - abseil/base/base
938 | - abseil/base/config
939 | - abseil/base/core_headers
940 | - abseil/base/raw_logging_internal
941 | - abseil/container/inlined_vector
942 | - abseil/debugging/stacktrace
943 | - abseil/strings/cord_internal
944 | - abseil/strings/cordz_functions
945 | - abseil/strings/cordz_handle
946 | - abseil/strings/cordz_statistics
947 | - abseil/strings/cordz_update_tracker
948 | - abseil/synchronization/synchronization
949 | - abseil/time/time
950 | - abseil/types/span
951 | - abseil/xcprivacy
952 | - abseil/strings/cordz_statistics (1.20240116.2):
953 | - abseil/base/config
954 | - abseil/strings/cordz_update_tracker
955 | - abseil/xcprivacy
956 | - abseil/strings/cordz_update_scope (1.20240116.2):
957 | - abseil/base/config
958 | - abseil/base/core_headers
959 | - abseil/strings/cord_internal
960 | - abseil/strings/cordz_info
961 | - abseil/strings/cordz_update_tracker
962 | - abseil/xcprivacy
963 | - abseil/strings/cordz_update_tracker (1.20240116.2):
964 | - abseil/base/config
965 | - abseil/xcprivacy
966 | - abseil/strings/has_ostream_operator (1.20240116.2):
967 | - abseil/base/config
968 | - abseil/xcprivacy
969 | - abseil/strings/internal (1.20240116.2):
970 | - abseil/base/config
971 | - abseil/base/core_headers
972 | - abseil/base/endian
973 | - abseil/base/raw_logging_internal
974 | - abseil/meta/type_traits
975 | - abseil/xcprivacy
976 | - abseil/strings/str_format (1.20240116.2):
977 | - abseil/base/config
978 | - abseil/base/core_headers
979 | - abseil/base/nullability
980 | - abseil/strings/str_format_internal
981 | - abseil/strings/string_view
982 | - abseil/types/span
983 | - abseil/xcprivacy
984 | - abseil/strings/str_format_internal (1.20240116.2):
985 | - abseil/base/config
986 | - abseil/base/core_headers
987 | - abseil/container/fixed_array
988 | - abseil/container/inlined_vector
989 | - abseil/functional/function_ref
990 | - abseil/meta/type_traits
991 | - abseil/numeric/bits
992 | - abseil/numeric/int128
993 | - abseil/numeric/representation
994 | - abseil/strings/strings
995 | - abseil/types/optional
996 | - abseil/types/span
997 | - abseil/utility/utility
998 | - abseil/xcprivacy
999 | - abseil/strings/string_view (1.20240116.2):
1000 | - abseil/base/base
1001 | - abseil/base/config
1002 | - abseil/base/core_headers
1003 | - abseil/base/nullability
1004 | - abseil/base/throw_delegate
1005 | - abseil/xcprivacy
1006 | - abseil/strings/strings (1.20240116.2):
1007 | - abseil/base/base
1008 | - abseil/base/config
1009 | - abseil/base/core_headers
1010 | - abseil/base/endian
1011 | - abseil/base/nullability
1012 | - abseil/base/raw_logging_internal
1013 | - abseil/base/throw_delegate
1014 | - abseil/memory/memory
1015 | - abseil/meta/type_traits
1016 | - abseil/numeric/bits
1017 | - abseil/numeric/int128
1018 | - abseil/strings/charset
1019 | - abseil/strings/internal
1020 | - abseil/strings/string_view
1021 | - abseil/xcprivacy
1022 | - abseil/synchronization/graphcycles_internal (1.20240116.2):
1023 | - abseil/base/base
1024 | - abseil/base/base_internal
1025 | - abseil/base/config
1026 | - abseil/base/core_headers
1027 | - abseil/base/malloc_internal
1028 | - abseil/base/raw_logging_internal
1029 | - abseil/xcprivacy
1030 | - abseil/synchronization/kernel_timeout_internal (1.20240116.2):
1031 | - abseil/base/base
1032 | - abseil/base/config
1033 | - abseil/base/core_headers
1034 | - abseil/base/raw_logging_internal
1035 | - abseil/time/time
1036 | - abseil/xcprivacy
1037 | - abseil/synchronization/synchronization (1.20240116.2):
1038 | - abseil/base/atomic_hook
1039 | - abseil/base/base
1040 | - abseil/base/base_internal
1041 | - abseil/base/config
1042 | - abseil/base/core_headers
1043 | - abseil/base/dynamic_annotations
1044 | - abseil/base/malloc_internal
1045 | - abseil/base/raw_logging_internal
1046 | - abseil/debugging/stacktrace
1047 | - abseil/debugging/symbolize
1048 | - abseil/synchronization/graphcycles_internal
1049 | - abseil/synchronization/kernel_timeout_internal
1050 | - abseil/time/time
1051 | - abseil/xcprivacy
1052 | - abseil/time (1.20240116.2):
1053 | - abseil/time/internal (= 1.20240116.2)
1054 | - abseil/time/time (= 1.20240116.2)
1055 | - abseil/time/internal (1.20240116.2):
1056 | - abseil/time/internal/cctz (= 1.20240116.2)
1057 | - abseil/time/internal/cctz (1.20240116.2):
1058 | - abseil/time/internal/cctz/civil_time (= 1.20240116.2)
1059 | - abseil/time/internal/cctz/time_zone (= 1.20240116.2)
1060 | - abseil/time/internal/cctz/civil_time (1.20240116.2):
1061 | - abseil/base/config
1062 | - abseil/xcprivacy
1063 | - abseil/time/internal/cctz/time_zone (1.20240116.2):
1064 | - abseil/base/config
1065 | - abseil/time/internal/cctz/civil_time
1066 | - abseil/xcprivacy
1067 | - abseil/time/time (1.20240116.2):
1068 | - abseil/base/base
1069 | - abseil/base/config
1070 | - abseil/base/core_headers
1071 | - abseil/base/raw_logging_internal
1072 | - abseil/numeric/int128
1073 | - abseil/strings/strings
1074 | - abseil/time/internal/cctz/civil_time
1075 | - abseil/time/internal/cctz/time_zone
1076 | - abseil/types/optional
1077 | - abseil/xcprivacy
1078 | - abseil/types (1.20240116.2):
1079 | - abseil/types/any (= 1.20240116.2)
1080 | - abseil/types/bad_any_cast (= 1.20240116.2)
1081 | - abseil/types/bad_any_cast_impl (= 1.20240116.2)
1082 | - abseil/types/bad_optional_access (= 1.20240116.2)
1083 | - abseil/types/bad_variant_access (= 1.20240116.2)
1084 | - abseil/types/compare (= 1.20240116.2)
1085 | - abseil/types/optional (= 1.20240116.2)
1086 | - abseil/types/span (= 1.20240116.2)
1087 | - abseil/types/variant (= 1.20240116.2)
1088 | - abseil/types/any (1.20240116.2):
1089 | - abseil/base/config
1090 | - abseil/base/core_headers
1091 | - abseil/base/fast_type_id
1092 | - abseil/meta/type_traits
1093 | - abseil/types/bad_any_cast
1094 | - abseil/utility/utility
1095 | - abseil/xcprivacy
1096 | - abseil/types/bad_any_cast (1.20240116.2):
1097 | - abseil/base/config
1098 | - abseil/types/bad_any_cast_impl
1099 | - abseil/xcprivacy
1100 | - abseil/types/bad_any_cast_impl (1.20240116.2):
1101 | - abseil/base/config
1102 | - abseil/base/raw_logging_internal
1103 | - abseil/xcprivacy
1104 | - abseil/types/bad_optional_access (1.20240116.2):
1105 | - abseil/base/config
1106 | - abseil/base/raw_logging_internal
1107 | - abseil/xcprivacy
1108 | - abseil/types/bad_variant_access (1.20240116.2):
1109 | - abseil/base/config
1110 | - abseil/base/raw_logging_internal
1111 | - abseil/xcprivacy
1112 | - abseil/types/compare (1.20240116.2):
1113 | - abseil/base/config
1114 | - abseil/base/core_headers
1115 | - abseil/meta/type_traits
1116 | - abseil/xcprivacy
1117 | - abseil/types/optional (1.20240116.2):
1118 | - abseil/base/base_internal
1119 | - abseil/base/config
1120 | - abseil/base/core_headers
1121 | - abseil/base/nullability
1122 | - abseil/memory/memory
1123 | - abseil/meta/type_traits
1124 | - abseil/types/bad_optional_access
1125 | - abseil/utility/utility
1126 | - abseil/xcprivacy
1127 | - abseil/types/span (1.20240116.2):
1128 | - abseil/algorithm/algorithm
1129 | - abseil/base/core_headers
1130 | - abseil/base/nullability
1131 | - abseil/base/throw_delegate
1132 | - abseil/meta/type_traits
1133 | - abseil/xcprivacy
1134 | - abseil/types/variant (1.20240116.2):
1135 | - abseil/base/base_internal
1136 | - abseil/base/config
1137 | - abseil/base/core_headers
1138 | - abseil/meta/type_traits
1139 | - abseil/types/bad_variant_access
1140 | - abseil/utility/utility
1141 | - abseil/xcprivacy
1142 | - abseil/utility/utility (1.20240116.2):
1143 | - abseil/base/base_internal
1144 | - abseil/base/config
1145 | - abseil/meta/type_traits
1146 | - abseil/xcprivacy
1147 | - abseil/xcprivacy (1.20240116.2)
1148 | - background_fetch (1.3.7):
1149 | - Flutter
1150 | - background_geolocation_firebase (1.0.1):
1151 | - FirebaseFirestore
1152 | - Flutter
1153 | - BoringSSL-GRPC (0.0.36):
1154 | - BoringSSL-GRPC/Implementation (= 0.0.36)
1155 | - BoringSSL-GRPC/Interface (= 0.0.36)
1156 | - BoringSSL-GRPC/Implementation (0.0.36):
1157 | - BoringSSL-GRPC/Interface (= 0.0.36)
1158 | - BoringSSL-GRPC/Interface (0.0.36)
1159 | - CocoaLumberjack (3.8.5):
1160 | - CocoaLumberjack/Core (= 3.8.5)
1161 | - CocoaLumberjack/Core (3.8.5)
1162 | - FirebaseAppCheckInterop (11.2.0)
1163 | - FirebaseCore (11.2.0):
1164 | - FirebaseCoreInternal (~> 11.0)
1165 | - GoogleUtilities/Environment (~> 8.0)
1166 | - GoogleUtilities/Logger (~> 8.0)
1167 | - FirebaseCoreExtension (11.2.0):
1168 | - FirebaseCore (~> 11.0)
1169 | - FirebaseCoreInternal (11.2.0):
1170 | - "GoogleUtilities/NSData+zlib (~> 8.0)"
1171 | - FirebaseFirestore (11.2.0):
1172 | - FirebaseCore (~> 11.0)
1173 | - FirebaseCoreExtension (~> 11.0)
1174 | - FirebaseFirestoreInternal (= 11.2.0)
1175 | - FirebaseSharedSwift (~> 11.0)
1176 | - FirebaseFirestoreInternal (11.2.0):
1177 | - abseil/algorithm (~> 1.20240116.1)
1178 | - abseil/base (~> 1.20240116.1)
1179 | - abseil/container/flat_hash_map (~> 1.20240116.1)
1180 | - abseil/memory (~> 1.20240116.1)
1181 | - abseil/meta (~> 1.20240116.1)
1182 | - abseil/strings/strings (~> 1.20240116.1)
1183 | - abseil/time (~> 1.20240116.1)
1184 | - abseil/types (~> 1.20240116.1)
1185 | - FirebaseAppCheckInterop (~> 11.0)
1186 | - FirebaseCore (~> 11.0)
1187 | - "gRPC-C++ (~> 1.65.0)"
1188 | - gRPC-Core (~> 1.65.0)
1189 | - leveldb-library (~> 1.22)
1190 | - nanopb (~> 3.30910.0)
1191 | - FirebaseSharedSwift (11.2.0)
1192 | - Flutter (1.0.0)
1193 | - flutter_background_geolocation (4.16.0):
1194 | - CocoaLumberjack (~> 3.8.5)
1195 | - Flutter
1196 | - GoogleUtilities/Environment (8.0.2):
1197 | - GoogleUtilities/Privacy
1198 | - GoogleUtilities/Logger (8.0.2):
1199 | - GoogleUtilities/Environment
1200 | - GoogleUtilities/Privacy
1201 | - "GoogleUtilities/NSData+zlib (8.0.2)":
1202 | - GoogleUtilities/Privacy
1203 | - GoogleUtilities/Privacy (8.0.2)
1204 | - "gRPC-C++ (1.65.5)":
1205 | - "gRPC-C++/Implementation (= 1.65.5)"
1206 | - "gRPC-C++/Interface (= 1.65.5)"
1207 | - "gRPC-C++/Implementation (1.65.5)":
1208 | - abseil/algorithm/container (~> 1.20240116.2)
1209 | - abseil/base/base (~> 1.20240116.2)
1210 | - abseil/base/config (~> 1.20240116.2)
1211 | - abseil/base/core_headers (~> 1.20240116.2)
1212 | - abseil/base/log_severity (~> 1.20240116.2)
1213 | - abseil/base/no_destructor (~> 1.20240116.2)
1214 | - abseil/cleanup/cleanup (~> 1.20240116.2)
1215 | - abseil/container/flat_hash_map (~> 1.20240116.2)
1216 | - abseil/container/flat_hash_set (~> 1.20240116.2)
1217 | - abseil/container/inlined_vector (~> 1.20240116.2)
1218 | - abseil/flags/flag (~> 1.20240116.2)
1219 | - abseil/flags/marshalling (~> 1.20240116.2)
1220 | - abseil/functional/any_invocable (~> 1.20240116.2)
1221 | - abseil/functional/bind_front (~> 1.20240116.2)
1222 | - abseil/functional/function_ref (~> 1.20240116.2)
1223 | - abseil/hash/hash (~> 1.20240116.2)
1224 | - abseil/log/absl_check (~> 1.20240116.2)
1225 | - abseil/log/absl_log (~> 1.20240116.2)
1226 | - abseil/log/check (~> 1.20240116.2)
1227 | - abseil/log/globals (~> 1.20240116.2)
1228 | - abseil/log/log (~> 1.20240116.2)
1229 | - abseil/memory/memory (~> 1.20240116.2)
1230 | - abseil/meta/type_traits (~> 1.20240116.2)
1231 | - abseil/random/bit_gen_ref (~> 1.20240116.2)
1232 | - abseil/random/distributions (~> 1.20240116.2)
1233 | - abseil/random/random (~> 1.20240116.2)
1234 | - abseil/status/status (~> 1.20240116.2)
1235 | - abseil/status/statusor (~> 1.20240116.2)
1236 | - abseil/strings/cord (~> 1.20240116.2)
1237 | - abseil/strings/str_format (~> 1.20240116.2)
1238 | - abseil/strings/strings (~> 1.20240116.2)
1239 | - abseil/synchronization/synchronization (~> 1.20240116.2)
1240 | - abseil/time/time (~> 1.20240116.2)
1241 | - abseil/types/optional (~> 1.20240116.2)
1242 | - abseil/types/span (~> 1.20240116.2)
1243 | - abseil/types/variant (~> 1.20240116.2)
1244 | - abseil/utility/utility (~> 1.20240116.2)
1245 | - "gRPC-C++/Interface (= 1.65.5)"
1246 | - "gRPC-C++/Privacy (= 1.65.5)"
1247 | - gRPC-Core (= 1.65.5)
1248 | - "gRPC-C++/Interface (1.65.5)"
1249 | - "gRPC-C++/Privacy (1.65.5)"
1250 | - gRPC-Core (1.65.5):
1251 | - gRPC-Core/Implementation (= 1.65.5)
1252 | - gRPC-Core/Interface (= 1.65.5)
1253 | - gRPC-Core/Implementation (1.65.5):
1254 | - abseil/algorithm/container (~> 1.20240116.2)
1255 | - abseil/base/base (~> 1.20240116.2)
1256 | - abseil/base/config (~> 1.20240116.2)
1257 | - abseil/base/core_headers (~> 1.20240116.2)
1258 | - abseil/base/log_severity (~> 1.20240116.2)
1259 | - abseil/base/no_destructor (~> 1.20240116.2)
1260 | - abseil/cleanup/cleanup (~> 1.20240116.2)
1261 | - abseil/container/flat_hash_map (~> 1.20240116.2)
1262 | - abseil/container/flat_hash_set (~> 1.20240116.2)
1263 | - abseil/container/inlined_vector (~> 1.20240116.2)
1264 | - abseil/flags/flag (~> 1.20240116.2)
1265 | - abseil/flags/marshalling (~> 1.20240116.2)
1266 | - abseil/functional/any_invocable (~> 1.20240116.2)
1267 | - abseil/functional/bind_front (~> 1.20240116.2)
1268 | - abseil/functional/function_ref (~> 1.20240116.2)
1269 | - abseil/hash/hash (~> 1.20240116.2)
1270 | - abseil/log/check (~> 1.20240116.2)
1271 | - abseil/log/globals (~> 1.20240116.2)
1272 | - abseil/log/log (~> 1.20240116.2)
1273 | - abseil/memory/memory (~> 1.20240116.2)
1274 | - abseil/meta/type_traits (~> 1.20240116.2)
1275 | - abseil/random/bit_gen_ref (~> 1.20240116.2)
1276 | - abseil/random/distributions (~> 1.20240116.2)
1277 | - abseil/random/random (~> 1.20240116.2)
1278 | - abseil/status/status (~> 1.20240116.2)
1279 | - abseil/status/statusor (~> 1.20240116.2)
1280 | - abseil/strings/cord (~> 1.20240116.2)
1281 | - abseil/strings/str_format (~> 1.20240116.2)
1282 | - abseil/strings/strings (~> 1.20240116.2)
1283 | - abseil/synchronization/synchronization (~> 1.20240116.2)
1284 | - abseil/time/time (~> 1.20240116.2)
1285 | - abseil/types/optional (~> 1.20240116.2)
1286 | - abseil/types/span (~> 1.20240116.2)
1287 | - abseil/types/variant (~> 1.20240116.2)
1288 | - abseil/utility/utility (~> 1.20240116.2)
1289 | - BoringSSL-GRPC (= 0.0.36)
1290 | - gRPC-Core/Interface (= 1.65.5)
1291 | - gRPC-Core/Privacy (= 1.65.5)
1292 | - gRPC-Core/Interface (1.65.5)
1293 | - gRPC-Core/Privacy (1.65.5)
1294 | - leveldb-library (1.22.5)
1295 | - nanopb (3.30910.0):
1296 | - nanopb/decode (= 3.30910.0)
1297 | - nanopb/encode (= 3.30910.0)
1298 | - nanopb/decode (3.30910.0)
1299 | - nanopb/encode (3.30910.0)
1300 |
1301 | DEPENDENCIES:
1302 | - background_fetch (from `.symlinks/plugins/background_fetch/ios`)
1303 | - background_geolocation_firebase (from `.symlinks/plugins/background_geolocation_firebase/ios`)
1304 | - Flutter (from `Flutter`)
1305 | - flutter_background_geolocation (from `.symlinks/plugins/flutter_background_geolocation/ios`)
1306 |
1307 | SPEC REPOS:
1308 | trunk:
1309 | - abseil
1310 | - BoringSSL-GRPC
1311 | - CocoaLumberjack
1312 | - FirebaseAppCheckInterop
1313 | - FirebaseCore
1314 | - FirebaseCoreExtension
1315 | - FirebaseCoreInternal
1316 | - FirebaseFirestore
1317 | - FirebaseFirestoreInternal
1318 | - FirebaseSharedSwift
1319 | - GoogleUtilities
1320 | - "gRPC-C++"
1321 | - gRPC-Core
1322 | - leveldb-library
1323 | - nanopb
1324 |
1325 | EXTERNAL SOURCES:
1326 | background_fetch:
1327 | :path: ".symlinks/plugins/background_fetch/ios"
1328 | background_geolocation_firebase:
1329 | :path: ".symlinks/plugins/background_geolocation_firebase/ios"
1330 | Flutter:
1331 | :path: Flutter
1332 | flutter_background_geolocation:
1333 | :path: ".symlinks/plugins/flutter_background_geolocation/ios"
1334 |
1335 | SPEC CHECKSUMS:
1336 | abseil: d121da9ef7e2ff4cab7666e76c5a3e0915ae08c3
1337 | background_fetch: 39f11371c0dce04b001c4bfd5e782bcccb0a85e2
1338 | background_geolocation_firebase: 69bc2474e880e84d80cd31b82e0b6faaae97a97d
1339 | BoringSSL-GRPC: ca6a8e5d04812fce8ffd6437810c2d46f925eaeb
1340 | CocoaLumberjack: 6a459bc897d6d80bd1b8c78482ec7ad05dffc3f0
1341 | FirebaseAppCheckInterop: ea21450529cf0ebd132788dd8916a0269abc684f
1342 | FirebaseCore: a282032ae9295c795714ded2ec9c522fc237f8da
1343 | FirebaseCoreExtension: cda74ddfb001224bd8fd1d6e74698b4ed07803de
1344 | FirebaseCoreInternal: 0c569513412da9f3b31bd0b340013bbee8f295c5
1345 | FirebaseFirestore: 62708adbc1dfcd6d165a7c0a202067b441912dc9
1346 | FirebaseFirestoreInternal: ad9b9ee2d3d430c8f31333a69b3b6737a7206232
1347 | FirebaseSharedSwift: 7a0d78d155ede78407f0fdc89fbc914014c7c540
1348 | Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
1349 | flutter_background_geolocation: bdff621611f4cb0e060ce10dc9678f05cf3d8d31
1350 | GoogleUtilities: 26a3abef001b6533cf678d3eb38fd3f614b7872d
1351 | "gRPC-C++": 2fa52b3141e7789a28a737f251e0c45b4cb20a87
1352 | gRPC-Core: a27c294d6149e1c39a7d173527119cfbc3375ce4
1353 | leveldb-library: e8eadf9008a61f9e1dde3978c086d2b6d9b9dc28
1354 | nanopb: fad817b59e0457d11a5dfbde799381cd727c1275
1355 |
1356 | PODFILE CHECKSUM: fa6c06156ca0a1afd21433425b09c6407e87b4c9
1357 |
1358 | COCOAPODS: 1.15.2
1359 |
--------------------------------------------------------------------------------
/example/ios/Runner.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 54;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
11 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
12 | 3EEFB28D0624FD2C5D021B8F /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 36A358587930085B045EBEE7 /* Pods_Runner.framework */; };
13 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
14 | 83BD9F2724BCB20E00CD6C3A /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 83BD9F2624BCB20E00CD6C3A /* GoogleService-Info.plist */; };
15 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
16 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
17 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
18 | /* End PBXBuildFile section */
19 |
20 | /* Begin PBXCopyFilesBuildPhase section */
21 | 9705A1C41CF9048500538489 /* Embed Frameworks */ = {
22 | isa = PBXCopyFilesBuildPhase;
23 | buildActionMask = 2147483647;
24 | dstPath = "";
25 | dstSubfolderSpec = 10;
26 | files = (
27 | );
28 | name = "Embed Frameworks";
29 | runOnlyForDeploymentPostprocessing = 0;
30 | };
31 | /* End PBXCopyFilesBuildPhase section */
32 |
33 | /* Begin PBXFileReference section */
34 | 0C9E3A2EA91A0759D4C01C28 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; };
35 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; };
36 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; };
37 | 36A358587930085B045EBEE7 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
38 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; };
39 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; };
40 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
41 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; };
42 | 83BD9F2624BCB20E00CD6C3A /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; };
43 | 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; };
44 | 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; };
45 | 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
46 | 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
47 | 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
48 | 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
49 | 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
50 | A1EBE85031C9EDDC24401782 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; };
51 | CEB70DF07AB492B36A664714 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; };
52 | /* End PBXFileReference section */
53 |
54 | /* Begin PBXFrameworksBuildPhase section */
55 | 97C146EB1CF9000F007C117D /* Frameworks */ = {
56 | isa = PBXFrameworksBuildPhase;
57 | buildActionMask = 2147483647;
58 | files = (
59 | 3EEFB28D0624FD2C5D021B8F /* Pods_Runner.framework in Frameworks */,
60 | );
61 | runOnlyForDeploymentPostprocessing = 0;
62 | };
63 | /* End PBXFrameworksBuildPhase section */
64 |
65 | /* Begin PBXGroup section */
66 | 83397652EF667F196DEF8BFE /* Pods */ = {
67 | isa = PBXGroup;
68 | children = (
69 | A1EBE85031C9EDDC24401782 /* Pods-Runner.debug.xcconfig */,
70 | CEB70DF07AB492B36A664714 /* Pods-Runner.release.xcconfig */,
71 | 0C9E3A2EA91A0759D4C01C28 /* Pods-Runner.profile.xcconfig */,
72 | );
73 | path = Pods;
74 | sourceTree = "";
75 | };
76 | 9740EEB11CF90186004384FC /* Flutter */ = {
77 | isa = PBXGroup;
78 | children = (
79 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
80 | 9740EEB21CF90195004384FC /* Debug.xcconfig */,
81 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
82 | 9740EEB31CF90195004384FC /* Generated.xcconfig */,
83 | );
84 | name = Flutter;
85 | sourceTree = "";
86 | };
87 | 97C146E51CF9000F007C117D = {
88 | isa = PBXGroup;
89 | children = (
90 | 9740EEB11CF90186004384FC /* Flutter */,
91 | 97C146F01CF9000F007C117D /* Runner */,
92 | 97C146EF1CF9000F007C117D /* Products */,
93 | 83397652EF667F196DEF8BFE /* Pods */,
94 | C5D2429418734C231AEF99BF /* Frameworks */,
95 | );
96 | sourceTree = "";
97 | };
98 | 97C146EF1CF9000F007C117D /* Products */ = {
99 | isa = PBXGroup;
100 | children = (
101 | 97C146EE1CF9000F007C117D /* Runner.app */,
102 | );
103 | name = Products;
104 | sourceTree = "";
105 | };
106 | 97C146F01CF9000F007C117D /* Runner */ = {
107 | isa = PBXGroup;
108 | children = (
109 | 83BD9F2624BCB20E00CD6C3A /* GoogleService-Info.plist */,
110 | 97C146FA1CF9000F007C117D /* Main.storyboard */,
111 | 97C146FD1CF9000F007C117D /* Assets.xcassets */,
112 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
113 | 97C147021CF9000F007C117D /* Info.plist */,
114 | 97C146F11CF9000F007C117D /* Supporting Files */,
115 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
116 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
117 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */,
118 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */,
119 | );
120 | path = Runner;
121 | sourceTree = "";
122 | };
123 | 97C146F11CF9000F007C117D /* Supporting Files */ = {
124 | isa = PBXGroup;
125 | children = (
126 | );
127 | name = "Supporting Files";
128 | sourceTree = "";
129 | };
130 | C5D2429418734C231AEF99BF /* Frameworks */ = {
131 | isa = PBXGroup;
132 | children = (
133 | 36A358587930085B045EBEE7 /* Pods_Runner.framework */,
134 | );
135 | name = Frameworks;
136 | sourceTree = "";
137 | };
138 | /* End PBXGroup section */
139 |
140 | /* Begin PBXNativeTarget section */
141 | 97C146ED1CF9000F007C117D /* Runner */ = {
142 | isa = PBXNativeTarget;
143 | buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
144 | buildPhases = (
145 | A27468701A3784F318A05F4E /* [CP] Check Pods Manifest.lock */,
146 | 9740EEB61CF901F6004384FC /* Run Script */,
147 | 97C146EA1CF9000F007C117D /* Sources */,
148 | 97C146EB1CF9000F007C117D /* Frameworks */,
149 | 97C146EC1CF9000F007C117D /* Resources */,
150 | 9705A1C41CF9048500538489 /* Embed Frameworks */,
151 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */,
152 | B764D27CFED4AB1D8DEFD0E7 /* [CP] Embed Pods Frameworks */,
153 | 2CF78F6CA95F9DB4C7336A1D /* [CP] Copy Pods Resources */,
154 | );
155 | buildRules = (
156 | );
157 | dependencies = (
158 | );
159 | name = Runner;
160 | productName = Runner;
161 | productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
162 | productType = "com.apple.product-type.application";
163 | };
164 | /* End PBXNativeTarget section */
165 |
166 | /* Begin PBXProject section */
167 | 97C146E61CF9000F007C117D /* Project object */ = {
168 | isa = PBXProject;
169 | attributes = {
170 | BuildIndependentTargetsInParallel = YES;
171 | LastUpgradeCheck = 1510;
172 | ORGANIZATIONNAME = "";
173 | TargetAttributes = {
174 | 97C146ED1CF9000F007C117D = {
175 | CreatedOnToolsVersion = 7.3.1;
176 | LastSwiftMigration = 1100;
177 | };
178 | };
179 | };
180 | buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
181 | compatibilityVersion = "Xcode 9.3";
182 | developmentRegion = en;
183 | hasScannedForEncodings = 0;
184 | knownRegions = (
185 | en,
186 | Base,
187 | );
188 | mainGroup = 97C146E51CF9000F007C117D;
189 | productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
190 | projectDirPath = "";
191 | projectRoot = "";
192 | targets = (
193 | 97C146ED1CF9000F007C117D /* Runner */,
194 | );
195 | };
196 | /* End PBXProject section */
197 |
198 | /* Begin PBXResourcesBuildPhase section */
199 | 97C146EC1CF9000F007C117D /* Resources */ = {
200 | isa = PBXResourcesBuildPhase;
201 | buildActionMask = 2147483647;
202 | files = (
203 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
204 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
205 | 83BD9F2724BCB20E00CD6C3A /* GoogleService-Info.plist in Resources */,
206 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
207 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
208 | );
209 | runOnlyForDeploymentPostprocessing = 0;
210 | };
211 | /* End PBXResourcesBuildPhase section */
212 |
213 | /* Begin PBXShellScriptBuildPhase section */
214 | 2CF78F6CA95F9DB4C7336A1D /* [CP] Copy Pods Resources */ = {
215 | isa = PBXShellScriptBuildPhase;
216 | buildActionMask = 2147483647;
217 | files = (
218 | );
219 | inputFileListPaths = (
220 | "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist",
221 | );
222 | name = "[CP] Copy Pods Resources";
223 | outputFileListPaths = (
224 | "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist",
225 | );
226 | runOnlyForDeploymentPostprocessing = 0;
227 | shellPath = /bin/sh;
228 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
229 | showEnvVarsInLog = 0;
230 | };
231 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
232 | isa = PBXShellScriptBuildPhase;
233 | alwaysOutOfDate = 1;
234 | buildActionMask = 2147483647;
235 | files = (
236 | );
237 | inputPaths = (
238 | "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}",
239 | );
240 | name = "Thin Binary";
241 | outputPaths = (
242 | );
243 | runOnlyForDeploymentPostprocessing = 0;
244 | shellPath = /bin/sh;
245 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
246 | };
247 | 9740EEB61CF901F6004384FC /* Run Script */ = {
248 | isa = PBXShellScriptBuildPhase;
249 | alwaysOutOfDate = 1;
250 | buildActionMask = 2147483647;
251 | files = (
252 | );
253 | inputPaths = (
254 | );
255 | name = "Run Script";
256 | outputPaths = (
257 | );
258 | runOnlyForDeploymentPostprocessing = 0;
259 | shellPath = /bin/sh;
260 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
261 | };
262 | A27468701A3784F318A05F4E /* [CP] Check Pods Manifest.lock */ = {
263 | isa = PBXShellScriptBuildPhase;
264 | buildActionMask = 2147483647;
265 | files = (
266 | );
267 | inputFileListPaths = (
268 | );
269 | inputPaths = (
270 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
271 | "${PODS_ROOT}/Manifest.lock",
272 | );
273 | name = "[CP] Check Pods Manifest.lock";
274 | outputFileListPaths = (
275 | );
276 | outputPaths = (
277 | "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt",
278 | );
279 | runOnlyForDeploymentPostprocessing = 0;
280 | shellPath = /bin/sh;
281 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
282 | showEnvVarsInLog = 0;
283 | };
284 | B764D27CFED4AB1D8DEFD0E7 /* [CP] Embed Pods Frameworks */ = {
285 | isa = PBXShellScriptBuildPhase;
286 | buildActionMask = 2147483647;
287 | files = (
288 | );
289 | inputFileListPaths = (
290 | "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
291 | );
292 | name = "[CP] Embed Pods Frameworks";
293 | outputFileListPaths = (
294 | "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
295 | );
296 | runOnlyForDeploymentPostprocessing = 0;
297 | shellPath = /bin/sh;
298 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
299 | showEnvVarsInLog = 0;
300 | };
301 | /* End PBXShellScriptBuildPhase section */
302 |
303 | /* Begin PBXSourcesBuildPhase section */
304 | 97C146EA1CF9000F007C117D /* Sources */ = {
305 | isa = PBXSourcesBuildPhase;
306 | buildActionMask = 2147483647;
307 | files = (
308 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,
309 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
310 | );
311 | runOnlyForDeploymentPostprocessing = 0;
312 | };
313 | /* End PBXSourcesBuildPhase section */
314 |
315 | /* Begin PBXVariantGroup section */
316 | 97C146FA1CF9000F007C117D /* Main.storyboard */ = {
317 | isa = PBXVariantGroup;
318 | children = (
319 | 97C146FB1CF9000F007C117D /* Base */,
320 | );
321 | name = Main.storyboard;
322 | sourceTree = "";
323 | };
324 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
325 | isa = PBXVariantGroup;
326 | children = (
327 | 97C147001CF9000F007C117D /* Base */,
328 | );
329 | name = LaunchScreen.storyboard;
330 | sourceTree = "";
331 | };
332 | /* End PBXVariantGroup section */
333 |
334 | /* Begin XCBuildConfiguration section */
335 | 249021D3217E4FDB00AE95B9 /* Profile */ = {
336 | isa = XCBuildConfiguration;
337 | buildSettings = {
338 | ALWAYS_SEARCH_USER_PATHS = NO;
339 | CLANG_ANALYZER_NONNULL = YES;
340 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
341 | CLANG_CXX_LIBRARY = "libc++";
342 | CLANG_ENABLE_MODULES = YES;
343 | CLANG_ENABLE_OBJC_ARC = YES;
344 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
345 | CLANG_WARN_BOOL_CONVERSION = YES;
346 | CLANG_WARN_COMMA = YES;
347 | CLANG_WARN_CONSTANT_CONVERSION = YES;
348 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
349 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
350 | CLANG_WARN_EMPTY_BODY = YES;
351 | CLANG_WARN_ENUM_CONVERSION = YES;
352 | CLANG_WARN_INFINITE_RECURSION = YES;
353 | CLANG_WARN_INT_CONVERSION = YES;
354 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
355 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
356 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
357 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
358 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
359 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
360 | CLANG_WARN_STRICT_PROTOTYPES = YES;
361 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
362 | CLANG_WARN_UNREACHABLE_CODE = YES;
363 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
364 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
365 | COPY_PHASE_STRIP = NO;
366 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
367 | ENABLE_NS_ASSERTIONS = NO;
368 | ENABLE_STRICT_OBJC_MSGSEND = YES;
369 | ENABLE_USER_SCRIPT_SANDBOXING = YES;
370 | GCC_C_LANGUAGE_STANDARD = gnu99;
371 | GCC_NO_COMMON_BLOCKS = YES;
372 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
373 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
374 | GCC_WARN_UNDECLARED_SELECTOR = YES;
375 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
376 | GCC_WARN_UNUSED_FUNCTION = YES;
377 | GCC_WARN_UNUSED_VARIABLE = YES;
378 | IPHONEOS_DEPLOYMENT_TARGET = 12.0;
379 | MTL_ENABLE_DEBUG_INFO = NO;
380 | SDKROOT = iphoneos;
381 | SUPPORTED_PLATFORMS = iphoneos;
382 | TARGETED_DEVICE_FAMILY = "1,2";
383 | VALIDATE_PRODUCT = YES;
384 | };
385 | name = Profile;
386 | };
387 | 249021D4217E4FDB00AE95B9 /* Profile */ = {
388 | isa = XCBuildConfiguration;
389 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
390 | buildSettings = {
391 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
392 | CLANG_ENABLE_MODULES = YES;
393 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
394 | DEVELOPMENT_TEAM = 32A636YFGZ;
395 | ENABLE_BITCODE = NO;
396 | ENABLE_USER_SCRIPT_SANDBOXING = NO;
397 | FRAMEWORK_SEARCH_PATHS = (
398 | "$(inherited)",
399 | "$(PROJECT_DIR)/Flutter",
400 | );
401 | INFOPLIST_FILE = Runner/Info.plist;
402 | LD_RUNPATH_SEARCH_PATHS = (
403 | "$(inherited)",
404 | "@executable_path/Frameworks",
405 | );
406 | LIBRARY_SEARCH_PATHS = (
407 | "$(inherited)",
408 | "$(PROJECT_DIR)/Flutter",
409 | );
410 | PRODUCT_BUNDLE_IDENTIFIER = com.transistorsoft.flutter.backgroundgeolocation.backgroundgeolocationfirebaseexample;
411 | PRODUCT_NAME = "$(TARGET_NAME)";
412 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
413 | SWIFT_VERSION = 5.0;
414 | VERSIONING_SYSTEM = "apple-generic";
415 | };
416 | name = Profile;
417 | };
418 | 97C147031CF9000F007C117D /* Debug */ = {
419 | isa = XCBuildConfiguration;
420 | buildSettings = {
421 | ALWAYS_SEARCH_USER_PATHS = NO;
422 | CLANG_ANALYZER_NONNULL = YES;
423 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
424 | CLANG_CXX_LIBRARY = "libc++";
425 | CLANG_ENABLE_MODULES = YES;
426 | CLANG_ENABLE_OBJC_ARC = YES;
427 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
428 | CLANG_WARN_BOOL_CONVERSION = YES;
429 | CLANG_WARN_COMMA = YES;
430 | CLANG_WARN_CONSTANT_CONVERSION = YES;
431 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
432 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
433 | CLANG_WARN_EMPTY_BODY = YES;
434 | CLANG_WARN_ENUM_CONVERSION = YES;
435 | CLANG_WARN_INFINITE_RECURSION = YES;
436 | CLANG_WARN_INT_CONVERSION = YES;
437 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
438 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
439 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
440 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
441 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
442 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
443 | CLANG_WARN_STRICT_PROTOTYPES = YES;
444 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
445 | CLANG_WARN_UNREACHABLE_CODE = YES;
446 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
447 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
448 | COPY_PHASE_STRIP = NO;
449 | DEBUG_INFORMATION_FORMAT = dwarf;
450 | ENABLE_STRICT_OBJC_MSGSEND = YES;
451 | ENABLE_TESTABILITY = YES;
452 | ENABLE_USER_SCRIPT_SANDBOXING = YES;
453 | GCC_C_LANGUAGE_STANDARD = gnu99;
454 | GCC_DYNAMIC_NO_PIC = NO;
455 | GCC_NO_COMMON_BLOCKS = YES;
456 | GCC_OPTIMIZATION_LEVEL = 0;
457 | GCC_PREPROCESSOR_DEFINITIONS = (
458 | "DEBUG=1",
459 | "$(inherited)",
460 | );
461 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
462 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
463 | GCC_WARN_UNDECLARED_SELECTOR = YES;
464 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
465 | GCC_WARN_UNUSED_FUNCTION = YES;
466 | GCC_WARN_UNUSED_VARIABLE = YES;
467 | IPHONEOS_DEPLOYMENT_TARGET = 12.0;
468 | MTL_ENABLE_DEBUG_INFO = YES;
469 | ONLY_ACTIVE_ARCH = YES;
470 | SDKROOT = iphoneos;
471 | TARGETED_DEVICE_FAMILY = "1,2";
472 | };
473 | name = Debug;
474 | };
475 | 97C147041CF9000F007C117D /* Release */ = {
476 | isa = XCBuildConfiguration;
477 | buildSettings = {
478 | ALWAYS_SEARCH_USER_PATHS = NO;
479 | CLANG_ANALYZER_NONNULL = YES;
480 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
481 | CLANG_CXX_LIBRARY = "libc++";
482 | CLANG_ENABLE_MODULES = YES;
483 | CLANG_ENABLE_OBJC_ARC = YES;
484 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
485 | CLANG_WARN_BOOL_CONVERSION = YES;
486 | CLANG_WARN_COMMA = YES;
487 | CLANG_WARN_CONSTANT_CONVERSION = YES;
488 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
489 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
490 | CLANG_WARN_EMPTY_BODY = YES;
491 | CLANG_WARN_ENUM_CONVERSION = YES;
492 | CLANG_WARN_INFINITE_RECURSION = YES;
493 | CLANG_WARN_INT_CONVERSION = YES;
494 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
495 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
496 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
497 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
498 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
499 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
500 | CLANG_WARN_STRICT_PROTOTYPES = YES;
501 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
502 | CLANG_WARN_UNREACHABLE_CODE = YES;
503 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
504 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
505 | COPY_PHASE_STRIP = NO;
506 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
507 | ENABLE_NS_ASSERTIONS = NO;
508 | ENABLE_STRICT_OBJC_MSGSEND = YES;
509 | ENABLE_USER_SCRIPT_SANDBOXING = YES;
510 | GCC_C_LANGUAGE_STANDARD = gnu99;
511 | GCC_NO_COMMON_BLOCKS = YES;
512 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
513 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
514 | GCC_WARN_UNDECLARED_SELECTOR = YES;
515 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
516 | GCC_WARN_UNUSED_FUNCTION = YES;
517 | GCC_WARN_UNUSED_VARIABLE = YES;
518 | IPHONEOS_DEPLOYMENT_TARGET = 12.0;
519 | MTL_ENABLE_DEBUG_INFO = NO;
520 | SDKROOT = iphoneos;
521 | SUPPORTED_PLATFORMS = iphoneos;
522 | SWIFT_COMPILATION_MODE = wholemodule;
523 | SWIFT_OPTIMIZATION_LEVEL = "-O";
524 | TARGETED_DEVICE_FAMILY = "1,2";
525 | VALIDATE_PRODUCT = YES;
526 | };
527 | name = Release;
528 | };
529 | 97C147061CF9000F007C117D /* Debug */ = {
530 | isa = XCBuildConfiguration;
531 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
532 | buildSettings = {
533 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
534 | CLANG_ENABLE_MODULES = YES;
535 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
536 | DEVELOPMENT_TEAM = 32A636YFGZ;
537 | ENABLE_BITCODE = NO;
538 | ENABLE_USER_SCRIPT_SANDBOXING = NO;
539 | FRAMEWORK_SEARCH_PATHS = (
540 | "$(inherited)",
541 | "$(PROJECT_DIR)/Flutter",
542 | );
543 | INFOPLIST_FILE = Runner/Info.plist;
544 | LD_RUNPATH_SEARCH_PATHS = (
545 | "$(inherited)",
546 | "@executable_path/Frameworks",
547 | );
548 | LIBRARY_SEARCH_PATHS = (
549 | "$(inherited)",
550 | "$(PROJECT_DIR)/Flutter",
551 | );
552 | PRODUCT_BUNDLE_IDENTIFIER = com.transistorsoft.flutter.backgroundgeolocation.backgroundgeolocationfirebaseexample;
553 | PRODUCT_NAME = "$(TARGET_NAME)";
554 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
555 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
556 | SWIFT_VERSION = 5.0;
557 | VERSIONING_SYSTEM = "apple-generic";
558 | };
559 | name = Debug;
560 | };
561 | 97C147071CF9000F007C117D /* Release */ = {
562 | isa = XCBuildConfiguration;
563 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
564 | buildSettings = {
565 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
566 | CLANG_ENABLE_MODULES = YES;
567 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
568 | DEVELOPMENT_TEAM = 32A636YFGZ;
569 | ENABLE_BITCODE = NO;
570 | ENABLE_USER_SCRIPT_SANDBOXING = NO;
571 | FRAMEWORK_SEARCH_PATHS = (
572 | "$(inherited)",
573 | "$(PROJECT_DIR)/Flutter",
574 | );
575 | INFOPLIST_FILE = Runner/Info.plist;
576 | LD_RUNPATH_SEARCH_PATHS = (
577 | "$(inherited)",
578 | "@executable_path/Frameworks",
579 | );
580 | LIBRARY_SEARCH_PATHS = (
581 | "$(inherited)",
582 | "$(PROJECT_DIR)/Flutter",
583 | );
584 | PRODUCT_BUNDLE_IDENTIFIER = com.transistorsoft.flutter.backgroundgeolocation.backgroundgeolocationfirebaseexample;
585 | PRODUCT_NAME = "$(TARGET_NAME)";
586 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
587 | SWIFT_VERSION = 5.0;
588 | VERSIONING_SYSTEM = "apple-generic";
589 | };
590 | name = Release;
591 | };
592 | /* End XCBuildConfiguration section */
593 |
594 | /* Begin XCConfigurationList section */
595 | 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
596 | isa = XCConfigurationList;
597 | buildConfigurations = (
598 | 97C147031CF9000F007C117D /* Debug */,
599 | 97C147041CF9000F007C117D /* Release */,
600 | 249021D3217E4FDB00AE95B9 /* Profile */,
601 | );
602 | defaultConfigurationIsVisible = 0;
603 | defaultConfigurationName = Release;
604 | };
605 | 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
606 | isa = XCConfigurationList;
607 | buildConfigurations = (
608 | 97C147061CF9000F007C117D /* Debug */,
609 | 97C147071CF9000F007C117D /* Release */,
610 | 249021D4217E4FDB00AE95B9 /* Profile */,
611 | );
612 | defaultConfigurationIsVisible = 0;
613 | defaultConfigurationName = Release;
614 | };
615 | /* End XCConfigurationList section */
616 | };
617 | rootObject = 97C146E61CF9000F007C117D /* Project object */;
618 | }
619 |
--------------------------------------------------------------------------------
/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
37 |
38 |
39 |
40 |
41 |
42 |
52 |
54 |
60 |
61 |
62 |
63 |
69 |
71 |
77 |
78 |
79 |
80 |
82 |
83 |
86 |
87 |
88 |
--------------------------------------------------------------------------------
/example/ios/Runner.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/example/ios/Runner/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | import UIKit
2 | import Flutter
3 | import FirebaseCore;
4 |
5 | @main
6 | @objc class AppDelegate: FlutterAppDelegate {
7 | override func application(
8 | _ application: UIApplication,
9 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
10 | ) -> Bool {
11 | GeneratedPluginRegistrant.register(with: self)
12 | FirebaseApp.configure()
13 | return super.application(application, didFinishLaunchingWithOptions: launchOptions)
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "size" : "20x20",
5 | "idiom" : "iphone",
6 | "filename" : "Icon-App-20x20@2x.png",
7 | "scale" : "2x"
8 | },
9 | {
10 | "size" : "20x20",
11 | "idiom" : "iphone",
12 | "filename" : "Icon-App-20x20@3x.png",
13 | "scale" : "3x"
14 | },
15 | {
16 | "size" : "29x29",
17 | "idiom" : "iphone",
18 | "filename" : "Icon-App-29x29@1x.png",
19 | "scale" : "1x"
20 | },
21 | {
22 | "size" : "29x29",
23 | "idiom" : "iphone",
24 | "filename" : "Icon-App-29x29@2x.png",
25 | "scale" : "2x"
26 | },
27 | {
28 | "size" : "29x29",
29 | "idiom" : "iphone",
30 | "filename" : "Icon-App-29x29@3x.png",
31 | "scale" : "3x"
32 | },
33 | {
34 | "size" : "40x40",
35 | "idiom" : "iphone",
36 | "filename" : "Icon-App-40x40@2x.png",
37 | "scale" : "2x"
38 | },
39 | {
40 | "size" : "40x40",
41 | "idiom" : "iphone",
42 | "filename" : "Icon-App-40x40@3x.png",
43 | "scale" : "3x"
44 | },
45 | {
46 | "size" : "60x60",
47 | "idiom" : "iphone",
48 | "filename" : "Icon-App-60x60@2x.png",
49 | "scale" : "2x"
50 | },
51 | {
52 | "size" : "60x60",
53 | "idiom" : "iphone",
54 | "filename" : "Icon-App-60x60@3x.png",
55 | "scale" : "3x"
56 | },
57 | {
58 | "size" : "20x20",
59 | "idiom" : "ipad",
60 | "filename" : "Icon-App-20x20@1x.png",
61 | "scale" : "1x"
62 | },
63 | {
64 | "size" : "20x20",
65 | "idiom" : "ipad",
66 | "filename" : "Icon-App-20x20@2x.png",
67 | "scale" : "2x"
68 | },
69 | {
70 | "size" : "29x29",
71 | "idiom" : "ipad",
72 | "filename" : "Icon-App-29x29@1x.png",
73 | "scale" : "1x"
74 | },
75 | {
76 | "size" : "29x29",
77 | "idiom" : "ipad",
78 | "filename" : "Icon-App-29x29@2x.png",
79 | "scale" : "2x"
80 | },
81 | {
82 | "size" : "40x40",
83 | "idiom" : "ipad",
84 | "filename" : "Icon-App-40x40@1x.png",
85 | "scale" : "1x"
86 | },
87 | {
88 | "size" : "40x40",
89 | "idiom" : "ipad",
90 | "filename" : "Icon-App-40x40@2x.png",
91 | "scale" : "2x"
92 | },
93 | {
94 | "size" : "76x76",
95 | "idiom" : "ipad",
96 | "filename" : "Icon-App-76x76@1x.png",
97 | "scale" : "1x"
98 | },
99 | {
100 | "size" : "76x76",
101 | "idiom" : "ipad",
102 | "filename" : "Icon-App-76x76@2x.png",
103 | "scale" : "2x"
104 | },
105 | {
106 | "size" : "83.5x83.5",
107 | "idiom" : "ipad",
108 | "filename" : "Icon-App-83.5x83.5@2x.png",
109 | "scale" : "2x"
110 | },
111 | {
112 | "size" : "1024x1024",
113 | "idiom" : "ios-marketing",
114 | "filename" : "Icon-App-1024x1024@1x.png",
115 | "scale" : "1x"
116 | }
117 | ],
118 | "info" : {
119 | "version" : 1,
120 | "author" : "xcode"
121 | }
122 | }
123 |
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/transistorsoft/flutter_background_geolocation_firebase/71e2423dffd512814107151f193421d2f3990ae3/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/transistorsoft/flutter_background_geolocation_firebase/71e2423dffd512814107151f193421d2f3990ae3/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/transistorsoft/flutter_background_geolocation_firebase/71e2423dffd512814107151f193421d2f3990ae3/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/transistorsoft/flutter_background_geolocation_firebase/71e2423dffd512814107151f193421d2f3990ae3/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/transistorsoft/flutter_background_geolocation_firebase/71e2423dffd512814107151f193421d2f3990ae3/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/transistorsoft/flutter_background_geolocation_firebase/71e2423dffd512814107151f193421d2f3990ae3/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/transistorsoft/flutter_background_geolocation_firebase/71e2423dffd512814107151f193421d2f3990ae3/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/transistorsoft/flutter_background_geolocation_firebase/71e2423dffd512814107151f193421d2f3990ae3/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/transistorsoft/flutter_background_geolocation_firebase/71e2423dffd512814107151f193421d2f3990ae3/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/transistorsoft/flutter_background_geolocation_firebase/71e2423dffd512814107151f193421d2f3990ae3/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/transistorsoft/flutter_background_geolocation_firebase/71e2423dffd512814107151f193421d2f3990ae3/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/transistorsoft/flutter_background_geolocation_firebase/71e2423dffd512814107151f193421d2f3990ae3/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/transistorsoft/flutter_background_geolocation_firebase/71e2423dffd512814107151f193421d2f3990ae3/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/transistorsoft/flutter_background_geolocation_firebase/71e2423dffd512814107151f193421d2f3990ae3/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/transistorsoft/flutter_background_geolocation_firebase/71e2423dffd512814107151f193421d2f3990ae3/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "LaunchImage.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "LaunchImage@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "LaunchImage@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/transistorsoft/flutter_background_geolocation_firebase/71e2423dffd512814107151f193421d2f3990ae3/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/transistorsoft/flutter_background_geolocation_firebase/71e2423dffd512814107151f193421d2f3990ae3/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/transistorsoft/flutter_background_geolocation_firebase/71e2423dffd512814107151f193421d2f3990ae3/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
--------------------------------------------------------------------------------
/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md:
--------------------------------------------------------------------------------
1 | # Launch Screen Assets
2 |
3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory.
4 |
5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.
--------------------------------------------------------------------------------
/example/ios/Runner/Base.lproj/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/example/ios/Runner/Base.lproj/Main.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/example/ios/Runner/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | backgroundgeolocationfirebaseexample
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | $(FLUTTER_BUILD_NAME)
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | $(FLUTTER_BUILD_NUMBER)
23 | LSRequiresIPhoneOS
24 |
25 | NSLocationAlwaysAndWhenInUseUsageDescription
26 | ALWAYS_AND_WHEN_IN_USE_DESCRIPTION
27 | NSLocationWhenInUseUsageDescription
28 | WHEN_IN_USE_DESCRIPTION
29 | NSMotionUsageDescription
30 | MOTION_USAGE_DESCRIPTION
31 | UIBackgroundModes
32 |
33 | audio
34 | fetch
35 | location
36 | processing
37 |
38 | UILaunchStoryboardName
39 | LaunchScreen
40 | UIMainStoryboardFile
41 | Main
42 | UISupportedInterfaceOrientations
43 |
44 | UIInterfaceOrientationPortrait
45 | UIInterfaceOrientationLandscapeLeft
46 | UIInterfaceOrientationLandscapeRight
47 |
48 | UISupportedInterfaceOrientations~ipad
49 |
50 | UIInterfaceOrientationPortrait
51 | UIInterfaceOrientationPortraitUpsideDown
52 | UIInterfaceOrientationLandscapeLeft
53 | UIInterfaceOrientationLandscapeRight
54 |
55 | UIViewControllerBasedStatusBarAppearance
56 |
57 | CADisableMinimumFrameDurationOnPhone
58 |
59 | UIApplicationSupportsIndirectInputEvents
60 |
61 |
62 |
63 |
--------------------------------------------------------------------------------
/example/ios/Runner/Runner-Bridging-Header.h:
--------------------------------------------------------------------------------
1 | #import "GeneratedPluginRegistrant.h"
2 |
--------------------------------------------------------------------------------
/example/lib/main.dart:
--------------------------------------------------------------------------------
1 | import 'dart:async';
2 | import 'dart:convert';
3 | import 'package:flutter/material.dart';
4 | import 'package:flutter/services.dart';
5 |
6 | import 'package:background_geolocation_firebase/background_geolocation_firebase.dart';
7 | import 'package:flutter_background_geolocation/flutter_background_geolocation.dart' as bg;
8 |
9 | void main() {
10 | // Enable integration testing with the Flutter Driver extension.
11 | // See https://flutter.io/testing/ for more info.
12 | runApp(new MyApp());
13 |
14 | }
15 |
16 | class MyApp extends StatefulWidget {
17 | @override
18 | _MyAppState createState() => new _MyAppState();
19 | }
20 |
21 | class _MyAppState extends State {
22 | late bool _enabled;
23 | late bool _persistEnabled;
24 | late String _locationJSON;
25 | JsonEncoder _encoder = new JsonEncoder.withIndent(' ');
26 |
27 | @override
28 | void initState() {
29 | _enabled = false;
30 | _persistEnabled = true;
31 | _locationJSON = "Toggle the switch to start tracking.";
32 |
33 | super.initState();
34 | initPlatformState();
35 | }
36 |
37 | // Platform messages are asynchronous, so we initialize in an async method.
38 | Future initPlatformState() async {
39 |
40 | bg.BackgroundGeolocation.onLocation((bg.Location location) {
41 | print('[location] $location');
42 | setState(() {
43 | _locationJSON = _encoder.convert(location.toMap());
44 | });
45 | });
46 |
47 | BackgroundGeolocationFirebase.configure(BackgroundGeolocationFirebaseConfig(
48 | locationsCollection: "locations",
49 | geofencesCollection: "geofences",
50 | updateSingleDocument: false
51 | ));
52 |
53 | bg.BackgroundGeolocation.ready(bg.Config(
54 | debug: true,
55 | distanceFilter: 50,
56 | logLevel: bg.Config.LOG_LEVEL_VERBOSE,
57 | stopTimeout: 1,
58 | stopOnTerminate: false,
59 | startOnBoot: true
60 | )).then((bg.State state) {
61 | setState(() {
62 | _enabled = state.enabled;
63 | });
64 | });
65 |
66 | // If the widget was removed from the tree while the asynchronous platform
67 | // message was in flight, we want to discard the reply rather than calling
68 | // setState to update our non-existent appearance.
69 | if (!mounted) return;
70 | }
71 |
72 |
73 | void _onClickEnable(bool enabled) {
74 | setState(() {
75 | _enabled = enabled;
76 | });
77 |
78 | if (enabled) {
79 | bg.BackgroundGeolocation.start();
80 | } else {
81 | bg.BackgroundGeolocation.stop();
82 | }
83 | }
84 |
85 | void _onClickEnablePersist() {
86 | setState(() {
87 | _persistEnabled = !_persistEnabled;
88 | });
89 |
90 | if (_persistEnabled) {
91 | bg.BackgroundGeolocation.setConfig(bg.Config(
92 | persistMode: bg.Config.PERSIST_MODE_ALL
93 | ));
94 | } else {
95 | bg.BackgroundGeolocation.setConfig(bg.Config(
96 | persistMode: bg.Config.PERSIST_MODE_NONE
97 | ));
98 | }
99 | }
100 |
101 | @override
102 | Widget build(BuildContext context) {
103 | return new MaterialApp(
104 | home: new Scaffold(
105 | appBar: new AppBar(
106 | title: const Text('BGGeo Firebase Example', style: TextStyle(color: Colors.black)),
107 | backgroundColor: Colors.amberAccent,
108 | foregroundColor: Colors.black,
109 | actions: [
110 | Switch(value: _enabled, onChanged: _onClickEnable),
111 | ]
112 | ),
113 | body: Text(_locationJSON),
114 | bottomNavigationBar: BottomAppBar(
115 | child: Container(
116 | padding: EdgeInsets.only(left: 5.0, right:5.0),
117 | child: Row(
118 | mainAxisAlignment: MainAxisAlignment.spaceBetween,
119 | children: [
120 | MaterialButton(
121 | //minWidth: 50.0,
122 | child: Icon(Icons.play_arrow, color: Colors.white),
123 | color: Colors.red,
124 | onPressed: _onClickEnablePersist
125 | )
126 | ]
127 | )
128 | )
129 | ),
130 | ),
131 | );
132 | }
133 | }
134 |
--------------------------------------------------------------------------------
/example/pubspec.yaml:
--------------------------------------------------------------------------------
1 | name: backgroundgeolocationfirebaseexample
2 | description: A new Flutter project.
3 |
4 | # The following line prevents the package from being accidentally published to
5 | # pub.dev using `pub publish`. This is preferred for private packages.
6 | publish_to: 'none' # Remove this line if you wish to publish to pub.dev
7 |
8 | # The following defines the version and build number for your application.
9 | # A version number is three numbers separated by dots, like 1.2.43
10 | # followed by an optional build number separated by a +.
11 | # Both the version and the builder number may be overridden in flutter
12 | # build by specifying --build-name and --build-number, respectively.
13 | # In Android, build-name is used as versionName while build-number used as versionCode.
14 | # Read more about Android versioning at https://developer.android.com/studio/publish/versioning
15 | # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
16 | # Read more about iOS versioning at
17 | # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
18 | version: 1.0.0+1
19 |
20 | environment:
21 | sdk: '>=3.3.0 <4.0.0'
22 |
23 | dependencies:
24 | flutter:
25 | sdk: flutter
26 |
27 |
28 | # The following adds the Cupertino Icons font to your application.
29 | # Use with the CupertinoIcons class for iOS style icons.
30 | cupertino_icons: ^1.0.8
31 |
32 | background_geolocation_firebase:
33 | path: ../
34 | flutter_background_geolocation: ^4.16.0
35 |
36 |
37 | dev_dependencies:
38 | flutter_test:
39 | sdk: flutter
40 |
41 | # For information on the generic Dart part of this file, see the
42 | # following page: https://dart.dev/tools/pub/pubspec
43 |
44 | # The following section is specific to Flutter.
45 | flutter:
46 |
47 | # The following line ensures that the Material Icons font is
48 | # included with your application, so that you can use the icons in
49 | # the material Icons class.
50 | uses-material-design: true
51 |
52 | # To add assets to your application, add an assets section, like this:
53 | # assets:
54 | # - images/a_dot_burr.jpeg
55 | # - images/a_dot_ham.jpeg
56 |
57 | # An image asset can refer to one or more resolution-specific "variants", see
58 | # https://flutter.dev/assets-and-images/#resolution-aware.
59 |
60 | # For details regarding adding assets from package dependencies, see
61 | # https://flutter.dev/assets-and-images/#from-packages
62 |
63 | # To add custom fonts to your application, add a fonts section here,
64 | # in this "flutter" section. Each entry in this list should have a
65 | # "family" key with the font family name, and a "fonts" key with a
66 | # list giving the asset and other descriptors for the font. For
67 | # example:
68 | # fonts:
69 | # - family: Schyler
70 | # fonts:
71 | # - asset: fonts/Schyler-Regular.ttf
72 | # - asset: fonts/Schyler-Italic.ttf
73 | # style: italic
74 | # - family: Trajan Pro
75 | # fonts:
76 | # - asset: fonts/TrajanPro.ttf
77 | # - asset: fonts/TrajanPro_Bold.ttf
78 | # weight: 700
79 | #
80 | # For details regarding fonts from package dependencies,
81 | # see https://flutter.dev/custom-fonts/#from-packages
82 |
--------------------------------------------------------------------------------
/example/test/widget_test.dart:
--------------------------------------------------------------------------------
1 | // This is a basic Flutter widget test.
2 | //
3 | // To perform an interaction with a widget in your test, use the WidgetTester
4 | // utility that Flutter provides. For example, you can send tap and scroll
5 | // gestures. You can also use WidgetTester to find child widgets in the widget
6 | // tree, read text, and verify that the values of widget properties are correct.
7 |
8 | import 'package:flutter/material.dart';
9 | import 'package:flutter_test/flutter_test.dart';
10 |
11 | import 'package:backgroundgeolocationfirebaseexample/main.dart';
12 |
13 | void main() {
14 | testWidgets('Counter increments smoke test', (WidgetTester tester) async {
15 | // Build our app and trigger a frame.
16 | await tester.pumpWidget(MyApp());
17 |
18 | // Verify that our counter starts at 0.
19 | expect(find.text('0'), findsOneWidget);
20 | expect(find.text('1'), findsNothing);
21 |
22 | // Tap the '+' icon and trigger a frame.
23 | await tester.tap(find.byIcon(Icons.add));
24 | await tester.pump();
25 |
26 | // Verify that our counter has incremented.
27 | expect(find.text('0'), findsNothing);
28 | expect(find.text('1'), findsOneWidget);
29 | });
30 | }
31 |
--------------------------------------------------------------------------------
/help/INSTALL-ANDROID.md:
--------------------------------------------------------------------------------
1 | # Android Setup
2 |
3 | ## Gradle Configuration
4 |
5 | ### :open_file_folder: **`android/build.gradle`**
6 |
7 | - Add the following **required** `maven` repo url:
8 |
9 | ```diff
10 | allprojects { // <-- IMPORTANT: allprojects
11 | repositories {
12 | google()
13 | mavenCentral()
14 | // [required] flutter_background_geolocation
15 | maven { url "${project(':flutter_background_geolocation').projectDir}/libs" }
16 | // [required] background_fetch
17 | maven { url "${project(':background_fetch').projectDir}/libs" }
18 | + // [required] background_geolocation_firebase
19 | + maven { url "${project(':background_geolocation_firebase').projectDir}/libs" }
20 | }
21 | }
22 | ```
23 |
24 | - #### If you're using `flutter >= 3.19.0` ([New Android Architecture](https://docs.flutter.dev/release/breaking-changes/flutter-gradle-plugin-apply)):
25 |
26 | ```diff
27 | +ext {
28 | + compileSdkVersion = 34 // or higher / as desired
29 | + targetSdkVersion = 34 // or higher / as desired
30 | + minSdkVersion = 21 // Required minimum
31 | + FirebaseSDKVersion = "33.4.0" // or as desired.
32 | +}
33 | ```
34 |
35 | - #### Otherwise for `flutter < 3.19.0` (Old Android Architecture):
36 |
37 | ```diff
38 |
39 | buildscript {
40 | ext.kotlin_version = '1.3.0' // Must use 1.3.0 OR HIGHER
41 | + ext {
42 | + compileSdkVersion = 34 // or higher / as desired
43 | + targetSdkVersion = 34 // or higher / as desired
44 | + minSdkVersion = 21 // Required minimum
45 | + FirebaseSDKVersion = "33.4.0" // or as desired.
46 | + }
47 | }
48 | ```
49 |
50 | > [!NOTE]
51 | > the param __`ext.FirebaseSdkVersion`__ controls the imported version of the *Firebase SDK* (`com.google.firebase:firebase-bom`). Consult the [Firebase Release Notes](https://firebase.google.com/support/release-notes/android?_gl=1*viqpog*_up*MQ..*_ga*MTE1NjI2MDkuMTcyOTA4ODY0MQ..*_ga_CW55HF8NVT*MTcyOTA4ODY0MS4xLjAuMTcyOTA4ODY0MS4wLjAuMA..#latest_sdk_versions) to determine the latest version of the *Firebase* SDK
52 |
53 |
54 |
55 | ### :open_file_folder: **`android/settings.gradle`**
56 | - Add the `google-services` plugin (if you haven't already):
57 |
58 | ```diff
59 | plugins {
60 | id "dev.flutter.flutter-plugin-loader" version "1.0.0"
61 | id "com.android.application" version "7.3.1" apply false
62 | id "org.jetbrains.kotlin.android" version "1.7.10" apply false
63 | + id 'com.google.gms.google-services' version '4.3.15' apply false // Or any desired version.
64 | }
65 | ```
66 |
67 | ### :open_file_folder: **`android/app/build.gradle`**
68 | - In your app level `build.gradle`, apply the `google-services` plugin:
69 |
70 | ```diff
71 | plugins {
72 | id "com.android.application"
73 | id "kotlin-android"
74 | id "dev.flutter.flutter-gradle-plugin"
75 | + id "com.google.gms.google-services"
76 | }
77 | ```
78 |
79 | ### :open_file_folder: **`google-services.json`**
80 |
81 | Download your `google-services.json` from the [*Firebase Console*](https://console.firebase.google.com). Copy the file to your `android/app` folder.
82 |
83 | ## License Key
84 |
85 | If you've [purchased a license](https://shop.transistorsoft.com/products/background-geolocation-firebase), add your license key to the `AndroidManifest.xml`. If you haven't purchased a key, the SDK is fully functional in debug builds so you can try [before you buy](https://shop.transistorsoft.com/products/background-geolocation-firebase).
86 |
87 | :open_file_folder: **`android/app/src/main/AndroidManifest.xml`**
88 |
89 | ```diff
90 |
92 |
93 |
99 |
100 |
101 |
102 |
103 | +
104 | +
105 | .
106 | .
107 | .
108 |
109 |
110 |
111 | ```
112 |
113 | :information_source: [Purchase a License](https://shop.transistorsoft.com/products/background-geolocation-firebase)
114 |
--------------------------------------------------------------------------------
/help/INSTALL-IOS.md:
--------------------------------------------------------------------------------
1 | # iOS Setup
2 |
3 | ### :open_file_folder: Open your **`AppDelegate.m`** or **`AppDelegate.swift`**:
4 |
5 |
6 | #### :open_file_folder: __`AppDelegate.m`__
7 | ```diff
8 | #include "AppDelegate.h"
9 | #include "GeneratedPluginRegistrant.h"
10 |
11 | +@import FirebaseCore
12 |
13 | @implementation AppDelegate
14 |
15 | - (BOOL)application:(UIApplication *)application
16 | didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
17 | [GeneratedPluginRegistrant registerWithRegistry:self];
18 | // Override point for customization after application launch.
19 | + [FIRApp configure];
20 | return [super application:application didFinishLaunchingWithOptions:launchOptions];
21 | }
22 |
23 | @end
24 | ```
25 |
26 | #### :open_file_folder: __`AppDelgate.swift`__:
27 |
28 | ```diff
29 | import UIKit
30 | import Flutter
31 | +import FirebaseCore;
32 |
33 | @main
34 | @objc class AppDelegate: FlutterAppDelegate {
35 | override func application(
36 | _ application: UIApplication,
37 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
38 | ) -> Bool {
39 | GeneratedPluginRegistrant.register(with: self)
40 | + FirebaseApp.configure()
41 | return super.application(application, didFinishLaunchingWithOptions: launchOptions)
42 | }
43 | }
44 | ```
45 |
46 |
47 | ### **`Google-Services-Info.plist`**
48 |
49 | From your [*Firebase Console*](https://console.firebase.google.com), copy your downloaded `Google-Services-Info.plist` file into your application:
50 |
51 | 
52 |
--------------------------------------------------------------------------------
/ios/.gitignore:
--------------------------------------------------------------------------------
1 | .idea/
2 | .vagrant/
3 | .sconsign.dblite
4 | .svn/
5 |
6 | .DS_Store
7 | *.swp
8 | profile
9 |
10 | DerivedData/
11 | build/
12 | GeneratedPluginRegistrant.h
13 | GeneratedPluginRegistrant.m
14 |
15 | .generated/
16 |
17 | *.pbxuser
18 | *.mode1v3
19 | *.mode2v3
20 | *.perspectivev3
21 |
22 | !default.pbxuser
23 | !default.mode1v3
24 | !default.mode2v3
25 | !default.perspectivev3
26 |
27 | xcuserdata
28 |
29 | *.moved-aside
30 |
31 | *.pyc
32 | *sync/
33 | Icon?
34 | .tags*
35 |
36 | /Flutter/Generated.xcconfig
37 |
--------------------------------------------------------------------------------
/ios/Assets/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/transistorsoft/flutter_background_geolocation_firebase/71e2423dffd512814107151f193421d2f3990ae3/ios/Assets/.gitkeep
--------------------------------------------------------------------------------
/ios/Classes/BackgroundGeolocationFirebasePlugin.h:
--------------------------------------------------------------------------------
1 | #import
2 |
3 | @interface BackgroundGeolocationFirebasePlugin : NSObject
4 |
5 | @property (nonatomic) NSString* locationsCollection;
6 | @property (nonatomic) NSString* geofencesCollection;
7 | @property (nonatomic) BOOL updateSingleDocument;
8 |
9 | @end
10 |
--------------------------------------------------------------------------------
/ios/Classes/BackgroundGeolocationFirebasePlugin.m:
--------------------------------------------------------------------------------
1 | #import "BackgroundGeolocationFirebasePlugin.h"
2 |
3 | @import FirebaseCore;
4 | @import FirebaseFirestore;
5 |
6 | static NSString *const PLUGIN_PATH = @"com.transistorsoft/flutter_background_geolocation_firebase";
7 | static NSString *const METHOD_CHANNEL_NAME = @"methods";
8 |
9 | static NSString *const ACTION_CONFIGURE = @"configure";
10 |
11 | static NSString *const PERSIST_EVENT = @"TSLocationManager:PersistEvent";
12 |
13 | static NSString *const FIELD_LOCATIONS_COLLECTION = @"locationsCollection";
14 | static NSString *const FIELD_GEOFENCES_COLLECTION = @"geofencesCollection";
15 | static NSString *const FIELD_UPDATE_SINGLE_DOCUMENT = @"updateSingleDocument";
16 |
17 | static NSString *const DEFAULT_LOCATIONS_COLLECTION = @"locations";
18 | static NSString *const DEFAULT_GEOFENCES_COLLECTION = @"geofences";
19 |
20 |
21 | @implementation BackgroundGeolocationFirebasePlugin {
22 | BOOL isRegistered;
23 | }
24 |
25 |
26 | + (void)registerWithRegistrar:(NSObject*)registrar {
27 | NSString *methodPath = [NSString stringWithFormat:@"%@/%@", PLUGIN_PATH, METHOD_CHANNEL_NAME];
28 | FlutterMethodChannel* channel = [FlutterMethodChannel methodChannelWithName:methodPath binaryMessenger:[registrar messenger]];
29 |
30 | BackgroundGeolocationFirebasePlugin* instance = [[BackgroundGeolocationFirebasePlugin alloc] init];
31 | [registrar addApplicationDelegate:instance];
32 | [registrar addMethodCallDelegate:instance channel:channel];
33 | }
34 |
35 | -(instancetype) init {
36 | self = [super init];
37 | if (self) {
38 | isRegistered = NO;
39 | _locationsCollection = DEFAULT_LOCATIONS_COLLECTION;
40 | _geofencesCollection = DEFAULT_GEOFENCES_COLLECTION;
41 | _updateSingleDocument = NO;
42 | }
43 |
44 | return self;
45 | }
46 |
47 | - (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result {
48 | if ([self method:call.method is:ACTION_CONFIGURE]) {
49 | [self configure:call.arguments result:result];
50 | } else {
51 | result(FlutterMethodNotImplemented);
52 | }
53 | }
54 |
55 | -(void) configure:(NSDictionary*)config result:(FlutterResult)result {
56 | if (config[FIELD_LOCATIONS_COLLECTION]) {
57 | _locationsCollection = config[FIELD_LOCATIONS_COLLECTION];
58 | }
59 | if (config[FIELD_GEOFENCES_COLLECTION]) {
60 | _geofencesCollection = config[FIELD_GEOFENCES_COLLECTION];
61 | }
62 | if (config[FIELD_UPDATE_SINGLE_DOCUMENT]) {
63 | _updateSingleDocument = [config[FIELD_UPDATE_SINGLE_DOCUMENT] boolValue];
64 | }
65 |
66 | if (!isRegistered) {
67 | isRegistered = YES;
68 |
69 | // TODO make configurable.
70 | FIRFirestore *db = [FIRFirestore firestore];
71 | FIRFirestoreSettings *settings = [db settings];
72 | [db setSettings:settings];
73 |
74 | [[NSNotificationCenter defaultCenter] addObserver:self
75 | selector:@selector(onPersist:)
76 | name:PERSIST_EVENT
77 | object:nil];
78 | }
79 | result(@(YES));
80 | }
81 |
82 | -(void) onPersist:(NSNotification*)notification {
83 | NSDictionary *data = notification.object;
84 | NSString *collectionName = (data[@"location"][@"geofence"]) ? _geofencesCollection : _locationsCollection;
85 |
86 | dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
87 | FIRFirestore *db = [FIRFirestore firestore];
88 | // Add a new document with a generated ID
89 | if (!self.updateSingleDocument) {
90 | __block FIRDocumentReference *ref = [[db collectionWithPath:collectionName] addDocumentWithData:notification.object completion:^(NSError * _Nullable error) {
91 | if (error != nil) {
92 | NSLog(@"Error adding document: %@", error);
93 | } else {
94 | NSLog(@"Document added with ID: %@", ref.documentID);
95 | }
96 | }];
97 | } else {
98 | [[db documentWithPath:collectionName] setData:notification.object completion:^(NSError * _Nullable error) {
99 | if (error != nil) {
100 | NSLog(@"Error writing document: %@", error);
101 | } else {
102 | NSLog(@"Document successfully written");
103 | }
104 | }];
105 | }
106 | });
107 | }
108 |
109 | -(void) dealloc {
110 | [[NSNotificationCenter defaultCenter] removeObserver:self];
111 | }
112 |
113 |
114 | - (BOOL) method:(NSString*)method is:(NSString*)action {
115 | return [method isEqualToString:action];
116 | }
117 |
118 |
119 | @end
120 |
--------------------------------------------------------------------------------
/ios/background_geolocation_firebase.podspec:
--------------------------------------------------------------------------------
1 | require 'yaml'
2 | pubspec = YAML.load_file('../pubspec.yaml')
3 |
4 | #
5 | # To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html
6 | #
7 | Pod::Spec.new do |s|
8 | s.name = pubspec['name']
9 | s.version = pubspec['version']
10 | s.summary = pubspec['description']
11 | s.description = pubspec['description']
12 | s.homepage = pubspec['homepage']
13 |
14 | s.license = { :file => '../LICENSE' }
15 | s.author = { 'Transistor Software' => 'info@transistorsoft.com' }
16 | s.source = { :path => '.' }
17 | s.source_files = 'Classes/**/*'
18 | s.public_header_files = 'Classes/**/*.h'
19 | s.dependency 'Flutter'
20 | #s.dependency 'Firebase/Core'
21 | #s.dependency 'Firebase/Firestore'
22 | s.dependency 'FirebaseFirestore'
23 | s.static_framework = true
24 |
25 | s.ios.deployment_target = '8.0'
26 | end
27 |
28 |
--------------------------------------------------------------------------------
/lib/background_geolocation_firebase.dart:
--------------------------------------------------------------------------------
1 | import 'dart:async';
2 | import 'package:flutter/services.dart';
3 |
4 | const _PLUGIN_PATH =
5 | "com.transistorsoft/flutter_background_geolocation_firebase";
6 | const _METHOD_CHANNEL_NAME = "$_PLUGIN_PATH/methods";
7 |
8 | const _BACKGROUND_GEOLOCATION_PLUGIN_PATH =
9 | "com.transistorsoft/flutter_background_geolocation";
10 | const _BACKGROUND_GEOLOCATION_METHOD_CHANNEL_NAME =
11 | "$_BACKGROUND_GEOLOCATION_PLUGIN_PATH/methods";
12 |
13 | /// Configuration
14 | ///
15 | /// ```dart
16 | /// BackgroundFetch.configure(BackgroundFetchConfig(
17 | /// minimumFetchInterval: 15,
18 | /// stopOnTerminate: false,
19 | /// startOnBoot: true,
20 | /// enableHeadless: true
21 | /// ), () {
22 | /// // This callback is typically fired every 15 minutes while in the background.
23 | /// print('[BackgroundFetch] Event received.');
24 | /// // IMPORTANT: You must signal completion of your fetch task or the OS could
25 | /// // punish your app for spending much time in the background.
26 | /// BackgroundFetch.finish();
27 | /// })
28 | ///
29 | class BackgroundGeolocationFirebaseConfig {
30 | /// The collection name to post location events to. Defaults to `"locations"`.
31 | ///
32 | /// ```dart
33 | /// BackgroundGeolocationFirebase.configure(BackgroundGeolocationFirebaseConfig(
34 | /// locationsCollection: '/locations'
35 | /// ));
36 | ///
37 | /// BackgroundGeolocationFirebase.configure(BackgroundGeolocationFirebaseConfig(
38 | /// locationsCollection: '/users/123/locations'
39 | /// ));
40 | ///
41 | /// BackgroundGeolocationFirebase.configure(BackgroundGeolocationFirebaseConfig(
42 | /// locationsCollection: '/users/123/routes/456/locations'
43 | /// ));
44 | /// ```
45 | ///
46 | String? locationsCollection;
47 |
48 | /// The collection name to post geofence events to. Defaults to `"geofences"`.
49 | ///
50 | /// ```dart
51 | /// BackgroundGeolocationFirebase.configure(BackgroundGeolocationFirebaseConfig(
52 | /// geofencesCollection: '/geofences'
53 | /// ));
54 | ///
55 | /// BackgroundGeolocationFirebase.configure(BackgroundGeolocationFirebaseConfig(
56 | /// locationsCollection: '/users/123/geofences'
57 | /// ));
58 | ///
59 | /// BackgroundGeolocationFirebase.configure(BackgroundGeolocationFirebaseConfig(
60 | /// locationsCollection: '/users/123/routes/456/geofences'
61 | /// ));
62 | /// ```
63 | String? geofencesCollection;
64 |
65 | /// Instruct the plugin to update a single document in Firebase rather than creating a new document for each location / geofence.
66 | ///
67 | /// In this case, you would presumably implement a Firebase Function to deal with updates upon this single document and store the location in some other collection as desired. If this is your use-case, you'll also need to ensure you configure your `ocationsCollection` / `geofencesCollection` accordingly with an even number of "parts", taking the form /collection_name/document_id, eg:
68 | ///
69 | /// ```dart
70 | /// BackgroundGeolocationFirebase.configure(BackgroundGeolocationFirebaseConfig(
71 | /// locationsCollection: '/locations/latest' // <-- 2 "parts": even
72 | /// ));
73 | ///
74 | /// // or
75 | /// BackgroundGeolocationFirebase.configure(BackgroundGeolocationFirebaseConfig(
76 | /// locationsCollection: '/users/123/routes/456/the_location' // <-- 4 "parts": even
77 | /// ));
78 | ///
79 | /// // Don't use an odd number of "parts"
80 | /// BackgroundGeolocationFirebase.configure(BackgroundGeolocationFirebaseConfig(
81 | /// locationsCollection: '/users/123/latest_location' // <-- 3 "parts": odd!! No!
82 | /// ));
83 | /// ```
84 | bool? updateSingleDocument;
85 |
86 | BackgroundGeolocationFirebaseConfig(
87 | {this.locationsCollection,
88 | this.geofencesCollection,
89 | this.updateSingleDocument});
90 |
91 | Map toMap() {
92 | Map config = {};
93 | if (locationsCollection != null)
94 | config['locationsCollection'] = locationsCollection;
95 | if (geofencesCollection != null)
96 | config['geofencesCollection'] = geofencesCollection;
97 | if (updateSingleDocument != null)
98 | config['updateSingleDocument'] = updateSingleDocument;
99 | return config;
100 | }
101 | }
102 |
103 | /// BackgroundGeolocationFirebase API
104 | ///
105 | /// Firebase Proxy for [Flutter Background Geolocation](https://github.com/transistorsoft/flutter_background_geolocation). The plugin will automatically post locations to your own Firestore database, overriding the `flutter_background_geolocation` plugin's SQLite / HTTP services.
106 | ///
107 | class BackgroundGeolocationFirebase {
108 | static const MethodChannel _methodChannel =
109 | const MethodChannel(_METHOD_CHANNEL_NAME);
110 |
111 | static const MethodChannel _backgroundGeolocationMethodChannel =
112 | const MethodChannel(_BACKGROUND_GEOLOCATION_METHOD_CHANNEL_NAME);
113 |
114 | /// Configures the plugin's [BackgroundGeoloationFirebaseConfig]
115 | ///
116 | /// ```dart
117 | /// // 1. First configure the Firebase Adapter.
118 | /// BackgroundGeolocationFirebase.configure(BackgroundGeolocationFirebaseConfig(
119 | /// locationsCollection: "locations",
120 | /// geofencesCollection: "geofences",
121 | /// updateSingleDocument: false
122 | /// ));
123 | ///
124 | /// // 2. Configure BackgroundGeolocation as usual.
125 | /// bg.BackgroundGeolocation.ready(bg.Config(
126 | /// debug: true,
127 | /// logLevel: bg.Config.LOG_LEVEL_VERBOSE,
128 | /// stopOnTerminate: false,
129 | /// startOnBoot: true
130 | /// )).then((bg.State state) {
131 | /// if (!state.enabled) {
132 | /// bg.BackgroundGeolocation.start();
133 | /// }
134 | /// ));
135 | /// ```
136 | static Future configure(BackgroundGeolocationFirebaseConfig config) {
137 | Completer completer = new Completer();
138 |
139 | _methodChannel
140 | .invokeMethod('configure', config.toMap())
141 | .then((dynamic status) {
142 | completer.complete(status);
143 | }).catchError((dynamic e) {
144 | completer.completeError(e);
145 | });
146 |
147 | _backgroundGeolocationMethodChannel.invokeMethod(
148 | 'registerPlugin', 'firebaseproxy');
149 |
150 | return completer.future;
151 | }
152 | }
153 |
--------------------------------------------------------------------------------
/pubspec.yaml:
--------------------------------------------------------------------------------
1 | name: background_geolocation_firebase
2 | description: A Firebase adapter for the flutter_background_geolocation plugin. Automatically syncs recorded locations to your Firestore database.
3 | version: 1.1.0
4 | homepage: https://github.com/transistorsoft/flutter_background_geolocation_firebase
5 |
6 | environment:
7 | sdk: '>=2.12.0 <4.0.0'
8 | flutter: ">=1.20.0"
9 |
10 | dependencies:
11 | flutter:
12 | sdk: flutter
13 | flutter:
14 | plugin:
15 | platforms:
16 | android:
17 | package: com.transistorsoft.flutter.backgroundgeolocation
18 | pluginClass: BackgroundGeolocationFirebasePlugin
19 | ios:
20 | pluginClass: BackgroundGeolocationFirebasePlugin
21 |
--------------------------------------------------------------------------------
/scripts/logcat:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | adb logcat *:S flutter:V, TSBackgroundFetch:V
3 |
--------------------------------------------------------------------------------
/scripts/simulate-fetch:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | adb shell cmd jobscheduler run -f com.transistorsoft.flutter.backgroundfetch.backgroundfetchexample 999
3 |
--------------------------------------------------------------------------------