@jacques_gordon/expo-mapbox-navigation 1.0.4 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ios/ExpoMapboxNavigation.podspec +1 -1
- package/package.json +1 -1
- package/plugin/index.js +174 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Pod::Spec.new do |s|
|
|
2
2
|
s.name = 'ExpoMapboxNavigation'
|
|
3
|
-
s.version = '1.0.
|
|
3
|
+
s.version = '1.0.6'
|
|
4
4
|
s.summary = 'Expo module for Mapbox turn-by-turn navigation — iOS & Android'
|
|
5
5
|
s.homepage = 'https://github.com/YOUR_GITHUB/expo-mapbox-navigation'
|
|
6
6
|
s.license = { :type => 'MIT' }
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jacques_gordon/expo-mapbox-navigation",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.6",
|
|
4
4
|
"description": "Expo module for Mapbox turn-by-turn navigation — iOS & Android, compatible with Expo SDK 53 Dev Client",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"types": "build/index.d.ts",
|
package/plugin/index.js
ADDED
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
const {
|
|
2
|
+
withInfoPlist,
|
|
3
|
+
withAppBuildGradle,
|
|
4
|
+
withProjectBuildGradle,
|
|
5
|
+
withAndroidManifest,
|
|
6
|
+
createRunOncePlugin,
|
|
7
|
+
} = require("@expo/config-plugins");
|
|
8
|
+
|
|
9
|
+
const withExpoMapboxNavigation = (config, options) => {
|
|
10
|
+
const {
|
|
11
|
+
accessToken,
|
|
12
|
+
mapboxMapsVersion = "11.11.0",
|
|
13
|
+
androidColorOverrides = {},
|
|
14
|
+
} = options || {};
|
|
15
|
+
|
|
16
|
+
if (!accessToken) {
|
|
17
|
+
throw new Error(
|
|
18
|
+
"[expo-mapbox-navigation] accessToken est requis dans la configuration du plugin."
|
|
19
|
+
);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// ── iOS ──
|
|
23
|
+
config = withInfoPlist(config, (cfg) => {
|
|
24
|
+
cfg.modResults["MBXAccessToken"] = accessToken;
|
|
25
|
+
|
|
26
|
+
cfg.modResults["NSLocationWhenInUseUsageDescription"] =
|
|
27
|
+
cfg.modResults["NSLocationWhenInUseUsageDescription"] ??
|
|
28
|
+
"Cette application utilise votre position pour la navigation GPS.";
|
|
29
|
+
|
|
30
|
+
cfg.modResults["NSLocationAlwaysAndWhenInUseUsageDescription"] =
|
|
31
|
+
cfg.modResults["NSLocationAlwaysAndWhenInUseUsageDescription"] ??
|
|
32
|
+
"Cette application utilise votre position en arrière-plan pour la navigation GPS.";
|
|
33
|
+
|
|
34
|
+
cfg.modResults["NSMotionUsageDescription"] =
|
|
35
|
+
cfg.modResults["NSMotionUsageDescription"] ??
|
|
36
|
+
"Cette application utilise le capteur de mouvement pour améliorer la navigation.";
|
|
37
|
+
|
|
38
|
+
const uiBackgroundModes = cfg.modResults["UIBackgroundModes"] ?? [];
|
|
39
|
+
if (!uiBackgroundModes.includes("audio")) uiBackgroundModes.push("audio");
|
|
40
|
+
if (!uiBackgroundModes.includes("location"))
|
|
41
|
+
uiBackgroundModes.push("location");
|
|
42
|
+
cfg.modResults["UIBackgroundModes"] = uiBackgroundModes;
|
|
43
|
+
|
|
44
|
+
return cfg;
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
// ── Android project build.gradle ──
|
|
48
|
+
config = withProjectBuildGradle(config, (cfg) => {
|
|
49
|
+
if (!cfg.modResults.contents.includes("api.mapbox.com/downloads")) {
|
|
50
|
+
cfg.modResults.contents = cfg.modResults.contents.replace(
|
|
51
|
+
/allprojects\s*\{([\s\S]*?)repositories\s*\{/,
|
|
52
|
+
`allprojects {$1repositories {
|
|
53
|
+
maven {
|
|
54
|
+
url 'https://api.mapbox.com/downloads/v2/releases/maven'
|
|
55
|
+
authentication { basic(BasicAuthentication) }
|
|
56
|
+
credentials {
|
|
57
|
+
username = "mapbox"
|
|
58
|
+
password = project.properties['MAPBOX_DOWNLOADS_TOKEN'] ?: System.getenv("MAPBOX_DOWNLOADS_TOKEN") ?: ""
|
|
59
|
+
}
|
|
60
|
+
}`
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
return cfg;
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
// ── Android app build.gradle ──
|
|
67
|
+
config = withAppBuildGradle(config, (cfg) => {
|
|
68
|
+
if (!cfg.modResults.contents.includes("mapbox_access_token")) {
|
|
69
|
+
cfg.modResults.contents = cfg.modResults.contents.replace(
|
|
70
|
+
/defaultConfig\s*\{/,
|
|
71
|
+
`defaultConfig {
|
|
72
|
+
resValue "string", "mapbox_access_token", "${accessToken}"`
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
if (
|
|
77
|
+
mapboxMapsVersion &&
|
|
78
|
+
!cfg.modResults.contents.includes("RNMapboxMapsVersion")
|
|
79
|
+
) {
|
|
80
|
+
cfg.modResults.contents = cfg.modResults.contents.replace(
|
|
81
|
+
/ext\s*\{/,
|
|
82
|
+
`ext {
|
|
83
|
+
RNMapboxMapsVersion = "${mapboxMapsVersion}"`
|
|
84
|
+
);
|
|
85
|
+
|
|
86
|
+
if (!cfg.modResults.contents.includes("RNMapboxMapsVersion")) {
|
|
87
|
+
cfg.modResults.contents = cfg.modResults.contents.replace(
|
|
88
|
+
/^(buildscript\s*\{)/m,
|
|
89
|
+
`ext {
|
|
90
|
+
RNMapboxMapsVersion = "${mapboxMapsVersion}"
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
$1`
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
if (Object.keys(androidColorOverrides).length > 0) {
|
|
99
|
+
const colorResources = Object.entries(androidColorOverrides)
|
|
100
|
+
.map(([name, value]) => ` resValue "color", "${name}", "${value}"`)
|
|
101
|
+
.join("\n");
|
|
102
|
+
|
|
103
|
+
if (!cfg.modResults.contents.includes("androidColorOverrides_injected")) {
|
|
104
|
+
cfg.modResults.contents = cfg.modResults.contents.replace(
|
|
105
|
+
/defaultConfig\s*\{/,
|
|
106
|
+
`defaultConfig {
|
|
107
|
+
${colorResources}
|
|
108
|
+
// androidColorOverrides_injected`
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
return cfg;
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
// ── Android Manifest ──
|
|
117
|
+
config = withAndroidManifest(config, (cfg) => {
|
|
118
|
+
const manifest = cfg.modResults.manifest;
|
|
119
|
+
const permissions = manifest["uses-permission"] ?? [];
|
|
120
|
+
|
|
121
|
+
const addPermission = (name) => {
|
|
122
|
+
if (!permissions.some((p) => p.$?.["android:name"] === name)) {
|
|
123
|
+
permissions.push({ $: { "android:name": name } });
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
addPermission("android.permission.ACCESS_FINE_LOCATION");
|
|
128
|
+
addPermission("android.permission.ACCESS_COARSE_LOCATION");
|
|
129
|
+
addPermission("android.permission.FOREGROUND_SERVICE");
|
|
130
|
+
addPermission("android.permission.FOREGROUND_SERVICE_LOCATION");
|
|
131
|
+
|
|
132
|
+
manifest["uses-permission"] = permissions;
|
|
133
|
+
|
|
134
|
+
const application = manifest.application?.[0];
|
|
135
|
+
if (application) {
|
|
136
|
+
const metaData = application["meta-data"] ?? [];
|
|
137
|
+
|
|
138
|
+
const existingToken = metaData.find(
|
|
139
|
+
(m) => m.$?.["android:name"] === "com.mapbox.token"
|
|
140
|
+
);
|
|
141
|
+
|
|
142
|
+
if (!existingToken) {
|
|
143
|
+
metaData.push({
|
|
144
|
+
$: {
|
|
145
|
+
"android:name": "com.mapbox.token",
|
|
146
|
+
"android:value": accessToken,
|
|
147
|
+
},
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
application["meta-data"] = metaData;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
return cfg;
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
return config;
|
|
158
|
+
};
|
|
159
|
+
|
|
160
|
+
const plugin = createRunOncePlugin(
|
|
161
|
+
withExpoMapboxNavigation,
|
|
162
|
+
"expo-mapbox-navigation",
|
|
163
|
+
"1.0.4"
|
|
164
|
+
);
|
|
165
|
+
|
|
166
|
+
module.exports = plugin;
|
|
167
|
+
module.exports.default = plugin;const plugin = createRunOncePlugin(
|
|
168
|
+
withExpoMapboxNavigation,
|
|
169
|
+
"expo-mapbox-navigation",
|
|
170
|
+
"1.0.6"
|
|
171
|
+
);
|
|
172
|
+
|
|
173
|
+
module.exports = plugin;
|
|
174
|
+
module.exports.default = plugin;
|