Configure app signing, update identifiers for store deployment, and localize dashboard tabs

This commit is contained in:
2026-03-01 22:50:33 +01:00
parent ef0abc2f85
commit 77fa21b572
16 changed files with 96 additions and 37 deletions

View File

@@ -1,3 +1,6 @@
import java.util.Properties
import java.io.FileInputStream
plugins {
id("com.android.application")
id("kotlin-android")
@@ -5,6 +8,12 @@ plugins {
id("dev.flutter.flutter-gradle-plugin")
}
val keystoreProperties = Properties()
val keystorePropertiesFile = rootProject.file("key.properties")
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(FileInputStream(keystorePropertiesFile))
}
android {
namespace = "com.savefamily.app"
compileSdk = flutter.compileSdkVersion
@@ -36,9 +45,18 @@ android {
}
}
signingConfigs {
create("release") {
keyAlias = keystoreProperties["keyAlias"] as String?
keyPassword = keystoreProperties["keyPassword"] as String?
storeFile = keystoreProperties["storeFile"]?.let { file(it as String) }
storePassword = keystoreProperties["storePassword"] as String?
}
}
buildTypes {
release {
signingConfig = signingConfigs.getByName("debug")
signingConfig = signingConfigs.getByName("release")
proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro")
}
debug {
@@ -58,7 +76,7 @@ android {
}
create("staging") {
dimension = "app"
applicationIdSuffix = ".staging"
applicationIdSuffix = ".stag"
resValue("string", "app_name", "SF Staging")
}
create("production") {

View File

@@ -76,12 +76,12 @@
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
AA0000011234567800000002 /* AntelopRelease.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = AntelopRelease.plist; sourceTree = "<group>"; };
AA0000011234567800000003 /* Runner.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Runner.entitlements; sourceTree = "<group>"; };
AA4000010000000000000001 /* Info-development.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Info-development.plist"; sourceTree = "<group>"; };
AA4000010000000000000002 /* Info-staging.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Info-staging.plist"; sourceTree = "<group>"; };
AA5000010000000000000002 /* AntelopRelease-development.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "AntelopRelease-development.plist"; sourceTree = "<group>"; };
AA5000010000000000000004 /* AntelopRelease-staging.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "AntelopRelease-staging.plist"; sourceTree = "<group>"; };
AA5000010000000000000005 /* Runner-development.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "Runner-development.entitlements"; sourceTree = "<group>"; };
AA5000010000000000000006 /* Runner-staging.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "Runner-staging.entitlements"; sourceTree = "<group>"; };
AA4000010000000000000001 /* Info-development.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Info-development.plist"; sourceTree = "<group>"; };
AA4000010000000000000002 /* Info-staging.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Info-staging.plist"; sourceTree = "<group>"; };
AAA974F39BB17DD4221F30F5 /* Pods-RunnerTests.debug-staging.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug-staging.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug-staging.xcconfig"; sourceTree = "<group>"; };
B4AB34F476573EEFF80A6AFD /* Pods-Runner.profile-staging.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile-staging.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile-staging.xcconfig"; sourceTree = "<group>"; };
B6E39156F3210C2E3A4F7DB3 /* Pods-Runner.release-staging.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release-staging.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release-staging.xcconfig"; sourceTree = "<group>"; };
@@ -547,7 +547,7 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = "Runner/Runner-development.entitlements";
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = YC6P64GJ93;
DEVELOPMENT_TEAM = KQ73NP6L4Q;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = "Runner/Info-development.plist";
LD_RUNPATH_SEARCH_PATHS = (
@@ -616,7 +616,7 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon-development;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = "AppIcon-development";
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
@@ -673,7 +673,7 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon-development;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = "AppIcon-development";
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
@@ -731,7 +731,7 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = "Runner/Runner-development.entitlements";
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = YC6P64GJ93;
DEVELOPMENT_TEAM = KQ73NP6L4Q;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = "Runner/Info-development.plist";
LD_RUNPATH_SEARCH_PATHS = (
@@ -755,7 +755,7 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = "Runner/Runner-development.entitlements";
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = YC6P64GJ93;
DEVELOPMENT_TEAM = KQ73NP6L4Q;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = "Runner/Info-development.plist";
LD_RUNPATH_SEARCH_PATHS = (
@@ -1104,14 +1104,14 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = "Runner/Runner-staging.entitlements";
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = YC6P64GJ93;
DEVELOPMENT_TEAM = KQ73NP6L4Q;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = "Runner/Info-staging.plist";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.savefamily.app.staging;
PRODUCT_BUNDLE_IDENTIFIER = com.savefamily.app.stag;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
@@ -1128,7 +1128,7 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = YC6P64GJ93;
DEVELOPMENT_TEAM = KQ73NP6L4Q;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@@ -1152,14 +1152,14 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = "Runner/Runner-staging.entitlements";
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = YC6P64GJ93;
DEVELOPMENT_TEAM = KQ73NP6L4Q;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = "Runner/Info-staging.plist";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.savefamily.app.staging;
PRODUCT_BUNDLE_IDENTIFIER = com.savefamily.app.stag;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
@@ -1175,7 +1175,7 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = YC6P64GJ93;
DEVELOPMENT_TEAM = KQ73NP6L4Q;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@@ -1198,14 +1198,14 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = "Runner/Runner-staging.entitlements";
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = YC6P64GJ93;
DEVELOPMENT_TEAM = KQ73NP6L4Q;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = "Runner/Info-staging.plist";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.savefamily.app.staging;
PRODUCT_BUNDLE_IDENTIFIER = com.savefamily.app.stag;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
@@ -1221,7 +1221,7 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = YC6P64GJ93;
DEVELOPMENT_TEAM = KQ73NP6L4Q;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@@ -1369,7 +1369,7 @@
AA1000010000000000000006 /* Profile-production */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
defaultConfigurationName = "Debug-development";
};
97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
isa = XCConfigurationList;

View File

@@ -5,7 +5,7 @@
<key>fr.antelop.alertLoggingEnabled</key>
<string>The Antelop SDK is logging.</string>
<key>fr.antelop.applicationGroupIdentifier</key>
<string>group.com.savefamily.app.staging</string>
<string>group.com.savefamily.app.stag</string>
<key>fr.antelop.initialConnectionTimeout</key>
<integer>60</integer>
<key>fr.antelop.application_id</key>

View File

@@ -5,7 +5,7 @@
<key>fr.antelop.alertLoggingEnabled</key>
<string>The Antelop SDK is logging.</string>
<key>fr.antelop.applicationGroupIdentifier</key>
<string>group.com.savefamily.app</string>
<string>group.com.savefamily.app.prod</string>
<key>fr.antelop.initialConnectionTimeout</key>
<integer>60</integer>
<key>fr.antelop.application_id</key>

View File

@@ -49,6 +49,10 @@
<true/>
<key>NSCameraUsageDescription</key>
<string>Necesitamos la cámara para escanear códigos QR</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>Usamos tu ubicación para verificar la seguridad de las transacciones.</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Usamos tu ubicación para verificar la seguridad de las transacciones.</string>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
<key>NSFaceIDUsageDescription</key>

View File

@@ -4,7 +4,7 @@
<dict>
<key>com.apple.security.application-groups</key>
<array>
<string>group.com.savefamily.app.staging</string>
<string>group.com.savefamily.app.stag</string>
</array>
</dict>
</plist>

View File

@@ -4,7 +4,7 @@
<dict>
<key>com.apple.security.application-groups</key>
<array>
<string>group.com.savefamily.app</string>
<string>group.com.savefamily.app.prod</string>
</array>
</dict>
</plist>

View File

@@ -5,6 +5,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart';
import 'package:navigation/navigation.dart';
import 'package:sf_localizations/sf_localizations.dart';
final mainShellViewModelProvider =
NotifierProvider.autoDispose<MainShellViewModel, MainShellViewState>(
@@ -36,19 +37,19 @@ class DashboardScreen extends ConsumerWidget {
viewModel.onTabChanged(index);
navigationShell.goBranch(index);
},
destinations: const [
NavigationDestination(icon: Icon(Icons.home_outlined), label: "Home"),
destinations: [
NavigationDestination(icon: const Icon(Icons.home_outlined), label: context.translate(I18n.dashboardTabHome)),
NavigationDestination(
icon: Icon(Icons.watch_outlined),
label: "Activity",
icon: const Icon(Icons.watch_outlined),
label: context.translate(I18n.dashboardTabActivity),
),
NavigationDestination(
icon: Icon(Icons.notifications_outlined),
label: "Notifications",
icon: const Icon(Icons.notifications_outlined),
label: context.translate(I18n.dashboardTabNotifications),
),
NavigationDestination(
icon: Icon(Icons.person_outline_outlined),
label: "Profile",
icon: const Icon(Icons.person_outline_outlined),
label: context.translate(I18n.dashboardTabProfile),
),
],
),

View File

@@ -23,6 +23,8 @@ dependencies:
#packages dependencies go here
design_system:
path: ../../packages/design_system
sf_localizations:
path: ../../packages/sf_localizations
#dependencies go here
navigation: ^0.0.1

View File

@@ -458,5 +458,10 @@
"profileSettingsLogout": "Abmelden",
"profileSettingsLogoutConfirm": "Sind Sie sicher, dass Sie sich abmelden möchten?",
"profileSettingsLogoutError": "Fehler beim Abmelden",
"profileSettingsSave": "Änderungen speichern"
"profileSettingsSave": "Änderungen speichern",
"dashboardTabHome": "Startseite",
"dashboardTabActivity": "Aktivität",
"dashboardTabNotifications": "Benachrichtigungen",
"dashboardTabProfile": "Profil"
}

View File

@@ -458,5 +458,9 @@
"profileSettingsLogout": "Log out",
"profileSettingsLogoutConfirm": "Are you sure you want to log out?",
"profileSettingsLogoutError": "Error logging out",
"profileSettingsSave": "Save changes"
"profileSettingsSave": "Save changes",
"dashboardTabHome": "Home",
"dashboardTabActivity": "Activity",
"dashboardTabNotifications": "Notifications",
"dashboardTabProfile": "Profile"
}

View File

@@ -458,5 +458,9 @@
"profileSettingsLogout": "Cerrar sesión",
"profileSettingsLogoutConfirm": "¿Estás seguro de que deseas cerrar sesión?",
"profileSettingsLogoutError": "Error al cerrar sesión",
"profileSettingsSave": "Guardar cambios"
"profileSettingsSave": "Guardar cambios",
"dashboardTabHome": "Inicio",
"dashboardTabActivity": "Actividad",
"dashboardTabNotifications": "Notificaciones",
"dashboardTabProfile": "Perfil"
}

