6177214e-ce7c-49e3-99de-ff9721b26f63 — Commit 02c6fc45

AuthorMikkel Thygesen<mikkelet@gmail.com>
Date2026-02-13 16:08:29 +0100
Fixed login on android and iOS

Changed files

comwell_key_app/android/app/build.gradle           |  49 ++--
 comwell_key_app/assets/msal/msal_config_dev.json   |  14 +-
 comwell_key_app/assets/msal/msal_config_prod.json  |  12 +-
 comwell_key_app/assets/msal/msal_config_stage.json |  12 +-
 comwell_key_app/ios/Podfile                        |   6 +-
 .../ios/Runner.xcodeproj/project.pbxproj           | 257 ++++-----------------
 comwell_key_app/lib/comwell_app.dart               |   4 +-
 comwell_key_app/lib/data/remote/msal_service.dart  |  25 +-
 comwell_key_app/lib/main.dart                      |  72 ++----
 comwell_key_app/lib/utils/env_utils.dart           |   2 +-
 comwell_key_app/scripts/run_dev.sh                 |   2 +-
 comwell_key_app/scripts/run_prod.sh                |   2 +-
 comwell_key_app/scripts/run_stage.sh               |   2 +-
 13 files changed, 123 insertions(+), 336 deletions(-)

Diff

