as-app/app.config.js

209 lines
8 KiB
JavaScript

const packageJson = require("./package.json");
const { version, customExpoVersioning } = packageJson;
const withXcode15Fix = require("./plugins/withXcode15Fix");
let config = {
expo: {
name: "Alerte Secours",
slug: "alerte-secours",
runtimeVersion: `${version.split(".")[0]}.0.0`,
version,
updates: {
url: "https://expo-updates.alertesecours.fr/api/manifest?project=alerte-secours&channel=release",
enabled: true,
checkAutomatically: "ON_ERROR_RECOVERY",
fallbackToCacheTimeout: 0,
codeSigningCertificate: "./keys/certificate.pem",
codeSigningPrivateKey: "./keys/private-key.pem",
codeSigningMetadata: {
keyid: "main",
alg: "rsa-v1_5-sha256",
},
},
orientation: "portrait",
userInterfaceStyle: "automatic",
splash: {
image: "./src/assets/img/splashscreen.png",
backgroundColor: "#364fc7",
resizeMode: "contain",
},
// Add notification configuration at root level
notification: {
androidMode: "default",
androidCollapsedTitle: "#{unread_notifications} nouvelles notifications",
// Use mipmap for the notification icon
icon: "./src/assets/img/notification-android.png",
color: "#364fc7",
},
platforms: ["ios", "android"],
android: {
versionCode: customExpoVersioning.versionCode,
googleServicesFile:
process.env.ANDROID_GOOGLE_SERVICES_FILE_PATH ||
"./android/app/google-services.json",
package: "com.alertesecours",
intentFilters: [
{
action: "VIEW",
data: {
scheme: "https",
host: "app.alertesecours.fr",
pathPrefix: "/",
},
category: ["BROWSABLE", "DEFAULT"],
autoVerify: true,
},
],
permissions: [
"android.permission.ACCESS_COARSE_LOCATION",
"android.permission.ACCESS_FINE_LOCATION",
"android.permission.CALL_PHONE",
"android.permission.INTERNET",
"android.permission.MODIFY_AUDIO_SETTINGS",
"android.permission.READ_CONTACTS",
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.RECORD_AUDIO",
"android.permission.SYSTEM_ALERT_WINDOW",
"android.permission.VIBRATE",
"android.permission.WRITE_CONTACTS",
"android.permission.WRITE_EXTERNAL_STORAGE",
],
},
ios: {
buildNumber: customExpoVersioning.buildNumber.toString(),
googleServicesFile:
process.env.IOS_GOOGLE_SERVICES_FILE_PATH ||
"./ios/GoogleService-Info.plist",
userInterfaceStyle: "automatic",
supportsTablet: true,
bundleIdentifier: "com.alertesecours.alertesecours",
associatedDomains: ["applinks:app.alertesecours.fr"],
icon: "./src/assets/img/logo.png",
entitlements: {
"aps-environment": "production",
},
config: {
usesNonExemptEncryption: false,
},
infoPlist: {
NSCameraUsageDescription:
"Alerte-Secours requiert l'accès à votre caméra pour vous permettre de prendre une photo de profil. Cette fonctionnalité est utilisée uniquement lors de la personnalisation de votre compte.",
NSContactsUsageDescription:
"Alerte-Secours demande l'accès à vos contacts pour afficher les noms associés aux numéros de téléphone. Ces informations restent strictement sur votre appareil et ne sont jamais partagées ni transmises à des tiers.",
NSLocationAlwaysAndWhenInUseUsageDescription:
"Alerte-Secours nécessite la localisation en arrière-plan pour vous alerter en temps réel lorsqu'une personne à proximité a besoin d'aide urgente. Cette fonction est essentielle pour permettre une intervention rapide et efficace en cas d'urgence.",
NSLocationWhenInUseUsageDescription:
"Alerte-Secours utilise votre localisation pour identifier et vous diriger vers les personnes nécessitant une assistance à proximité. Cette fonction est cruciale pour une intervention rapide et précise en cas d'urgence.",
NSLocationAccuracyReduced:
"Alerte-Secours nécessite une localisation précise pour optimiser l'assistance aux personnes en détresse. Cette précision est essentielle pour localiser efficacement et rejoindre rapidement les personnes ayant besoin d'aide.",
NSMicrophoneUsageDescription:
"Alerte-Secours requiert l'accès au microphone pour l'enregistrement de messages vocaux. Cette fonction permet une communication plus rapide et plus claire en situation d'urgence.",
NSMotionUsageDescription:
"Alerte-Secours utilise la détection de mouvement pour optimiser la géolocalisation en arrière-plan, réduisant ainsi la consommation de batterie. Aucune donnée de mouvement n'est stockée ni transmise.",
NSPhotoLibraryUsageDescription:
"Alerte-Secours demande l'accès à votre photothèque uniquement pour vous permettre de sélectionner une photo de profil. Cette fonctionnalité est utilisée exclusivement pour la personnalisation de votre compte.",
NSUserNotificationUsageDescription:
"Alerte-Secours utilise les notifications pour vous informer immédiatement lorsqu'une personne à proximité nécessite une assistance urgente. Ces alertes sont essentielles pour une réponse rapide aux situations d'urgence.",
LSApplicationQueriesSchemes: [
"http",
"https",
"comgooglemaps",
"maps",
"waze",
"citymapper",
"uber",
"lyft",
"transit",
"truckmap",
"waze-na",
"yandexnavi",
"moovit",
"yandexmaps",
"kakaomap",
"szn-mapy",
"mapsme",
"osmand",
"gett",
"nmap",
"dgis",
"tel",
"telprompt",
],
},
UIBackgroundModes: ["location", "fetch", "processing"],
BGTaskSchedulerPermittedIdentifiers: [
"com.transistorsoft.fetch",
"com.transistorsoft.customtask",
],
},
plugins: [
[
"react-native-background-geolocation",
{
license: process.env.BACKGROUND_GEOLOCATION_LICENSE,
hmsLicense: process.env.BACKGROUND_GEOLOCATION_HMS_LICENSE,
},
],
[
"expo-gradle-ext-vars",
{
googlePlayServicesLocationVersion: "21.1.0",
appCompatVersion: "1.4.2",
},
],
"react-native-background-fetch",
"@maplibre/maplibre-react-native",
"expo-location",
"react-native-map-link",
"expo-localization",
"expo-secure-store",
[
"@sentry/react-native/expo",
{
url: process.env.SENTRY_URL,
organization: process.env.SENTRY_ORG,
project: process.env.SENTRY_PROJECT,
android: {
// Android release name format
release: `com.alertesecours@${version}+${customExpoVersioning.versionCode}`,
},
ios: {
// iOS release name format
release: `com.alertesecours.alertesecours@${version}+${customExpoVersioning.buildNumber}`,
},
},
],
"@react-native-firebase/app",
"@react-native-firebase/messaging",
[
// see https://rnfirebase.io/#configure-react-native-firebase-modules
"expo-build-properties",
{
ios: {
useFrameworks: "static",
},
android: {
enableProguardInReleaseBuilds: true,
enableDexGuardInReleaseBuilds: true,
extraProperties: {
"android.nonTransitiveRClass": true,
"android.useAndroidX": true,
},
},
},
],
"./plugins/withXcode15Fix",
"./plugins/withCustomScheme", // Preserve URL schemes during prebuild
],
// Disable Flipper
extra: {
flipperEnabled: false,
},
},
};
// Apply plugins
config = withXcode15Fix(config);
config = require("./plugins/withCustomScheme")(config);
module.exports = config;