View File

@@ -458,5 +458,10 @@
"profileSettingsLogout": "Se déconnecter",
"profileSettingsLogoutConfirm": "Êtes-vous sûr de vouloir vous déconnecter ?",
"profileSettingsLogoutError": "Erreur lors de la déconnexion",
"profileSettingsSave": "Enregistrer les modifications"
"profileSettingsSave": "Enregistrer les modifications",
"dashboardTabHome": "Accueil",
"dashboardTabActivity": "Activité",
"dashboardTabNotifications": "Notifications",
"dashboardTabProfile": "Profil"
}

View File

@@ -458,5 +458,10 @@
"profileSettingsLogout": "Esci",
"profileSettingsLogoutConfirm": "Sei sicuro di voler uscire?",
"profileSettingsLogoutError": "Errore durante la disconnessione",
"profileSettingsSave": "Salva modifiche"
"profileSettingsSave": "Salva modifiche",
"dashboardTabHome": "Home",
"dashboardTabActivity": "Attività",
"dashboardTabNotifications": "Notifiche",
"dashboardTabProfile": "Profilo"
}

View File

@@ -458,5 +458,10 @@
"profileSettingsLogout": "Terminar sessão",
"profileSettingsLogoutConfirm": "Tem a certeza de que deseja terminar sessão?",
"profileSettingsLogoutError": "Erro ao terminar sessão",
"profileSettingsSave": "Guardar alterações"
"profileSettingsSave": "Guardar alterações",
"dashboardTabHome": "Início",
"dashboardTabActivity": "Atividade",
"dashboardTabNotifications": "Notificações",
"dashboardTabProfile": "Perfil"
}

View File

@@ -520,4 +520,10 @@ class I18n {
static const String payinSuccess = 'payinSuccess';
static const String payinError = 'payinError';
static const String payinProcessing = 'payinProcessing';
// Dashboard Tabs
static const String dashboardTabHome = 'dashboardTabHome';
static const String dashboardTabActivity = 'dashboardTabActivity';
static const String dashboardTabNotifications = 'dashboardTabNotifications';
static const String dashboardTabProfile = 'dashboardTabProfile';
}