diff --git a/comwell_key_app/android/app/build.gradle b/comwell_key_app/android/app/build.gradle
index 16eba587..a0aed6d5 100644
--- a/comwell_key_app/android/app/build.gradle
+++ b/comwell_key_app/android/app/build.gradle
@@ -6,33 +6,20 @@ plugins {
id "kotlin-android"
id "dev.flutter.flutter-gradle-plugin"
}
-def localProperties = new Properties()
-def localPropertiesFile = rootProject.file('local.properties')
-if (localPropertiesFile.exists()) {
- localPropertiesFile.withReader('UTF-8') { reader ->
- localProperties.load(reader)
- }
-}
-
-def keystoreProperties = new Properties()
-def keystorePropertiesFile = rootProject.file('key.properties')
-if (keystorePropertiesFile.exists()) {
- keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
-}
-def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
-if (flutterVersionCode == null) {
- flutterVersionCode = '2'
-}
-def flutterVersionName = localProperties.getProperty('flutter.versionName')
-if (flutterVersionName == null) {
- flutterVersionName = '0.0.1'
+def getVersionCode = { ->
+ "git rev-list --count HEAD"
+ .execute()
+ .text.trim()
+ .toInteger()
}
android {
+ namespace 'com.comwell.phoenix'
compileSdkVersion 36
ndkVersion "28.2.13676358" //flutter.ndkVersion
+ flavorDimensions += "env"
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
@@ -48,25 +35,26 @@ android {
}
defaultConfig {
- // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
+ println 'flutter.minSdkVersion='+flutter.minSdkVersion
applicationId "com.comwell.phoenix"
-
- // You can update the following values to match your application needs.
- // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
- minSdkVersion localProperties.getProperty('flutter.minSdkVersion').toInteger()
+ minSdkVersion 28
targetSdkVersion 36
- versionCode flutterVersionCode.toInteger()
- versionName flutterVersionName
+ versionCode getVersionCode()
+ versionName flutter.versionName
multiDexEnabled true
manifestPlaceholders += [
'appAuthRedirectScheme': 'comwellservicesdev.b2clogin.com'
]
}
-
signingConfigs {
release {
- storeFile file(keystoreProperties['storeFile'])
+ def keystoreProperties = new Properties()
+ def keystorePropertiesFile = rootProject.file('key.properties')
+ if (keystorePropertiesFile.exists()) {
+ keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
+ }
+ storeFile file("./comwell_keystore")
storePassword keystoreProperties['storePassword']
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
@@ -87,9 +75,6 @@ android {
shrinkResources false
}
}
- flavorDimensions += "env"
- namespace 'com.comwell.phoenix'
-
productFlavors{
diff --git a/comwell_key_app/assets/msal/msal_config_dev.json b/comwell_key_app/assets/msal/msal_config_dev.json
index a99fa6fd..9a962b27 100644
--- a/comwell_key_app/assets/msal/msal_config_dev.json
+++ b/comwell_key_app/assets/msal/msal_config_dev.json
@@ -1,17 +1,17 @@
{
- "client_id" : "19a8eb05-01e0-4076-9db3-34bcfefd67d8",
- "redirect_uri" : "msauth://com.comwell.phoenix.dev/VzSiQcXRmi2kyjzcA%2BmYLEtbGVs%3D",
- "shared_device_mode_supported": true,
+ "client_id" : "b7cdbf4c-39d3-4c20-bff5-c0566f8bec0b",
+ "redirect_uri" : "msauth://com.comwell.phoenix.stage/VzSiQcXRmi2kyjzcA%2BmYLEtbGVs%3D",
"broker_redirect_uri_registered": false,
"account_mode": "SINGLE",
- "authorization_user_agent": "BROWSER",
"authorities" : [
{
- "type": "AAD",
+ "type": "B2C",
+ "authority_url": "https://comwellidstage.ciamlogin.com/comwellidstage.onmicrosoft.com",
"audience": {
"type": "AzureADMyOrg",
- "tenant_id": "8392ed03-7f96-414a-bc94-4f16dc0b9cf4"
- }
+ "tenant_id": "1e38b065-3224-4155-88e2a5af1c4aa98d"
+ },
+ "default": true
}
]
}
\ No newline at end of file
diff --git a/comwell_key_app/assets/msal/msal_config_prod.json b/comwell_key_app/assets/msal/msal_config_prod.json
index 3d221ef3..46c48088 100644
--- a/comwell_key_app/assets/msal/msal_config_prod.json
+++ b/comwell_key_app/assets/msal/msal_config_prod.json
@@ -1,17 +1,17 @@
{
- "client_id" : "19a8eb05-01e0-4076-9db3-34bcfefd67d8",
+ "client_id" : "cd3b91f4-3b87-4c22-a2fc-b844acad097f",
"redirect_uri" : "msauth://com.comwell.phoenix/VzSiQcXRmi2kyjzcA%2BmYLEtbGVs%3D",
- "shared_device_mode_supported": true,
"broker_redirect_uri_registered": false,
"account_mode": "SINGLE",
- "authorization_user_agent": "BROWSER",
"authorities" : [
{
- "type": "AAD",
+ "type": "B2C",
+ "authority_url": "https://comwellid.ciamlogin.com/comwellid.onmicrosoft.com",
"audience": {
"type": "AzureADMyOrg",
- "tenant_id": "8392ed03-7f96-414a-bc94-4f16dc0b9cf4"
- }
+ "tenant_id": "ffd4daa9-3247-44f5-baf4-2ba49ee6675b"
+ },
+ "default": true
}
]
}
\ No newline at end of file
diff --git a/comwell_key_app/assets/msal/msal_config_stage.json b/comwell_key_app/assets/msal/msal_config_stage.json
index 9e59b7c4..9a962b27 100644
--- a/comwell_key_app/assets/msal/msal_config_stage.json
+++ b/comwell_key_app/assets/msal/msal_config_stage.json
@@ -1,17 +1,17 @@
{
- "client_id" : "19a8eb05-01e0-4076-9db3-34bcfefd67d8",
+ "client_id" : "b7cdbf4c-39d3-4c20-bff5-c0566f8bec0b",
"redirect_uri" : "msauth://com.comwell.phoenix.stage/VzSiQcXRmi2kyjzcA%2BmYLEtbGVs%3D",
- "shared_device_mode_supported": true,
"broker_redirect_uri_registered": false,
"account_mode": "SINGLE",
- "authorization_user_agent": "BROWSER",
"authorities" : [
{
- "type": "AAD",
+ "type": "B2C",
+ "authority_url": "https://comwellidstage.ciamlogin.com/comwellidstage.onmicrosoft.com",
"audience": {
"type": "AzureADMyOrg",
- "tenant_id": "8392ed03-7f96-414a-bc94-4f16dc0b9cf4"
- }
+ "tenant_id": "1e38b065-3224-4155-88e2a5af1c4aa98d"
+ },
+ "default": true
}
]
}
\ No newline at end of file
diff --git a/comwell_key_app/ios/Podfile b/comwell_key_app/ios/Podfile
index a9141302..d145415d 100644
--- a/comwell_key_app/ios/Podfile
+++ b/comwell_key_app/ios/Podfile
@@ -5,16 +5,12 @@ platform :ios, '14.0'
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
project 'Runner', {
- 'Debug' => :debug,
'Debug-Develop' => :debug,
'Debug-Stage' => :debug,
- 'Debug-Test' => :debug,
- 'Profile' => :release,
- 'Release' => :release,
+ 'Debug-Prod' => :debug,
'Release-Develop' => :release,
'Release-Stage' => :release,
'Release-Prod' => :release,
- 'Release-Test' => :release,
}
def flutter_root
diff --git a/comwell_key_app/ios/Runner.xcodeproj/project.pbxproj b/comwell_key_app/ios/Runner.xcodeproj/project.pbxproj
index b85534b2..bce53c85 100644
--- a/comwell_key_app/ios/Runner.xcodeproj/project.pbxproj
+++ b/comwell_key_app/ios/Runner.xcodeproj/project.pbxproj
@@ -47,6 +47,7 @@
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
9C7F1959E41A431CE576B4ED /* 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 = "<group>"; };
A4086C3B28C8BFF15EFA411F /* Pods-Runner.debug-test.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug-test.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug-test.xcconfig"; sourceTree = "<group>"; };
+ AA9AA093AB9D6BE19EBA9A36 /* Pods-Runner.debug-prod.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug-prod.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug-prod.xcconfig"; sourceTree = "<group>"; };
AAB1BFF9C3CC5943EC8D03AA /* Pods-Runner.debug-stage.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug-stage.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug-stage.xcconfig"; sourceTree = "<group>"; };
D39B0031FE938FA341BC2898 /* Pods-Runner.release-prod.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release-prod.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release-prod.xcconfig"; sourceTree = "<group>"; };
D7B2AE864190520D8B3DE611 /* Pods-Runner.release-stage.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release-stage.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release-stage.xcconfig"; sourceTree = "<group>"; };
@@ -90,6 +91,7 @@
D7B2AE864190520D8B3DE611 /* Pods-Runner.release-stage.xcconfig */,
2FDF2C2620B77AAEFED0D229 /* Pods-Runner.release-develop.xcconfig */,
769AC5EDFD257E593A90CF1A /* Pods-Runner.profile.xcconfig */,
+ AA9AA093AB9D6BE19EBA9A36 /* Pods-Runner.debug-prod.xcconfig */,
);
path = Pods;
sourceTree = "<group>";
@@ -490,83 +492,6 @@
};
name = "Debug-Stage";
};
- 249021D3217E4FDB00AE95B9 /* Profile */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- CLANG_ANALYZER_NONNULL = YES;
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
- CLANG_CXX_LIBRARY = "libc++";
- CLANG_ENABLE_MODULES = YES;
- CLANG_ENABLE_OBJC_ARC = YES;
- CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_COMMA = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INFINITE_RECURSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
- CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
- CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
- CLANG_WARN_STRICT_PROTOTYPES = YES;
- CLANG_WARN_SUSPICIOUS_MOVE = YES;
- CLANG_WARN_UNREACHABLE_CODE = YES;
- CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
- COPY_PHASE_STRIP = NO;
- DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
- ENABLE_NS_ASSERTIONS = NO;
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- GCC_C_LANGUAGE_STANDARD = gnu99;
- GCC_NO_COMMON_BLOCKS = YES;
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
- GCC_WARN_UNDECLARED_SELECTOR = YES;
- GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 17.6;
- MTL_ENABLE_DEBUG_INFO = NO;
- SDKROOT = iphoneos;
- SUPPORTED_PLATFORMS = "iphonesimulator iphoneos";
- TARGETED_DEVICE_FAMILY = "1,2";
- VALIDATE_PRODUCT = YES;
- };
- name = Profile;
- };
- 249021D4217E4FDB00AE95B9 /* Profile */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
- buildSettings = {
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- CLANG_ENABLE_MODULES = YES;
- CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
- CODE_SIGN_IDENTITY = "Apple Development";
- CODE_SIGN_STYLE = Manual;
- DEVELOPMENT_TEAM = "";
- ENABLE_BITCODE = NO;
- INFOPLIST_FILE = Runner/Info.plist;
- INFOPLIST_KEY_CFBundleDisplayName = "Comwell Hotels";
- IPHONEOS_DEPLOYMENT_TARGET = 17.6;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- );
- PRODUCT_BUNDLE_IDENTIFIER = com.comwell.phoenix;
- PRODUCT_NAME = "$(TARGET_NAME)";
- PROVISIONING_PROFILE_SPECIFIER = "";
- SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
- SWIFT_VERSION = 5.0;
- VERSIONING_SYSTEM = "apple-generic";
- };
- name = Profile;
- };
6073D2A72C58F8E600183654 /* Debug-Develop */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -902,9 +827,8 @@
};
name = "Release-Prod";
};
- 6073D2BD2C59042900183654 /* Debug-Test */ = {
+ 727DB8C62F3F525900C4697F /* Debug-Prod */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
@@ -953,23 +877,25 @@
IPHONEOS_DEPLOYMENT_TARGET = 17.6;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
+ OTHER_LDFLAGS = (
+ "-framework",
+ SQLCipher,
+ );
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
};
- name = "Debug-Test";
+ name = "Debug-Prod";
};
- 6073D2BE2C59042900183654 /* Debug-Test */ = {
+ 727DB8C72F3F525900C4697F /* Debug-Prod */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
- CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
+ CODE_SIGN_ENTITLEMENTS = "Runner/RunnerDebug-Develop.entitlements";
CODE_SIGN_IDENTITY = "Apple Development";
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
- CODE_SIGN_STYLE = Manual;
- DEVELOPMENT_TEAM = "";
- "DEVELOPMENT_TEAM[sdk=iphoneos*]" = 8RNV6AX4ZL;
+ CODE_SIGN_STYLE = Automatic;
+ DEVELOPMENT_TEAM = 8RNV6AX4ZL;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = "Comwell Hotels";
@@ -978,18 +904,17 @@
"$(inherited)",
"@executable_path/Frameworks",
);
- PRODUCT_BUNDLE_IDENTIFIER = com.comwell.phoenix.test;
- PRODUCT_NAME = "$(TARGET_NAME)";
+ PRODUCT_BUNDLE_IDENTIFIER = com.comwell.phoenix;
+ PRODUCT_NAME = Debug;
PROVISIONING_PROFILE_SPECIFIER = "";
- "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "Ad hoc test";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
};
- name = "Debug-Test";
+ name = "Debug-Prod";
};
- 60A86E9C2E17C73600CE1F59 /* Release-Test */ = {
+ 727DB8CA2F3F532A00C4697F /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
@@ -1019,11 +944,17 @@
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
- DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
- ENABLE_NS_ASSERTIONS = NO;
+ DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
@@ -1031,25 +962,22 @@
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 17.6;
- MTL_ENABLE_DEBUG_INFO = NO;
+ MTL_ENABLE_DEBUG_INFO = YES;
+ ONLY_ACTIVE_ARCH = NO;
SDKROOT = iphoneos;
- SUPPORTED_PLATFORMS = "iphonesimulator iphoneos";
- SWIFT_COMPILATION_MODE = wholemodule;
- SWIFT_OPTIMIZATION_LEVEL = "-O";
TARGETED_DEVICE_FAMILY = "1,2";
- VALIDATE_PRODUCT = YES;
};
- name = "Release-Test";
+ name = Debug;
};
- 60A86E9D2E17C73600CE1F59 /* Release-Test */ = {
+ 727DB8CB2F3F532A00C4697F /* Debug */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
+ baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
- CODE_SIGN_ENTITLEMENTS = Runner/RunnerRelease.entitlements;
+ CODE_SIGN_ENTITLEMENTS = "Runner/RunnerDebug-Stage.entitlements";
CODE_SIGN_IDENTITY = "Apple Development";
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
CODE_SIGN_STYLE = Manual;
DEVELOPMENT_TEAM = "";
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = 8RNV6AX4ZL;
@@ -1061,73 +989,18 @@
"$(inherited)",
"@executable_path/Frameworks",
);
- ONLY_ACTIVE_ARCH = NO;
- PRODUCT_BUNDLE_IDENTIFIER = com.comwell.phoenix.test;
+ PRODUCT_BUNDLE_IDENTIFIER = com.comwell.phoenix.stage;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
- "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "CP Test";
+ "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "Development Stage";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
};
- name = "Release-Test";
- };
- 97C147031CF9000F007C117D /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- CLANG_ANALYZER_NONNULL = YES;
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
- CLANG_CXX_LIBRARY = "libc++";
- CLANG_ENABLE_MODULES = YES;
- CLANG_ENABLE_OBJC_ARC = YES;
- CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_COMMA = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INFINITE_RECURSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
- CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
- CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
- CLANG_WARN_STRICT_PROTOTYPES = YES;
- CLANG_WARN_SUSPICIOUS_MOVE = YES;
- CLANG_WARN_UNREACHABLE_CODE = YES;
- CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
- COPY_PHASE_STRIP = NO;
- DEBUG_INFORMATION_FORMAT = dwarf;
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- ENABLE_TESTABILITY = YES;
- GCC_C_LANGUAGE_STANDARD = gnu99;
- GCC_DYNAMIC_NO_PIC = NO;
- GCC_NO_COMMON_BLOCKS = YES;
- GCC_OPTIMIZATION_LEVEL = 0;
- GCC_PREPROCESSOR_DEFINITIONS = (
- "DEBUG=1",
- "$(inherited)",
- );
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
- GCC_WARN_UNDECLARED_SELECTOR = YES;
- GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 17.6;
- MTL_ENABLE_DEBUG_INFO = YES;
- ONLY_ACTIVE_ARCH = YES;
- SDKROOT = iphoneos;
- TARGETED_DEVICE_FAMILY = "1,2";
- };
name = Debug;
};
- 97C147041CF9000F007C117D /* Release */ = {
+ 727DB8CC2F3F533100C4697F /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
@@ -1170,6 +1043,7 @@
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 17.6;
MTL_ENABLE_DEBUG_INFO = NO;
+ ONLY_ACTIVE_ARCH = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = "iphonesimulator iphoneos";
SWIFT_COMPILATION_MODE = wholemodule;
@@ -1179,44 +1053,18 @@
};
name = Release;
};
- 97C147061CF9000F007C117D /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
- buildSettings = {
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- CLANG_ENABLE_MODULES = YES;
- CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
- CODE_SIGN_IDENTITY = "Apple Development";
- CODE_SIGN_STYLE = Automatic;
- DEVELOPMENT_TEAM = 8RNV6AX4ZL;
- ENABLE_BITCODE = NO;
- INFOPLIST_FILE = Runner/Info.plist;
- INFOPLIST_KEY_CFBundleDisplayName = "Comwell Hotels";
- IPHONEOS_DEPLOYMENT_TARGET = 17.6;
- LD_RUNPATH_SEARCH_PATHS = (
- "$(inherited)",
- "@executable_path/Frameworks",
- );
- PRODUCT_BUNDLE_IDENTIFIER = com.comwell.phoenix.dev;
- PRODUCT_NAME = "$(TARGET_NAME)";
- PROVISIONING_PROFILE_SPECIFIER = "";
- SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
- SWIFT_OPTIMIZATION_LEVEL = "-Onone";
- SWIFT_VERSION = 5.0;
- VERSIONING_SYSTEM = "apple-generic";
- };
- name = Debug;
- };
- 97C147071CF9000F007C117D /* Release */ = {
+ 727DB8CD2F3F533100C4697F /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
- CODE_SIGN_ENTITLEMENTS = Runner/RunnerRelease.entitlements;
+ CODE_SIGN_ENTITLEMENTS = "Runner/RunnerRelease-Stage.entitlements";
CODE_SIGN_IDENTITY = "Apple Development";
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
CODE_SIGN_STYLE = Manual;
DEVELOPMENT_TEAM = "";
+ "DEVELOPMENT_TEAM[sdk=iphoneos*]" = 8RNV6AX4ZL;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = "Comwell Hotels";
@@ -1226,9 +1074,10 @@
"@executable_path/Frameworks",
);
ONLY_ACTIVE_ARCH = NO;
- PRODUCT_BUNDLE_IDENTIFIER = com.comwell.phoenix;
- PRODUCT_NAME = "$(TARGET_NAME)";
+ PRODUCT_BUNDLE_IDENTIFIER = com.comwell.phoenix.stage;
+ PRODUCT_NAME = Stage;
PROVISIONING_PROFILE_SPECIFIER = "";
+ "PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "Development Stage";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
@@ -1241,36 +1090,32 @@
97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
isa = XCConfigurationList;
buildConfigurations = (
- 97C147031CF9000F007C117D /* Debug */,
167B3F642DD32D08005BA376 /* Debug-Stage */,
- 6073D2BD2C59042900183654 /* Debug-Test */,
+ 727DB8CA2F3F532A00C4697F /* Debug */,
6073D2A72C58F8E600183654 /* Debug-Develop */,
- 97C147041CF9000F007C117D /* Release */,
- 60A86E9C2E17C73600CE1F59 /* Release-Test */,
+ 727DB8C62F3F525900C4697F /* Debug-Prod */,
6073D2AD2C58F91500183654 /* Release-Prod */,
6073D2AB2C58F90300183654 /* Release-Stage */,
+ 727DB8CC2F3F533100C4697F /* Release */,
6073D2A92C58F8F500183654 /* Release-Develop */,
- 249021D3217E4FDB00AE95B9 /* Profile */,
);
defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
+ defaultConfigurationName = "Debug-Stage";
};
97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
isa = XCConfigurationList;
buildConfigurations = (
- 97C147061CF9000F007C117D /* Debug */,
167B3F652DD32D08005BA376 /* Debug-Stage */,
- 6073D2BE2C59042900183654 /* Debug-Test */,
+ 727DB8CB2F3F532A00C4697F /* Debug */,
6073D2A82C58F8E600183654 /* Debug-Develop */,
- 97C147071CF9000F007C117D /* Release */,
- 60A86E9D2E17C73600CE1F59 /* Release-Test */,
+ 727DB8C72F3F525900C4697F /* Debug-Prod */,
6073D2AE2C58F91500183654 /* Release-Prod */,
6073D2AC2C58F90300183654 /* Release-Stage */,
+ 727DB8CD2F3F533100C4697F /* Release */,
6073D2AA2C58F8F500183654 /* Release-Develop */,
- 249021D4217E4FDB00AE95B9 /* Profile */,
);
defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
+ defaultConfigurationName = "Debug-Stage";
};
/* End XCConfigurationList section */
diff --git a/comwell_key_app/lib/comwell_app.dart b/comwell_key_app/lib/comwell_app.dart
index f32a2cd9..d8b1ff92 100644
--- a/comwell_key_app/lib/comwell_app.dart
+++ b/comwell_key_app/lib/comwell_app.dart
@@ -61,8 +61,8 @@ class ComwellApp extends StatelessWidget {
BlocProvider<ProfileCubit>(
lazy: false,
create: (BuildContext context) => ProfileCubit(
- locator(),
- locator(),
+ locator.get(),
+ locator.get(),
),
),
BlocProvider<ProfileSettingsCubit>(
diff --git a/comwell_key_app/lib/data/remote/msal_service.dart b/comwell_key_app/lib/data/remote/msal_service.dart
index 9ce76f38..8c84ee70 100644
--- a/comwell_key_app/lib/data/remote/msal_service.dart
+++ b/comwell_key_app/lib/data/remote/msal_service.dart
@@ -6,27 +6,22 @@ import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:msal_auth/msal_auth.dart';
class MSALService {
- final scopes = dotenv.ENTRA_API_URL.split(',');
+ final scopes = dotenv.ENTRA_SCOPES.split(',');
final authorityUrl = dotenv.ENTRA_ID_AUTHORITY_URL;
+ final clientId = dotenv.ENTRA_ID_CLIENT_ID;
+ final redirect = dotenv.ENTRA_ID_REDIRECT_URL;
late final SingleAccountPca msAuth;
- late final String configFilePath;
MSALService();
Future<void> init() async {
try {
- final clientId = dotenv.ENTRA_ID_CLIENT_ID;
- final redirect = dotenv.ENTRA_ID_REDIRECT_URL;
- switch (appFlavor?.toLowerCase()) {
- case "develop":
- configFilePath = Assets.msal.msalConfigDev;
- case "stage":
- configFilePath = Assets.msal.msalConfigStage;
- case "prod":
- configFilePath = Assets.msal.msalConfigProd;
- default:
- throw Exception("Missing config file for flavor $appFlavor");
- }
+ final configFilePath = switch (appFlavor?.toLowerCase()) {
+ "develop" => Assets.msal.msalConfigDev,
+ "stage" => Assets.msal.msalConfigStage,
+ "prod" => Assets.msal.msalConfigProd,
+ _ => throw Exception("Missing config file for flavor $appFlavor"),
+ };
msAuth = await SingleAccountPca.create(
clientId: clientId,
androidConfig: AndroidConfig(
@@ -50,7 +45,7 @@ class MSALService {
scopes: scopes,
prompt: prompt,
customWebViewConfig: const CustomWebViewConfig(),
- authority: dotenv.ENTRA_ID_AUTHORITY_URL,
+ authority: authorityUrl,
);
}
diff --git a/comwell_key_app/lib/main.dart b/comwell_key_app/lib/main.dart
index 2f0f5d84..acc48b94 100644
--- a/comwell_key_app/lib/main.dart
+++ b/comwell_key_app/lib/main.dart
@@ -5,7 +5,6 @@ import 'package:comwell_key_app/utils/locator.dart';
import 'package:comwell_key_app/services/http_client.dart';
import 'package:comwell_key_app/utils/secure_storage.dart';
import 'package:easy_localization/easy_localization.dart';
-import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
@@ -17,47 +16,20 @@ import 'firebase_options_prod.dart' as fb_prod;
import 'package:payment_plugin/payment_plugin.dart';
void main() async {
- final flavor = appFlavor?.toLowerCase();
- if (flavor == 'develop') {
- await runMainApp(fb_dev.DefaultFirebaseOptions.currentPlatform, 'env/.dev.env');
- } else if (flavor == 'stage') {
- await runMainApp(fb_stage.DefaultFirebaseOptions.currentPlatform, 'env/.stage.env');
- } else if (flavor == 'prod') {
- await runMainApp(fb_prod.DefaultFirebaseOptions.currentPlatform, 'env/.prod.env');
- } else {
- throw UnsupportedError('Invalid appFlavor: $appFlavor');
- }
-}
-
-Future<void> runMainApp(FirebaseOptions firebaseOptions, String envFile) async {
WidgetsFlutterBinding.ensureInitialized();
await EasyLocalization.ensureInitialized();
debugPrint("Current flavor: $appFlavor");
- debugPrint("Loading environment file: $envFile");
try {
- await dotenv.load(fileName: envFile);
+ switch (appFlavor?.toLowerCase()) {
+ case "develop":
+ await dotenv.load(fileName: 'env/.dev.env');
+ case "stage":
+ await dotenv.load(fileName: 'env/.stage.env');
+ case "prod":
+ await dotenv.load(fileName: 'env/.prod.env');
+ }
debugPrint("Successfully loaded environment file");
- } catch (e) {
- debugPrint("Error loading environment file: $e");
- rethrow;
- }
-
- // Render UI immediately; do heavy initialization after first frame to avoid ANR.
- runApp(
- EasyLocalization(
- supportedLocales: const [Locale('en', 'US'), Locale('da', 'DK')],
- path: 'assets/translations',
- fallbackLocale: const Locale('da', 'DK'),
- child: const _BootstrapApp(),
- ),
- );
-}
-
-class _BootstrapApp extends StatelessWidget {
- const _BootstrapApp();
-
- Future<void> _initialize() async {
await configureFirebase();
await SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
setupLocator();
@@ -91,23 +63,17 @@ class _BootstrapApp extends StatelessWidget {
statusBarIconBrightness: Brightness.dark,
),
);
+ } catch (e) {
+ debugPrint("Error loading environment file: $e");
+ rethrow;
}
- @override
- Widget build(BuildContext context) {
- return FutureBuilder<void>(
- future: _initialize(),
- builder: (context, snapshot) {
- if (snapshot.connectionState != ConnectionState.done) {
- return const MaterialApp(
- home: Scaffold(
- body: Center(child: CircularProgressIndicator()),
- ),
- );
- }
-
- return SentryWidget(child: const ComwellApp());
- },
- );
- }
+ runApp(
+ EasyLocalization(
+ supportedLocales: const [Locale('en', 'US'), Locale('da', 'DK')],
+ path: 'assets/translations',
+ fallbackLocale: const Locale('da', 'DK'),
+ child: SentryWidget(child: const ComwellApp()),
+ ),
+ );
}
diff --git a/comwell_key_app/lib/utils/env_utils.dart b/comwell_key_app/lib/utils/env_utils.dart
index 5a71025f..da1c6038 100644
--- a/comwell_key_app/lib/utils/env_utils.dart
+++ b/comwell_key_app/lib/utils/env_utils.dart
@@ -9,7 +9,7 @@ extension EnvUtils on DotEnv {
String get ENTRA_ID_AUTHORITY_URL => env["ENTRA_ID_AUTHORITY_URL"]!;
- String get ENTRA_API_URL => env["ENTRA_API_URL"]!;
+ String get ENTRA_SCOPES => env["ENTRA_SCOPES"]!;
String get SENTRY_DSN => env["SENTRY_DSN"]!;
diff --git a/comwell_key_app/scripts/run_dev.sh b/comwell_key_app/scripts/run_dev.sh
index c272f161..0284b8a7 100644
--- a/comwell_key_app/scripts/run_dev.sh
+++ b/comwell_key_app/scripts/run_dev.sh
@@ -1 +1 @@
-fvm flutter run --flavor Develop
\ No newline at end of file
+fvm flutter run --flavor develop $1$2
\ No newline at end of file
diff --git a/comwell_key_app/scripts/run_prod.sh b/comwell_key_app/scripts/run_prod.sh
index c41849ba..19c352be 100644
--- a/comwell_key_app/scripts/run_prod.sh
+++ b/comwell_key_app/scripts/run_prod.sh
@@ -1 +1 @@
-fvm flutter run --flavor prod
+fvm flutter run --flavor prod $1$2
diff --git a/comwell_key_app/scripts/run_stage.sh b/comwell_key_app/scripts/run_stage.sh
index a2cc7b6d..c2aef810 100644
--- a/comwell_key_app/scripts/run_stage.sh
+++ b/comwell_key_app/scripts/run_stage.sh
@@ -1 +1 @@
-fvm flutter run --flavor stage
+fvm flutter run --flavor stage $1$2