Merge pull request #639 from Oloodi/588-implement-review-order-before-submitting-in-frontend
Introduce Flavours and the review order page
This commit is contained in:
33
.claude/agent-memory/architecture-reviewer/MEMORY.md
Normal file
33
.claude/agent-memory/architecture-reviewer/MEMORY.md
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
# Architecture Reviewer Memory
|
||||||
|
|
||||||
|
## Project Structure Confirmed
|
||||||
|
- Feature packages: `apps/mobile/packages/features/<app>/<feature>/`
|
||||||
|
- Domain: `apps/mobile/packages/domain/`
|
||||||
|
- Design system: `apps/mobile/packages/design_system/`
|
||||||
|
- Core: `apps/mobile/packages/core/`
|
||||||
|
- Data Connect: `apps/mobile/packages/data_connect/`
|
||||||
|
- `client_orders_common` is at `apps/mobile/packages/features/client/orders/orders_common/` (shared across order features)
|
||||||
|
|
||||||
|
## BLoC Registration Pattern
|
||||||
|
- BLoCs registered with `i.add<>()` (transient) per CLAUDE.md -- NOT singletons
|
||||||
|
- This means `BlocProvider(create:)` is CORRECT (not `BlocProvider.value()`)
|
||||||
|
- `SafeBloc` mixin exists in core alongside `BlocErrorHandler`
|
||||||
|
|
||||||
|
## Known Pre-existing Issues (create_order feature)
|
||||||
|
- All 3 order BLoCs make direct `_service.connector` calls for loading vendors, hubs, roles, and managers instead of going through use cases/repositories (CRITICAL per rules, but pre-existing)
|
||||||
|
- `firebase_data_connect` and `firebase_auth` are listed as direct dependencies in `client_create_order/pubspec.yaml` (should only be in `data_connect` package)
|
||||||
|
- All 3 order pages use `Modular.to.pop()` instead of `Modular.to.popSafe()` for the back button
|
||||||
|
|
||||||
|
## Design System Tokens
|
||||||
|
- Colors: `UiColors.*`
|
||||||
|
- Typography: `UiTypography.*`
|
||||||
|
- Spacing: `UiConstants.space*` (e.g., `space3`, `space4`, `space6`)
|
||||||
|
- App bar: `UiAppBar`
|
||||||
|
|
||||||
|
## Review Patterns (grep-based checks)
|
||||||
|
- `Color(0x` for hardcoded colors
|
||||||
|
- `TextStyle(` for custom text styles
|
||||||
|
- `Navigator.` for direct navigator usage
|
||||||
|
- `import.*features/` for cross-feature imports (must be zero)
|
||||||
|
- `_service.connector` in BLoC files for direct data connect calls
|
||||||
|
- `Modular.to.pop()` for unsafe navigation (should be `popSafe()`)
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
---
|
---
|
||||||
name: architecture-reviewer
|
name: mobile-architecture-reviewer
|
||||||
description: "Use this agent when code changes need to be reviewed for Clean Architecture compliance, design system adherence, and established pattern conformance in the KROW Workforce mobile platform. This includes pull request reviews, branch comparisons, or any time new or modified code needs architectural validation.\\n\\nExamples:\\n\\n- Example 1:\\n user: \"Review the changes in the current branch for architecture compliance\"\\n assistant: \"I'll use the Architecture Review Agent to perform a comprehensive architectural review of the current changes.\"\\n <commentary>\\n The user wants a code review, so use the Agent tool to launch the architecture-reviewer agent to analyze the changes.\\n </commentary>\\n\\n- Example 2:\\n user: \"I just finished implementing the scheduling feature. Here's the PR.\"\\n assistant: \"Let me use the Architecture Review Agent to review your scheduling feature implementation for Clean Architecture compliance and design system adherence.\"\\n <commentary>\\n A new feature has been implemented. Use the Agent tool to launch the architecture-reviewer agent to validate the code against architectural rules before it gets merged.\\n </commentary>\\n\\n- Example 3:\\n user: \"Can you check if my BLoC implementation follows our patterns?\"\\n assistant: \"I'll launch the Architecture Review Agent to validate your BLoC implementation against our established patterns including SessionHandlerMixin, BlocErrorHandler, and singleton registration.\"\\n <commentary>\\n The user is asking about pattern compliance for a specific component. Use the Agent tool to launch the architecture-reviewer agent to check BLoC patterns.\\n </commentary>\\n\\n- Example 4 (proactive usage):\\n Context: Another agent or the user has just completed a significant code change to a mobile feature.\\n assistant: \"The feature implementation is complete. Let me now run the Architecture Review Agent to ensure everything complies with our Clean Architecture rules and design system before we proceed.\"\\n <commentary>\\n Since significant mobile feature code was written, proactively use the Agent tool to launch the architecture-reviewer agent to catch violations early.\\n </commentary>"
|
description: "Use this agent when code changes need to be reviewed for Clean Architecture compliance, design system adherence, and established pattern conformance in the KROW Workforce mobile platform. This includes pull request reviews, branch comparisons, or any time new or modified code needs architectural validation.\\n\\nExamples:\\n\\n- Example 1:\\n user: \"Review the changes in the current branch for architecture compliance\"\\n assistant: \"I'll use the Architecture Review Agent to perform a comprehensive architectural review of the current changes.\"\\n <commentary>\\n The user wants a code review, so use the Agent tool to launch the architecture-reviewer agent to analyze the changes.\\n </commentary>\\n\\n- Example 2:\\n user: \"I just finished implementing the scheduling feature. Here's the PR.\"\\n assistant: \"Let me use the Architecture Review Agent to review your scheduling feature implementation for Clean Architecture compliance and design system adherence.\"\\n <commentary>\\n A new feature has been implemented. Use the Agent tool to launch the architecture-reviewer agent to validate the code against architectural rules before it gets merged.\\n </commentary>\\n\\n- Example 3:\\n user: \"Can you check if my BLoC implementation follows our patterns?\"\\n assistant: \"I'll launch the Architecture Review Agent to validate your BLoC implementation against our established patterns including SessionHandlerMixin, BlocErrorHandler, and singleton registration.\"\\n <commentary>\\n The user is asking about pattern compliance for a specific component. Use the Agent tool to launch the architecture-reviewer agent to check BLoC patterns.\\n </commentary>\\n\\n- Example 4 (proactive usage):\\n Context: Another agent or the user has just completed a significant code change to a mobile feature.\\n assistant: \"The feature implementation is complete. Let me now run the Architecture Review Agent to ensure everything complies with our Clean Architecture rules and design system before we proceed.\"\\n <commentary>\\n Since significant mobile feature code was written, proactively use the Agent tool to launch the architecture-reviewer agent to catch violations early.\\n </commentary>"
|
||||||
model: opus
|
model: opus
|
||||||
color: green
|
color: green
|
||||||
memory: project
|
memory: project
|
||||||
---
|
---
|
||||||
|
|
||||||
You are the **Architecture Review Agent**, an elite software architect specializing in Clean Architecture enforcement for the KROW Workforce Flutter mobile platform. You have deep expertise in Flutter/Dart, BLoC state management, Clean Architecture layer separation, and design system governance. You operate with **zero tolerance** for critical and high-severity violations.
|
You are the **Mobile Architecture Review Agent**, an elite software architect specializing in Clean Architecture enforcement for the KROW Workforce Flutter mobile platform. You have deep expertise in Flutter/Dart, BLoC state management, Clean Architecture layer separation, and design system governance. You operate with **zero tolerance** for critical and high-severity violations.
|
||||||
|
|
||||||
## Initialization
|
## Initialization
|
||||||
|
|
||||||
|
|||||||
94
.vscode/launch.json
vendored
94
.vscode/launch.json
vendored
@@ -1,41 +1,127 @@
|
|||||||
{
|
{
|
||||||
"version": "0.2.0",
|
"version": "0.2.0",
|
||||||
"configurations": [
|
"configurations": [
|
||||||
|
// ===================== Client App =====================
|
||||||
{
|
{
|
||||||
"name": "Client (Dev) - Android",
|
"name": "Client [DEV] - Android",
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
"type": "dart",
|
"type": "dart",
|
||||||
"program": "apps/mobile/apps/client/lib/main.dart",
|
"program": "apps/mobile/apps/client/lib/main.dart",
|
||||||
"args": [
|
"args": [
|
||||||
|
"--flavor", "dev",
|
||||||
"--dart-define-from-file=${workspaceFolder}/apps/mobile/config.dev.json"
|
"--dart-define-from-file=${workspaceFolder}/apps/mobile/config.dev.json"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Client (Dev) - iOS",
|
"name": "Client [DEV] - iOS",
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
"type": "dart",
|
"type": "dart",
|
||||||
"program": "apps/mobile/apps/client/lib/main.dart",
|
"program": "apps/mobile/apps/client/lib/main.dart",
|
||||||
"args": [
|
"args": [
|
||||||
|
"--flavor", "dev",
|
||||||
"--dart-define-from-file=${workspaceFolder}/apps/mobile/config.dev.json"
|
"--dart-define-from-file=${workspaceFolder}/apps/mobile/config.dev.json"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Staff (Dev) - Android",
|
"name": "Client [STG] - Android",
|
||||||
|
"request": "launch",
|
||||||
|
"type": "dart",
|
||||||
|
"program": "apps/mobile/apps/client/lib/main.dart",
|
||||||
|
"args": [
|
||||||
|
"--flavor", "stage",
|
||||||
|
"--dart-define-from-file=${workspaceFolder}/apps/mobile/config.stage.json"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Client [STG] - iOS",
|
||||||
|
"request": "launch",
|
||||||
|
"type": "dart",
|
||||||
|
"program": "apps/mobile/apps/client/lib/main.dart",
|
||||||
|
"args": [
|
||||||
|
"--flavor", "stage",
|
||||||
|
"--dart-define-from-file=${workspaceFolder}/apps/mobile/config.stage.json"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Client [PROD] - Android",
|
||||||
|
"request": "launch",
|
||||||
|
"type": "dart",
|
||||||
|
"program": "apps/mobile/apps/client/lib/main.dart",
|
||||||
|
"args": [
|
||||||
|
"--flavor", "prod",
|
||||||
|
"--dart-define-from-file=${workspaceFolder}/apps/mobile/config.prod.json"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Client [PROD] - iOS",
|
||||||
|
"request": "launch",
|
||||||
|
"type": "dart",
|
||||||
|
"program": "apps/mobile/apps/client/lib/main.dart",
|
||||||
|
"args": [
|
||||||
|
"--flavor", "prod",
|
||||||
|
"--dart-define-from-file=${workspaceFolder}/apps/mobile/config.prod.json"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
// ===================== Staff App =====================
|
||||||
|
{
|
||||||
|
"name": "Staff [DEV] - Android",
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
"type": "dart",
|
"type": "dart",
|
||||||
"program": "apps/mobile/apps/staff/lib/main.dart",
|
"program": "apps/mobile/apps/staff/lib/main.dart",
|
||||||
"args": [
|
"args": [
|
||||||
|
"--flavor", "dev",
|
||||||
"--dart-define-from-file=${workspaceFolder}/apps/mobile/config.dev.json"
|
"--dart-define-from-file=${workspaceFolder}/apps/mobile/config.dev.json"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Staff (Dev) - iOS",
|
"name": "Staff [DEV] - iOS",
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
"type": "dart",
|
"type": "dart",
|
||||||
"program": "apps/mobile/apps/staff/lib/main.dart",
|
"program": "apps/mobile/apps/staff/lib/main.dart",
|
||||||
"args": [
|
"args": [
|
||||||
|
"--flavor", "dev",
|
||||||
"--dart-define-from-file=${workspaceFolder}/apps/mobile/config.dev.json"
|
"--dart-define-from-file=${workspaceFolder}/apps/mobile/config.dev.json"
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Staff [STG] - Android",
|
||||||
|
"request": "launch",
|
||||||
|
"type": "dart",
|
||||||
|
"program": "apps/mobile/apps/staff/lib/main.dart",
|
||||||
|
"args": [
|
||||||
|
"--flavor", "stage",
|
||||||
|
"--dart-define-from-file=${workspaceFolder}/apps/mobile/config.stage.json"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Staff [STG] - iOS",
|
||||||
|
"request": "launch",
|
||||||
|
"type": "dart",
|
||||||
|
"program": "apps/mobile/apps/staff/lib/main.dart",
|
||||||
|
"args": [
|
||||||
|
"--flavor", "stage",
|
||||||
|
"--dart-define-from-file=${workspaceFolder}/apps/mobile/config.stage.json"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Staff [PROD] - Android",
|
||||||
|
"request": "launch",
|
||||||
|
"type": "dart",
|
||||||
|
"program": "apps/mobile/apps/staff/lib/main.dart",
|
||||||
|
"args": [
|
||||||
|
"--flavor", "prod",
|
||||||
|
"--dart-define-from-file=${workspaceFolder}/apps/mobile/config.prod.json"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Staff [PROD] - iOS",
|
||||||
|
"request": "launch",
|
||||||
|
"type": "dart",
|
||||||
|
"program": "apps/mobile/apps/staff/lib/main.dart",
|
||||||
|
"args": [
|
||||||
|
"--flavor", "prod",
|
||||||
|
"--dart-define-from-file=${workspaceFolder}/apps/mobile/config.prod.json"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -21,8 +21,20 @@ dartDefinesString.split(",").forEach {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Load flavor-specific key properties: key.dev.properties, key.stage.properties, key.prod.properties
|
||||||
|
// The active flavor is resolved from the Gradle task name (e.g. assembleDevRelease -> dev)
|
||||||
|
fun resolveFlavorFromTask(): String {
|
||||||
|
val taskNames = gradle.startParameter.taskNames.joinToString(" ").lowercase()
|
||||||
|
return when {
|
||||||
|
taskNames.contains("prod") -> "prod"
|
||||||
|
taskNames.contains("stage") -> "stage"
|
||||||
|
else -> "dev"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val activeFlavorForSigning = resolveFlavorFromTask()
|
||||||
val keystoreProperties = Properties().apply {
|
val keystoreProperties = Properties().apply {
|
||||||
val propertiesFile = rootProject.file("key.properties")
|
val propertiesFile = rootProject.file("key.${activeFlavorForSigning}.properties")
|
||||||
if (propertiesFile.exists()) {
|
if (propertiesFile.exists()) {
|
||||||
load(propertiesFile.inputStream())
|
load(propertiesFile.inputStream())
|
||||||
}
|
}
|
||||||
@@ -43,8 +55,7 @@ android {
|
|||||||
}
|
}
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId = "com.krowwithus.client"
|
// applicationId is set per flavor below
|
||||||
// You can update the following values to match your application needs.
|
|
||||||
// For more information, see: https://flutter.dev/to/review-gradle-config.
|
// For more information, see: https://flutter.dev/to/review-gradle-config.
|
||||||
minSdk = flutter.minSdkVersion
|
minSdk = flutter.minSdkVersion
|
||||||
targetSdk = flutter.targetSdkVersion
|
targetSdk = flutter.targetSdkVersion
|
||||||
@@ -53,6 +64,25 @@ android {
|
|||||||
manifestPlaceholders["GOOGLE_MAPS_API_KEY"] = dartEnvironmentVariables["GOOGLE_MAPS_API_KEY"] ?: ""
|
manifestPlaceholders["GOOGLE_MAPS_API_KEY"] = dartEnvironmentVariables["GOOGLE_MAPS_API_KEY"] ?: ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
flavorDimensions += "environment"
|
||||||
|
productFlavors {
|
||||||
|
create("dev") {
|
||||||
|
dimension = "environment"
|
||||||
|
applicationId = "dev.krowwithus.client"
|
||||||
|
resValue("string", "app_name", "KROW With Us Business [DEV]")
|
||||||
|
}
|
||||||
|
create("stage") {
|
||||||
|
dimension = "environment"
|
||||||
|
applicationId = "stage.krowwithus.client"
|
||||||
|
resValue("string", "app_name", "KROW With Us Business [STG]")
|
||||||
|
}
|
||||||
|
create("prod") {
|
||||||
|
dimension = "environment"
|
||||||
|
applicationId = "prod.krowwithus.client"
|
||||||
|
resValue("string", "app_name", "KROW Client")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
signingConfigs {
|
signingConfigs {
|
||||||
create("release") {
|
create("release") {
|
||||||
if (System.getenv()["CI"] == "true") {
|
if (System.getenv()["CI"] == "true") {
|
||||||
@@ -62,7 +92,7 @@ android {
|
|||||||
keyAlias = System.getenv()["CM_KEY_ALIAS"]
|
keyAlias = System.getenv()["CM_KEY_ALIAS"]
|
||||||
keyPassword = System.getenv()["CM_KEY_PASSWORD"]
|
keyPassword = System.getenv()["CM_KEY_PASSWORD"]
|
||||||
} else {
|
} else {
|
||||||
// Local development environment
|
// Local development environment — loads from key.<flavor>.properties
|
||||||
keyAlias = keystoreProperties["keyAlias"] as String?
|
keyAlias = keystoreProperties["keyAlias"] as String?
|
||||||
keyPassword = keystoreProperties["keyPassword"] as String?
|
keyPassword = keystoreProperties["keyPassword"] as String?
|
||||||
storeFile = keystoreProperties["storeFile"]?.let { file(it) }
|
storeFile = keystoreProperties["storeFile"]?.let { file(it) }
|
||||||
@@ -73,13 +103,25 @@ android {
|
|||||||
|
|
||||||
buildTypes {
|
buildTypes {
|
||||||
release {
|
release {
|
||||||
// TODO: Add your own signing config for the release build.
|
|
||||||
// Signing with the debug keys for now, so `flutter run --release` works.
|
|
||||||
signingConfig = signingConfigs.getByName("release")
|
signingConfig = signingConfigs.getByName("release")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Skip google-services processing for flavors whose google-services.json
|
||||||
|
// contains placeholder values (e.g. prod before the Firebase project exists).
|
||||||
|
// Once a real config is dropped in, the task automatically re-enables.
|
||||||
|
afterEvaluate {
|
||||||
|
tasks.matching {
|
||||||
|
it.name.startsWith("process") && it.name.endsWith("GoogleServices")
|
||||||
|
}.configureEach {
|
||||||
|
val taskFlavor = name.removePrefix("process").removeSuffix("GoogleServices")
|
||||||
|
.removeSuffix("Debug").removeSuffix("Release").lowercase()
|
||||||
|
val configFile = file("src/$taskFlavor/google-services.json")
|
||||||
|
enabled = configFile.exists() && configFile.readText().contains("\"mobilesdk_app_id\": \"1:")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
flutter {
|
flutter {
|
||||||
source = "../.."
|
source = "../.."
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,78 +5,6 @@
|
|||||||
"storage_bucket": "krow-workforce-dev.firebasestorage.app"
|
"storage_bucket": "krow-workforce-dev.firebasestorage.app"
|
||||||
},
|
},
|
||||||
"client": [
|
"client": [
|
||||||
{
|
|
||||||
"client_info": {
|
|
||||||
"mobilesdk_app_id": "1:933560802882:android:edcddb83ea4bbb517757db",
|
|
||||||
"android_client_info": {
|
|
||||||
"package_name": "com.krow.app.business.dev"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"oauth_client": [
|
|
||||||
{
|
|
||||||
"client_id": "933560802882-grp98a1v7amflnnup68vh01tj06eaem1.apps.googleusercontent.com",
|
|
||||||
"client_type": 3
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"api_key": [
|
|
||||||
{
|
|
||||||
"current_key": "AIzaSyDBYhflhK6DThKnS7RM-9raKdvyKzLUjY4"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"services": {
|
|
||||||
"appinvite_service": {
|
|
||||||
"other_platform_oauth_client": [
|
|
||||||
{
|
|
||||||
"client_id": "933560802882-grp98a1v7amflnnup68vh01tj06eaem1.apps.googleusercontent.com",
|
|
||||||
"client_type": 3
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"client_id": "933560802882-29olj9ku64jbe9h7flinha6hbi8qrluh.apps.googleusercontent.com",
|
|
||||||
"client_type": 2,
|
|
||||||
"ios_info": {
|
|
||||||
"bundle_id": "com.krowwithus.staff"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"client_info": {
|
|
||||||
"mobilesdk_app_id": "1:933560802882:android:d49b8c0f4d19e95e7757db",
|
|
||||||
"android_client_info": {
|
|
||||||
"package_name": "com.krow.app.staff.dev"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"oauth_client": [
|
|
||||||
{
|
|
||||||
"client_id": "933560802882-grp98a1v7amflnnup68vh01tj06eaem1.apps.googleusercontent.com",
|
|
||||||
"client_type": 3
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"api_key": [
|
|
||||||
{
|
|
||||||
"current_key": "AIzaSyDBYhflhK6DThKnS7RM-9raKdvyKzLUjY4"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"services": {
|
|
||||||
"appinvite_service": {
|
|
||||||
"other_platform_oauth_client": [
|
|
||||||
{
|
|
||||||
"client_id": "933560802882-grp98a1v7amflnnup68vh01tj06eaem1.apps.googleusercontent.com",
|
|
||||||
"client_type": 3
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"client_id": "933560802882-29olj9ku64jbe9h7flinha6hbi8qrluh.apps.googleusercontent.com",
|
|
||||||
"client_type": 2,
|
|
||||||
"ios_info": {
|
|
||||||
"bundle_id": "com.krowwithus.staff"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"client_info": {
|
"client_info": {
|
||||||
"mobilesdk_app_id": "1:933560802882:android:da13569105659ead7757db",
|
"mobilesdk_app_id": "1:933560802882:android:da13569105659ead7757db",
|
||||||
@@ -164,6 +92,78 @@
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"client_info": {
|
||||||
|
"mobilesdk_app_id": "1:933560802882:android:1eb46251032273cb7757db",
|
||||||
|
"android_client_info": {
|
||||||
|
"package_name": "dev.krowwithus.client"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"oauth_client": [
|
||||||
|
{
|
||||||
|
"client_id": "933560802882-grp98a1v7amflnnup68vh01tj06eaem1.apps.googleusercontent.com",
|
||||||
|
"client_type": 3
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"api_key": [
|
||||||
|
{
|
||||||
|
"current_key": "AIzaSyDBYhflhK6DThKnS7RM-9raKdvyKzLUjY4"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"services": {
|
||||||
|
"appinvite_service": {
|
||||||
|
"other_platform_oauth_client": [
|
||||||
|
{
|
||||||
|
"client_id": "933560802882-grp98a1v7amflnnup68vh01tj06eaem1.apps.googleusercontent.com",
|
||||||
|
"client_type": 3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"client_id": "933560802882-29olj9ku64jbe9h7flinha6hbi8qrluh.apps.googleusercontent.com",
|
||||||
|
"client_type": 2,
|
||||||
|
"ios_info": {
|
||||||
|
"bundle_id": "com.krowwithus.staff"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"client_info": {
|
||||||
|
"mobilesdk_app_id": "1:933560802882:android:ee100eab75b6b04c7757db",
|
||||||
|
"android_client_info": {
|
||||||
|
"package_name": "dev.krowwithus.staff"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"oauth_client": [
|
||||||
|
{
|
||||||
|
"client_id": "933560802882-grp98a1v7amflnnup68vh01tj06eaem1.apps.googleusercontent.com",
|
||||||
|
"client_type": 3
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"api_key": [
|
||||||
|
{
|
||||||
|
"current_key": "AIzaSyDBYhflhK6DThKnS7RM-9raKdvyKzLUjY4"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"services": {
|
||||||
|
"appinvite_service": {
|
||||||
|
"other_platform_oauth_client": [
|
||||||
|
{
|
||||||
|
"client_id": "933560802882-grp98a1v7amflnnup68vh01tj06eaem1.apps.googleusercontent.com",
|
||||||
|
"client_type": 3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"client_id": "933560802882-29olj9ku64jbe9h7flinha6hbi8qrluh.apps.googleusercontent.com",
|
||||||
|
"client_type": 2,
|
||||||
|
"ios_info": {
|
||||||
|
"bundle_id": "com.krowwithus.staff"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"configuration_version": "1"
|
"configuration_version": "1"
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<application
|
<application
|
||||||
android:label="KROW With Us Client"
|
android:label="@string/app_name"
|
||||||
android:name="${applicationName}"
|
android:name="${applicationName}"
|
||||||
android:icon="@mipmap/launcher_icon">
|
android:icon="@mipmap/launcher_icon">
|
||||||
<activity
|
<activity
|
||||||
|
|||||||
@@ -0,0 +1,48 @@
|
|||||||
|
{
|
||||||
|
"project_info": {
|
||||||
|
"project_number": "1032971403708",
|
||||||
|
"project_id": "krow-workforce-staging",
|
||||||
|
"storage_bucket": "krow-workforce-staging.firebasestorage.app"
|
||||||
|
},
|
||||||
|
"client": [
|
||||||
|
{
|
||||||
|
"client_info": {
|
||||||
|
"mobilesdk_app_id": "1:1032971403708:android:1ab9badf171c3aca356bb9",
|
||||||
|
"android_client_info": {
|
||||||
|
"package_name": "stage.krowwithus.client"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"oauth_client": [],
|
||||||
|
"api_key": [
|
||||||
|
{
|
||||||
|
"current_key": "AIzaSyAZ4dOatvf3ZBt4qnbSlIvJ51bblHaRsRw"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"services": {
|
||||||
|
"appinvite_service": {
|
||||||
|
"other_platform_oauth_client": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"client_info": {
|
||||||
|
"mobilesdk_app_id": "1:1032971403708:android:14e471d055e59597356bb9",
|
||||||
|
"android_client_info": {
|
||||||
|
"package_name": "stage.krowwithus.staff"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"oauth_client": [],
|
||||||
|
"api_key": [
|
||||||
|
{
|
||||||
|
"current_key": "AIzaSyAZ4dOatvf3ZBt4qnbSlIvJ51bblHaRsRw"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"services": {
|
||||||
|
"appinvite_service": {
|
||||||
|
"other_platform_oauth_client": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"configuration_version": "1"
|
||||||
|
}
|
||||||
9
apps/mobile/apps/client/android/key.prod.properties
Normal file
9
apps/mobile/apps/client/android/key.prod.properties
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
storePassword=krowwithus
|
||||||
|
keyPassword=krowwithus
|
||||||
|
keyAlias=krow_client_prod
|
||||||
|
storeFile=krow_with_us_client_prod.jks
|
||||||
|
|
||||||
|
###
|
||||||
|
### Client Prod
|
||||||
|
### SHA1: B2:80:46:90:7F:E5:9E:86:62:7B:06:90:AC:C0:20:02:73:5B:20:5C
|
||||||
|
### SHA256: D8:3C:B0:07:B5:95:3C:82:2F:2C:A9:F6:8D:6F:77:B9:31:9D:BE:E9:74:4A:59:D9:7F:DC:EB:E2:C6:26:AB:27
|
||||||
9
apps/mobile/apps/client/android/key.stage.properties
Normal file
9
apps/mobile/apps/client/android/key.stage.properties
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
storePassword=krowwithus
|
||||||
|
keyPassword=krowwithus
|
||||||
|
keyAlias=krow_client_stage
|
||||||
|
storeFile=krow_with_us_client_stage.jks
|
||||||
|
|
||||||
|
###
|
||||||
|
### Client Stage
|
||||||
|
### SHA1: 89:9F:12:9E:A5:18:AC:1D:75:73:29:0B:F2:C2:E6:EB:38:B0:F0:A0
|
||||||
|
### SHA256: 80:13:10:CB:88:A8:8D:E9:F6:9E:D6:55:53:9C:BE:2D:D4:9C:7A:26:56:A3:E9:70:7C:F5:9A:A7:20:1A:6D:FE
|
||||||
@@ -1 +1,31 @@
|
|||||||
{"flutter":{"platforms":{"android":{"default":{"projectId":"krow-workforce-dev","appId":"1:933560802882:android:da13569105659ead7757db","fileOutput":"android/app/google-services.json"}},"ios":{"default":{"projectId":"krow-workforce-dev","appId":"1:933560802882:ios:d2b6d743608e2a527757db","uploadDebugSymbols":false,"fileOutput":"ios/Runner/GoogleService-Info.plist"}},"dart":{"lib/firebase_options.dart":{"projectId":"krow-workforce-dev","configurations":{"android":"1:933560802882:android:da13569105659ead7757db","ios":"1:933560802882:ios:d2b6d743608e2a527757db","web":"1:933560802882:web:173a841992885bb27757db"}}}}}}
|
{
|
||||||
|
"flutter": {
|
||||||
|
"platforms": {
|
||||||
|
"android": {
|
||||||
|
"default": {
|
||||||
|
"projectId": "krow-workforce-dev",
|
||||||
|
"appId": "1:933560802882:android:da13569105659ead7757db",
|
||||||
|
"fileOutput": "android/app/google-services.json"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ios": {
|
||||||
|
"default": {
|
||||||
|
"projectId": "krow-workforce-dev",
|
||||||
|
"appId": "1:933560802882:ios:d2b6d743608e2a527757db",
|
||||||
|
"uploadDebugSymbols": false,
|
||||||
|
"fileOutput": "ios/Runner/GoogleService-Info.plist"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"dart": {
|
||||||
|
"lib/firebase_options.dart": {
|
||||||
|
"projectId": "krow-workforce-dev",
|
||||||
|
"configurations": {
|
||||||
|
"android": "1:933560802882:android:da13569105659ead7757db",
|
||||||
|
"ios": "1:933560802882:ios:d2b6d743608e2a527757db",
|
||||||
|
"web": "1:933560802882:web:173a841992885bb27757db"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -149,6 +149,7 @@
|
|||||||
buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
|
buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
|
||||||
buildPhases = (
|
buildPhases = (
|
||||||
9740EEB61CF901F6004384FC /* Run Script */,
|
9740EEB61CF901F6004384FC /* Run Script */,
|
||||||
|
BC26E38F2F5F614000517BDF /* ShellScript */,
|
||||||
97C146EA1CF9000F007C117D /* Sources */,
|
97C146EA1CF9000F007C117D /* Sources */,
|
||||||
97C146EB1CF9000F007C117D /* Frameworks */,
|
97C146EB1CF9000F007C117D /* Frameworks */,
|
||||||
97C146EC1CF9000F007C117D /* Resources */,
|
97C146EC1CF9000F007C117D /* Resources */,
|
||||||
@@ -257,6 +258,24 @@
|
|||||||
shellPath = /bin/sh;
|
shellPath = /bin/sh;
|
||||||
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
|
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
|
||||||
};
|
};
|
||||||
|
BC26E38F2F5F614000517BDF /* ShellScript */ = {
|
||||||
|
isa = PBXShellScriptBuildPhase;
|
||||||
|
alwaysOutOfDate = 1;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
inputFileListPaths = (
|
||||||
|
);
|
||||||
|
inputPaths = (
|
||||||
|
);
|
||||||
|
outputFileListPaths = (
|
||||||
|
);
|
||||||
|
outputPaths = (
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
shellPath = /bin/sh;
|
||||||
|
shellScript = "# Tye a script or drag a script file from your workspace to insert its path.\n$PROJECT_DIR/scripts/copy-firebase-config.sh\n\n";
|
||||||
|
};
|
||||||
/* End PBXShellScriptBuildPhase section */
|
/* End PBXShellScriptBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXSourcesBuildPhase section */
|
/* Begin PBXSourcesBuildPhase section */
|
||||||
@@ -363,6 +382,7 @@
|
|||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
|
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
|
APP_NAME = "KROW With Us Business [STAGE]";
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
||||||
@@ -372,7 +392,7 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.krowwithus.client;
|
PRODUCT_BUNDLE_IDENTIFIER = stage.krowwithus.client;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 5.0;
|
||||||
@@ -542,6 +562,7 @@
|
|||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
|
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
|
APP_NAME = "KROW With Us Business [DEV] ";
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
||||||
@@ -551,7 +572,7 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.krowwithus.client;
|
PRODUCT_BUNDLE_IDENTIFIER = dev.krowwithus.client;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
@@ -564,6 +585,7 @@
|
|||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
|
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
|
APP_NAME = "KROW With Us Business";
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
||||||
@@ -573,7 +595,7 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.krowwithus.client;
|
PRODUCT_BUNDLE_IDENTIFIER = prod.krowwithus.client;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 5.0;
|
||||||
@@ -581,6 +603,837 @@
|
|||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
|
BC26E3562F5F5AC000517BDF /* Debug-dev */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon;
|
||||||
|
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;
|
||||||
|
ENABLE_USER_SCRIPT_SANDBOXING = NO;
|
||||||
|
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 = 13.0;
|
||||||
|
MTL_ENABLE_DEBUG_INFO = YES;
|
||||||
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
|
SDKROOT = iphoneos;
|
||||||
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
|
};
|
||||||
|
name = "Debug-dev";
|
||||||
|
};
|
||||||
|
BC26E3572F5F5AC000517BDF /* Debug-dev */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
|
||||||
|
buildSettings = {
|
||||||
|
APP_NAME = "KROW With Us Business [DEV] ";
|
||||||
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
||||||
|
ENABLE_BITCODE = NO;
|
||||||
|
INFOPLIST_FILE = Runner/Info.plist;
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/Frameworks",
|
||||||
|
);
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = dev.krowwithus.client;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||||
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
VERSIONING_SYSTEM = "apple-generic";
|
||||||
|
};
|
||||||
|
name = "Debug-dev";
|
||||||
|
};
|
||||||
|
BC26E3582F5F5AC000517BDF /* Debug-dev */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
|
MARKETING_VERSION = 1.0;
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = com.krowwithus.client;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
||||||
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
|
||||||
|
};
|
||||||
|
name = "Debug-dev";
|
||||||
|
};
|
||||||
|
BC26E3592F5F5AC500517BDF /* Debug-stage */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon;
|
||||||
|
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;
|
||||||
|
ENABLE_USER_SCRIPT_SANDBOXING = NO;
|
||||||
|
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 = 13.0;
|
||||||
|
MTL_ENABLE_DEBUG_INFO = YES;
|
||||||
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
|
SDKROOT = iphoneos;
|
||||||
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
|
};
|
||||||
|
name = "Debug-stage";
|
||||||
|
};
|
||||||
|
BC26E35A2F5F5AC500517BDF /* Debug-stage */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
|
||||||
|
buildSettings = {
|
||||||
|
APP_NAME = "KROW With Us Business [STAGE] ";
|
||||||
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
||||||
|
ENABLE_BITCODE = NO;
|
||||||
|
INFOPLIST_FILE = Runner/Info.plist;
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/Frameworks",
|
||||||
|
);
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = stage.krowwithus.client;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||||
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
VERSIONING_SYSTEM = "apple-generic";
|
||||||
|
};
|
||||||
|
name = "Debug-stage";
|
||||||
|
};
|
||||||
|
BC26E35B2F5F5AC500517BDF /* Debug-stage */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
|
MARKETING_VERSION = 1.0;
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = com.krowwithus.client;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
||||||
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
|
||||||
|
};
|
||||||
|
name = "Debug-stage";
|
||||||
|
};
|
||||||
|
BC26E35C2F5F5ACB00517BDF /* Debug-prod */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon;
|
||||||
|
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;
|
||||||
|
ENABLE_USER_SCRIPT_SANDBOXING = NO;
|
||||||
|
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 = 13.0;
|
||||||
|
MTL_ENABLE_DEBUG_INFO = YES;
|
||||||
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
|
SDKROOT = iphoneos;
|
||||||
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
|
};
|
||||||
|
name = "Debug-prod";
|
||||||
|
};
|
||||||
|
BC26E35D2F5F5ACB00517BDF /* Debug-prod */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
|
||||||
|
buildSettings = {
|
||||||
|
APP_NAME = "KROW With Us Business";
|
||||||
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
||||||
|
ENABLE_BITCODE = NO;
|
||||||
|
INFOPLIST_FILE = Runner/Info.plist;
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/Frameworks",
|
||||||
|
);
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = prod.krowwithus.client;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||||
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
VERSIONING_SYSTEM = "apple-generic";
|
||||||
|
};
|
||||||
|
name = "Debug-prod";
|
||||||
|
};
|
||||||
|
BC26E35E2F5F5ACB00517BDF /* Debug-prod */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
|
MARKETING_VERSION = 1.0;
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = com.krowwithus.client;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
||||||
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
|
||||||
|
};
|
||||||
|
name = "Debug-prod";
|
||||||
|
};
|
||||||
|
BC26E35F2F5F5AD200517BDF /* Profile-dev */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
|
||||||
|
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;
|
||||||
|
ENABLE_USER_SCRIPT_SANDBOXING = NO;
|
||||||
|
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 = 13.0;
|
||||||
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
|
SDKROOT = iphoneos;
|
||||||
|
SUPPORTED_PLATFORMS = iphoneos;
|
||||||
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
|
VALIDATE_PRODUCT = YES;
|
||||||
|
};
|
||||||
|
name = "Profile-dev";
|
||||||
|
};
|
||||||
|
BC26E3602F5F5AD200517BDF /* Profile-dev */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
|
||||||
|
buildSettings = {
|
||||||
|
APP_NAME = "KROW With Us Business [DEV] ";
|
||||||
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
||||||
|
ENABLE_BITCODE = NO;
|
||||||
|
INFOPLIST_FILE = Runner/Info.plist;
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/Frameworks",
|
||||||
|
);
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = dev.krowwithus.client;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
VERSIONING_SYSTEM = "apple-generic";
|
||||||
|
};
|
||||||
|
name = "Profile-dev";
|
||||||
|
};
|
||||||
|
BC26E3612F5F5AD200517BDF /* Profile-dev */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
|
MARKETING_VERSION = 1.0;
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = com.krowwithus.client;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
|
||||||
|
};
|
||||||
|
name = "Profile-dev";
|
||||||
|
};
|
||||||
|
BC26E3622F5F5AD800517BDF /* Profile-stage */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
|
||||||
|
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;
|
||||||
|
ENABLE_USER_SCRIPT_SANDBOXING = NO;
|
||||||
|
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 = 13.0;
|
||||||
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
|
SDKROOT = iphoneos;
|
||||||
|
SUPPORTED_PLATFORMS = iphoneos;
|
||||||
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
|
VALIDATE_PRODUCT = YES;
|
||||||
|
};
|
||||||
|
name = "Profile-stage";
|
||||||
|
};
|
||||||
|
BC26E3632F5F5AD800517BDF /* Profile-stage */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
|
||||||
|
buildSettings = {
|
||||||
|
APP_NAME = "KROW With Us Business [STAGE]";
|
||||||
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
||||||
|
ENABLE_BITCODE = NO;
|
||||||
|
INFOPLIST_FILE = Runner/Info.plist;
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/Frameworks",
|
||||||
|
);
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = stage.krowwithus.client;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
VERSIONING_SYSTEM = "apple-generic";
|
||||||
|
};
|
||||||
|
name = "Profile-stage";
|
||||||
|
};
|
||||||
|
BC26E3642F5F5AD800517BDF /* Profile-stage */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
|
MARKETING_VERSION = 1.0;
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = com.krowwithus.client;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
|
||||||
|
};
|
||||||
|
name = "Profile-stage";
|
||||||
|
};
|
||||||
|
BC26E3652F5F5AE300517BDF /* Profile-prod */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
|
||||||
|
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;
|
||||||
|
ENABLE_USER_SCRIPT_SANDBOXING = NO;
|
||||||
|
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 = 13.0;
|
||||||
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
|
SDKROOT = iphoneos;
|
||||||
|
SUPPORTED_PLATFORMS = iphoneos;
|
||||||
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
|
VALIDATE_PRODUCT = YES;
|
||||||
|
};
|
||||||
|
name = "Profile-prod";
|
||||||
|
};
|
||||||
|
BC26E3662F5F5AE300517BDF /* Profile-prod */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
|
||||||
|
buildSettings = {
|
||||||
|
APP_NAME = "KROW With Us Business";
|
||||||
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
||||||
|
ENABLE_BITCODE = NO;
|
||||||
|
INFOPLIST_FILE = Runner/Info.plist;
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/Frameworks",
|
||||||
|
);
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = prod.krowwithus.client;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
VERSIONING_SYSTEM = "apple-generic";
|
||||||
|
};
|
||||||
|
name = "Profile-prod";
|
||||||
|
};
|
||||||
|
BC26E3672F5F5AE300517BDF /* Profile-prod */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
|
MARKETING_VERSION = 1.0;
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = com.krowwithus.client;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
|
||||||
|
};
|
||||||
|
name = "Profile-prod";
|
||||||
|
};
|
||||||
|
BC26E3682F5F5AE800517BDF /* Release-dev */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon;
|
||||||
|
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;
|
||||||
|
ENABLE_USER_SCRIPT_SANDBOXING = NO;
|
||||||
|
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 = 13.0;
|
||||||
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
|
SDKROOT = iphoneos;
|
||||||
|
SUPPORTED_PLATFORMS = iphoneos;
|
||||||
|
SWIFT_COMPILATION_MODE = wholemodule;
|
||||||
|
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
||||||
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
|
VALIDATE_PRODUCT = YES;
|
||||||
|
};
|
||||||
|
name = "Release-dev";
|
||||||
|
};
|
||||||
|
BC26E3692F5F5AE800517BDF /* Release-dev */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
|
||||||
|
buildSettings = {
|
||||||
|
APP_NAME = "KROW With Us Business [DEV] ";
|
||||||
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
||||||
|
ENABLE_BITCODE = NO;
|
||||||
|
INFOPLIST_FILE = Runner/Info.plist;
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/Frameworks",
|
||||||
|
);
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = dev.krowwithus.client;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
VERSIONING_SYSTEM = "apple-generic";
|
||||||
|
};
|
||||||
|
name = "Release-dev";
|
||||||
|
};
|
||||||
|
BC26E36A2F5F5AE800517BDF /* Release-dev */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
|
MARKETING_VERSION = 1.0;
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = com.krowwithus.client;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
|
||||||
|
};
|
||||||
|
name = "Release-dev";
|
||||||
|
};
|
||||||
|
BC26E36B2F5F5AED00517BDF /* Release-stage */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon;
|
||||||
|
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;
|
||||||
|
ENABLE_USER_SCRIPT_SANDBOXING = NO;
|
||||||
|
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 = 13.0;
|
||||||
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
|
SDKROOT = iphoneos;
|
||||||
|
SUPPORTED_PLATFORMS = iphoneos;
|
||||||
|
SWIFT_COMPILATION_MODE = wholemodule;
|
||||||
|
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
||||||
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
|
VALIDATE_PRODUCT = YES;
|
||||||
|
};
|
||||||
|
name = "Release-stage";
|
||||||
|
};
|
||||||
|
BC26E36C2F5F5AED00517BDF /* Release-stage */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
|
||||||
|
buildSettings = {
|
||||||
|
APP_NAME = "KROW With Us Business [STAGE] ";
|
||||||
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
||||||
|
ENABLE_BITCODE = NO;
|
||||||
|
INFOPLIST_FILE = Runner/Info.plist;
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/Frameworks",
|
||||||
|
);
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = stage.krowwithus.client;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
VERSIONING_SYSTEM = "apple-generic";
|
||||||
|
};
|
||||||
|
name = "Release-stage";
|
||||||
|
};
|
||||||
|
BC26E36D2F5F5AED00517BDF /* Release-stage */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
|
MARKETING_VERSION = 1.0;
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = com.krowwithus.client;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
|
||||||
|
};
|
||||||
|
name = "Release-stage";
|
||||||
|
};
|
||||||
|
BC26E36E2F5F5AF300517BDF /* Release-prod */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon;
|
||||||
|
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;
|
||||||
|
ENABLE_USER_SCRIPT_SANDBOXING = NO;
|
||||||
|
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 = 13.0;
|
||||||
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
|
SDKROOT = iphoneos;
|
||||||
|
SUPPORTED_PLATFORMS = iphoneos;
|
||||||
|
SWIFT_COMPILATION_MODE = wholemodule;
|
||||||
|
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
||||||
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
|
VALIDATE_PRODUCT = YES;
|
||||||
|
};
|
||||||
|
name = "Release-prod";
|
||||||
|
};
|
||||||
|
BC26E36F2F5F5AF300517BDF /* Release-prod */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
|
||||||
|
buildSettings = {
|
||||||
|
APP_NAME = "KROW With Us Business";
|
||||||
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
||||||
|
ENABLE_BITCODE = NO;
|
||||||
|
INFOPLIST_FILE = Runner/Info.plist;
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/Frameworks",
|
||||||
|
);
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = prod.krowwithus.client;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
VERSIONING_SYSTEM = "apple-generic";
|
||||||
|
};
|
||||||
|
name = "Release-prod";
|
||||||
|
};
|
||||||
|
BC26E3702F5F5AF300517BDF /* Release-prod */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
|
MARKETING_VERSION = 1.0;
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = com.krowwithus.client;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
|
||||||
|
};
|
||||||
|
name = "Release-prod";
|
||||||
|
};
|
||||||
/* End XCBuildConfiguration section */
|
/* End XCBuildConfiguration section */
|
||||||
|
|
||||||
/* Begin XCConfigurationList section */
|
/* Begin XCConfigurationList section */
|
||||||
@@ -588,8 +1441,17 @@
|
|||||||
isa = XCConfigurationList;
|
isa = XCConfigurationList;
|
||||||
buildConfigurations = (
|
buildConfigurations = (
|
||||||
331C8088294A63A400263BE5 /* Debug */,
|
331C8088294A63A400263BE5 /* Debug */,
|
||||||
|
BC26E35E2F5F5ACB00517BDF /* Debug-prod */,
|
||||||
|
BC26E35B2F5F5AC500517BDF /* Debug-stage */,
|
||||||
|
BC26E3582F5F5AC000517BDF /* Debug-dev */,
|
||||||
331C8089294A63A400263BE5 /* Release */,
|
331C8089294A63A400263BE5 /* Release */,
|
||||||
|
BC26E3702F5F5AF300517BDF /* Release-prod */,
|
||||||
|
BC26E36D2F5F5AED00517BDF /* Release-stage */,
|
||||||
|
BC26E36A2F5F5AE800517BDF /* Release-dev */,
|
||||||
331C808A294A63A400263BE5 /* Profile */,
|
331C808A294A63A400263BE5 /* Profile */,
|
||||||
|
BC26E3672F5F5AE300517BDF /* Profile-prod */,
|
||||||
|
BC26E3642F5F5AD800517BDF /* Profile-stage */,
|
||||||
|
BC26E3612F5F5AD200517BDF /* Profile-dev */,
|
||||||
);
|
);
|
||||||
defaultConfigurationIsVisible = 0;
|
defaultConfigurationIsVisible = 0;
|
||||||
defaultConfigurationName = Release;
|
defaultConfigurationName = Release;
|
||||||
@@ -598,8 +1460,17 @@
|
|||||||
isa = XCConfigurationList;
|
isa = XCConfigurationList;
|
||||||
buildConfigurations = (
|
buildConfigurations = (
|
||||||
97C147031CF9000F007C117D /* Debug */,
|
97C147031CF9000F007C117D /* Debug */,
|
||||||
|
BC26E35C2F5F5ACB00517BDF /* Debug-prod */,
|
||||||
|
BC26E3592F5F5AC500517BDF /* Debug-stage */,
|
||||||
|
BC26E3562F5F5AC000517BDF /* Debug-dev */,
|
||||||
97C147041CF9000F007C117D /* Release */,
|
97C147041CF9000F007C117D /* Release */,
|
||||||
|
BC26E36E2F5F5AF300517BDF /* Release-prod */,
|
||||||
|
BC26E36B2F5F5AED00517BDF /* Release-stage */,
|
||||||
|
BC26E3682F5F5AE800517BDF /* Release-dev */,
|
||||||
249021D3217E4FDB00AE95B9 /* Profile */,
|
249021D3217E4FDB00AE95B9 /* Profile */,
|
||||||
|
BC26E3652F5F5AE300517BDF /* Profile-prod */,
|
||||||
|
BC26E3622F5F5AD800517BDF /* Profile-stage */,
|
||||||
|
BC26E35F2F5F5AD200517BDF /* Profile-dev */,
|
||||||
);
|
);
|
||||||
defaultConfigurationIsVisible = 0;
|
defaultConfigurationIsVisible = 0;
|
||||||
defaultConfigurationName = Release;
|
defaultConfigurationName = Release;
|
||||||
@@ -608,8 +1479,17 @@
|
|||||||
isa = XCConfigurationList;
|
isa = XCConfigurationList;
|
||||||
buildConfigurations = (
|
buildConfigurations = (
|
||||||
97C147061CF9000F007C117D /* Debug */,
|
97C147061CF9000F007C117D /* Debug */,
|
||||||
|
BC26E35D2F5F5ACB00517BDF /* Debug-prod */,
|
||||||
|
BC26E35A2F5F5AC500517BDF /* Debug-stage */,
|
||||||
|
BC26E3572F5F5AC000517BDF /* Debug-dev */,
|
||||||
97C147071CF9000F007C117D /* Release */,
|
97C147071CF9000F007C117D /* Release */,
|
||||||
|
BC26E36F2F5F5AF300517BDF /* Release-prod */,
|
||||||
|
BC26E36C2F5F5AED00517BDF /* Release-stage */,
|
||||||
|
BC26E3692F5F5AE800517BDF /* Release-dev */,
|
||||||
249021D4217E4FDB00AE95B9 /* Profile */,
|
249021D4217E4FDB00AE95B9 /* Profile */,
|
||||||
|
BC26E3662F5F5AE300517BDF /* Profile-prod */,
|
||||||
|
BC26E3632F5F5AD800517BDF /* Profile-stage */,
|
||||||
|
BC26E3602F5F5AD200517BDF /* Profile-dev */,
|
||||||
);
|
);
|
||||||
defaultConfigurationIsVisible = 0;
|
defaultConfigurationIsVisible = 0;
|
||||||
defaultConfigurationName = Release;
|
defaultConfigurationName = Release;
|
||||||
|
|||||||
@@ -0,0 +1,78 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Scheme
|
||||||
|
LastUpgradeVersion = "2630"
|
||||||
|
version = "1.7">
|
||||||
|
<BuildAction
|
||||||
|
parallelizeBuildables = "YES"
|
||||||
|
buildImplicitDependencies = "YES"
|
||||||
|
buildArchitectures = "Automatic">
|
||||||
|
<BuildActionEntries>
|
||||||
|
<BuildActionEntry
|
||||||
|
buildForTesting = "YES"
|
||||||
|
buildForRunning = "YES"
|
||||||
|
buildForProfiling = "YES"
|
||||||
|
buildForArchiving = "YES"
|
||||||
|
buildForAnalyzing = "YES">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
|
||||||
|
BuildableName = "Runner.app"
|
||||||
|
BlueprintName = "Runner"
|
||||||
|
ReferencedContainer = "container:Runner.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildActionEntry>
|
||||||
|
</BuildActionEntries>
|
||||||
|
</BuildAction>
|
||||||
|
<TestAction
|
||||||
|
buildConfiguration = "Debug-dev"
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||||
|
shouldAutocreateTestPlan = "YES">
|
||||||
|
</TestAction>
|
||||||
|
<LaunchAction
|
||||||
|
buildConfiguration = "Debug-dev"
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
launchStyle = "0"
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
ignoresPersistentStateOnLaunch = "NO"
|
||||||
|
debugDocumentVersioning = "YES"
|
||||||
|
debugServiceExtension = "internal"
|
||||||
|
allowLocationSimulation = "YES">
|
||||||
|
<BuildableProductRunnable
|
||||||
|
runnableDebuggingMode = "0">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
|
||||||
|
BuildableName = "Runner.app"
|
||||||
|
BlueprintName = "Runner"
|
||||||
|
ReferencedContainer = "container:Runner.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildableProductRunnable>
|
||||||
|
</LaunchAction>
|
||||||
|
<ProfileAction
|
||||||
|
buildConfiguration = "Profile-dev"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||||
|
savedToolIdentifier = ""
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
debugDocumentVersioning = "YES">
|
||||||
|
<BuildableProductRunnable
|
||||||
|
runnableDebuggingMode = "0">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
|
||||||
|
BuildableName = "Runner.app"
|
||||||
|
BlueprintName = "Runner"
|
||||||
|
ReferencedContainer = "container:Runner.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildableProductRunnable>
|
||||||
|
</ProfileAction>
|
||||||
|
<AnalyzeAction
|
||||||
|
buildConfiguration = "Debug-dev">
|
||||||
|
</AnalyzeAction>
|
||||||
|
<ArchiveAction
|
||||||
|
buildConfiguration = "Release-dev"
|
||||||
|
revealArchiveInOrganizer = "YES">
|
||||||
|
</ArchiveAction>
|
||||||
|
</Scheme>
|
||||||
@@ -0,0 +1,78 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Scheme
|
||||||
|
LastUpgradeVersion = "2630"
|
||||||
|
version = "1.7">
|
||||||
|
<BuildAction
|
||||||
|
parallelizeBuildables = "YES"
|
||||||
|
buildImplicitDependencies = "YES"
|
||||||
|
buildArchitectures = "Automatic">
|
||||||
|
<BuildActionEntries>
|
||||||
|
<BuildActionEntry
|
||||||
|
buildForTesting = "YES"
|
||||||
|
buildForRunning = "YES"
|
||||||
|
buildForProfiling = "YES"
|
||||||
|
buildForArchiving = "YES"
|
||||||
|
buildForAnalyzing = "YES">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
|
||||||
|
BuildableName = "Runner.app"
|
||||||
|
BlueprintName = "Runner"
|
||||||
|
ReferencedContainer = "container:Runner.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildActionEntry>
|
||||||
|
</BuildActionEntries>
|
||||||
|
</BuildAction>
|
||||||
|
<TestAction
|
||||||
|
buildConfiguration = "Debug-prod"
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||||
|
shouldAutocreateTestPlan = "YES">
|
||||||
|
</TestAction>
|
||||||
|
<LaunchAction
|
||||||
|
buildConfiguration = "Debug-prod"
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
launchStyle = "0"
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
ignoresPersistentStateOnLaunch = "NO"
|
||||||
|
debugDocumentVersioning = "YES"
|
||||||
|
debugServiceExtension = "internal"
|
||||||
|
allowLocationSimulation = "YES">
|
||||||
|
<BuildableProductRunnable
|
||||||
|
runnableDebuggingMode = "0">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
|
||||||
|
BuildableName = "Runner.app"
|
||||||
|
BlueprintName = "Runner"
|
||||||
|
ReferencedContainer = "container:Runner.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildableProductRunnable>
|
||||||
|
</LaunchAction>
|
||||||
|
<ProfileAction
|
||||||
|
buildConfiguration = "Profile-prod"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||||
|
savedToolIdentifier = ""
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
debugDocumentVersioning = "YES">
|
||||||
|
<BuildableProductRunnable
|
||||||
|
runnableDebuggingMode = "0">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
|
||||||
|
BuildableName = "Runner.app"
|
||||||
|
BlueprintName = "Runner"
|
||||||
|
ReferencedContainer = "container:Runner.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildableProductRunnable>
|
||||||
|
</ProfileAction>
|
||||||
|
<AnalyzeAction
|
||||||
|
buildConfiguration = "Debug-prod">
|
||||||
|
</AnalyzeAction>
|
||||||
|
<ArchiveAction
|
||||||
|
buildConfiguration = "Release-prod"
|
||||||
|
revealArchiveInOrganizer = "YES">
|
||||||
|
</ArchiveAction>
|
||||||
|
</Scheme>
|
||||||
@@ -0,0 +1,78 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Scheme
|
||||||
|
LastUpgradeVersion = "2630"
|
||||||
|
version = "1.7">
|
||||||
|
<BuildAction
|
||||||
|
parallelizeBuildables = "YES"
|
||||||
|
buildImplicitDependencies = "YES"
|
||||||
|
buildArchitectures = "Automatic">
|
||||||
|
<BuildActionEntries>
|
||||||
|
<BuildActionEntry
|
||||||
|
buildForTesting = "YES"
|
||||||
|
buildForRunning = "YES"
|
||||||
|
buildForProfiling = "YES"
|
||||||
|
buildForArchiving = "YES"
|
||||||
|
buildForAnalyzing = "YES">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
|
||||||
|
BuildableName = "Runner.app"
|
||||||
|
BlueprintName = "Runner"
|
||||||
|
ReferencedContainer = "container:Runner.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildActionEntry>
|
||||||
|
</BuildActionEntries>
|
||||||
|
</BuildAction>
|
||||||
|
<TestAction
|
||||||
|
buildConfiguration = "Debug-stage"
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||||
|
shouldAutocreateTestPlan = "YES">
|
||||||
|
</TestAction>
|
||||||
|
<LaunchAction
|
||||||
|
buildConfiguration = "Debug-stage"
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
launchStyle = "0"
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
ignoresPersistentStateOnLaunch = "NO"
|
||||||
|
debugDocumentVersioning = "YES"
|
||||||
|
debugServiceExtension = "internal"
|
||||||
|
allowLocationSimulation = "YES">
|
||||||
|
<BuildableProductRunnable
|
||||||
|
runnableDebuggingMode = "0">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
|
||||||
|
BuildableName = "Runner.app"
|
||||||
|
BlueprintName = "Runner"
|
||||||
|
ReferencedContainer = "container:Runner.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildableProductRunnable>
|
||||||
|
</LaunchAction>
|
||||||
|
<ProfileAction
|
||||||
|
buildConfiguration = "Profile-stage"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||||
|
savedToolIdentifier = ""
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
debugDocumentVersioning = "YES">
|
||||||
|
<BuildableProductRunnable
|
||||||
|
runnableDebuggingMode = "0">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
|
||||||
|
BuildableName = "Runner.app"
|
||||||
|
BlueprintName = "Runner"
|
||||||
|
ReferencedContainer = "container:Runner.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildableProductRunnable>
|
||||||
|
</ProfileAction>
|
||||||
|
<AnalyzeAction
|
||||||
|
buildConfiguration = "Debug-stage">
|
||||||
|
</AnalyzeAction>
|
||||||
|
<ArchiveAction
|
||||||
|
buildConfiguration = "Release-stage"
|
||||||
|
revealArchiveInOrganizer = "YES">
|
||||||
|
</ArchiveAction>
|
||||||
|
</Scheme>
|
||||||
@@ -5,7 +5,7 @@
|
|||||||
<key>CFBundleDevelopmentRegion</key>
|
<key>CFBundleDevelopmentRegion</key>
|
||||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||||
<key>CFBundleDisplayName</key>
|
<key>CFBundleDisplayName</key>
|
||||||
<string>KROW With Us Client</string>
|
<string>$(APP_NAME)</string>
|
||||||
<key>CFBundleExecutable</key>
|
<key>CFBundleExecutable</key>
|
||||||
<string>$(EXECUTABLE_NAME)</string>
|
<string>$(EXECUTABLE_NAME)</string>
|
||||||
<key>CFBundleIdentifier</key>
|
<key>CFBundleIdentifier</key>
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
<key>CFBundleInfoDictionaryVersion</key>
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
<string>6.0</string>
|
<string>6.0</string>
|
||||||
<key>CFBundleName</key>
|
<key>CFBundleName</key>
|
||||||
<string>KROW With Us Client</string>
|
<string>$(APP_NAME)</string>
|
||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>APPL</string>
|
<string>APPL</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
|
|||||||
@@ -3,9 +3,9 @@
|
|||||||
<plist version="1.0">
|
<plist version="1.0">
|
||||||
<dict>
|
<dict>
|
||||||
<key>CLIENT_ID</key>
|
<key>CLIENT_ID</key>
|
||||||
<string>933560802882-29olj9ku64jbe9h7flinha6hbi8qrluh.apps.googleusercontent.com</string>
|
<string>933560802882-jpv087j5jenp1h63mc9ge51767s3l2ac.apps.googleusercontent.com</string>
|
||||||
<key>REVERSED_CLIENT_ID</key>
|
<key>REVERSED_CLIENT_ID</key>
|
||||||
<string>com.googleusercontent.apps.933560802882-29olj9ku64jbe9h7flinha6hbi8qrluh</string>
|
<string>com.googleusercontent.apps.933560802882-jpv087j5jenp1h63mc9ge51767s3l2ac</string>
|
||||||
<key>ANDROID_CLIENT_ID</key>
|
<key>ANDROID_CLIENT_ID</key>
|
||||||
<string>933560802882-fbqg2icq24bmci3f84evjrbth5huh87f.apps.googleusercontent.com</string>
|
<string>933560802882-fbqg2icq24bmci3f84evjrbth5huh87f.apps.googleusercontent.com</string>
|
||||||
<key>API_KEY</key>
|
<key>API_KEY</key>
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
<key>PLIST_VERSION</key>
|
<key>PLIST_VERSION</key>
|
||||||
<string>1</string>
|
<string>1</string>
|
||||||
<key>BUNDLE_ID</key>
|
<key>BUNDLE_ID</key>
|
||||||
<string>com.krowwithus.staff</string>
|
<string>dev.krowwithus.client</string>
|
||||||
<key>PROJECT_ID</key>
|
<key>PROJECT_ID</key>
|
||||||
<string>krow-workforce-dev</string>
|
<string>krow-workforce-dev</string>
|
||||||
<key>STORAGE_BUCKET</key>
|
<key>STORAGE_BUCKET</key>
|
||||||
@@ -31,6 +31,6 @@
|
|||||||
<key>IS_SIGNIN_ENABLED</key>
|
<key>IS_SIGNIN_ENABLED</key>
|
||||||
<true></true>
|
<true></true>
|
||||||
<key>GOOGLE_APP_ID</key>
|
<key>GOOGLE_APP_ID</key>
|
||||||
<string>1:933560802882:ios:fa584205b356de937757db</string>
|
<string>1:933560802882:ios:7e179dfdd1a8994c7757db</string>
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>API_KEY</key>
|
||||||
|
<string>AIzaSyCgTXI3QhbEK3r4J5y7ek_6AxqhmR99QjY</string>
|
||||||
|
<key>GCM_SENDER_ID</key>
|
||||||
|
<string>1032971403708</string>
|
||||||
|
<key>PLIST_VERSION</key>
|
||||||
|
<string>1</string>
|
||||||
|
<key>BUNDLE_ID</key>
|
||||||
|
<string>stage.krowwithus.client</string>
|
||||||
|
<key>PROJECT_ID</key>
|
||||||
|
<string>krow-workforce-staging</string>
|
||||||
|
<key>STORAGE_BUCKET</key>
|
||||||
|
<string>krow-workforce-staging.firebasestorage.app</string>
|
||||||
|
<key>IS_ADS_ENABLED</key>
|
||||||
|
<false></false>
|
||||||
|
<key>IS_ANALYTICS_ENABLED</key>
|
||||||
|
<false></false>
|
||||||
|
<key>IS_APPINVITE_ENABLED</key>
|
||||||
|
<true></true>
|
||||||
|
<key>IS_GCM_ENABLED</key>
|
||||||
|
<true></true>
|
||||||
|
<key>IS_SIGNIN_ENABLED</key>
|
||||||
|
<true></true>
|
||||||
|
<key>GOOGLE_APP_ID</key>
|
||||||
|
<string>1:1032971403708:ios:0ff547e80f5324ed356bb9</string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
19
apps/mobile/apps/client/ios/scripts/firebase-config.sh
Executable file
19
apps/mobile/apps/client/ios/scripts/firebase-config.sh
Executable file
@@ -0,0 +1,19 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Copy the correct GoogleService-Info.plist based on the build configuration.
|
||||||
|
# This script should be added as a "Run Script" build phase in Xcode,
|
||||||
|
# BEFORE the "Compile Sources" phase.
|
||||||
|
#
|
||||||
|
# The FLUTTER_FLAVOR environment variable is set by Flutter when building
|
||||||
|
# with --flavor. It maps to: dev, stage, prod.
|
||||||
|
|
||||||
|
FLAVOR="${FLUTTER_FLAVOR:-dev}"
|
||||||
|
PLIST_SOURCE="${PROJECT_DIR}/config/${FLAVOR}/GoogleService-Info.plist"
|
||||||
|
PLIST_DEST="${PROJECT_DIR}/Runner/GoogleService-Info.plist"
|
||||||
|
|
||||||
|
if [ ! -f "$PLIST_SOURCE" ]; then
|
||||||
|
echo "error: GoogleService-Info.plist not found for flavor '${FLAVOR}' at ${PLIST_SOURCE}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Copying GoogleService-Info.plist for flavor: ${FLAVOR}"
|
||||||
|
cp "${PLIST_SOURCE}" "${PLIST_DEST}"
|
||||||
@@ -1,44 +1,22 @@
|
|||||||
// File generated by FlutterFire CLI.
|
|
||||||
|
|
||||||
import 'package:firebase_core/firebase_core.dart' show FirebaseOptions;
|
import 'package:firebase_core/firebase_core.dart' show FirebaseOptions;
|
||||||
import 'package:flutter/foundation.dart'
|
import 'package:flutter/foundation.dart'
|
||||||
show defaultTargetPlatform, kIsWeb, TargetPlatform;
|
show defaultTargetPlatform, kIsWeb, TargetPlatform;
|
||||||
|
import 'package:krow_core/core.dart';
|
||||||
|
|
||||||
/// Default [FirebaseOptions] for use with your Firebase apps.
|
/// Environment-aware [FirebaseOptions] for the Client app.
|
||||||
///
|
///
|
||||||
/// Example:
|
/// Selects the correct Firebase configuration based on the compile-time
|
||||||
/// ```dart
|
/// `ENV` dart define (dev, stage, prod). Defaults to dev.
|
||||||
/// import 'firebase_options.dart';
|
|
||||||
/// // ...
|
|
||||||
/// await Firebase.initializeApp(
|
|
||||||
/// options: DefaultFirebaseOptions.currentPlatform,
|
|
||||||
/// );
|
|
||||||
/// ```
|
|
||||||
class DefaultFirebaseOptions {
|
class DefaultFirebaseOptions {
|
||||||
static FirebaseOptions get currentPlatform {
|
static FirebaseOptions get currentPlatform {
|
||||||
if (kIsWeb) {
|
if (kIsWeb) {
|
||||||
return web;
|
return _webOptions;
|
||||||
}
|
}
|
||||||
switch (defaultTargetPlatform) {
|
switch (defaultTargetPlatform) {
|
||||||
case TargetPlatform.android:
|
case TargetPlatform.android:
|
||||||
return android;
|
return _androidOptions;
|
||||||
case TargetPlatform.iOS:
|
case TargetPlatform.iOS:
|
||||||
return ios;
|
return _iosOptions;
|
||||||
case TargetPlatform.macOS:
|
|
||||||
throw UnsupportedError(
|
|
||||||
'DefaultFirebaseOptions have not been configured for macos - '
|
|
||||||
'you can reconfigure this by running the FlutterFire CLI again.',
|
|
||||||
);
|
|
||||||
case TargetPlatform.windows:
|
|
||||||
throw UnsupportedError(
|
|
||||||
'DefaultFirebaseOptions have not been configured for windows - '
|
|
||||||
'you can reconfigure this by running the FlutterFire CLI again.',
|
|
||||||
);
|
|
||||||
case TargetPlatform.linux:
|
|
||||||
throw UnsupportedError(
|
|
||||||
'DefaultFirebaseOptions have not been configured for linux - '
|
|
||||||
'you can reconfigure this by running the FlutterFire CLI again.',
|
|
||||||
);
|
|
||||||
default:
|
default:
|
||||||
throw UnsupportedError(
|
throw UnsupportedError(
|
||||||
'DefaultFirebaseOptions are not supported for this platform.',
|
'DefaultFirebaseOptions are not supported for this platform.',
|
||||||
@@ -46,7 +24,65 @@ class DefaultFirebaseOptions {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static const FirebaseOptions web = FirebaseOptions(
|
static FirebaseOptions get _androidOptions {
|
||||||
|
switch (AppEnvironment.current) {
|
||||||
|
case AppEnvironment.dev:
|
||||||
|
return _devAndroid;
|
||||||
|
case AppEnvironment.stage:
|
||||||
|
return _stageAndroid;
|
||||||
|
case AppEnvironment.prod:
|
||||||
|
return _prodAndroid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static FirebaseOptions get _iosOptions {
|
||||||
|
switch (AppEnvironment.current) {
|
||||||
|
case AppEnvironment.dev:
|
||||||
|
return _devIos;
|
||||||
|
case AppEnvironment.stage:
|
||||||
|
return _stageIos;
|
||||||
|
case AppEnvironment.prod:
|
||||||
|
return _prodIos;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static FirebaseOptions get _webOptions {
|
||||||
|
switch (AppEnvironment.current) {
|
||||||
|
case AppEnvironment.dev:
|
||||||
|
return _devWeb;
|
||||||
|
case AppEnvironment.stage:
|
||||||
|
return _stageWeb;
|
||||||
|
case AppEnvironment.prod:
|
||||||
|
return _prodWeb;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
// DEV (krow-workforce-dev)
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
static const FirebaseOptions _devAndroid = FirebaseOptions(
|
||||||
|
apiKey: 'AIzaSyDBYhflhK6DThKnS7RM-9raKdvyKzLUjY4',
|
||||||
|
appId: '1:933560802882:android:1eb46251032273cb7757db',
|
||||||
|
messagingSenderId: '933560802882',
|
||||||
|
projectId: 'krow-workforce-dev',
|
||||||
|
storageBucket: 'krow-workforce-dev.firebasestorage.app',
|
||||||
|
);
|
||||||
|
|
||||||
|
static const FirebaseOptions _devIos = FirebaseOptions(
|
||||||
|
apiKey: 'AIzaSyDyEXkzZAWpXXe4dAesYaZflt5BEtMn9tA',
|
||||||
|
appId: '1:933560802882:ios:7e179dfdd1a8994c7757db',
|
||||||
|
messagingSenderId: '933560802882',
|
||||||
|
projectId: 'krow-workforce-dev',
|
||||||
|
storageBucket: 'krow-workforce-dev.firebasestorage.app',
|
||||||
|
androidClientId:
|
||||||
|
'933560802882-fbqg2icq24bmci3f84evjrbth5huh87f.apps.googleusercontent.com',
|
||||||
|
iosClientId:
|
||||||
|
'933560802882-jpv087j5jenp1h63mc9ge51767s3l2ac.apps.googleusercontent.com',
|
||||||
|
iosBundleId: 'dev.krowwithus.client',
|
||||||
|
);
|
||||||
|
|
||||||
|
static const FirebaseOptions _devWeb = FirebaseOptions(
|
||||||
apiKey: 'AIzaSyBqRtZPMGU-Sz5x5UnRrunKu5NSWYyPRn8',
|
apiKey: 'AIzaSyBqRtZPMGU-Sz5x5UnRrunKu5NSWYyPRn8',
|
||||||
appId: '1:933560802882:web:173a841992885bb27757db',
|
appId: '1:933560802882:web:173a841992885bb27757db',
|
||||||
messagingSenderId: '933560802882',
|
messagingSenderId: '933560802882',
|
||||||
@@ -56,23 +92,62 @@ class DefaultFirebaseOptions {
|
|||||||
measurementId: 'G-9S7WEQTDKX',
|
measurementId: 'G-9S7WEQTDKX',
|
||||||
);
|
);
|
||||||
|
|
||||||
static const FirebaseOptions android = FirebaseOptions(
|
// ===========================================================================
|
||||||
apiKey: 'AIzaSyDBYhflhK6DThKnS7RM-9raKdvyKzLUjY4',
|
// STAGE (krow-workforce-staging)
|
||||||
appId: '1:933560802882:android:da13569105659ead7757db',
|
// ===========================================================================
|
||||||
messagingSenderId: '933560802882',
|
|
||||||
projectId: 'krow-workforce-dev',
|
static const FirebaseOptions _stageAndroid = FirebaseOptions(
|
||||||
storageBucket: 'krow-workforce-dev.firebasestorage.app',
|
apiKey: 'AIzaSyCgTXI3QhbEK3r4J5y7ek_6AxqhmR99QjY',
|
||||||
|
appId: '1:1032971403708:android:1ab9badf171c3aca356bb9',
|
||||||
|
messagingSenderId: '1032971403708',
|
||||||
|
projectId: 'krow-workforce-staging',
|
||||||
|
storageBucket: 'krow-workforce-staging.firebasestorage.app',
|
||||||
);
|
);
|
||||||
|
|
||||||
static const FirebaseOptions ios = FirebaseOptions(
|
static const FirebaseOptions _stageIos = FirebaseOptions(
|
||||||
apiKey: 'AIzaSyDyEXkzZAWpXXe4dAesYaZflt5BEtMn9tA',
|
apiKey: 'AIzaSyCgTXI3QhbEK3r4J5y7ek_6AxqhmR99QjY',
|
||||||
appId: '1:933560802882:ios:d2b6d743608e2a527757db',
|
appId: '1:1032971403708:ios:0ff547e80f5324ed356bb9',
|
||||||
messagingSenderId: '933560802882',
|
messagingSenderId: '1032971403708',
|
||||||
projectId: 'krow-workforce-dev',
|
projectId: 'krow-workforce-staging',
|
||||||
storageBucket: 'krow-workforce-dev.firebasestorage.app',
|
storageBucket: 'krow-workforce-staging.firebasestorage.app',
|
||||||
androidClientId: '933560802882-fbqg2icq24bmci3f84evjrbth5huh87f.apps.googleusercontent.com',
|
iosBundleId: 'stage.krowwithus.client',
|
||||||
iosClientId: '933560802882-jqpv1l3gjmi3m87b2gu1iq4lg46lkdfg.apps.googleusercontent.com',
|
|
||||||
iosBundleId: 'com.krowwithus.client',
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
static const FirebaseOptions _stageWeb = FirebaseOptions(
|
||||||
|
apiKey: 'AIzaSyCgTXI3QhbEK3r4J5y7ek_6AxqhmR99QjY',
|
||||||
|
appId: '', // TODO: Register web app in krow-workforce-staging
|
||||||
|
messagingSenderId: '1032971403708',
|
||||||
|
projectId: 'krow-workforce-staging',
|
||||||
|
storageBucket: 'krow-workforce-staging.firebasestorage.app',
|
||||||
|
);
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
// PROD (krow-workforce-prod)
|
||||||
|
// TODO: Fill in after creating krow-workforce-prod Firebase project
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
static const FirebaseOptions _prodAndroid = FirebaseOptions(
|
||||||
|
apiKey: '', // TODO: Add prod API key
|
||||||
|
appId: '', // TODO: Add prod app ID
|
||||||
|
messagingSenderId: '', // TODO: Add prod sender ID
|
||||||
|
projectId: 'krow-workforce-prod',
|
||||||
|
storageBucket: 'krow-workforce-prod.firebasestorage.app',
|
||||||
|
);
|
||||||
|
|
||||||
|
static const FirebaseOptions _prodIos = FirebaseOptions(
|
||||||
|
apiKey: '', // TODO: Add prod API key
|
||||||
|
appId: '', // TODO: Add prod app ID
|
||||||
|
messagingSenderId: '', // TODO: Add prod sender ID
|
||||||
|
projectId: 'krow-workforce-prod',
|
||||||
|
storageBucket: 'krow-workforce-prod.firebasestorage.app',
|
||||||
|
iosBundleId: 'prod.krowwithus.client',
|
||||||
|
);
|
||||||
|
|
||||||
|
static const FirebaseOptions _prodWeb = FirebaseOptions(
|
||||||
|
apiKey: '', // TODO: Add prod API key
|
||||||
|
appId: '', // TODO: Add prod app ID
|
||||||
|
messagingSenderId: '', // TODO: Add prod sender ID
|
||||||
|
projectId: 'krow-workforce-prod',
|
||||||
|
storageBucket: 'krow-workforce-prod.firebasestorage.app',
|
||||||
|
);
|
||||||
}
|
}
|
||||||
@@ -21,8 +21,20 @@ dartDefinesString.split(",").forEach {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Load flavor-specific key properties: key.dev.properties, key.stage.properties, key.prod.properties
|
||||||
|
// The active flavor is resolved from the Gradle task name (e.g. assembleDevRelease -> dev)
|
||||||
|
fun resolveFlavorFromTask(): String {
|
||||||
|
val taskNames = gradle.startParameter.taskNames.joinToString(" ").lowercase()
|
||||||
|
return when {
|
||||||
|
taskNames.contains("prod") -> "prod"
|
||||||
|
taskNames.contains("stage") -> "stage"
|
||||||
|
else -> "dev"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val activeFlavorForSigning = resolveFlavorFromTask()
|
||||||
val keystoreProperties = Properties().apply {
|
val keystoreProperties = Properties().apply {
|
||||||
val propertiesFile = rootProject.file("key.properties")
|
val propertiesFile = rootProject.file("key.${activeFlavorForSigning}.properties")
|
||||||
if (propertiesFile.exists()) {
|
if (propertiesFile.exists()) {
|
||||||
load(propertiesFile.inputStream())
|
load(propertiesFile.inputStream())
|
||||||
}
|
}
|
||||||
@@ -43,8 +55,7 @@ android {
|
|||||||
}
|
}
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId = "com.krowwithus.staff"
|
// applicationId is set per flavor below
|
||||||
// You can update the following values to match your application needs.
|
|
||||||
// For more information, see: https://flutter.dev/to/review-gradle-config.
|
// For more information, see: https://flutter.dev/to/review-gradle-config.
|
||||||
minSdk = flutter.minSdkVersion
|
minSdk = flutter.minSdkVersion
|
||||||
targetSdk = flutter.targetSdkVersion
|
targetSdk = flutter.targetSdkVersion
|
||||||
@@ -54,6 +65,25 @@ android {
|
|||||||
manifestPlaceholders["GOOGLE_MAPS_API_KEY"] = dartEnvironmentVariables["GOOGLE_MAPS_API_KEY"] ?: ""
|
manifestPlaceholders["GOOGLE_MAPS_API_KEY"] = dartEnvironmentVariables["GOOGLE_MAPS_API_KEY"] ?: ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
flavorDimensions += "environment"
|
||||||
|
productFlavors {
|
||||||
|
create("dev") {
|
||||||
|
dimension = "environment"
|
||||||
|
applicationId = "dev.krowwithus.staff"
|
||||||
|
resValue("string", "app_name", "KROW With Us [DEV]")
|
||||||
|
}
|
||||||
|
create("stage") {
|
||||||
|
dimension = "environment"
|
||||||
|
applicationId = "stage.krowwithus.staff"
|
||||||
|
resValue("string", "app_name", "KROW With Us [STG]")
|
||||||
|
}
|
||||||
|
create("prod") {
|
||||||
|
dimension = "environment"
|
||||||
|
applicationId = "prod.krowwithus.staff"
|
||||||
|
resValue("string", "app_name", "KROW Staff")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
signingConfigs {
|
signingConfigs {
|
||||||
create("release") {
|
create("release") {
|
||||||
if (System.getenv()["CI"] == "true") {
|
if (System.getenv()["CI"] == "true") {
|
||||||
@@ -63,7 +93,7 @@ android {
|
|||||||
keyAlias = System.getenv()["CM_KEY_ALIAS"]
|
keyAlias = System.getenv()["CM_KEY_ALIAS"]
|
||||||
keyPassword = System.getenv()["CM_KEY_PASSWORD"]
|
keyPassword = System.getenv()["CM_KEY_PASSWORD"]
|
||||||
} else {
|
} else {
|
||||||
// Local development environment
|
// Local development environment — loads from key.<flavor>.properties
|
||||||
keyAlias = keystoreProperties["keyAlias"] as String?
|
keyAlias = keystoreProperties["keyAlias"] as String?
|
||||||
keyPassword = keystoreProperties["keyPassword"] as String?
|
keyPassword = keystoreProperties["keyPassword"] as String?
|
||||||
storeFile = keystoreProperties["storeFile"]?.let { file(it) }
|
storeFile = keystoreProperties["storeFile"]?.let { file(it) }
|
||||||
@@ -82,6 +112,20 @@ android {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Skip google-services processing for flavors whose google-services.json
|
||||||
|
// contains placeholder values (e.g. prod before the Firebase project exists).
|
||||||
|
// Once a real config is dropped in, the task automatically re-enables.
|
||||||
|
afterEvaluate {
|
||||||
|
tasks.matching {
|
||||||
|
it.name.startsWith("process") && it.name.endsWith("GoogleServices")
|
||||||
|
}.configureEach {
|
||||||
|
val taskFlavor = name.removePrefix("process").removeSuffix("GoogleServices")
|
||||||
|
.removeSuffix("Debug").removeSuffix("Release").lowercase()
|
||||||
|
val configFile = file("src/$taskFlavor/google-services.json")
|
||||||
|
enabled = configFile.exists() && configFile.readText().contains("\"mobilesdk_app_id\": \"1:")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
flutter {
|
flutter {
|
||||||
source = "../.."
|
source = "../.."
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,78 +5,6 @@
|
|||||||
"storage_bucket": "krow-workforce-dev.firebasestorage.app"
|
"storage_bucket": "krow-workforce-dev.firebasestorage.app"
|
||||||
},
|
},
|
||||||
"client": [
|
"client": [
|
||||||
{
|
|
||||||
"client_info": {
|
|
||||||
"mobilesdk_app_id": "1:933560802882:android:edcddb83ea4bbb517757db",
|
|
||||||
"android_client_info": {
|
|
||||||
"package_name": "com.krow.app.business.dev"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"oauth_client": [
|
|
||||||
{
|
|
||||||
"client_id": "933560802882-grp98a1v7amflnnup68vh01tj06eaem1.apps.googleusercontent.com",
|
|
||||||
"client_type": 3
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"api_key": [
|
|
||||||
{
|
|
||||||
"current_key": "AIzaSyDBYhflhK6DThKnS7RM-9raKdvyKzLUjY4"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"services": {
|
|
||||||
"appinvite_service": {
|
|
||||||
"other_platform_oauth_client": [
|
|
||||||
{
|
|
||||||
"client_id": "933560802882-grp98a1v7amflnnup68vh01tj06eaem1.apps.googleusercontent.com",
|
|
||||||
"client_type": 3
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"client_id": "933560802882-29olj9ku64jbe9h7flinha6hbi8qrluh.apps.googleusercontent.com",
|
|
||||||
"client_type": 2,
|
|
||||||
"ios_info": {
|
|
||||||
"bundle_id": "com.krowwithus.staff"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"client_info": {
|
|
||||||
"mobilesdk_app_id": "1:933560802882:android:d49b8c0f4d19e95e7757db",
|
|
||||||
"android_client_info": {
|
|
||||||
"package_name": "com.krow.app.staff.dev"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"oauth_client": [
|
|
||||||
{
|
|
||||||
"client_id": "933560802882-grp98a1v7amflnnup68vh01tj06eaem1.apps.googleusercontent.com",
|
|
||||||
"client_type": 3
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"api_key": [
|
|
||||||
{
|
|
||||||
"current_key": "AIzaSyDBYhflhK6DThKnS7RM-9raKdvyKzLUjY4"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"services": {
|
|
||||||
"appinvite_service": {
|
|
||||||
"other_platform_oauth_client": [
|
|
||||||
{
|
|
||||||
"client_id": "933560802882-grp98a1v7amflnnup68vh01tj06eaem1.apps.googleusercontent.com",
|
|
||||||
"client_type": 3
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"client_id": "933560802882-29olj9ku64jbe9h7flinha6hbi8qrluh.apps.googleusercontent.com",
|
|
||||||
"client_type": 2,
|
|
||||||
"ios_info": {
|
|
||||||
"bundle_id": "com.krowwithus.staff"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"client_info": {
|
"client_info": {
|
||||||
"mobilesdk_app_id": "1:933560802882:android:da13569105659ead7757db",
|
"mobilesdk_app_id": "1:933560802882:android:da13569105659ead7757db",
|
||||||
@@ -164,6 +92,78 @@
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"client_info": {
|
||||||
|
"mobilesdk_app_id": "1:933560802882:android:1eb46251032273cb7757db",
|
||||||
|
"android_client_info": {
|
||||||
|
"package_name": "dev.krowwithus.client"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"oauth_client": [
|
||||||
|
{
|
||||||
|
"client_id": "933560802882-grp98a1v7amflnnup68vh01tj06eaem1.apps.googleusercontent.com",
|
||||||
|
"client_type": 3
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"api_key": [
|
||||||
|
{
|
||||||
|
"current_key": "AIzaSyDBYhflhK6DThKnS7RM-9raKdvyKzLUjY4"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"services": {
|
||||||
|
"appinvite_service": {
|
||||||
|
"other_platform_oauth_client": [
|
||||||
|
{
|
||||||
|
"client_id": "933560802882-grp98a1v7amflnnup68vh01tj06eaem1.apps.googleusercontent.com",
|
||||||
|
"client_type": 3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"client_id": "933560802882-29olj9ku64jbe9h7flinha6hbi8qrluh.apps.googleusercontent.com",
|
||||||
|
"client_type": 2,
|
||||||
|
"ios_info": {
|
||||||
|
"bundle_id": "com.krowwithus.staff"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"client_info": {
|
||||||
|
"mobilesdk_app_id": "1:933560802882:android:ee100eab75b6b04c7757db",
|
||||||
|
"android_client_info": {
|
||||||
|
"package_name": "dev.krowwithus.staff"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"oauth_client": [
|
||||||
|
{
|
||||||
|
"client_id": "933560802882-grp98a1v7amflnnup68vh01tj06eaem1.apps.googleusercontent.com",
|
||||||
|
"client_type": 3
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"api_key": [
|
||||||
|
{
|
||||||
|
"current_key": "AIzaSyDBYhflhK6DThKnS7RM-9raKdvyKzLUjY4"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"services": {
|
||||||
|
"appinvite_service": {
|
||||||
|
"other_platform_oauth_client": [
|
||||||
|
{
|
||||||
|
"client_id": "933560802882-grp98a1v7amflnnup68vh01tj06eaem1.apps.googleusercontent.com",
|
||||||
|
"client_type": 3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"client_id": "933560802882-29olj9ku64jbe9h7flinha6hbi8qrluh.apps.googleusercontent.com",
|
||||||
|
"client_type": 2,
|
||||||
|
"ios_info": {
|
||||||
|
"bundle_id": "com.krowwithus.staff"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"configuration_version": "1"
|
"configuration_version": "1"
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<application
|
<application
|
||||||
android:label="KROW With Us Staff"
|
android:label="@string/app_name"
|
||||||
android:name="${applicationName}"
|
android:name="${applicationName}"
|
||||||
android:icon="@mipmap/launcher_icon">
|
android:icon="@mipmap/launcher_icon">
|
||||||
<activity
|
<activity
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
package com.krowwithus.krowwithus_staff
|
|
||||||
|
|
||||||
import io.flutter.embedding.android.FlutterActivity
|
|
||||||
|
|
||||||
class MainActivity : FlutterActivity()
|
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
{
|
||||||
|
"project_info": {
|
||||||
|
"project_number": "1032971403708",
|
||||||
|
"project_id": "krow-workforce-staging",
|
||||||
|
"storage_bucket": "krow-workforce-staging.firebasestorage.app"
|
||||||
|
},
|
||||||
|
"client": [
|
||||||
|
{
|
||||||
|
"client_info": {
|
||||||
|
"mobilesdk_app_id": "1:1032971403708:android:1ab9badf171c3aca356bb9",
|
||||||
|
"android_client_info": {
|
||||||
|
"package_name": "stage.krowwithus.client"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"oauth_client": [],
|
||||||
|
"api_key": [
|
||||||
|
{
|
||||||
|
"current_key": "AIzaSyAZ4dOatvf3ZBt4qnbSlIvJ51bblHaRsRw"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"services": {
|
||||||
|
"appinvite_service": {
|
||||||
|
"other_platform_oauth_client": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"client_info": {
|
||||||
|
"mobilesdk_app_id": "1:1032971403708:android:14e471d055e59597356bb9",
|
||||||
|
"android_client_info": {
|
||||||
|
"package_name": "stage.krowwithus.staff"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"oauth_client": [],
|
||||||
|
"api_key": [
|
||||||
|
{
|
||||||
|
"current_key": "AIzaSyAZ4dOatvf3ZBt4qnbSlIvJ51bblHaRsRw"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"services": {
|
||||||
|
"appinvite_service": {
|
||||||
|
"other_platform_oauth_client": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"configuration_version": "1"
|
||||||
|
}
|
||||||
9
apps/mobile/apps/staff/android/key.prod.properties
Normal file
9
apps/mobile/apps/staff/android/key.prod.properties
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
storePassword=krowwithus
|
||||||
|
keyPassword=krowwithus
|
||||||
|
keyAlias=krow_staff_prod
|
||||||
|
storeFile=krow_with_us_staff_prod.jks
|
||||||
|
|
||||||
|
###
|
||||||
|
### Staff Prod
|
||||||
|
### SHA1: B3:9A:AE:EC:8D:A2:C8:88:5F:FA:AC:9B:31:0A:AC:F3:D6:7D:82:83
|
||||||
|
### SHA256: 0C:F3:5F:B5:C5:DA:E3:94:E1:FB:9E:D9:84:4F:2D:4A:E5:1B:48:FB:33:A1:DD:F3:43:41:22:32:A4:9A:25:E8
|
||||||
9
apps/mobile/apps/staff/android/key.stage.properties
Normal file
9
apps/mobile/apps/staff/android/key.stage.properties
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
storePassword=krowwithus
|
||||||
|
keyPassword=krowwithus
|
||||||
|
keyAlias=krow_staff_stage
|
||||||
|
storeFile=krow_with_us_staff_stage.jks
|
||||||
|
|
||||||
|
###
|
||||||
|
### Staff Stage
|
||||||
|
### SHA1: E8:C4:B8:F5:5E:19:04:31:D6:E5:16:76:47:62:D0:5B:2F:F3:CE:05
|
||||||
|
### SHA256: 25:55:68:E6:77:03:33:E1:D0:4E:F4:75:6E:6B:3D:3D:A2:DB:9B:2B:5E:AD:FF:CD:22:64:CE:3F:E8:AF:60:50
|
||||||
@@ -149,6 +149,7 @@
|
|||||||
buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
|
buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
|
||||||
buildPhases = (
|
buildPhases = (
|
||||||
9740EEB61CF901F6004384FC /* Run Script */,
|
9740EEB61CF901F6004384FC /* Run Script */,
|
||||||
|
BC26E38C2F5F605000517BDF /* ShellScript */,
|
||||||
97C146EA1CF9000F007C117D /* Sources */,
|
97C146EA1CF9000F007C117D /* Sources */,
|
||||||
97C146EB1CF9000F007C117D /* Frameworks */,
|
97C146EB1CF9000F007C117D /* Frameworks */,
|
||||||
97C146EC1CF9000F007C117D /* Resources */,
|
97C146EC1CF9000F007C117D /* Resources */,
|
||||||
@@ -255,7 +256,26 @@
|
|||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
shellPath = /bin/sh;
|
shellPath = /bin/sh;
|
||||||
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
|
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build\n";
|
||||||
|
};
|
||||||
|
BC26E38C2F5F605000517BDF /* ShellScript */ = {
|
||||||
|
isa = PBXShellScriptBuildPhase;
|
||||||
|
alwaysOutOfDate = 1;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
inputFileListPaths = (
|
||||||
|
);
|
||||||
|
inputPaths = (
|
||||||
|
"$(SRCROOT)/newInputFile",
|
||||||
|
);
|
||||||
|
outputFileListPaths = (
|
||||||
|
);
|
||||||
|
outputPaths = (
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
shellPath = /bin/sh;
|
||||||
|
shellScript = "# Tye a script or drag a script file from your workspace to insert its path.\n$PROJECT_DIR/scripts/copy-firebase-config.sh\n";
|
||||||
};
|
};
|
||||||
/* End PBXShellScriptBuildPhase section */
|
/* End PBXShellScriptBuildPhase section */
|
||||||
|
|
||||||
@@ -363,6 +383,7 @@
|
|||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
|
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
|
APP_NAME = "KROW With Us [STAGE] ";
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
||||||
@@ -372,7 +393,7 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.krowwithus.staff;
|
PRODUCT_BUNDLE_IDENTIFIER = stage.krowwithus.staff;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 5.0;
|
||||||
@@ -542,6 +563,7 @@
|
|||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
|
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
|
APP_NAME = "KROW With Us [DEV] ";
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
||||||
@@ -551,7 +573,7 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.krowwithus.staff;
|
PRODUCT_BUNDLE_IDENTIFIER = dev.krowwithus.staff;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
@@ -564,6 +586,7 @@
|
|||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
|
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
|
APP_NAME = "KROW With Us";
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
||||||
@@ -573,7 +596,7 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.krowwithus.staff;
|
PRODUCT_BUNDLE_IDENTIFIER = prod.krowwithus.staff;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 5.0;
|
||||||
@@ -581,6 +604,837 @@
|
|||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
|
BC26E3712F5F5EBD00517BDF /* Debug-dev */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon;
|
||||||
|
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;
|
||||||
|
ENABLE_USER_SCRIPT_SANDBOXING = NO;
|
||||||
|
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 = 13.0;
|
||||||
|
MTL_ENABLE_DEBUG_INFO = YES;
|
||||||
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
|
SDKROOT = iphoneos;
|
||||||
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
|
};
|
||||||
|
name = "Debug-dev";
|
||||||
|
};
|
||||||
|
BC26E3722F5F5EBD00517BDF /* Debug-dev */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
|
||||||
|
buildSettings = {
|
||||||
|
APP_NAME = "KROW With Us [DEV] ";
|
||||||
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
||||||
|
ENABLE_BITCODE = NO;
|
||||||
|
INFOPLIST_FILE = Runner/Info.plist;
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/Frameworks",
|
||||||
|
);
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = dev.krowwithus.staff;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||||
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
VERSIONING_SYSTEM = "apple-generic";
|
||||||
|
};
|
||||||
|
name = "Debug-dev";
|
||||||
|
};
|
||||||
|
BC26E3732F5F5EBD00517BDF /* Debug-dev */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
|
MARKETING_VERSION = 1.0;
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = com.krowwithus.staff;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
||||||
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
|
||||||
|
};
|
||||||
|
name = "Debug-dev";
|
||||||
|
};
|
||||||
|
BC26E3742F5F5EC300517BDF /* Debug-stage */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon;
|
||||||
|
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;
|
||||||
|
ENABLE_USER_SCRIPT_SANDBOXING = NO;
|
||||||
|
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 = 13.0;
|
||||||
|
MTL_ENABLE_DEBUG_INFO = YES;
|
||||||
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
|
SDKROOT = iphoneos;
|
||||||
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
|
};
|
||||||
|
name = "Debug-stage";
|
||||||
|
};
|
||||||
|
BC26E3752F5F5EC300517BDF /* Debug-stage */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
|
||||||
|
buildSettings = {
|
||||||
|
APP_NAME = "KROW With Us [STAGE] ";
|
||||||
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
||||||
|
ENABLE_BITCODE = NO;
|
||||||
|
INFOPLIST_FILE = Runner/Info.plist;
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/Frameworks",
|
||||||
|
);
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = stage.krowwithus.staff;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||||
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
VERSIONING_SYSTEM = "apple-generic";
|
||||||
|
};
|
||||||
|
name = "Debug-stage";
|
||||||
|
};
|
||||||
|
BC26E3762F5F5EC300517BDF /* Debug-stage */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
|
MARKETING_VERSION = 1.0;
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = com.krowwithus.staff;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
||||||
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
|
||||||
|
};
|
||||||
|
name = "Debug-stage";
|
||||||
|
};
|
||||||
|
BC26E3772F5F5EC800517BDF /* Debug-prod */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon;
|
||||||
|
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;
|
||||||
|
ENABLE_USER_SCRIPT_SANDBOXING = NO;
|
||||||
|
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 = 13.0;
|
||||||
|
MTL_ENABLE_DEBUG_INFO = YES;
|
||||||
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
|
SDKROOT = iphoneos;
|
||||||
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
|
};
|
||||||
|
name = "Debug-prod";
|
||||||
|
};
|
||||||
|
BC26E3782F5F5EC800517BDF /* Debug-prod */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
|
||||||
|
buildSettings = {
|
||||||
|
APP_NAME = "KROW With Us";
|
||||||
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
||||||
|
ENABLE_BITCODE = NO;
|
||||||
|
INFOPLIST_FILE = Runner/Info.plist;
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/Frameworks",
|
||||||
|
);
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = prod.krowwithus.staff;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||||
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
VERSIONING_SYSTEM = "apple-generic";
|
||||||
|
};
|
||||||
|
name = "Debug-prod";
|
||||||
|
};
|
||||||
|
BC26E3792F5F5EC800517BDF /* Debug-prod */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
|
MARKETING_VERSION = 1.0;
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = com.krowwithus.staff;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
||||||
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
|
||||||
|
};
|
||||||
|
name = "Debug-prod";
|
||||||
|
};
|
||||||
|
BC26E37A2F5F5ECF00517BDF /* Release-dev */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon;
|
||||||
|
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;
|
||||||
|
ENABLE_USER_SCRIPT_SANDBOXING = NO;
|
||||||
|
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 = 13.0;
|
||||||
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
|
SDKROOT = iphoneos;
|
||||||
|
SUPPORTED_PLATFORMS = iphoneos;
|
||||||
|
SWIFT_COMPILATION_MODE = wholemodule;
|
||||||
|
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
||||||
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
|
VALIDATE_PRODUCT = YES;
|
||||||
|
};
|
||||||
|
name = "Release-dev";
|
||||||
|
};
|
||||||
|
BC26E37B2F5F5ECF00517BDF /* Release-dev */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
|
||||||
|
buildSettings = {
|
||||||
|
APP_NAME = "KROW With Us [DEV] ";
|
||||||
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
||||||
|
ENABLE_BITCODE = NO;
|
||||||
|
INFOPLIST_FILE = Runner/Info.plist;
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/Frameworks",
|
||||||
|
);
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = dev.krowwithus.staff;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
VERSIONING_SYSTEM = "apple-generic";
|
||||||
|
};
|
||||||
|
name = "Release-dev";
|
||||||
|
};
|
||||||
|
BC26E37C2F5F5ECF00517BDF /* Release-dev */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
|
MARKETING_VERSION = 1.0;
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = com.krowwithus.staff;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
|
||||||
|
};
|
||||||
|
name = "Release-dev";
|
||||||
|
};
|
||||||
|
BC26E37D2F5F5ED800517BDF /* Release-stage */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon;
|
||||||
|
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;
|
||||||
|
ENABLE_USER_SCRIPT_SANDBOXING = NO;
|
||||||
|
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 = 13.0;
|
||||||
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
|
SDKROOT = iphoneos;
|
||||||
|
SUPPORTED_PLATFORMS = iphoneos;
|
||||||
|
SWIFT_COMPILATION_MODE = wholemodule;
|
||||||
|
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
||||||
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
|
VALIDATE_PRODUCT = YES;
|
||||||
|
};
|
||||||
|
name = "Release-stage";
|
||||||
|
};
|
||||||
|
BC26E37E2F5F5ED800517BDF /* Release-stage */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
|
||||||
|
buildSettings = {
|
||||||
|
APP_NAME = "KROW With Us [STAGE] ";
|
||||||
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
||||||
|
ENABLE_BITCODE = NO;
|
||||||
|
INFOPLIST_FILE = Runner/Info.plist;
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/Frameworks",
|
||||||
|
);
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = stage.krowwithus.staff;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
VERSIONING_SYSTEM = "apple-generic";
|
||||||
|
};
|
||||||
|
name = "Release-stage";
|
||||||
|
};
|
||||||
|
BC26E37F2F5F5ED800517BDF /* Release-stage */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
|
MARKETING_VERSION = 1.0;
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = com.krowwithus.staff;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
|
||||||
|
};
|
||||||
|
name = "Release-stage";
|
||||||
|
};
|
||||||
|
BC26E3802F5F5EDD00517BDF /* Release-prod */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon;
|
||||||
|
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;
|
||||||
|
ENABLE_USER_SCRIPT_SANDBOXING = NO;
|
||||||
|
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 = 13.0;
|
||||||
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
|
SDKROOT = iphoneos;
|
||||||
|
SUPPORTED_PLATFORMS = iphoneos;
|
||||||
|
SWIFT_COMPILATION_MODE = wholemodule;
|
||||||
|
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
||||||
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
|
VALIDATE_PRODUCT = YES;
|
||||||
|
};
|
||||||
|
name = "Release-prod";
|
||||||
|
};
|
||||||
|
BC26E3812F5F5EDD00517BDF /* Release-prod */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
|
||||||
|
buildSettings = {
|
||||||
|
APP_NAME = "KROW With Us";
|
||||||
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
||||||
|
ENABLE_BITCODE = NO;
|
||||||
|
INFOPLIST_FILE = Runner/Info.plist;
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/Frameworks",
|
||||||
|
);
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = prod.krowwithus.staff;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
VERSIONING_SYSTEM = "apple-generic";
|
||||||
|
};
|
||||||
|
name = "Release-prod";
|
||||||
|
};
|
||||||
|
BC26E3822F5F5EDD00517BDF /* Release-prod */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
|
MARKETING_VERSION = 1.0;
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = com.krowwithus.staff;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
|
||||||
|
};
|
||||||
|
name = "Release-prod";
|
||||||
|
};
|
||||||
|
BC26E3832F5F5EE500517BDF /* Profile-dev */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
|
||||||
|
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;
|
||||||
|
ENABLE_USER_SCRIPT_SANDBOXING = NO;
|
||||||
|
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 = 13.0;
|
||||||
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
|
SDKROOT = iphoneos;
|
||||||
|
SUPPORTED_PLATFORMS = iphoneos;
|
||||||
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
|
VALIDATE_PRODUCT = YES;
|
||||||
|
};
|
||||||
|
name = "Profile-dev";
|
||||||
|
};
|
||||||
|
BC26E3842F5F5EE500517BDF /* Profile-dev */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
|
||||||
|
buildSettings = {
|
||||||
|
APP_NAME = "KROW With Us [DEV] ";
|
||||||
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
||||||
|
ENABLE_BITCODE = NO;
|
||||||
|
INFOPLIST_FILE = Runner/Info.plist;
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/Frameworks",
|
||||||
|
);
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = dev.krowwithus.staff;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
VERSIONING_SYSTEM = "apple-generic";
|
||||||
|
};
|
||||||
|
name = "Profile-dev";
|
||||||
|
};
|
||||||
|
BC26E3852F5F5EE500517BDF /* Profile-dev */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
|
MARKETING_VERSION = 1.0;
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = com.krowwithus.staff;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
|
||||||
|
};
|
||||||
|
name = "Profile-dev";
|
||||||
|
};
|
||||||
|
BC26E3862F5F5EEA00517BDF /* Profile-stage */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
|
||||||
|
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;
|
||||||
|
ENABLE_USER_SCRIPT_SANDBOXING = NO;
|
||||||
|
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 = 13.0;
|
||||||
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
|
SDKROOT = iphoneos;
|
||||||
|
SUPPORTED_PLATFORMS = iphoneos;
|
||||||
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
|
VALIDATE_PRODUCT = YES;
|
||||||
|
};
|
||||||
|
name = "Profile-stage";
|
||||||
|
};
|
||||||
|
BC26E3872F5F5EEA00517BDF /* Profile-stage */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
|
||||||
|
buildSettings = {
|
||||||
|
APP_NAME = "KROW With Us [STAGE] ";
|
||||||
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
||||||
|
ENABLE_BITCODE = NO;
|
||||||
|
INFOPLIST_FILE = Runner/Info.plist;
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/Frameworks",
|
||||||
|
);
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = stage.krowwithus.staff;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
VERSIONING_SYSTEM = "apple-generic";
|
||||||
|
};
|
||||||
|
name = "Profile-stage";
|
||||||
|
};
|
||||||
|
BC26E3882F5F5EEA00517BDF /* Profile-stage */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
|
MARKETING_VERSION = 1.0;
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = com.krowwithus.staff;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
|
||||||
|
};
|
||||||
|
name = "Profile-stage";
|
||||||
|
};
|
||||||
|
BC26E3892F5F5EEF00517BDF /* Profile-prod */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
|
||||||
|
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;
|
||||||
|
ENABLE_USER_SCRIPT_SANDBOXING = NO;
|
||||||
|
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 = 13.0;
|
||||||
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
|
SDKROOT = iphoneos;
|
||||||
|
SUPPORTED_PLATFORMS = iphoneos;
|
||||||
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
|
VALIDATE_PRODUCT = YES;
|
||||||
|
};
|
||||||
|
name = "Profile-prod";
|
||||||
|
};
|
||||||
|
BC26E38A2F5F5EEF00517BDF /* Profile-prod */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
|
||||||
|
buildSettings = {
|
||||||
|
APP_NAME = "KROW With Us";
|
||||||
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
||||||
|
ENABLE_BITCODE = NO;
|
||||||
|
INFOPLIST_FILE = Runner/Info.plist;
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/Frameworks",
|
||||||
|
);
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = prod.krowwithus.staff;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
VERSIONING_SYSTEM = "apple-generic";
|
||||||
|
};
|
||||||
|
name = "Profile-prod";
|
||||||
|
};
|
||||||
|
BC26E38B2F5F5EEF00517BDF /* Profile-prod */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
|
MARKETING_VERSION = 1.0;
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = com.krowwithus.staff;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
|
||||||
|
};
|
||||||
|
name = "Profile-prod";
|
||||||
|
};
|
||||||
/* End XCBuildConfiguration section */
|
/* End XCBuildConfiguration section */
|
||||||
|
|
||||||
/* Begin XCConfigurationList section */
|
/* Begin XCConfigurationList section */
|
||||||
@@ -588,8 +1442,17 @@
|
|||||||
isa = XCConfigurationList;
|
isa = XCConfigurationList;
|
||||||
buildConfigurations = (
|
buildConfigurations = (
|
||||||
331C8088294A63A400263BE5 /* Debug */,
|
331C8088294A63A400263BE5 /* Debug */,
|
||||||
|
BC26E3792F5F5EC800517BDF /* Debug-prod */,
|
||||||
|
BC26E3762F5F5EC300517BDF /* Debug-stage */,
|
||||||
|
BC26E3732F5F5EBD00517BDF /* Debug-dev */,
|
||||||
331C8089294A63A400263BE5 /* Release */,
|
331C8089294A63A400263BE5 /* Release */,
|
||||||
|
BC26E3822F5F5EDD00517BDF /* Release-prod */,
|
||||||
|
BC26E37F2F5F5ED800517BDF /* Release-stage */,
|
||||||
|
BC26E37C2F5F5ECF00517BDF /* Release-dev */,
|
||||||
331C808A294A63A400263BE5 /* Profile */,
|
331C808A294A63A400263BE5 /* Profile */,
|
||||||
|
BC26E38B2F5F5EEF00517BDF /* Profile-prod */,
|
||||||
|
BC26E3882F5F5EEA00517BDF /* Profile-stage */,
|
||||||
|
BC26E3852F5F5EE500517BDF /* Profile-dev */,
|
||||||
);
|
);
|
||||||
defaultConfigurationIsVisible = 0;
|
defaultConfigurationIsVisible = 0;
|
||||||
defaultConfigurationName = Release;
|
defaultConfigurationName = Release;
|
||||||
@@ -598,8 +1461,17 @@
|
|||||||
isa = XCConfigurationList;
|
isa = XCConfigurationList;
|
||||||
buildConfigurations = (
|
buildConfigurations = (
|
||||||
97C147031CF9000F007C117D /* Debug */,
|
97C147031CF9000F007C117D /* Debug */,
|
||||||
|
BC26E3772F5F5EC800517BDF /* Debug-prod */,
|
||||||
|
BC26E3742F5F5EC300517BDF /* Debug-stage */,
|
||||||
|
BC26E3712F5F5EBD00517BDF /* Debug-dev */,
|
||||||
97C147041CF9000F007C117D /* Release */,
|
97C147041CF9000F007C117D /* Release */,
|
||||||
|
BC26E3802F5F5EDD00517BDF /* Release-prod */,
|
||||||
|
BC26E37D2F5F5ED800517BDF /* Release-stage */,
|
||||||
|
BC26E37A2F5F5ECF00517BDF /* Release-dev */,
|
||||||
249021D3217E4FDB00AE95B9 /* Profile */,
|
249021D3217E4FDB00AE95B9 /* Profile */,
|
||||||
|
BC26E3892F5F5EEF00517BDF /* Profile-prod */,
|
||||||
|
BC26E3862F5F5EEA00517BDF /* Profile-stage */,
|
||||||
|
BC26E3832F5F5EE500517BDF /* Profile-dev */,
|
||||||
);
|
);
|
||||||
defaultConfigurationIsVisible = 0;
|
defaultConfigurationIsVisible = 0;
|
||||||
defaultConfigurationName = Release;
|
defaultConfigurationName = Release;
|
||||||
@@ -608,8 +1480,17 @@
|
|||||||
isa = XCConfigurationList;
|
isa = XCConfigurationList;
|
||||||
buildConfigurations = (
|
buildConfigurations = (
|
||||||
97C147061CF9000F007C117D /* Debug */,
|
97C147061CF9000F007C117D /* Debug */,
|
||||||
|
BC26E3782F5F5EC800517BDF /* Debug-prod */,
|
||||||
|
BC26E3752F5F5EC300517BDF /* Debug-stage */,
|
||||||
|
BC26E3722F5F5EBD00517BDF /* Debug-dev */,
|
||||||
97C147071CF9000F007C117D /* Release */,
|
97C147071CF9000F007C117D /* Release */,
|
||||||
|
BC26E3812F5F5EDD00517BDF /* Release-prod */,
|
||||||
|
BC26E37E2F5F5ED800517BDF /* Release-stage */,
|
||||||
|
BC26E37B2F5F5ECF00517BDF /* Release-dev */,
|
||||||
249021D4217E4FDB00AE95B9 /* Profile */,
|
249021D4217E4FDB00AE95B9 /* Profile */,
|
||||||
|
BC26E38A2F5F5EEF00517BDF /* Profile-prod */,
|
||||||
|
BC26E3872F5F5EEA00517BDF /* Profile-stage */,
|
||||||
|
BC26E3842F5F5EE500517BDF /* Profile-dev */,
|
||||||
);
|
);
|
||||||
defaultConfigurationIsVisible = 0;
|
defaultConfigurationIsVisible = 0;
|
||||||
defaultConfigurationName = Release;
|
defaultConfigurationName = Release;
|
||||||
|
|||||||
@@ -0,0 +1,78 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Scheme
|
||||||
|
LastUpgradeVersion = "2630"
|
||||||
|
version = "1.7">
|
||||||
|
<BuildAction
|
||||||
|
parallelizeBuildables = "YES"
|
||||||
|
buildImplicitDependencies = "YES"
|
||||||
|
buildArchitectures = "Automatic">
|
||||||
|
<BuildActionEntries>
|
||||||
|
<BuildActionEntry
|
||||||
|
buildForTesting = "YES"
|
||||||
|
buildForRunning = "YES"
|
||||||
|
buildForProfiling = "YES"
|
||||||
|
buildForArchiving = "YES"
|
||||||
|
buildForAnalyzing = "YES">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
|
||||||
|
BuildableName = "Runner.app"
|
||||||
|
BlueprintName = "Runner"
|
||||||
|
ReferencedContainer = "container:Runner.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildActionEntry>
|
||||||
|
</BuildActionEntries>
|
||||||
|
</BuildAction>
|
||||||
|
<TestAction
|
||||||
|
buildConfiguration = "Debug"
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||||
|
shouldAutocreateTestPlan = "YES">
|
||||||
|
</TestAction>
|
||||||
|
<LaunchAction
|
||||||
|
buildConfiguration = "Debug"
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
launchStyle = "0"
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
ignoresPersistentStateOnLaunch = "NO"
|
||||||
|
debugDocumentVersioning = "YES"
|
||||||
|
debugServiceExtension = "internal"
|
||||||
|
allowLocationSimulation = "YES">
|
||||||
|
<BuildableProductRunnable
|
||||||
|
runnableDebuggingMode = "0">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
|
||||||
|
BuildableName = "Runner.app"
|
||||||
|
BlueprintName = "Runner"
|
||||||
|
ReferencedContainer = "container:Runner.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildableProductRunnable>
|
||||||
|
</LaunchAction>
|
||||||
|
<ProfileAction
|
||||||
|
buildConfiguration = "Release"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||||
|
savedToolIdentifier = ""
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
debugDocumentVersioning = "YES">
|
||||||
|
<BuildableProductRunnable
|
||||||
|
runnableDebuggingMode = "0">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
|
||||||
|
BuildableName = "Runner.app"
|
||||||
|
BlueprintName = "Runner"
|
||||||
|
ReferencedContainer = "container:Runner.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildableProductRunnable>
|
||||||
|
</ProfileAction>
|
||||||
|
<AnalyzeAction
|
||||||
|
buildConfiguration = "Debug">
|
||||||
|
</AnalyzeAction>
|
||||||
|
<ArchiveAction
|
||||||
|
buildConfiguration = "Release"
|
||||||
|
revealArchiveInOrganizer = "YES">
|
||||||
|
</ArchiveAction>
|
||||||
|
</Scheme>
|
||||||
@@ -0,0 +1,78 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Scheme
|
||||||
|
LastUpgradeVersion = "2630"
|
||||||
|
version = "1.7">
|
||||||
|
<BuildAction
|
||||||
|
parallelizeBuildables = "YES"
|
||||||
|
buildImplicitDependencies = "YES"
|
||||||
|
buildArchitectures = "Automatic">
|
||||||
|
<BuildActionEntries>
|
||||||
|
<BuildActionEntry
|
||||||
|
buildForTesting = "YES"
|
||||||
|
buildForRunning = "YES"
|
||||||
|
buildForProfiling = "YES"
|
||||||
|
buildForArchiving = "YES"
|
||||||
|
buildForAnalyzing = "YES">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
|
||||||
|
BuildableName = "Runner.app"
|
||||||
|
BlueprintName = "Runner"
|
||||||
|
ReferencedContainer = "container:Runner.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildActionEntry>
|
||||||
|
</BuildActionEntries>
|
||||||
|
</BuildAction>
|
||||||
|
<TestAction
|
||||||
|
buildConfiguration = "Debug"
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||||
|
shouldAutocreateTestPlan = "YES">
|
||||||
|
</TestAction>
|
||||||
|
<LaunchAction
|
||||||
|
buildConfiguration = "Debug"
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
launchStyle = "0"
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
ignoresPersistentStateOnLaunch = "NO"
|
||||||
|
debugDocumentVersioning = "YES"
|
||||||
|
debugServiceExtension = "internal"
|
||||||
|
allowLocationSimulation = "YES">
|
||||||
|
<BuildableProductRunnable
|
||||||
|
runnableDebuggingMode = "0">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
|
||||||
|
BuildableName = "Runner.app"
|
||||||
|
BlueprintName = "Runner"
|
||||||
|
ReferencedContainer = "container:Runner.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildableProductRunnable>
|
||||||
|
</LaunchAction>
|
||||||
|
<ProfileAction
|
||||||
|
buildConfiguration = "Release"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||||
|
savedToolIdentifier = ""
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
debugDocumentVersioning = "YES">
|
||||||
|
<BuildableProductRunnable
|
||||||
|
runnableDebuggingMode = "0">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
|
||||||
|
BuildableName = "Runner.app"
|
||||||
|
BlueprintName = "Runner"
|
||||||
|
ReferencedContainer = "container:Runner.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildableProductRunnable>
|
||||||
|
</ProfileAction>
|
||||||
|
<AnalyzeAction
|
||||||
|
buildConfiguration = "Debug">
|
||||||
|
</AnalyzeAction>
|
||||||
|
<ArchiveAction
|
||||||
|
buildConfiguration = "Release"
|
||||||
|
revealArchiveInOrganizer = "YES">
|
||||||
|
</ArchiveAction>
|
||||||
|
</Scheme>
|
||||||
@@ -0,0 +1,78 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Scheme
|
||||||
|
LastUpgradeVersion = "2630"
|
||||||
|
version = "1.7">
|
||||||
|
<BuildAction
|
||||||
|
parallelizeBuildables = "YES"
|
||||||
|
buildImplicitDependencies = "YES"
|
||||||
|
buildArchitectures = "Automatic">
|
||||||
|
<BuildActionEntries>
|
||||||
|
<BuildActionEntry
|
||||||
|
buildForTesting = "YES"
|
||||||
|
buildForRunning = "YES"
|
||||||
|
buildForProfiling = "YES"
|
||||||
|
buildForArchiving = "YES"
|
||||||
|
buildForAnalyzing = "YES">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
|
||||||
|
BuildableName = "Runner.app"
|
||||||
|
BlueprintName = "Runner"
|
||||||
|
ReferencedContainer = "container:Runner.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildActionEntry>
|
||||||
|
</BuildActionEntries>
|
||||||
|
</BuildAction>
|
||||||
|
<TestAction
|
||||||
|
buildConfiguration = "Debug"
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||||
|
shouldAutocreateTestPlan = "YES">
|
||||||
|
</TestAction>
|
||||||
|
<LaunchAction
|
||||||
|
buildConfiguration = "Debug"
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
launchStyle = "0"
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
ignoresPersistentStateOnLaunch = "NO"
|
||||||
|
debugDocumentVersioning = "YES"
|
||||||
|
debugServiceExtension = "internal"
|
||||||
|
allowLocationSimulation = "YES">
|
||||||
|
<BuildableProductRunnable
|
||||||
|
runnableDebuggingMode = "0">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
|
||||||
|
BuildableName = "Runner.app"
|
||||||
|
BlueprintName = "Runner"
|
||||||
|
ReferencedContainer = "container:Runner.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildableProductRunnable>
|
||||||
|
</LaunchAction>
|
||||||
|
<ProfileAction
|
||||||
|
buildConfiguration = "Release"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||||
|
savedToolIdentifier = ""
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
debugDocumentVersioning = "YES">
|
||||||
|
<BuildableProductRunnable
|
||||||
|
runnableDebuggingMode = "0">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
|
||||||
|
BuildableName = "Runner.app"
|
||||||
|
BlueprintName = "Runner"
|
||||||
|
ReferencedContainer = "container:Runner.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildableProductRunnable>
|
||||||
|
</ProfileAction>
|
||||||
|
<AnalyzeAction
|
||||||
|
buildConfiguration = "Debug">
|
||||||
|
</AnalyzeAction>
|
||||||
|
<ArchiveAction
|
||||||
|
buildConfiguration = "Release"
|
||||||
|
revealArchiveInOrganizer = "YES">
|
||||||
|
</ArchiveAction>
|
||||||
|
</Scheme>
|
||||||
@@ -5,7 +5,7 @@
|
|||||||
<key>CFBundleDevelopmentRegion</key>
|
<key>CFBundleDevelopmentRegion</key>
|
||||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||||
<key>CFBundleDisplayName</key>
|
<key>CFBundleDisplayName</key>
|
||||||
<string>KROW With Us Staff</string>
|
<string>$(APP_NAME)</string>
|
||||||
<key>CFBundleExecutable</key>
|
<key>CFBundleExecutable</key>
|
||||||
<string>$(EXECUTABLE_NAME)</string>
|
<string>$(EXECUTABLE_NAME)</string>
|
||||||
<key>CFBundleIdentifier</key>
|
<key>CFBundleIdentifier</key>
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
<key>CFBundleInfoDictionaryVersion</key>
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
<string>6.0</string>
|
<string>6.0</string>
|
||||||
<key>CFBundleName</key>
|
<key>CFBundleName</key>
|
||||||
<string>KROW With Us Staff</string>
|
<string>$(APP_NAME)</string>
|
||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>APPL</string>
|
<string>APPL</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
|
|||||||
@@ -0,0 +1,36 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>CLIENT_ID</key>
|
||||||
|
<string>933560802882-jpv087j5jenp1h63mc9ge51767s3l2ac.apps.googleusercontent.com</string>
|
||||||
|
<key>REVERSED_CLIENT_ID</key>
|
||||||
|
<string>com.googleusercontent.apps.933560802882-jpv087j5jenp1h63mc9ge51767s3l2ac</string>
|
||||||
|
<key>ANDROID_CLIENT_ID</key>
|
||||||
|
<string>933560802882-fbqg2icq24bmci3f84evjrbth5huh87f.apps.googleusercontent.com</string>
|
||||||
|
<key>API_KEY</key>
|
||||||
|
<string>AIzaSyDyEXkzZAWpXXe4dAesYaZflt5BEtMn9tA</string>
|
||||||
|
<key>GCM_SENDER_ID</key>
|
||||||
|
<string>933560802882</string>
|
||||||
|
<key>PLIST_VERSION</key>
|
||||||
|
<string>1</string>
|
||||||
|
<key>BUNDLE_ID</key>
|
||||||
|
<string>dev.krowwithus.client</string>
|
||||||
|
<key>PROJECT_ID</key>
|
||||||
|
<string>krow-workforce-dev</string>
|
||||||
|
<key>STORAGE_BUCKET</key>
|
||||||
|
<string>krow-workforce-dev.firebasestorage.app</string>
|
||||||
|
<key>IS_ADS_ENABLED</key>
|
||||||
|
<false></false>
|
||||||
|
<key>IS_ANALYTICS_ENABLED</key>
|
||||||
|
<false></false>
|
||||||
|
<key>IS_APPINVITE_ENABLED</key>
|
||||||
|
<true></true>
|
||||||
|
<key>IS_GCM_ENABLED</key>
|
||||||
|
<true></true>
|
||||||
|
<key>IS_SIGNIN_ENABLED</key>
|
||||||
|
<true></true>
|
||||||
|
<key>GOOGLE_APP_ID</key>
|
||||||
|
<string>1:933560802882:ios:7e179dfdd1a8994c7757db</string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>API_KEY</key>
|
||||||
|
<string>AIzaSyCgTXI3QhbEK3r4J5y7ek_6AxqhmR99QjY</string>
|
||||||
|
<key>GCM_SENDER_ID</key>
|
||||||
|
<string>1032971403708</string>
|
||||||
|
<key>PLIST_VERSION</key>
|
||||||
|
<string>1</string>
|
||||||
|
<key>BUNDLE_ID</key>
|
||||||
|
<string>stage.krowwithus.client</string>
|
||||||
|
<key>PROJECT_ID</key>
|
||||||
|
<string>krow-workforce-staging</string>
|
||||||
|
<key>STORAGE_BUCKET</key>
|
||||||
|
<string>krow-workforce-staging.firebasestorage.app</string>
|
||||||
|
<key>IS_ADS_ENABLED</key>
|
||||||
|
<false></false>
|
||||||
|
<key>IS_ANALYTICS_ENABLED</key>
|
||||||
|
<false></false>
|
||||||
|
<key>IS_APPINVITE_ENABLED</key>
|
||||||
|
<true></true>
|
||||||
|
<key>IS_GCM_ENABLED</key>
|
||||||
|
<true></true>
|
||||||
|
<key>IS_SIGNIN_ENABLED</key>
|
||||||
|
<true></true>
|
||||||
|
<key>GOOGLE_APP_ID</key>
|
||||||
|
<string>1:1032971403708:ios:0ff547e80f5324ed356bb9</string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
19
apps/mobile/apps/staff/ios/scripts/firebase-config.sh
Executable file
19
apps/mobile/apps/staff/ios/scripts/firebase-config.sh
Executable file
@@ -0,0 +1,19 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Copy the correct GoogleService-Info.plist based on the build configuration.
|
||||||
|
# This script should be added as a "Run Script" build phase in Xcode,
|
||||||
|
# BEFORE the "Compile Sources" phase.
|
||||||
|
#
|
||||||
|
# The FLUTTER_FLAVOR environment variable is set by Flutter when building
|
||||||
|
# with --flavor. It maps to: dev, stage, prod.
|
||||||
|
|
||||||
|
FLAVOR="${FLUTTER_FLAVOR:-dev}"
|
||||||
|
PLIST_SOURCE="${PROJECT_DIR}/config/${FLAVOR}/GoogleService-Info.plist"
|
||||||
|
PLIST_DEST="${PROJECT_DIR}/Runner/GoogleService-Info.plist"
|
||||||
|
|
||||||
|
if [ ! -f "$PLIST_SOURCE" ]; then
|
||||||
|
echo "error: GoogleService-Info.plist not found for flavor '${FLAVOR}' at ${PLIST_SOURCE}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Copying GoogleService-Info.plist for flavor: ${FLAVOR}"
|
||||||
|
cp "${PLIST_SOURCE}" "${PLIST_DEST}"
|
||||||
@@ -1,44 +1,22 @@
|
|||||||
// File generated by FlutterFire CLI.
|
|
||||||
|
|
||||||
import 'package:firebase_core/firebase_core.dart' show FirebaseOptions;
|
import 'package:firebase_core/firebase_core.dart' show FirebaseOptions;
|
||||||
import 'package:flutter/foundation.dart'
|
import 'package:flutter/foundation.dart'
|
||||||
show defaultTargetPlatform, kIsWeb, TargetPlatform;
|
show defaultTargetPlatform, kIsWeb, TargetPlatform;
|
||||||
|
import 'package:krow_core/core.dart';
|
||||||
|
|
||||||
/// Default [FirebaseOptions] for use with your Firebase apps.
|
/// Environment-aware [FirebaseOptions] for the Staff app.
|
||||||
///
|
///
|
||||||
/// Example:
|
/// Selects the correct Firebase configuration based on the compile-time
|
||||||
/// ```dart
|
/// `ENV` dart define (dev, stage, prod). Defaults to dev.
|
||||||
/// import 'firebase_options.dart';
|
|
||||||
/// // ...
|
|
||||||
/// await Firebase.initializeApp(
|
|
||||||
/// options: DefaultFirebaseOptions.currentPlatform,
|
|
||||||
/// );
|
|
||||||
/// ```
|
|
||||||
class DefaultFirebaseOptions {
|
class DefaultFirebaseOptions {
|
||||||
static FirebaseOptions get currentPlatform {
|
static FirebaseOptions get currentPlatform {
|
||||||
if (kIsWeb) {
|
if (kIsWeb) {
|
||||||
return web;
|
return _webOptions;
|
||||||
}
|
}
|
||||||
switch (defaultTargetPlatform) {
|
switch (defaultTargetPlatform) {
|
||||||
case TargetPlatform.android:
|
case TargetPlatform.android:
|
||||||
return android;
|
return _androidOptions;
|
||||||
case TargetPlatform.iOS:
|
case TargetPlatform.iOS:
|
||||||
return ios;
|
return _iosOptions;
|
||||||
case TargetPlatform.macOS:
|
|
||||||
throw UnsupportedError(
|
|
||||||
'DefaultFirebaseOptions have not been configured for macos - '
|
|
||||||
'you can reconfigure this by running the FlutterFire CLI again.',
|
|
||||||
);
|
|
||||||
case TargetPlatform.windows:
|
|
||||||
throw UnsupportedError(
|
|
||||||
'DefaultFirebaseOptions have not been configured for windows - '
|
|
||||||
'you can reconfigure this by running the FlutterFire CLI again.',
|
|
||||||
);
|
|
||||||
case TargetPlatform.linux:
|
|
||||||
throw UnsupportedError(
|
|
||||||
'DefaultFirebaseOptions have not been configured for linux - '
|
|
||||||
'you can reconfigure this by running the FlutterFire CLI again.',
|
|
||||||
);
|
|
||||||
default:
|
default:
|
||||||
throw UnsupportedError(
|
throw UnsupportedError(
|
||||||
'DefaultFirebaseOptions are not supported for this platform.',
|
'DefaultFirebaseOptions are not supported for this platform.',
|
||||||
@@ -46,7 +24,65 @@ class DefaultFirebaseOptions {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static const FirebaseOptions web = FirebaseOptions(
|
static FirebaseOptions get _androidOptions {
|
||||||
|
switch (AppEnvironment.current) {
|
||||||
|
case AppEnvironment.dev:
|
||||||
|
return _devAndroid;
|
||||||
|
case AppEnvironment.stage:
|
||||||
|
return _stageAndroid;
|
||||||
|
case AppEnvironment.prod:
|
||||||
|
return _prodAndroid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static FirebaseOptions get _iosOptions {
|
||||||
|
switch (AppEnvironment.current) {
|
||||||
|
case AppEnvironment.dev:
|
||||||
|
return _devIos;
|
||||||
|
case AppEnvironment.stage:
|
||||||
|
return _stageIos;
|
||||||
|
case AppEnvironment.prod:
|
||||||
|
return _prodIos;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static FirebaseOptions get _webOptions {
|
||||||
|
switch (AppEnvironment.current) {
|
||||||
|
case AppEnvironment.dev:
|
||||||
|
return _devWeb;
|
||||||
|
case AppEnvironment.stage:
|
||||||
|
return _stageWeb;
|
||||||
|
case AppEnvironment.prod:
|
||||||
|
return _prodWeb;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
// DEV (krow-workforce-dev)
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
static const FirebaseOptions _devAndroid = FirebaseOptions(
|
||||||
|
apiKey: 'AIzaSyDBYhflhK6DThKnS7RM-9raKdvyKzLUjY4',
|
||||||
|
appId: '1:933560802882:android:ee100eab75b6b04c7757db',
|
||||||
|
messagingSenderId: '933560802882',
|
||||||
|
projectId: 'krow-workforce-dev',
|
||||||
|
storageBucket: 'krow-workforce-dev.firebasestorage.app',
|
||||||
|
);
|
||||||
|
|
||||||
|
static const FirebaseOptions _devIos = FirebaseOptions(
|
||||||
|
apiKey: 'AIzaSyDyEXkzZAWpXXe4dAesYaZflt5BEtMn9tA',
|
||||||
|
appId: '1:933560802882:ios:edf97dab6eb87b977757db',
|
||||||
|
messagingSenderId: '933560802882',
|
||||||
|
projectId: 'krow-workforce-dev',
|
||||||
|
storageBucket: 'krow-workforce-dev.firebasestorage.app',
|
||||||
|
androidClientId:
|
||||||
|
'933560802882-fbqg2icq24bmci3f84evjrbth5huh87f.apps.googleusercontent.com',
|
||||||
|
iosClientId:
|
||||||
|
'933560802882-fphpkdjubve8k7e8ogqj3fk1qducv3sg.apps.googleusercontent.com',
|
||||||
|
iosBundleId: 'dev.krowwithus.staff',
|
||||||
|
);
|
||||||
|
|
||||||
|
static const FirebaseOptions _devWeb = FirebaseOptions(
|
||||||
apiKey: 'AIzaSyBqRtZPMGU-Sz5x5UnRrunKu5NSWYyPRn8',
|
apiKey: 'AIzaSyBqRtZPMGU-Sz5x5UnRrunKu5NSWYyPRn8',
|
||||||
appId: '1:933560802882:web:173a841992885bb27757db',
|
appId: '1:933560802882:web:173a841992885bb27757db',
|
||||||
messagingSenderId: '933560802882',
|
messagingSenderId: '933560802882',
|
||||||
@@ -56,23 +92,62 @@ class DefaultFirebaseOptions {
|
|||||||
measurementId: 'G-9S7WEQTDKX',
|
measurementId: 'G-9S7WEQTDKX',
|
||||||
);
|
);
|
||||||
|
|
||||||
static const FirebaseOptions android = FirebaseOptions(
|
// ===========================================================================
|
||||||
apiKey: 'AIzaSyDBYhflhK6DThKnS7RM-9raKdvyKzLUjY4',
|
// STAGE (krow-workforce-staging)
|
||||||
appId: '1:933560802882:android:1ae05d85c865f77c7757db',
|
// ===========================================================================
|
||||||
messagingSenderId: '933560802882',
|
|
||||||
projectId: 'krow-workforce-dev',
|
static const FirebaseOptions _stageAndroid = FirebaseOptions(
|
||||||
storageBucket: 'krow-workforce-dev.firebasestorage.app',
|
apiKey: 'AIzaSyCgTXI3QhbEK3r4J5y7ek_6AxqhmR99QjY',
|
||||||
|
appId: '1:1032971403708:android:14e471d055e59597356bb9',
|
||||||
|
messagingSenderId: '1032971403708',
|
||||||
|
projectId: 'krow-workforce-staging',
|
||||||
|
storageBucket: 'krow-workforce-staging.firebasestorage.app',
|
||||||
);
|
);
|
||||||
|
|
||||||
static const FirebaseOptions ios = FirebaseOptions(
|
static const FirebaseOptions _stageIos = FirebaseOptions(
|
||||||
apiKey: 'AIzaSyDyEXkzZAWpXXe4dAesYaZflt5BEtMn9tA',
|
apiKey: 'AIzaSyCgTXI3QhbEK3r4J5y7ek_6AxqhmR99QjY',
|
||||||
appId: '1:933560802882:ios:fa584205b356de937757db',
|
appId: '1:1032971403708:ios:8c2bbd76bc4f55d9356bb9',
|
||||||
messagingSenderId: '933560802882',
|
messagingSenderId: '1032971403708',
|
||||||
projectId: 'krow-workforce-dev',
|
projectId: 'krow-workforce-staging',
|
||||||
storageBucket: 'krow-workforce-dev.firebasestorage.app',
|
storageBucket: 'krow-workforce-staging.firebasestorage.app',
|
||||||
androidClientId: '933560802882-fbqg2icq24bmci3f84evjrbth5huh87f.apps.googleusercontent.com',
|
iosBundleId: 'stage.krowwithus.staff',
|
||||||
iosClientId: '933560802882-29olj9ku64jbe9h7flinha6hbi8qrluh.apps.googleusercontent.com',
|
|
||||||
iosBundleId: 'com.krowwithus.staff',
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
static const FirebaseOptions _stageWeb = FirebaseOptions(
|
||||||
|
apiKey: 'AIzaSyCgTXI3QhbEK3r4J5y7ek_6AxqhmR99QjY',
|
||||||
|
appId: '', // TODO: Register web app in krow-workforce-staging
|
||||||
|
messagingSenderId: '1032971403708',
|
||||||
|
projectId: 'krow-workforce-staging',
|
||||||
|
storageBucket: 'krow-workforce-staging.firebasestorage.app',
|
||||||
|
);
|
||||||
|
|
||||||
|
// ===========================================================================
|
||||||
|
// PROD (krow-workforce-prod)
|
||||||
|
// TODO: Fill in after creating krow-workforce-prod Firebase project
|
||||||
|
// ===========================================================================
|
||||||
|
|
||||||
|
static const FirebaseOptions _prodAndroid = FirebaseOptions(
|
||||||
|
apiKey: '', // TODO: Add prod API key
|
||||||
|
appId: '', // TODO: Add prod app ID
|
||||||
|
messagingSenderId: '', // TODO: Add prod sender ID
|
||||||
|
projectId: 'krow-workforce-prod',
|
||||||
|
storageBucket: 'krow-workforce-prod.firebasestorage.app',
|
||||||
|
);
|
||||||
|
|
||||||
|
static const FirebaseOptions _prodIos = FirebaseOptions(
|
||||||
|
apiKey: '', // TODO: Add prod API key
|
||||||
|
appId: '', // TODO: Add prod app ID
|
||||||
|
messagingSenderId: '', // TODO: Add prod sender ID
|
||||||
|
projectId: 'krow-workforce-prod',
|
||||||
|
storageBucket: 'krow-workforce-prod.firebasestorage.app',
|
||||||
|
iosBundleId: 'prod.krowwithus.staff',
|
||||||
|
);
|
||||||
|
|
||||||
|
static const FirebaseOptions _prodWeb = FirebaseOptions(
|
||||||
|
apiKey: '', // TODO: Add prod API key
|
||||||
|
appId: '', // TODO: Add prod app ID
|
||||||
|
messagingSenderId: '', // TODO: Add prod sender ID
|
||||||
|
projectId: 'krow-workforce-prod',
|
||||||
|
storageBucket: 'krow-workforce-prod.firebasestorage.app',
|
||||||
|
);
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
|
"ENV": "dev",
|
||||||
"GOOGLE_MAPS_API_KEY": "AIzaSyAyRS9I4xxoVPAX91RJvWJHszB3ZY3-IC0",
|
"GOOGLE_MAPS_API_KEY": "AIzaSyAyRS9I4xxoVPAX91RJvWJHszB3ZY3-IC0",
|
||||||
"CORE_API_BASE_URL": "https://krow-core-api-e3g6witsvq-uc.a.run.app"
|
"CORE_API_BASE_URL": "https://krow-core-api-e3g6witsvq-uc.a.run.app"
|
||||||
}
|
}
|
||||||
5
apps/mobile/config.prod.json
Normal file
5
apps/mobile/config.prod.json
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"ENV": "prod",
|
||||||
|
"GOOGLE_MAPS_API_KEY": "",
|
||||||
|
"CORE_API_BASE_URL": ""
|
||||||
|
}
|
||||||
5
apps/mobile/config.stage.json
Normal file
5
apps/mobile/config.stage.json
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"ENV": "stage",
|
||||||
|
"GOOGLE_MAPS_API_KEY": "AIzaSyAyRS9I4xxoVPAX91RJvWJHszB3ZY3-IC0",
|
||||||
|
"CORE_API_BASE_URL": "https://krow-core-api-staging-e3g6witsvq-uc.a.run.app"
|
||||||
|
}
|
||||||
@@ -14,15 +14,14 @@ scripts:
|
|||||||
echo " 🚀 KROW WORKFORCE CUSTOM COMMANDS 🚀"
|
echo " 🚀 KROW WORKFORCE CUSTOM COMMANDS 🚀"
|
||||||
echo "============================================================"
|
echo "============================================================"
|
||||||
echo " BUILD COMMANDS:"
|
echo " BUILD COMMANDS:"
|
||||||
echo " - melos run build:client : Build Client App (APK)"
|
echo " - melos run build:client -- <PLATFORM> --<MODE> --flavor <ENV> --dart-define-from-file=../../config.<ENV>.json"
|
||||||
echo " - melos run build:staff : Build Staff App (APK)"
|
echo " - melos run build:staff -- <PLATFORM> --<MODE> --flavor <ENV> --dart-define-from-file=../../config.<ENV>.json"
|
||||||
echo " - melos run build:design-system : Build Design System Viewer"
|
echo " - melos run build:design-system : Build Design System Viewer"
|
||||||
echo ""
|
echo ""
|
||||||
echo " DEBUG/START COMMANDS:"
|
echo " DEBUG/START COMMANDS:"
|
||||||
echo " - melos run start:client -- -d <ID> : Run Client App"
|
echo " - melos run start:client -- -d <ID> --flavor <ENV> --dart-define-from-file=../../config.<ENV>.json"
|
||||||
echo " - melos run start:staff -- -d <ID> : Run Staff App"
|
echo " - melos run start:staff -- -d <ID> --flavor <ENV> --dart-define-from-file=../../config.<ENV>.json"
|
||||||
echo " - melos run start:design-system : Run DS Viewer"
|
echo " - melos run start:design-system : Run DS Viewer"
|
||||||
echo " (e.g., melos run start:client -- -d chrome)"
|
|
||||||
echo ""
|
echo ""
|
||||||
echo " CODE GENERATION:"
|
echo " CODE GENERATION:"
|
||||||
echo " - melos run gen:l10n : Generate Slang l10n"
|
echo " - melos run gen:l10n : Generate Slang l10n"
|
||||||
@@ -49,32 +48,30 @@ scripts:
|
|||||||
packageFilters:
|
packageFilters:
|
||||||
dependsOn: build_runner
|
dependsOn: build_runner
|
||||||
|
|
||||||
|
# Single-line scripts so that melos run arg forwarding works via --
|
||||||
|
# Usage: melos run build:client -- apk --release --flavor dev --dart-define-from-file=../../config.dev.json
|
||||||
build:client:
|
build:client:
|
||||||
run: |
|
run: melos exec --scope="krowwithus_client" -- flutter build
|
||||||
melos run gen:l10n --filter="core_localization"
|
description: "Build the Client app. Pass args via --: <platform> --<mode> --flavor <env> --dart-define-from-file=../../config.<env>.json"
|
||||||
melos run gen:build --filter="core_localization"
|
|
||||||
melos exec --scope="krowwithus_client" -- "flutter build apk"
|
|
||||||
description: "Build the Client app (Android APK by default)."
|
|
||||||
|
|
||||||
build:staff:
|
build:staff:
|
||||||
run: |
|
run: melos exec --scope="krowwithus_staff" -- flutter build
|
||||||
melos run gen:l10n --filter="core_localization"
|
description: "Build the Staff app. Pass args via --: <platform> --<mode> --flavor <env> --dart-define-from-file=../../config.<env>.json"
|
||||||
melos run gen:build --filter="core_localization"
|
|
||||||
melos exec --scope="krowwithus_staff" -- "flutter build apk"
|
|
||||||
description: "Build the Staff app (Android APK by default)."
|
|
||||||
|
|
||||||
build:design-system-viewer:
|
build:design-system-viewer:
|
||||||
run: melos exec --scope="design_system_viewer" -- "flutter build apk"
|
run: melos exec --scope="design_system_viewer" -- flutter build apk
|
||||||
description: "Build the Design System Viewer app (Android APK by default)."
|
description: "Build the Design System Viewer app (Android APK by default)."
|
||||||
|
|
||||||
|
# Single-line scripts so that melos run arg forwarding works via --
|
||||||
|
# Usage: melos run start:client -- -d android --flavor dev --dart-define-from-file=../../config.dev.json
|
||||||
start:client:
|
start:client:
|
||||||
run: melos exec --scope="krowwithus_client" -- "flutter run"
|
run: melos exec --scope="krowwithus_client" -- flutter run
|
||||||
description: "Start the Client app. Pass platform using -- -d <platform>, e.g. -d chrome"
|
description: "Start the Client app. Pass args via --: -d <device> --flavor <env> --dart-define-from-file=../../config.<env>.json"
|
||||||
|
|
||||||
start:staff:
|
start:staff:
|
||||||
run: melos exec --scope="krowwithus_staff" -- "flutter run"
|
run: melos exec --scope="krowwithus_staff" -- flutter run
|
||||||
description: "Start the Staff app. Pass platform using -- -d <platform>, e.g. -d chrome"
|
description: "Start the Staff app. Pass args via --: -d <device> --flavor <env> --dart-define-from-file=../../config.<env>.json"
|
||||||
|
|
||||||
start:design-system-viewer:
|
start:design-system-viewer:
|
||||||
run: melos exec --scope="design_system_viewer" -- "flutter run"
|
run: melos exec --scope="design_system_viewer" -- flutter run
|
||||||
description: "Start the Design System Viewer app. Pass platform using -- -d <platform>, e.g. -d chrome"
|
description: "Start the Design System Viewer app. Pass platform using -- -d <platform>, e.g. -d chrome"
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ export 'src/presentation/widgets/web_mobile_frame.dart';
|
|||||||
export 'src/presentation/mixins/bloc_error_handler.dart';
|
export 'src/presentation/mixins/bloc_error_handler.dart';
|
||||||
export 'src/presentation/observers/core_bloc_observer.dart';
|
export 'src/presentation/observers/core_bloc_observer.dart';
|
||||||
export 'src/config/app_config.dart';
|
export 'src/config/app_config.dart';
|
||||||
|
export 'src/config/app_environment.dart';
|
||||||
export 'src/routing/routing.dart';
|
export 'src/routing/routing.dart';
|
||||||
export 'src/services/api_service/api_service.dart';
|
export 'src/services/api_service/api_service.dart';
|
||||||
export 'src/services/api_service/dio_client.dart';
|
export 'src/services/api_service/dio_client.dart';
|
||||||
|
|||||||
@@ -0,0 +1,46 @@
|
|||||||
|
/// Represents the application environment.
|
||||||
|
enum AppEnvironment {
|
||||||
|
dev,
|
||||||
|
stage,
|
||||||
|
prod;
|
||||||
|
|
||||||
|
/// Resolves the current environment from the compile-time `ENV` dart define.
|
||||||
|
/// Defaults to [AppEnvironment.dev] if not set or unrecognized.
|
||||||
|
static AppEnvironment get current {
|
||||||
|
const String envString = String.fromEnvironment('ENV', defaultValue: 'dev');
|
||||||
|
return AppEnvironment.values.firstWhere(
|
||||||
|
(AppEnvironment e) => e.name == envString,
|
||||||
|
orElse: () => AppEnvironment.dev,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Whether the app is running in production.
|
||||||
|
bool get isProduction => this == AppEnvironment.prod;
|
||||||
|
|
||||||
|
/// Whether the app is running in a non-production environment.
|
||||||
|
bool get isNonProduction => !isProduction;
|
||||||
|
|
||||||
|
/// The Firebase project ID for this environment.
|
||||||
|
String get firebaseProjectId {
|
||||||
|
switch (this) {
|
||||||
|
case AppEnvironment.dev:
|
||||||
|
return 'krow-workforce-dev';
|
||||||
|
case AppEnvironment.stage:
|
||||||
|
return 'krow-workforce-staging';
|
||||||
|
case AppEnvironment.prod:
|
||||||
|
return 'krow-workforce-prod';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// A display label for the environment (empty for prod).
|
||||||
|
String get label {
|
||||||
|
switch (this) {
|
||||||
|
case AppEnvironment.dev:
|
||||||
|
return '[DEV]';
|
||||||
|
case AppEnvironment.stage:
|
||||||
|
return '[STG]';
|
||||||
|
case AppEnvironment.prod:
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -13,35 +13,35 @@ class CoreModule extends Module {
|
|||||||
@override
|
@override
|
||||||
void exportedBinds(Injector i) {
|
void exportedBinds(Injector i) {
|
||||||
// 1. Register the base HTTP client
|
// 1. Register the base HTTP client
|
||||||
i.addSingleton<Dio>(() => DioClient());
|
i.addLazySingleton<Dio>(() => DioClient());
|
||||||
|
|
||||||
// 2. Register the base API service
|
// 2. Register the base API service
|
||||||
i.addSingleton<BaseApiService>(() => ApiService(i.get<Dio>()));
|
i.addLazySingleton<BaseApiService>(() => ApiService(i.get<Dio>()));
|
||||||
|
|
||||||
// 3. Register Core API Services (Orchestrators)
|
// 3. Register Core API Services (Orchestrators)
|
||||||
i.addSingleton<FileUploadService>(
|
i.addLazySingleton<FileUploadService>(
|
||||||
() => FileUploadService(i.get<BaseApiService>()),
|
() => FileUploadService(i.get<BaseApiService>()),
|
||||||
);
|
);
|
||||||
i.addSingleton<SignedUrlService>(
|
i.addLazySingleton<SignedUrlService>(
|
||||||
() => SignedUrlService(i.get<BaseApiService>()),
|
() => SignedUrlService(i.get<BaseApiService>()),
|
||||||
);
|
);
|
||||||
i.addSingleton<VerificationService>(
|
i.addLazySingleton<VerificationService>(
|
||||||
() => VerificationService(i.get<BaseApiService>()),
|
() => VerificationService(i.get<BaseApiService>()),
|
||||||
);
|
);
|
||||||
i.addSingleton<LlmService>(() => LlmService(i.get<BaseApiService>()));
|
i.addLazySingleton<LlmService>(() => LlmService(i.get<BaseApiService>()));
|
||||||
i.addSingleton<RapidOrderService>(
|
i.addLazySingleton<RapidOrderService>(
|
||||||
() => RapidOrderService(i.get<BaseApiService>()),
|
() => RapidOrderService(i.get<BaseApiService>()),
|
||||||
);
|
);
|
||||||
|
|
||||||
// 4. Register Device dependency
|
// 4. Register Device dependency
|
||||||
i.addSingleton<ImagePicker>(() => ImagePicker());
|
i.addLazySingleton<ImagePicker>(() => ImagePicker());
|
||||||
|
|
||||||
// 5. Register Device Services
|
// 5. Register Device Services
|
||||||
i.addSingleton<CameraService>(() => CameraService(i.get<ImagePicker>()));
|
i.addLazySingleton<CameraService>(() => CameraService(i.get<ImagePicker>()));
|
||||||
i.addSingleton<GalleryService>(() => GalleryService(i.get<ImagePicker>()));
|
i.addLazySingleton<GalleryService>(() => GalleryService(i.get<ImagePicker>()));
|
||||||
i.addSingleton<FilePickerService>(FilePickerService.new);
|
i.addLazySingleton<FilePickerService>(FilePickerService.new);
|
||||||
i.addSingleton<AudioRecorderService>(AudioRecorderService.new);
|
i.addLazySingleton<AudioRecorderService>(AudioRecorderService.new);
|
||||||
i.addSingleton<DeviceFileUploadService>(
|
i.addLazySingleton<DeviceFileUploadService>(
|
||||||
() => DeviceFileUploadService(
|
() => DeviceFileUploadService(
|
||||||
cameraService: i.get<CameraService>(),
|
cameraService: i.get<CameraService>(),
|
||||||
galleryService: i.get<GalleryService>(),
|
galleryService: i.get<GalleryService>(),
|
||||||
|
|||||||
@@ -210,6 +210,13 @@ extension ClientNavigator on IModularNavigator {
|
|||||||
safePush(ClientPaths.createOrderPermanent, arguments: arguments);
|
safePush(ClientPaths.createOrderPermanent, arguments: arguments);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Pushes the review order page before submission.
|
||||||
|
///
|
||||||
|
/// Returns `true` if the user confirmed submission, `null` if they went back.
|
||||||
|
Future<bool?> toCreateOrderReview({Object? arguments}) async {
|
||||||
|
return safePush<bool>(ClientPaths.createOrderReview, arguments: arguments);
|
||||||
|
}
|
||||||
|
|
||||||
// ==========================================================================
|
// ==========================================================================
|
||||||
// VIEW ORDER
|
// VIEW ORDER
|
||||||
// ==========================================================================
|
// ==========================================================================
|
||||||
|
|||||||
@@ -154,4 +154,9 @@ class ClientPaths {
|
|||||||
///
|
///
|
||||||
/// Create a long-term or permanent staffing position.
|
/// Create a long-term or permanent staffing position.
|
||||||
static const String createOrderPermanent = '/create-order/permanent';
|
static const String createOrderPermanent = '/create-order/permanent';
|
||||||
|
|
||||||
|
/// Review order before submission.
|
||||||
|
///
|
||||||
|
/// Summary page shown before posting any order type.
|
||||||
|
static const String createOrderReview = '/create-order/review';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -397,6 +397,9 @@
|
|||||||
"title": "Permanent Order",
|
"title": "Permanent Order",
|
||||||
"subtitle": "Long-term staffing placement",
|
"subtitle": "Long-term staffing placement",
|
||||||
"placeholder": "Permanent Order Flow (Work in Progress)"
|
"placeholder": "Permanent Order Flow (Work in Progress)"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"invalid_arguments": "Unable to load order review. Please go back and try again."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"client_main": {
|
"client_main": {
|
||||||
|
|||||||
@@ -397,6 +397,9 @@
|
|||||||
"title": "Orden Permanente",
|
"title": "Orden Permanente",
|
||||||
"subtitle": "Colocaci\u00f3n de personal a largo plazo",
|
"subtitle": "Colocaci\u00f3n de personal a largo plazo",
|
||||||
"placeholder": "Flujo de Orden Permanente (Trabajo en Progreso)"
|
"placeholder": "Flujo de Orden Permanente (Trabajo en Progreso)"
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"invalid_arguments": "No se pudo cargar la revisi\u00f3n de la orden. Por favor, regresa e intenta de nuevo."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"client_main": {
|
"client_main": {
|
||||||
|
|||||||
@@ -24,20 +24,20 @@ class BillingModule extends Module {
|
|||||||
@override
|
@override
|
||||||
void binds(Injector i) {
|
void binds(Injector i) {
|
||||||
// Repositories
|
// Repositories
|
||||||
i.addSingleton<BillingRepository>(BillingRepositoryImpl.new);
|
i.addLazySingleton<BillingRepository>(BillingRepositoryImpl.new);
|
||||||
|
|
||||||
// Use Cases
|
// Use Cases
|
||||||
i.addSingleton(GetBankAccountsUseCase.new);
|
i.addLazySingleton(GetBankAccountsUseCase.new);
|
||||||
i.addSingleton(GetCurrentBillAmountUseCase.new);
|
i.addLazySingleton(GetCurrentBillAmountUseCase.new);
|
||||||
i.addSingleton(GetSavingsAmountUseCase.new);
|
i.addLazySingleton(GetSavingsAmountUseCase.new);
|
||||||
i.addSingleton(GetPendingInvoicesUseCase.new);
|
i.addLazySingleton(GetPendingInvoicesUseCase.new);
|
||||||
i.addSingleton(GetInvoiceHistoryUseCase.new);
|
i.addLazySingleton(GetInvoiceHistoryUseCase.new);
|
||||||
i.addSingleton(GetSpendingBreakdownUseCase.new);
|
i.addLazySingleton(GetSpendingBreakdownUseCase.new);
|
||||||
i.addSingleton(ApproveInvoiceUseCase.new);
|
i.addLazySingleton(ApproveInvoiceUseCase.new);
|
||||||
i.addSingleton(DisputeInvoiceUseCase.new);
|
i.addLazySingleton(DisputeInvoiceUseCase.new);
|
||||||
|
|
||||||
// BLoCs
|
// BLoCs
|
||||||
i.addSingleton<BillingBloc>(
|
i.addLazySingleton<BillingBloc>(
|
||||||
() => BillingBloc(
|
() => BillingBloc(
|
||||||
getBankAccounts: i.get<GetBankAccountsUseCase>(),
|
getBankAccounts: i.get<GetBankAccountsUseCase>(),
|
||||||
getCurrentBillAmount: i.get<GetCurrentBillAmountUseCase>(),
|
getCurrentBillAmount: i.get<GetCurrentBillAmountUseCase>(),
|
||||||
|
|||||||
@@ -16,14 +16,14 @@ class CoverageModule extends Module {
|
|||||||
@override
|
@override
|
||||||
void binds(Injector i) {
|
void binds(Injector i) {
|
||||||
// Repositories
|
// Repositories
|
||||||
i.addSingleton<CoverageRepository>(CoverageRepositoryImpl.new);
|
i.addLazySingleton<CoverageRepository>(CoverageRepositoryImpl.new);
|
||||||
|
|
||||||
// Use Cases
|
// Use Cases
|
||||||
i.addSingleton(GetShiftsForDateUseCase.new);
|
i.addLazySingleton(GetShiftsForDateUseCase.new);
|
||||||
i.addSingleton(GetCoverageStatsUseCase.new);
|
i.addLazySingleton(GetCoverageStatsUseCase.new);
|
||||||
|
|
||||||
// BLoCs
|
// BLoCs
|
||||||
i.addSingleton<CoverageBloc>(CoverageBloc.new);
|
i.addLazySingleton<CoverageBloc>(CoverageBloc.new);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import 'presentation/pages/client_main_page.dart';
|
|||||||
class ClientMainModule extends Module {
|
class ClientMainModule extends Module {
|
||||||
@override
|
@override
|
||||||
void binds(Injector i) {
|
void binds(Injector i) {
|
||||||
i.addSingleton(ClientMainCubit.new);
|
i.addLazySingleton(ClientMainCubit.new);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ import 'presentation/pages/one_time_order_page.dart';
|
|||||||
import 'presentation/pages/permanent_order_page.dart';
|
import 'presentation/pages/permanent_order_page.dart';
|
||||||
import 'presentation/pages/rapid_order_page.dart';
|
import 'presentation/pages/rapid_order_page.dart';
|
||||||
import 'presentation/pages/recurring_order_page.dart';
|
import 'presentation/pages/recurring_order_page.dart';
|
||||||
|
import 'presentation/pages/review_order_page.dart';
|
||||||
|
|
||||||
/// Module for the Client Create Order feature.
|
/// Module for the Client Create Order feature.
|
||||||
///
|
///
|
||||||
@@ -95,5 +96,12 @@ class ClientCreateOrderModule extends Module {
|
|||||||
),
|
),
|
||||||
child: (BuildContext context) => const PermanentOrderPage(),
|
child: (BuildContext context) => const PermanentOrderPage(),
|
||||||
);
|
);
|
||||||
|
r.child(
|
||||||
|
ClientPaths.childRoute(
|
||||||
|
ClientPaths.createOrder,
|
||||||
|
ClientPaths.createOrderReview,
|
||||||
|
),
|
||||||
|
child: (BuildContext context) => const ReviewOrderPage(),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import 'package:equatable/equatable.dart';
|
import 'package:equatable/equatable.dart';
|
||||||
import 'package:krow_domain/krow_domain.dart';
|
import 'package:krow_domain/krow_domain.dart';
|
||||||
|
import '../../utils/time_parsing_utils.dart';
|
||||||
|
|
||||||
enum OneTimeOrderStatus { initial, loading, success, failure }
|
enum OneTimeOrderStatus { initial, loading, success, failure }
|
||||||
|
|
||||||
@@ -98,6 +99,78 @@ class OneTimeOrderState extends Equatable {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Looks up a role name by its ID, returns `null` if not found.
|
||||||
|
String? roleNameById(String id) {
|
||||||
|
for (final OneTimeOrderRoleOption r in roles) {
|
||||||
|
if (r.id == id) return r.name;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Looks up a role cost-per-hour by its ID, returns `0` if not found.
|
||||||
|
double roleCostById(String id) {
|
||||||
|
for (final OneTimeOrderRoleOption r in roles) {
|
||||||
|
if (r.id == id) return r.costPerHour;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Total number of workers across all positions.
|
||||||
|
int get totalWorkers => positions.fold(
|
||||||
|
0,
|
||||||
|
(int sum, OneTimeOrderPosition p) => sum + p.count,
|
||||||
|
);
|
||||||
|
|
||||||
|
/// Sum of (count * costPerHour) across all positions.
|
||||||
|
double get totalCostPerHour => positions.fold(
|
||||||
|
0,
|
||||||
|
(double sum, OneTimeOrderPosition p) =>
|
||||||
|
sum + (p.count * roleCostById(p.role)),
|
||||||
|
);
|
||||||
|
|
||||||
|
/// Estimated total cost: sum of (count * costPerHour * hours) per position.
|
||||||
|
double get estimatedTotal {
|
||||||
|
double total = 0;
|
||||||
|
for (final OneTimeOrderPosition p in positions) {
|
||||||
|
final double hours = parseHoursFromTimes(p.startTime, p.endTime);
|
||||||
|
total += p.count * roleCostById(p.role) * hours;
|
||||||
|
}
|
||||||
|
return total;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Time range string from the first position (e.g. "6:00 AM \u2013 2:00 PM").
|
||||||
|
String get shiftTimeRange {
|
||||||
|
if (positions.isEmpty) return '';
|
||||||
|
final OneTimeOrderPosition first = positions.first;
|
||||||
|
return '${first.startTime} \u2013 ${first.endTime}';
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Formatted shift duration from the first position (e.g. "8 hrs (30 min break)").
|
||||||
|
String get shiftDuration {
|
||||||
|
if (positions.isEmpty) return '';
|
||||||
|
final OneTimeOrderPosition first = positions.first;
|
||||||
|
final double hours = parseHoursFromTimes(first.startTime, first.endTime);
|
||||||
|
if (hours <= 0) return '';
|
||||||
|
|
||||||
|
final int wholeHours = hours.floor();
|
||||||
|
final int minutes = ((hours - wholeHours) * 60).round();
|
||||||
|
final StringBuffer buffer = StringBuffer();
|
||||||
|
|
||||||
|
if (wholeHours > 0) buffer.write('$wholeHours hrs');
|
||||||
|
if (minutes > 0) {
|
||||||
|
if (wholeHours > 0) buffer.write(' ');
|
||||||
|
buffer.write('$minutes min');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (first.lunchBreak != null &&
|
||||||
|
first.lunchBreak != 'NO_BREAK' &&
|
||||||
|
first.lunchBreak!.isNotEmpty) {
|
||||||
|
buffer.write(' (${first.lunchBreak} break)');
|
||||||
|
}
|
||||||
|
|
||||||
|
return buffer.toString();
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
List<Object?> get props => <Object?>[
|
List<Object?> get props => <Object?>[
|
||||||
date,
|
date,
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import 'package:equatable/equatable.dart';
|
import 'package:equatable/equatable.dart';
|
||||||
import 'package:krow_domain/krow_domain.dart';
|
import 'package:krow_domain/krow_domain.dart';
|
||||||
|
import '../../utils/time_parsing_utils.dart';
|
||||||
|
|
||||||
enum PermanentOrderStatus { initial, loading, success, failure }
|
enum PermanentOrderStatus { initial, loading, success, failure }
|
||||||
|
|
||||||
@@ -118,6 +119,50 @@ class PermanentOrderState extends Equatable {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Looks up a role name by its ID, returns `null` if not found.
|
||||||
|
String? roleNameById(String id) {
|
||||||
|
for (final PermanentOrderRoleOption r in roles) {
|
||||||
|
if (r.id == id) return r.name;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Looks up a role cost-per-hour by its ID, returns `0` if not found.
|
||||||
|
double roleCostById(String id) {
|
||||||
|
for (final PermanentOrderRoleOption r in roles) {
|
||||||
|
if (r.id == id) return r.costPerHour;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Total number of workers across all positions.
|
||||||
|
int get totalWorkers => positions.fold(
|
||||||
|
0,
|
||||||
|
(int sum, PermanentOrderPosition p) => sum + p.count,
|
||||||
|
);
|
||||||
|
|
||||||
|
/// Sum of (count * costPerHour) across all positions.
|
||||||
|
double get totalCostPerHour => positions.fold(
|
||||||
|
0,
|
||||||
|
(double sum, PermanentOrderPosition p) =>
|
||||||
|
sum + (p.count * roleCostById(p.role)),
|
||||||
|
);
|
||||||
|
|
||||||
|
/// Estimated total cost: sum of (count * costPerHour * hours) per position.
|
||||||
|
double get estimatedTotal {
|
||||||
|
double total = 0;
|
||||||
|
for (final PermanentOrderPosition p in positions) {
|
||||||
|
final double hours = parseHoursFromTimes(p.startTime, p.endTime);
|
||||||
|
total += p.count * roleCostById(p.role) * hours;
|
||||||
|
}
|
||||||
|
return total;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Formatted repeat days (e.g. "Mon, Tue, Wed").
|
||||||
|
String get formattedRepeatDays => permanentDays.map(
|
||||||
|
(String day) => day[0] + day.substring(1).toLowerCase(),
|
||||||
|
).join(', ');
|
||||||
|
|
||||||
@override
|
@override
|
||||||
List<Object?> get props => <Object?>[
|
List<Object?> get props => <Object?>[
|
||||||
startDate,
|
startDate,
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import 'package:equatable/equatable.dart';
|
import 'package:equatable/equatable.dart';
|
||||||
import 'package:krow_domain/krow_domain.dart';
|
import 'package:krow_domain/krow_domain.dart';
|
||||||
|
import '../../utils/time_parsing_utils.dart';
|
||||||
|
|
||||||
enum RecurringOrderStatus { initial, loading, success, failure }
|
enum RecurringOrderStatus { initial, loading, success, failure }
|
||||||
|
|
||||||
@@ -125,6 +126,50 @@ class RecurringOrderState extends Equatable {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Looks up a role name by its ID, returns `null` if not found.
|
||||||
|
String? roleNameById(String id) {
|
||||||
|
for (final RecurringOrderRoleOption r in roles) {
|
||||||
|
if (r.id == id) return r.name;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Looks up a role cost-per-hour by its ID, returns `0` if not found.
|
||||||
|
double roleCostById(String id) {
|
||||||
|
for (final RecurringOrderRoleOption r in roles) {
|
||||||
|
if (r.id == id) return r.costPerHour;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Total number of workers across all positions.
|
||||||
|
int get totalWorkers => positions.fold(
|
||||||
|
0,
|
||||||
|
(int sum, RecurringOrderPosition p) => sum + p.count,
|
||||||
|
);
|
||||||
|
|
||||||
|
/// Sum of (count * costPerHour) across all positions.
|
||||||
|
double get totalCostPerHour => positions.fold(
|
||||||
|
0,
|
||||||
|
(double sum, RecurringOrderPosition p) =>
|
||||||
|
sum + (p.count * roleCostById(p.role)),
|
||||||
|
);
|
||||||
|
|
||||||
|
/// Estimated total cost: sum of (count * costPerHour * hours) per position.
|
||||||
|
double get estimatedTotal {
|
||||||
|
double total = 0;
|
||||||
|
for (final RecurringOrderPosition p in positions) {
|
||||||
|
final double hours = parseHoursFromTimes(p.startTime, p.endTime);
|
||||||
|
total += p.count * roleCostById(p.role) * hours;
|
||||||
|
}
|
||||||
|
return total;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Formatted repeat days (e.g. "Mon, Tue, Wed").
|
||||||
|
String get formattedRepeatDays => recurringDays.map(
|
||||||
|
(String day) => day[0] + day.substring(1).toLowerCase(),
|
||||||
|
).join(', ');
|
||||||
|
|
||||||
@override
|
@override
|
||||||
List<Object?> get props => <Object?>[
|
List<Object?> get props => <Object?>[
|
||||||
startDate,
|
startDate,
|
||||||
|
|||||||
@@ -0,0 +1,48 @@
|
|||||||
|
import '../widgets/review_order/review_order_positions_card.dart';
|
||||||
|
|
||||||
|
/// Identifies the order type for rendering the correct schedule layout
|
||||||
|
/// on the review page.
|
||||||
|
enum ReviewOrderType { oneTime, recurring, permanent }
|
||||||
|
|
||||||
|
/// Data transfer object passed as route arguments to the [ReviewOrderPage].
|
||||||
|
///
|
||||||
|
/// Contains pre-formatted display strings for every section of the review
|
||||||
|
/// summary. The form page is responsible for converting BLoC state into
|
||||||
|
/// these human-readable values before navigating.
|
||||||
|
class ReviewOrderArguments {
|
||||||
|
const ReviewOrderArguments({
|
||||||
|
required this.orderType,
|
||||||
|
required this.orderName,
|
||||||
|
required this.hubName,
|
||||||
|
required this.shiftContactName,
|
||||||
|
required this.positions,
|
||||||
|
required this.totalWorkers,
|
||||||
|
required this.totalCostPerHour,
|
||||||
|
required this.estimatedTotal,
|
||||||
|
this.scheduleDate,
|
||||||
|
this.scheduleTime,
|
||||||
|
this.scheduleDuration,
|
||||||
|
this.scheduleStartDate,
|
||||||
|
this.scheduleEndDate,
|
||||||
|
this.scheduleRepeatDays,
|
||||||
|
});
|
||||||
|
|
||||||
|
final ReviewOrderType orderType;
|
||||||
|
final String orderName;
|
||||||
|
final String hubName;
|
||||||
|
final String shiftContactName;
|
||||||
|
final List<ReviewPositionItem> positions;
|
||||||
|
final int totalWorkers;
|
||||||
|
final double totalCostPerHour;
|
||||||
|
final double estimatedTotal;
|
||||||
|
|
||||||
|
/// One-time order schedule fields.
|
||||||
|
final String? scheduleDate;
|
||||||
|
final String? scheduleTime;
|
||||||
|
final String? scheduleDuration;
|
||||||
|
|
||||||
|
/// Recurring / permanent order schedule fields.
|
||||||
|
final String? scheduleStartDate;
|
||||||
|
final String? scheduleEndDate;
|
||||||
|
final String? scheduleRepeatDays;
|
||||||
|
}
|
||||||
@@ -2,18 +2,24 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:flutter_modular/flutter_modular.dart';
|
import 'package:flutter_modular/flutter_modular.dart';
|
||||||
import 'package:client_orders_common/client_orders_common.dart';
|
import 'package:client_orders_common/client_orders_common.dart';
|
||||||
|
import 'package:intl/intl.dart';
|
||||||
import 'package:krow_core/core.dart';
|
import 'package:krow_core/core.dart';
|
||||||
import 'package:krow_domain/krow_domain.dart';
|
import 'package:krow_domain/krow_domain.dart';
|
||||||
import '../blocs/one_time_order/one_time_order_bloc.dart';
|
import '../blocs/one_time_order/one_time_order_bloc.dart';
|
||||||
import '../blocs/one_time_order/one_time_order_event.dart';
|
import '../blocs/one_time_order/one_time_order_event.dart';
|
||||||
import '../blocs/one_time_order/one_time_order_state.dart';
|
import '../blocs/one_time_order/one_time_order_state.dart';
|
||||||
|
import '../models/review_order_arguments.dart';
|
||||||
|
import '../widgets/review_order/review_order_positions_card.dart';
|
||||||
|
|
||||||
/// Page for creating a one-time staffing order.
|
/// Page for creating a one-time staffing order.
|
||||||
/// Users can specify the date, location, and multiple staff positions required.
|
|
||||||
///
|
///
|
||||||
/// This page initializes the [OneTimeOrderBloc] and displays the [OneTimeOrderView]
|
/// ## Submission Flow
|
||||||
/// from the common orders package. It follows the KROW Clean Architecture by being
|
///
|
||||||
/// a [StatelessWidget] and mapping local BLoC state to generic UI models.
|
/// When the user taps "Create Order", this page does NOT submit directly.
|
||||||
|
/// Instead it navigates to [ReviewOrderPage] with a snapshot of the current
|
||||||
|
/// BLoC state formatted as [ReviewOrderArguments]. If the user confirms on
|
||||||
|
/// the review page (pops with `true`), this page then fires
|
||||||
|
/// [OneTimeOrderSubmitted] on the BLoC to perform the actual API call.
|
||||||
class OneTimeOrderPage extends StatelessWidget {
|
class OneTimeOrderPage extends StatelessWidget {
|
||||||
/// Creates a [OneTimeOrderPage].
|
/// Creates a [OneTimeOrderPage].
|
||||||
const OneTimeOrderPage({super.key});
|
const OneTimeOrderPage({super.key});
|
||||||
@@ -90,15 +96,50 @@ class OneTimeOrderPage extends StatelessWidget {
|
|||||||
},
|
},
|
||||||
onPositionRemoved: (int index) =>
|
onPositionRemoved: (int index) =>
|
||||||
bloc.add(OneTimeOrderPositionRemoved(index)),
|
bloc.add(OneTimeOrderPositionRemoved(index)),
|
||||||
onSubmit: () => bloc.add(const OneTimeOrderSubmitted()),
|
onSubmit: () => _navigateToReview(state, bloc),
|
||||||
onDone: () => Modular.to.toOrdersSpecificDate(state.date),
|
onDone: () => Modular.to.toOrdersSpecificDate(state.date),
|
||||||
onBack: () => Modular.to.pop(),
|
onBack: () => Modular.to.popSafe(),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Builds [ReviewOrderArguments] from the current BLoC state and navigates
|
||||||
|
/// to the review page. Submits the order only if the user confirms.
|
||||||
|
Future<void> _navigateToReview(
|
||||||
|
OneTimeOrderState state,
|
||||||
|
OneTimeOrderBloc bloc,
|
||||||
|
) async {
|
||||||
|
final List<ReviewPositionItem> reviewPositions = state.positions.map(
|
||||||
|
(OneTimeOrderPosition p) => ReviewPositionItem(
|
||||||
|
roleName: state.roleNameById(p.role) ?? p.role,
|
||||||
|
workerCount: p.count,
|
||||||
|
costPerHour: state.roleCostById(p.role),
|
||||||
|
),
|
||||||
|
).toList();
|
||||||
|
|
||||||
|
final bool? confirmed = await Modular.to.toCreateOrderReview(
|
||||||
|
arguments: ReviewOrderArguments(
|
||||||
|
orderType: ReviewOrderType.oneTime,
|
||||||
|
orderName: state.eventName,
|
||||||
|
hubName: state.selectedHub?.name ?? '',
|
||||||
|
shiftContactName: state.selectedManager?.name ?? '',
|
||||||
|
positions: reviewPositions,
|
||||||
|
totalWorkers: state.totalWorkers,
|
||||||
|
totalCostPerHour: state.totalCostPerHour,
|
||||||
|
estimatedTotal: state.estimatedTotal,
|
||||||
|
scheduleDate: DateFormat.yMMMEd().format(state.date),
|
||||||
|
scheduleTime: state.shiftTimeRange,
|
||||||
|
scheduleDuration: state.shiftDuration,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
if (confirmed == true) {
|
||||||
|
bloc.add(const OneTimeOrderSubmitted());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
OrderFormStatus _mapStatus(OneTimeOrderStatus status) {
|
OrderFormStatus _mapStatus(OneTimeOrderStatus status) {
|
||||||
switch (status) {
|
switch (status) {
|
||||||
case OneTimeOrderStatus.initial:
|
case OneTimeOrderStatus.initial:
|
||||||
|
|||||||
@@ -2,13 +2,24 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:flutter_modular/flutter_modular.dart';
|
import 'package:flutter_modular/flutter_modular.dart';
|
||||||
import 'package:client_orders_common/client_orders_common.dart';
|
import 'package:client_orders_common/client_orders_common.dart';
|
||||||
|
import 'package:intl/intl.dart';
|
||||||
import 'package:krow_core/core.dart';
|
import 'package:krow_core/core.dart';
|
||||||
import 'package:krow_domain/krow_domain.dart' hide PermanentOrderPosition;
|
import 'package:krow_domain/krow_domain.dart' hide PermanentOrderPosition;
|
||||||
import '../blocs/permanent_order/permanent_order_bloc.dart';
|
import '../blocs/permanent_order/permanent_order_bloc.dart';
|
||||||
import '../blocs/permanent_order/permanent_order_event.dart';
|
import '../blocs/permanent_order/permanent_order_event.dart';
|
||||||
import '../blocs/permanent_order/permanent_order_state.dart';
|
import '../blocs/permanent_order/permanent_order_state.dart';
|
||||||
|
import '../models/review_order_arguments.dart';
|
||||||
|
import '../utils/schedule_utils.dart';
|
||||||
|
import '../widgets/review_order/review_order_positions_card.dart';
|
||||||
|
|
||||||
/// Page for creating a permanent staffing order.
|
/// Page for creating a permanent staffing order.
|
||||||
|
///
|
||||||
|
/// ## Submission Flow
|
||||||
|
///
|
||||||
|
/// When the user taps "Create Order", this page navigates to
|
||||||
|
/// [ReviewOrderPage] with a snapshot of the current BLoC state formatted
|
||||||
|
/// as [ReviewOrderArguments]. If the user confirms (pops with `true`),
|
||||||
|
/// this page fires [PermanentOrderSubmitted] on the BLoC.
|
||||||
class PermanentOrderPage extends StatelessWidget {
|
class PermanentOrderPage extends StatelessWidget {
|
||||||
/// Creates a [PermanentOrderPage].
|
/// Creates a [PermanentOrderPage].
|
||||||
const PermanentOrderPage({super.key});
|
const PermanentOrderPage({super.key});
|
||||||
@@ -89,64 +100,54 @@ class PermanentOrderPage extends StatelessWidget {
|
|||||||
},
|
},
|
||||||
onPositionRemoved: (int index) =>
|
onPositionRemoved: (int index) =>
|
||||||
bloc.add(PermanentOrderPositionRemoved(index)),
|
bloc.add(PermanentOrderPositionRemoved(index)),
|
||||||
onSubmit: () => bloc.add(const PermanentOrderSubmitted()),
|
onSubmit: () => _navigateToReview(state, bloc),
|
||||||
onDone: () {
|
onDone: () {
|
||||||
final DateTime initialDate = _firstPermanentShiftDate(
|
final DateTime initialDate = firstScheduledShiftDate(
|
||||||
state.startDate,
|
state.startDate,
|
||||||
|
state.startDate.add(const Duration(days: 29)),
|
||||||
state.permanentDays,
|
state.permanentDays,
|
||||||
);
|
);
|
||||||
|
|
||||||
// Navigate to orders page with the initial date set to the first recurring shift date
|
|
||||||
Modular.to.toOrdersSpecificDate(initialDate);
|
Modular.to.toOrdersSpecificDate(initialDate);
|
||||||
},
|
},
|
||||||
onBack: () => Modular.to.pop(),
|
onBack: () => Modular.to.popSafe(),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
DateTime _firstPermanentShiftDate(
|
/// Builds [ReviewOrderArguments] from the current BLoC state and navigates
|
||||||
DateTime startDate,
|
/// to the review page. Submits the order only if the user confirms.
|
||||||
List<String> permanentDays,
|
Future<void> _navigateToReview(
|
||||||
) {
|
PermanentOrderState state,
|
||||||
final DateTime start = DateTime(
|
PermanentOrderBloc bloc,
|
||||||
startDate.year,
|
) async {
|
||||||
startDate.month,
|
final List<ReviewPositionItem> reviewPositions = state.positions.map(
|
||||||
startDate.day,
|
(PermanentOrderPosition p) => ReviewPositionItem(
|
||||||
);
|
roleName: state.roleNameById(p.role) ?? p.role,
|
||||||
final DateTime end = start.add(const Duration(days: 29));
|
workerCount: p.count,
|
||||||
final Set<String> selected = permanentDays.toSet();
|
costPerHour: state.roleCostById(p.role),
|
||||||
for (
|
),
|
||||||
DateTime day = start;
|
).toList();
|
||||||
!day.isAfter(end);
|
|
||||||
day = day.add(const Duration(days: 1))
|
|
||||||
) {
|
|
||||||
if (selected.contains(_weekdayLabel(day))) {
|
|
||||||
return day;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return start;
|
|
||||||
}
|
|
||||||
|
|
||||||
String _weekdayLabel(DateTime date) {
|
final bool? confirmed = await Modular.to.toCreateOrderReview(
|
||||||
switch (date.weekday) {
|
arguments: ReviewOrderArguments(
|
||||||
case DateTime.monday:
|
orderType: ReviewOrderType.permanent,
|
||||||
return 'MON';
|
orderName: state.eventName,
|
||||||
case DateTime.tuesday:
|
hubName: state.selectedHub?.name ?? '',
|
||||||
return 'TUE';
|
shiftContactName: state.selectedManager?.name ?? '',
|
||||||
case DateTime.wednesday:
|
positions: reviewPositions,
|
||||||
return 'WED';
|
totalWorkers: state.totalWorkers,
|
||||||
case DateTime.thursday:
|
totalCostPerHour: state.totalCostPerHour,
|
||||||
return 'THU';
|
estimatedTotal: state.estimatedTotal,
|
||||||
case DateTime.friday:
|
scheduleStartDate: DateFormat.yMMMd().format(state.startDate),
|
||||||
return 'FRI';
|
scheduleRepeatDays: state.formattedRepeatDays,
|
||||||
case DateTime.saturday:
|
),
|
||||||
return 'SAT';
|
);
|
||||||
case DateTime.sunday:
|
|
||||||
return 'SUN';
|
if (confirmed == true) {
|
||||||
default:
|
bloc.add(const PermanentOrderSubmitted());
|
||||||
return 'SUN';
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,13 +2,24 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:flutter_modular/flutter_modular.dart';
|
import 'package:flutter_modular/flutter_modular.dart';
|
||||||
import 'package:client_orders_common/client_orders_common.dart';
|
import 'package:client_orders_common/client_orders_common.dart';
|
||||||
|
import 'package:intl/intl.dart';
|
||||||
import 'package:krow_core/core.dart';
|
import 'package:krow_core/core.dart';
|
||||||
import 'package:krow_domain/krow_domain.dart' hide RecurringOrderPosition;
|
import 'package:krow_domain/krow_domain.dart' hide RecurringOrderPosition;
|
||||||
import '../blocs/recurring_order/recurring_order_bloc.dart';
|
import '../blocs/recurring_order/recurring_order_bloc.dart';
|
||||||
import '../blocs/recurring_order/recurring_order_event.dart';
|
import '../blocs/recurring_order/recurring_order_event.dart';
|
||||||
import '../blocs/recurring_order/recurring_order_state.dart';
|
import '../blocs/recurring_order/recurring_order_state.dart';
|
||||||
|
import '../models/review_order_arguments.dart';
|
||||||
|
import '../utils/schedule_utils.dart';
|
||||||
|
import '../widgets/review_order/review_order_positions_card.dart';
|
||||||
|
|
||||||
/// Page for creating a recurring staffing order.
|
/// Page for creating a recurring staffing order.
|
||||||
|
///
|
||||||
|
/// ## Submission Flow
|
||||||
|
///
|
||||||
|
/// When the user taps "Create Order", this page navigates to
|
||||||
|
/// [ReviewOrderPage] with a snapshot of the current BLoC state formatted
|
||||||
|
/// as [ReviewOrderArguments]. If the user confirms (pops with `true`),
|
||||||
|
/// this page fires [RecurringOrderSubmitted] on the BLoC.
|
||||||
class RecurringOrderPage extends StatelessWidget {
|
class RecurringOrderPage extends StatelessWidget {
|
||||||
/// Creates a [RecurringOrderPage].
|
/// Creates a [RecurringOrderPage].
|
||||||
const RecurringOrderPage({super.key});
|
const RecurringOrderPage({super.key});
|
||||||
@@ -92,7 +103,7 @@ class RecurringOrderPage extends StatelessWidget {
|
|||||||
},
|
},
|
||||||
onPositionRemoved: (int index) =>
|
onPositionRemoved: (int index) =>
|
||||||
bloc.add(RecurringOrderPositionRemoved(index)),
|
bloc.add(RecurringOrderPositionRemoved(index)),
|
||||||
onSubmit: () => bloc.add(const RecurringOrderSubmitted()),
|
onSubmit: () => _navigateToReview(state, bloc),
|
||||||
onDone: () {
|
onDone: () {
|
||||||
final DateTime maxEndDate = state.startDate.add(
|
final DateTime maxEndDate = state.startDate.add(
|
||||||
const Duration(days: 29),
|
const Duration(days: 29),
|
||||||
@@ -101,64 +112,53 @@ class RecurringOrderPage extends StatelessWidget {
|
|||||||
state.endDate.isAfter(maxEndDate)
|
state.endDate.isAfter(maxEndDate)
|
||||||
? maxEndDate
|
? maxEndDate
|
||||||
: state.endDate;
|
: state.endDate;
|
||||||
final DateTime initialDate = _firstRecurringShiftDate(
|
final DateTime initialDate = firstScheduledShiftDate(
|
||||||
state.startDate,
|
state.startDate,
|
||||||
effectiveEndDate,
|
effectiveEndDate,
|
||||||
state.recurringDays,
|
state.recurringDays,
|
||||||
);
|
);
|
||||||
|
|
||||||
// Navigate to orders page with the initial date set to the first recurring shift date
|
|
||||||
Modular.to.toOrdersSpecificDate(initialDate);
|
Modular.to.toOrdersSpecificDate(initialDate);
|
||||||
},
|
},
|
||||||
onBack: () => Modular.to.pop(),
|
onBack: () => Modular.to.popSafe(),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
DateTime _firstRecurringShiftDate(
|
/// Builds [ReviewOrderArguments] from the current BLoC state and navigates
|
||||||
DateTime startDate,
|
/// to the review page. Submits the order only if the user confirms.
|
||||||
DateTime endDate,
|
Future<void> _navigateToReview(
|
||||||
List<String> recurringDays,
|
RecurringOrderState state,
|
||||||
) {
|
RecurringOrderBloc bloc,
|
||||||
final DateTime start = DateTime(
|
) async {
|
||||||
startDate.year,
|
final List<ReviewPositionItem> reviewPositions = state.positions.map(
|
||||||
startDate.month,
|
(RecurringOrderPosition p) => ReviewPositionItem(
|
||||||
startDate.day,
|
roleName: state.roleNameById(p.role) ?? p.role,
|
||||||
);
|
workerCount: p.count,
|
||||||
final DateTime end = DateTime(endDate.year, endDate.month, endDate.day);
|
costPerHour: state.roleCostById(p.role),
|
||||||
final Set<String> selected = recurringDays.toSet();
|
),
|
||||||
for (
|
).toList();
|
||||||
DateTime day = start;
|
|
||||||
!day.isAfter(end);
|
|
||||||
day = day.add(const Duration(days: 1))
|
|
||||||
) {
|
|
||||||
if (selected.contains(_weekdayLabel(day))) {
|
|
||||||
return day;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return start;
|
|
||||||
}
|
|
||||||
|
|
||||||
String _weekdayLabel(DateTime date) {
|
final bool? confirmed = await Modular.to.toCreateOrderReview(
|
||||||
switch (date.weekday) {
|
arguments: ReviewOrderArguments(
|
||||||
case DateTime.monday:
|
orderType: ReviewOrderType.recurring,
|
||||||
return 'MON';
|
orderName: state.eventName,
|
||||||
case DateTime.tuesday:
|
hubName: state.selectedHub?.name ?? '',
|
||||||
return 'TUE';
|
shiftContactName: state.selectedManager?.name ?? '',
|
||||||
case DateTime.wednesday:
|
positions: reviewPositions,
|
||||||
return 'WED';
|
totalWorkers: state.totalWorkers,
|
||||||
case DateTime.thursday:
|
totalCostPerHour: state.totalCostPerHour,
|
||||||
return 'THU';
|
estimatedTotal: state.estimatedTotal,
|
||||||
case DateTime.friday:
|
scheduleStartDate: DateFormat.yMMMd().format(state.startDate),
|
||||||
return 'FRI';
|
scheduleEndDate: DateFormat.yMMMd().format(state.endDate),
|
||||||
case DateTime.saturday:
|
scheduleRepeatDays: state.formattedRepeatDays,
|
||||||
return 'SAT';
|
),
|
||||||
case DateTime.sunday:
|
);
|
||||||
return 'SUN';
|
|
||||||
default:
|
if (confirmed == true) {
|
||||||
return 'SUN';
|
bloc.add(const RecurringOrderSubmitted());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,88 @@
|
|||||||
|
import 'package:core_localization/core_localization.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_modular/flutter_modular.dart';
|
||||||
|
import 'package:krow_core/core.dart';
|
||||||
|
import '../models/review_order_arguments.dart';
|
||||||
|
import '../widgets/review_order/one_time_schedule_section.dart';
|
||||||
|
import '../widgets/review_order/permanent_schedule_section.dart';
|
||||||
|
import '../widgets/review_order/recurring_schedule_section.dart';
|
||||||
|
import '../widgets/review_order/review_order_view.dart';
|
||||||
|
|
||||||
|
/// Review step in the order creation flow.
|
||||||
|
///
|
||||||
|
/// ## Navigation Flow
|
||||||
|
///
|
||||||
|
/// ```
|
||||||
|
/// Form Page (one-time / recurring / permanent)
|
||||||
|
/// -> user taps "Create Order"
|
||||||
|
/// -> navigates here with [ReviewOrderArguments]
|
||||||
|
/// -> user reviews summary
|
||||||
|
/// -> "Post Order" => pops with `true` => form page submits via BLoC
|
||||||
|
/// -> back / "Edit" => pops without result => form page resumes editing
|
||||||
|
/// ```
|
||||||
|
///
|
||||||
|
/// This page is purely presentational. It receives all display data via
|
||||||
|
/// [ReviewOrderArguments] and does not hold any BLoC. The calling form
|
||||||
|
/// page owns the BLoC and only fires the submit event after this page
|
||||||
|
/// confirms.
|
||||||
|
class ReviewOrderPage extends StatelessWidget {
|
||||||
|
/// Creates a [ReviewOrderPage].
|
||||||
|
const ReviewOrderPage({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
final Object? rawArgs = Modular.args.data;
|
||||||
|
if (rawArgs is! ReviewOrderArguments) {
|
||||||
|
return Scaffold(
|
||||||
|
body: Center(
|
||||||
|
child: Text(t.client_create_order.review.invalid_arguments),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
final ReviewOrderArguments args = rawArgs;
|
||||||
|
final bool showEdit = args.orderType != ReviewOrderType.oneTime;
|
||||||
|
|
||||||
|
return ReviewOrderView(
|
||||||
|
orderName: args.orderName,
|
||||||
|
hubName: args.hubName,
|
||||||
|
shiftContactName: args.shiftContactName,
|
||||||
|
scheduleSection: _buildScheduleSection(args, showEdit),
|
||||||
|
positions: args.positions,
|
||||||
|
totalWorkers: args.totalWorkers,
|
||||||
|
totalCostPerHour: args.totalCostPerHour,
|
||||||
|
estimatedTotal: args.estimatedTotal,
|
||||||
|
showEditButtons: showEdit,
|
||||||
|
onEditBasics: showEdit ? () => Modular.to.popSafe() : null,
|
||||||
|
onEditSchedule: showEdit ? () => Modular.to.popSafe() : null,
|
||||||
|
onEditPositions: showEdit ? () => Modular.to.popSafe() : null,
|
||||||
|
onBack: () => Modular.to.popSafe(),
|
||||||
|
onSubmit: () => Modular.to.popSafe<bool>(true),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Builds the schedule section widget matching the order type.
|
||||||
|
Widget _buildScheduleSection(ReviewOrderArguments args, bool showEdit) {
|
||||||
|
switch (args.orderType) {
|
||||||
|
case ReviewOrderType.oneTime:
|
||||||
|
return OneTimeScheduleSection(
|
||||||
|
date: args.scheduleDate ?? '',
|
||||||
|
time: args.scheduleTime ?? '',
|
||||||
|
duration: args.scheduleDuration ?? '',
|
||||||
|
);
|
||||||
|
case ReviewOrderType.recurring:
|
||||||
|
return RecurringScheduleSection(
|
||||||
|
startDate: args.scheduleStartDate ?? '',
|
||||||
|
endDate: args.scheduleEndDate ?? '',
|
||||||
|
repeatDays: args.scheduleRepeatDays ?? '',
|
||||||
|
onEdit: showEdit ? () => Modular.to.popSafe() : null,
|
||||||
|
);
|
||||||
|
case ReviewOrderType.permanent:
|
||||||
|
return PermanentScheduleSection(
|
||||||
|
startDate: args.scheduleStartDate ?? '',
|
||||||
|
repeatDays: args.scheduleRepeatDays ?? '',
|
||||||
|
onEdit: showEdit ? () => Modular.to.popSafe() : null,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
/// Returns the uppercase three-letter weekday label for [date].
|
||||||
|
///
|
||||||
|
/// Maps `DateTime.weekday` (1=Monday..7=Sunday) to labels like "MON", "TUE".
|
||||||
|
String weekdayLabel(DateTime date) {
|
||||||
|
switch (date.weekday) {
|
||||||
|
case DateTime.monday:
|
||||||
|
return 'MON';
|
||||||
|
case DateTime.tuesday:
|
||||||
|
return 'TUE';
|
||||||
|
case DateTime.wednesday:
|
||||||
|
return 'WED';
|
||||||
|
case DateTime.thursday:
|
||||||
|
return 'THU';
|
||||||
|
case DateTime.friday:
|
||||||
|
return 'FRI';
|
||||||
|
case DateTime.saturday:
|
||||||
|
return 'SAT';
|
||||||
|
case DateTime.sunday:
|
||||||
|
return 'SUN';
|
||||||
|
default:
|
||||||
|
return 'SUN';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Finds the first date within [startDate]..[endDate] whose weekday matches
|
||||||
|
/// one of the [selectedDays] labels (e.g. "MON", "TUE").
|
||||||
|
///
|
||||||
|
/// Returns [startDate] if no match is found.
|
||||||
|
DateTime firstScheduledShiftDate(
|
||||||
|
DateTime startDate,
|
||||||
|
DateTime endDate,
|
||||||
|
List<String> selectedDays,
|
||||||
|
) {
|
||||||
|
final DateTime start = DateTime(startDate.year, startDate.month, startDate.day);
|
||||||
|
final DateTime end = DateTime(endDate.year, endDate.month, endDate.day);
|
||||||
|
final Set<String> selected = selectedDays.toSet();
|
||||||
|
for (
|
||||||
|
DateTime day = start;
|
||||||
|
!day.isAfter(end);
|
||||||
|
day = day.add(const Duration(days: 1))
|
||||||
|
) {
|
||||||
|
if (selected.contains(weekdayLabel(day))) {
|
||||||
|
return day;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return start;
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
import 'package:intl/intl.dart';
|
||||||
|
|
||||||
|
/// Parses a time string in common formats ("6:00 PM", "18:00", "6:00PM").
|
||||||
|
///
|
||||||
|
/// Returns `null` if no format matches.
|
||||||
|
DateTime? parseTime(String time) {
|
||||||
|
for (final String format in <String>['h:mm a', 'HH:mm', 'h:mma']) {
|
||||||
|
try {
|
||||||
|
return DateFormat(format).parse(time.trim());
|
||||||
|
} catch (_) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Calculates the number of hours between [startTime] and [endTime].
|
||||||
|
///
|
||||||
|
/// Handles overnight shifts (negative difference wraps to 24h).
|
||||||
|
/// Returns `0` if either time string cannot be parsed.
|
||||||
|
double parseHoursFromTimes(String startTime, String endTime) {
|
||||||
|
final DateTime? start = parseTime(startTime);
|
||||||
|
final DateTime? end = parseTime(endTime);
|
||||||
|
if (start == null || end == null) return 0;
|
||||||
|
Duration diff = end.difference(start);
|
||||||
|
if (diff.isNegative) diff += const Duration(hours: 24);
|
||||||
|
return diff.inMinutes / 60;
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'review_order_info_row.dart';
|
||||||
|
import 'review_order_section_card.dart';
|
||||||
|
|
||||||
|
/// Schedule section for one-time orders.
|
||||||
|
///
|
||||||
|
/// Displays: Date, Time (start-end), Duration (with break info).
|
||||||
|
class OneTimeScheduleSection extends StatelessWidget {
|
||||||
|
const OneTimeScheduleSection({
|
||||||
|
required this.date,
|
||||||
|
required this.time,
|
||||||
|
required this.duration,
|
||||||
|
super.key,
|
||||||
|
});
|
||||||
|
|
||||||
|
final String date;
|
||||||
|
final String time;
|
||||||
|
final String duration;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return ReviewOrderSectionCard(
|
||||||
|
title: 'Schedule',
|
||||||
|
children: <Widget>[
|
||||||
|
ReviewOrderInfoRow(label: 'Date', value: date),
|
||||||
|
ReviewOrderInfoRow(label: 'Time', value: time),
|
||||||
|
ReviewOrderInfoRow(label: 'Duration', value: duration),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'review_order_info_row.dart';
|
||||||
|
import 'review_order_section_card.dart';
|
||||||
|
|
||||||
|
/// Schedule section for permanent orders.
|
||||||
|
///
|
||||||
|
/// Displays: Start Date, Repeat days (no end date).
|
||||||
|
class PermanentScheduleSection extends StatelessWidget {
|
||||||
|
const PermanentScheduleSection({
|
||||||
|
required this.startDate,
|
||||||
|
required this.repeatDays,
|
||||||
|
this.onEdit,
|
||||||
|
super.key,
|
||||||
|
});
|
||||||
|
|
||||||
|
final String startDate;
|
||||||
|
final String repeatDays;
|
||||||
|
final VoidCallback? onEdit;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return ReviewOrderSectionCard(
|
||||||
|
title: 'Schedule',
|
||||||
|
onEdit: onEdit,
|
||||||
|
children: <Widget>[
|
||||||
|
ReviewOrderInfoRow(label: 'Start Date', value: startDate),
|
||||||
|
ReviewOrderInfoRow(label: 'Repeat', value: repeatDays),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'review_order_info_row.dart';
|
||||||
|
import 'review_order_section_card.dart';
|
||||||
|
|
||||||
|
/// Schedule section for recurring orders.
|
||||||
|
///
|
||||||
|
/// Displays: Start Date, End Date, Repeat days.
|
||||||
|
class RecurringScheduleSection extends StatelessWidget {
|
||||||
|
const RecurringScheduleSection({
|
||||||
|
required this.startDate,
|
||||||
|
required this.endDate,
|
||||||
|
required this.repeatDays,
|
||||||
|
this.onEdit,
|
||||||
|
super.key,
|
||||||
|
});
|
||||||
|
|
||||||
|
final String startDate;
|
||||||
|
final String endDate;
|
||||||
|
final String repeatDays;
|
||||||
|
final VoidCallback? onEdit;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return ReviewOrderSectionCard(
|
||||||
|
title: 'Schedule',
|
||||||
|
onEdit: onEdit,
|
||||||
|
children: <Widget>[
|
||||||
|
ReviewOrderInfoRow(label: 'Start Date', value: startDate),
|
||||||
|
ReviewOrderInfoRow(label: 'End Date', value: endDate),
|
||||||
|
ReviewOrderInfoRow(label: 'Repeat', value: repeatDays),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,74 @@
|
|||||||
|
import 'package:design_system/design_system.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
/// Bottom action bar with a back button and primary submit button.
|
||||||
|
///
|
||||||
|
/// The back button is a compact outlined button with a chevron icon.
|
||||||
|
/// The submit button fills the remaining space.
|
||||||
|
class ReviewOrderActionBar extends StatelessWidget {
|
||||||
|
const ReviewOrderActionBar({
|
||||||
|
required this.onBack,
|
||||||
|
required this.onSubmit,
|
||||||
|
this.submitLabel = 'Post Order',
|
||||||
|
this.isLoading = false,
|
||||||
|
super.key,
|
||||||
|
});
|
||||||
|
|
||||||
|
final VoidCallback onBack;
|
||||||
|
final VoidCallback? onSubmit;
|
||||||
|
final String submitLabel;
|
||||||
|
final bool isLoading;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return SafeArea(
|
||||||
|
top: false,
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.only(
|
||||||
|
left: UiConstants.space6,
|
||||||
|
right: UiConstants.space6,
|
||||||
|
top: UiConstants.space3,
|
||||||
|
bottom: UiConstants.space10,
|
||||||
|
),
|
||||||
|
child: Row(
|
||||||
|
children: <Widget>[
|
||||||
|
SizedBox(
|
||||||
|
width: 80,
|
||||||
|
height: 52,
|
||||||
|
child: OutlinedButton(
|
||||||
|
onPressed: onBack,
|
||||||
|
style: OutlinedButton.styleFrom(
|
||||||
|
shape: RoundedRectangleBorder(
|
||||||
|
borderRadius: UiConstants.radiusXl,
|
||||||
|
),
|
||||||
|
side: const BorderSide(
|
||||||
|
color: UiColors.border,
|
||||||
|
width: 1.5,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
child: const Icon(
|
||||||
|
UiIcons.chevronLeft,
|
||||||
|
size: UiConstants.iconMd,
|
||||||
|
color: UiColors.iconPrimary,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const SizedBox(width: UiConstants.space3),
|
||||||
|
Expanded(
|
||||||
|
child: SizedBox(
|
||||||
|
height: 52,
|
||||||
|
child: UiButton.primary(
|
||||||
|
text: submitLabel,
|
||||||
|
onPressed: onSubmit,
|
||||||
|
isLoading: isLoading,
|
||||||
|
size: UiButtonSize.large,
|
||||||
|
fullWidth: true,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'review_order_info_row.dart';
|
||||||
|
import 'review_order_section_card.dart';
|
||||||
|
|
||||||
|
/// Displays the "Basics" section card showing order name, hub, and
|
||||||
|
/// shift contact information.
|
||||||
|
class ReviewOrderBasicsCard extends StatelessWidget {
|
||||||
|
const ReviewOrderBasicsCard({
|
||||||
|
required this.orderName,
|
||||||
|
required this.hubName,
|
||||||
|
required this.shiftContactName,
|
||||||
|
this.onEdit,
|
||||||
|
super.key,
|
||||||
|
});
|
||||||
|
|
||||||
|
final String orderName;
|
||||||
|
final String hubName;
|
||||||
|
final String shiftContactName;
|
||||||
|
final VoidCallback? onEdit;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return ReviewOrderSectionCard(
|
||||||
|
title: 'Basics',
|
||||||
|
onEdit: onEdit,
|
||||||
|
children: <Widget>[
|
||||||
|
ReviewOrderInfoRow(label: 'Order Name', value: orderName),
|
||||||
|
ReviewOrderInfoRow(label: 'Hub', value: hubName),
|
||||||
|
ReviewOrderInfoRow(label: 'Shift Contact', value: shiftContactName),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
import 'package:design_system/design_system.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
/// Displays the "Review & Submit" title and subtitle at the top of the
|
||||||
|
/// review order page.
|
||||||
|
class ReviewOrderHeader extends StatelessWidget {
|
||||||
|
const ReviewOrderHeader({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Padding(
|
||||||
|
padding: const EdgeInsets.only(
|
||||||
|
left: UiConstants.space6,
|
||||||
|
right: UiConstants.space6,
|
||||||
|
top: UiConstants.space4,
|
||||||
|
),
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: <Widget>[
|
||||||
|
Text(
|
||||||
|
'Review & Submit',
|
||||||
|
style: UiTypography.headline2m,
|
||||||
|
),
|
||||||
|
const SizedBox(height: UiConstants.space1),
|
||||||
|
Text(
|
||||||
|
'Confirm details before posting',
|
||||||
|
style: UiTypography.body2r.textSecondary,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
import 'package:design_system/design_system.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
/// A single key-value row used inside review section cards.
|
||||||
|
///
|
||||||
|
/// Displays a label on the left and a value on the right in a
|
||||||
|
/// space-between layout.
|
||||||
|
class ReviewOrderInfoRow extends StatelessWidget {
|
||||||
|
const ReviewOrderInfoRow({
|
||||||
|
required this.label,
|
||||||
|
required this.value,
|
||||||
|
super.key,
|
||||||
|
});
|
||||||
|
|
||||||
|
final String label;
|
||||||
|
final String value;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
children: <Widget>[
|
||||||
|
Flexible(
|
||||||
|
child: Text(
|
||||||
|
label,
|
||||||
|
style: UiTypography.body3r.textSecondary,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const SizedBox(width: UiConstants.space3),
|
||||||
|
Flexible(
|
||||||
|
child: Text(
|
||||||
|
value,
|
||||||
|
style: UiTypography.body3m,
|
||||||
|
textAlign: TextAlign.end,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,102 @@
|
|||||||
|
import 'package:design_system/design_system.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'review_order_info_row.dart';
|
||||||
|
|
||||||
|
/// Displays a summary of all positions with a divider and total row.
|
||||||
|
///
|
||||||
|
/// Each position shows the role name and "N workers . $X/hr".
|
||||||
|
/// A divider separates the individual positions from the total.
|
||||||
|
class ReviewOrderPositionsCard extends StatelessWidget {
|
||||||
|
const ReviewOrderPositionsCard({
|
||||||
|
required this.positions,
|
||||||
|
required this.totalWorkers,
|
||||||
|
required this.totalCostPerHour,
|
||||||
|
this.onEdit,
|
||||||
|
super.key,
|
||||||
|
});
|
||||||
|
|
||||||
|
final List<ReviewPositionItem> positions;
|
||||||
|
final int totalWorkers;
|
||||||
|
final double totalCostPerHour;
|
||||||
|
final VoidCallback? onEdit;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: UiColors.white,
|
||||||
|
borderRadius: UiConstants.radiusXl,
|
||||||
|
border: Border.all(color: UiColors.border),
|
||||||
|
),
|
||||||
|
padding: const EdgeInsets.all(UiConstants.space4),
|
||||||
|
child: Column(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: <Widget>[
|
||||||
|
Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
children: <Widget>[
|
||||||
|
Text(
|
||||||
|
'POSITIONS',
|
||||||
|
style: UiTypography.titleUppercase4b.textSecondary,
|
||||||
|
),
|
||||||
|
if (onEdit != null)
|
||||||
|
GestureDetector(
|
||||||
|
onTap: onEdit,
|
||||||
|
child: Text(
|
||||||
|
'Edit',
|
||||||
|
style: UiTypography.body3m.primary,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
...positions.map(
|
||||||
|
(ReviewPositionItem position) => Padding(
|
||||||
|
padding: const EdgeInsets.only(top: UiConstants.space3),
|
||||||
|
child: ReviewOrderInfoRow(
|
||||||
|
label: position.roleName,
|
||||||
|
value:
|
||||||
|
'${position.workerCount} workers \u00B7 \$${position.costPerHour.toStringAsFixed(0)}/hr',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Padding(
|
||||||
|
padding: const EdgeInsets.only(top: UiConstants.space3),
|
||||||
|
child: Container(
|
||||||
|
height: 1,
|
||||||
|
color: UiColors.bgSecondary,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Padding(
|
||||||
|
padding: const EdgeInsets.only(top: UiConstants.space3),
|
||||||
|
child: Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
children: <Widget>[
|
||||||
|
Text(
|
||||||
|
'Total',
|
||||||
|
style: UiTypography.body3m,
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
'$totalWorkers workers \u00B7 \$${totalCostPerHour.toStringAsFixed(0)}/hr',
|
||||||
|
style: UiTypography.body3b.primary,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// A single position item for the positions card.
|
||||||
|
class ReviewPositionItem {
|
||||||
|
const ReviewPositionItem({
|
||||||
|
required this.roleName,
|
||||||
|
required this.workerCount,
|
||||||
|
required this.costPerHour,
|
||||||
|
});
|
||||||
|
|
||||||
|
final String roleName;
|
||||||
|
final int workerCount;
|
||||||
|
final double costPerHour;
|
||||||
|
}
|
||||||
@@ -0,0 +1,59 @@
|
|||||||
|
import 'package:design_system/design_system.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
/// A card that groups related review information with a section header.
|
||||||
|
///
|
||||||
|
/// Displays an uppercase section title with an optional "Edit" action
|
||||||
|
/// and a list of child rows.
|
||||||
|
class ReviewOrderSectionCard extends StatelessWidget {
|
||||||
|
const ReviewOrderSectionCard({
|
||||||
|
required this.title,
|
||||||
|
required this.children,
|
||||||
|
this.onEdit,
|
||||||
|
super.key,
|
||||||
|
});
|
||||||
|
|
||||||
|
final String title;
|
||||||
|
final List<Widget> children;
|
||||||
|
final VoidCallback? onEdit;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: UiColors.white,
|
||||||
|
borderRadius: UiConstants.radiusXl,
|
||||||
|
border: Border.all(color: UiColors.border),
|
||||||
|
),
|
||||||
|
padding: const EdgeInsets.all(UiConstants.space4),
|
||||||
|
child: Column(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: <Widget>[
|
||||||
|
Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
children: <Widget>[
|
||||||
|
Text(
|
||||||
|
title.toUpperCase(),
|
||||||
|
style: UiTypography.titleUppercase4b.textSecondary,
|
||||||
|
),
|
||||||
|
if (onEdit != null)
|
||||||
|
GestureDetector(
|
||||||
|
onTap: onEdit,
|
||||||
|
child: Text(
|
||||||
|
'Edit',
|
||||||
|
style: UiTypography.body3m.primary,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
...children.map(
|
||||||
|
(Widget child) => Padding(
|
||||||
|
padding: const EdgeInsets.only(top: UiConstants.space3),
|
||||||
|
child: child,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
import 'package:design_system/design_system.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
/// A highlighted banner displaying the estimated total cost.
|
||||||
|
///
|
||||||
|
/// Uses the primary inverse background color with a bold price display.
|
||||||
|
class ReviewOrderTotalBanner extends StatelessWidget {
|
||||||
|
const ReviewOrderTotalBanner({
|
||||||
|
required this.totalAmount,
|
||||||
|
super.key,
|
||||||
|
});
|
||||||
|
|
||||||
|
final double totalAmount;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Container(
|
||||||
|
padding: const EdgeInsets.symmetric(
|
||||||
|
horizontal: UiConstants.space4,
|
||||||
|
vertical: UiConstants.space4,
|
||||||
|
),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: UiColors.primaryInverse,
|
||||||
|
borderRadius: UiConstants.radiusLg,
|
||||||
|
),
|
||||||
|
child: Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
children: <Widget>[
|
||||||
|
Text(
|
||||||
|
'Estimated Total',
|
||||||
|
style: UiTypography.body2m,
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
'\$${totalAmount.toStringAsFixed(2)}',
|
||||||
|
style: UiTypography.headline3b.primary,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,114 @@
|
|||||||
|
import 'package:design_system/design_system.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'review_order_action_bar.dart';
|
||||||
|
import 'review_order_basics_card.dart';
|
||||||
|
import 'review_order_header.dart';
|
||||||
|
import 'review_order_positions_card.dart';
|
||||||
|
import 'review_order_total_banner.dart';
|
||||||
|
|
||||||
|
/// The main review order view that displays a summary of the order
|
||||||
|
/// before submission.
|
||||||
|
///
|
||||||
|
/// This is a "dumb" widget that receives all data via constructor parameters
|
||||||
|
/// and exposes callbacks for user interactions. It does NOT interact with
|
||||||
|
/// any BLoC directly.
|
||||||
|
///
|
||||||
|
/// The [scheduleSection] widget is injected to allow different schedule
|
||||||
|
/// layouts per order type (one-time, recurring, permanent).
|
||||||
|
class ReviewOrderView extends StatelessWidget {
|
||||||
|
const ReviewOrderView({
|
||||||
|
required this.orderName,
|
||||||
|
required this.hubName,
|
||||||
|
required this.shiftContactName,
|
||||||
|
required this.scheduleSection,
|
||||||
|
required this.positions,
|
||||||
|
required this.totalWorkers,
|
||||||
|
required this.totalCostPerHour,
|
||||||
|
required this.estimatedTotal,
|
||||||
|
required this.onBack,
|
||||||
|
required this.onSubmit,
|
||||||
|
this.showEditButtons = false,
|
||||||
|
this.onEditBasics,
|
||||||
|
this.onEditSchedule,
|
||||||
|
this.onEditPositions,
|
||||||
|
this.submitLabel = 'Post Order',
|
||||||
|
this.isLoading = false,
|
||||||
|
super.key,
|
||||||
|
});
|
||||||
|
|
||||||
|
final String orderName;
|
||||||
|
final String hubName;
|
||||||
|
final String shiftContactName;
|
||||||
|
final Widget scheduleSection;
|
||||||
|
final List<ReviewPositionItem> positions;
|
||||||
|
final int totalWorkers;
|
||||||
|
final double totalCostPerHour;
|
||||||
|
final double estimatedTotal;
|
||||||
|
final VoidCallback onBack;
|
||||||
|
final VoidCallback? onSubmit;
|
||||||
|
final bool showEditButtons;
|
||||||
|
final VoidCallback? onEditBasics;
|
||||||
|
final VoidCallback? onEditSchedule;
|
||||||
|
final VoidCallback? onEditPositions;
|
||||||
|
final String submitLabel;
|
||||||
|
final bool isLoading;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Scaffold(
|
||||||
|
backgroundColor: UiColors.bgMenu,
|
||||||
|
appBar: UiAppBar(
|
||||||
|
showBackButton: true,
|
||||||
|
onLeadingPressed: onBack,
|
||||||
|
),
|
||||||
|
body: Column(
|
||||||
|
children: <Widget>[
|
||||||
|
Expanded(
|
||||||
|
child: SingleChildScrollView(
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: <Widget>[
|
||||||
|
const ReviewOrderHeader(),
|
||||||
|
Padding(
|
||||||
|
padding: const EdgeInsets.symmetric(
|
||||||
|
horizontal: UiConstants.space6,
|
||||||
|
),
|
||||||
|
child: Column(
|
||||||
|
children: <Widget>[
|
||||||
|
const SizedBox(height: UiConstants.space4),
|
||||||
|
ReviewOrderBasicsCard(
|
||||||
|
orderName: orderName,
|
||||||
|
hubName: hubName,
|
||||||
|
shiftContactName: shiftContactName,
|
||||||
|
onEdit: showEditButtons ? onEditBasics : null,
|
||||||
|
),
|
||||||
|
const SizedBox(height: UiConstants.space3),
|
||||||
|
scheduleSection,
|
||||||
|
const SizedBox(height: UiConstants.space3),
|
||||||
|
ReviewOrderPositionsCard(
|
||||||
|
positions: positions,
|
||||||
|
totalWorkers: totalWorkers,
|
||||||
|
totalCostPerHour: totalCostPerHour,
|
||||||
|
onEdit: showEditButtons ? onEditPositions : null,
|
||||||
|
),
|
||||||
|
const SizedBox(height: UiConstants.space3),
|
||||||
|
ReviewOrderTotalBanner(totalAmount: estimatedTotal),
|
||||||
|
const SizedBox(height: UiConstants.space4),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
ReviewOrderActionBar(
|
||||||
|
onBack: onBack,
|
||||||
|
onSubmit: onSubmit,
|
||||||
|
submitLabel: submitLabel,
|
||||||
|
isLoading: isLoading,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -27,7 +27,7 @@ class ViewOrdersModule extends Module {
|
|||||||
i.add(GetAcceptedApplicationsForDayUseCase.new);
|
i.add(GetAcceptedApplicationsForDayUseCase.new);
|
||||||
|
|
||||||
// BLoCs
|
// BLoCs
|
||||||
i.addSingleton(ViewOrdersCubit.new);
|
i.addLazySingleton(ViewOrdersCubit.new);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ class StaffHomeModule extends Module {
|
|||||||
);
|
);
|
||||||
|
|
||||||
// Presentation layer - Cubits
|
// Presentation layer - Cubits
|
||||||
i.addSingleton(
|
i.addLazySingleton(
|
||||||
() => HomeCubit(
|
() => HomeCubit(
|
||||||
repository: i.get<HomeRepository>(),
|
repository: i.get<HomeRepository>(),
|
||||||
getProfileCompletion: i.get<GetProfileCompletionUseCase>(),
|
getProfileCompletion: i.get<GetProfileCompletionUseCase>(),
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ class StaffProfileModule extends Module {
|
|||||||
|
|
||||||
// Presentation layer - Cubit as singleton to avoid recreation
|
// Presentation layer - Cubit as singleton to avoid recreation
|
||||||
// BlocProvider will use this same instance, preventing state emission after close
|
// BlocProvider will use this same instance, preventing state emission after close
|
||||||
i.addSingleton<ProfileCubit>(
|
i.addLazySingleton<ProfileCubit>(
|
||||||
() => ProfileCubit(
|
() => ProfileCubit(
|
||||||
i.get<GetStaffProfileUseCase>(),
|
i.get<GetStaffProfileUseCase>(),
|
||||||
i.get<SignOutStaffUseCase>(),
|
i.get<SignOutStaffUseCase>(),
|
||||||
|
|||||||
@@ -17,17 +17,17 @@ class FaqsModule extends Module {
|
|||||||
@override
|
@override
|
||||||
void binds(Injector i) {
|
void binds(Injector i) {
|
||||||
// Repository
|
// Repository
|
||||||
i.addSingleton<FaqsRepositoryInterface>(
|
i.addLazySingleton<FaqsRepositoryInterface>(
|
||||||
() => FaqsRepositoryImpl(),
|
() => FaqsRepositoryImpl(),
|
||||||
);
|
);
|
||||||
|
|
||||||
// Use Cases
|
// Use Cases
|
||||||
i.addSingleton(
|
i.addLazySingleton(
|
||||||
() => GetFaqsUseCase(
|
() => GetFaqsUseCase(
|
||||||
i<FaqsRepositoryInterface>(),
|
i<FaqsRepositoryInterface>(),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
i.addSingleton(
|
i.addLazySingleton(
|
||||||
() => SearchFaqsUseCase(
|
() => SearchFaqsUseCase(
|
||||||
i<FaqsRepositoryInterface>(),
|
i<FaqsRepositoryInterface>(),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -25,29 +25,29 @@ class PrivacySecurityModule extends Module {
|
|||||||
@override
|
@override
|
||||||
void binds(Injector i) {
|
void binds(Injector i) {
|
||||||
// Repository
|
// Repository
|
||||||
i.addSingleton<PrivacySettingsRepositoryInterface>(
|
i.addLazySingleton<PrivacySettingsRepositoryInterface>(
|
||||||
() => PrivacySettingsRepositoryImpl(
|
() => PrivacySettingsRepositoryImpl(
|
||||||
Modular.get<DataConnectService>(),
|
Modular.get<DataConnectService>(),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
// Use Cases
|
// Use Cases
|
||||||
i.addSingleton(
|
i.addLazySingleton(
|
||||||
() => GetProfileVisibilityUseCase(
|
() => GetProfileVisibilityUseCase(
|
||||||
i<PrivacySettingsRepositoryInterface>(),
|
i<PrivacySettingsRepositoryInterface>(),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
i.addSingleton(
|
i.addLazySingleton(
|
||||||
() => UpdateProfileVisibilityUseCase(
|
() => UpdateProfileVisibilityUseCase(
|
||||||
i<PrivacySettingsRepositoryInterface>(),
|
i<PrivacySettingsRepositoryInterface>(),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
i.addSingleton(
|
i.addLazySingleton(
|
||||||
() => GetTermsUseCase(
|
() => GetTermsUseCase(
|
||||||
i<PrivacySettingsRepositoryInterface>(),
|
i<PrivacySettingsRepositoryInterface>(),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
i.addSingleton(
|
i.addLazySingleton(
|
||||||
() => GetPrivacyPolicyUseCase(
|
() => GetPrivacyPolicyUseCase(
|
||||||
i<PrivacySettingsRepositoryInterface>(),
|
i<PrivacySettingsRepositoryInterface>(),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -26,12 +26,12 @@ class StaffMainModule extends Module {
|
|||||||
@override
|
@override
|
||||||
void binds(Injector i) {
|
void binds(Injector i) {
|
||||||
// Register the StaffConnectorRepository from data_connect
|
// Register the StaffConnectorRepository from data_connect
|
||||||
i.addSingleton<StaffConnectorRepository>(
|
i.addLazySingleton<StaffConnectorRepository>(
|
||||||
StaffConnectorRepositoryImpl.new,
|
StaffConnectorRepositoryImpl.new,
|
||||||
);
|
);
|
||||||
|
|
||||||
// Register the use case from data_connect
|
// Register the use case from data_connect
|
||||||
i.addSingleton(
|
i.addLazySingleton(
|
||||||
() => GetProfileCompletionUseCase(
|
() => GetProfileCompletionUseCase(
|
||||||
repository: i.get<StaffConnectorRepository>(),
|
repository: i.get<StaffConnectorRepository>(),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ client-app-android-apk-build-script: &client-app-android-apk-build-script
|
|||||||
dart pub global activate melos
|
dart pub global activate melos
|
||||||
export PATH="$PATH":"$HOME/.pub-cache/bin"
|
export PATH="$PATH":"$HOME/.pub-cache/bin"
|
||||||
make mobile-install
|
make mobile-install
|
||||||
make mobile-client-build PLATFORM=apk MODE=release
|
make mobile-client-build PLATFORM=apk MODE=release ENV=$ENV
|
||||||
|
|
||||||
client-app-ios-build-script: &client-app-ios-build-script
|
client-app-ios-build-script: &client-app-ios-build-script
|
||||||
name: 👷 🍎 Build Client App (iOS)
|
name: 👷 🍎 Build Client App (iOS)
|
||||||
@@ -17,7 +17,7 @@ client-app-ios-build-script: &client-app-ios-build-script
|
|||||||
dart pub global activate melos
|
dart pub global activate melos
|
||||||
export PATH="$PATH":"$HOME/.pub-cache/bin"
|
export PATH="$PATH":"$HOME/.pub-cache/bin"
|
||||||
make mobile-install
|
make mobile-install
|
||||||
make mobile-client-build PLATFORM=ios MODE=release
|
make mobile-client-build PLATFORM=ios MODE=release ENV=$ENV
|
||||||
|
|
||||||
staff-app-android-apk-build-script: &staff-app-android-apk-build-script
|
staff-app-android-apk-build-script: &staff-app-android-apk-build-script
|
||||||
name: 👷 🤖 Build Staff App APK (Android)
|
name: 👷 🤖 Build Staff App APK (Android)
|
||||||
@@ -25,7 +25,7 @@ staff-app-android-apk-build-script: &staff-app-android-apk-build-script
|
|||||||
dart pub global activate melos
|
dart pub global activate melos
|
||||||
export PATH="$PATH":"$HOME/.pub-cache/bin"
|
export PATH="$PATH":"$HOME/.pub-cache/bin"
|
||||||
make mobile-install
|
make mobile-install
|
||||||
make mobile-staff-build PLATFORM=apk MODE=release
|
make mobile-staff-build PLATFORM=apk MODE=release ENV=$ENV
|
||||||
|
|
||||||
staff-app-ios-build-script: &staff-app-ios-build-script
|
staff-app-ios-build-script: &staff-app-ios-build-script
|
||||||
name: 👷 🍎 Build Staff App (iOS)
|
name: 👷 🍎 Build Staff App (iOS)
|
||||||
@@ -33,17 +33,19 @@ staff-app-ios-build-script: &staff-app-ios-build-script
|
|||||||
dart pub global activate melos
|
dart pub global activate melos
|
||||||
export PATH="$PATH":"$HOME/.pub-cache/bin"
|
export PATH="$PATH":"$HOME/.pub-cache/bin"
|
||||||
make mobile-install
|
make mobile-install
|
||||||
make mobile-staff-build PLATFORM=ios MODE=release
|
make mobile-staff-build PLATFORM=ios MODE=release ENV=$ENV
|
||||||
|
|
||||||
# Reusable script for distributing Android to Firebase
|
# Reusable script for distributing Android to Firebase
|
||||||
distribute-android-script: &distribute-android-script
|
distribute-android-script: &distribute-android-script
|
||||||
name: 🚛 🤖 Distribute Android to Firebase App Distribution
|
name: 🚀 🤖 Distribute Android to Firebase App Distribution
|
||||||
script: |
|
script: |
|
||||||
# Distribute Android APK
|
# Distribute Android APK
|
||||||
# Note: Using wildcards to catch app-release.apk
|
# With flavors the APK is at: build/app/outputs/apk/<flavor>/release/app-<flavor>-release.apk
|
||||||
APP_PATH=$(find apps/mobile/apps -name "app-release.apk" | head -n 1)
|
APP_PATH=$(find apps/mobile/apps -name "app-${ENV}-release.apk" | head -n 1)
|
||||||
if [ -z "$APP_PATH" ]; then
|
if [ -z "$APP_PATH" ]; then
|
||||||
echo "No APK found!"
|
echo "❌ No APK found matching app-${ENV}-release.apk — was --flavor ${ENV} applied during build?"
|
||||||
|
echo "Listing all APKs found:"
|
||||||
|
find apps/mobile/apps -name "*.apk" -type f
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
echo "Found APK at: $APP_PATH"
|
echo "Found APK at: $APP_PATH"
|
||||||
@@ -56,7 +58,7 @@ distribute-android-script: &distribute-android-script
|
|||||||
|
|
||||||
# Reusable script for distributing iOS to Firebase
|
# Reusable script for distributing iOS to Firebase
|
||||||
distribute-ios-script: &distribute-ios-script
|
distribute-ios-script: &distribute-ios-script
|
||||||
name: 🚛🍎 Distribute iOS to Firebase App Distribution
|
name: 🚀 🍎 Distribute iOS to Firebase App Distribution
|
||||||
script: |
|
script: |
|
||||||
# Distribute iOS
|
# Distribute iOS
|
||||||
IPA_PATH=$(find apps/mobile/apps -name "*.ipa" | head -n 1)
|
IPA_PATH=$(find apps/mobile/apps -name "*.ipa" | head -n 1)
|
||||||
@@ -74,7 +76,7 @@ distribute-ios-script: &distribute-ios-script
|
|||||||
|
|
||||||
# Reusable script for web quality checks
|
# Reusable script for web quality checks
|
||||||
web-quality-script: &web-quality-script
|
web-quality-script: &web-quality-script
|
||||||
name: ✅ Web Quality Checks
|
name: 🌐 ✅ Web Quality Checks
|
||||||
script: |
|
script: |
|
||||||
npm install -g pnpm
|
npm install -g pnpm
|
||||||
cd apps/web
|
cd apps/web
|
||||||
@@ -85,7 +87,7 @@ web-quality-script: &web-quality-script
|
|||||||
|
|
||||||
# Reusable script for mobile quality checks
|
# Reusable script for mobile quality checks
|
||||||
mobile-quality-script: &mobile-quality-script
|
mobile-quality-script: &mobile-quality-script
|
||||||
name: ✅ Mobile Quality Checks
|
name: 📱 ✅ Mobile Quality Checks
|
||||||
script: |
|
script: |
|
||||||
dart pub global activate melos
|
dart pub global activate melos
|
||||||
export PATH="$PATH":"$HOME/.pub-cache/bin"
|
export PATH="$PATH":"$HOME/.pub-cache/bin"
|
||||||
@@ -98,7 +100,7 @@ workflows:
|
|||||||
# Quality workflow (Web + Mobile)
|
# Quality workflow (Web + Mobile)
|
||||||
# =================================================================================
|
# =================================================================================
|
||||||
quality-gates-dev:
|
quality-gates-dev:
|
||||||
name: ✅ Quality Gates (Dev)
|
name: 🛡️ Quality Gates (Dev)
|
||||||
working_directory: .
|
working_directory: .
|
||||||
instance_type: mac_mini_m2
|
instance_type: mac_mini_m2
|
||||||
max_build_duration: 60
|
max_build_duration: 60
|
||||||
@@ -129,7 +131,7 @@ workflows:
|
|||||||
artifacts:
|
artifacts:
|
||||||
- apps/mobile/apps/client/build/app/outputs/flutter-apk/*.apk
|
- apps/mobile/apps/client/build/app/outputs/flutter-apk/*.apk
|
||||||
- apps/mobile/apps/client/build/ios/ipa/*.ipa
|
- apps/mobile/apps/client/build/ios/ipa/*.ipa
|
||||||
- apps/mobile/apps/client/build/app/outputs/bundle/release/app-release.aab
|
- apps/mobile/apps/client/build/app/outputs/bundle/**/*.aab
|
||||||
- /tmp/xcodebuild_logs/*.log
|
- /tmp/xcodebuild_logs/*.log
|
||||||
- flutter_drive.log
|
- flutter_drive.log
|
||||||
cache:
|
cache:
|
||||||
@@ -153,7 +155,7 @@ workflows:
|
|||||||
artifacts:
|
artifacts:
|
||||||
- apps/mobile/apps/staff/build/app/outputs/flutter-apk/*.apk
|
- apps/mobile/apps/staff/build/app/outputs/flutter-apk/*.apk
|
||||||
- apps/mobile/apps/staff/build/ios/ipa/*.ipa
|
- apps/mobile/apps/staff/build/ios/ipa/*.ipa
|
||||||
- apps/mobile/apps/staff/build/app/outputs/bundle/release/app-release.aab
|
- apps/mobile/apps/staff/build/app/outputs/bundle/**/*.aab
|
||||||
- /tmp/xcodebuild_logs/*.log
|
- /tmp/xcodebuild_logs/*.log
|
||||||
- flutter_drive.log
|
- flutter_drive.log
|
||||||
cache:
|
cache:
|
||||||
@@ -163,11 +165,11 @@ workflows:
|
|||||||
- $FCI_BUILD_DIR/apps/mobile/apps/staff/.dart_tool
|
- $FCI_BUILD_DIR/apps/mobile/apps/staff/.dart_tool
|
||||||
|
|
||||||
# =================================================================================
|
# =================================================================================
|
||||||
# Client App Workflows - Android
|
# 💼 Client App Workflows - Android
|
||||||
# =================================================================================
|
# =================================================================================
|
||||||
client-app-dev-android:
|
client-app-dev-android:
|
||||||
<<: *client-app-base
|
<<: *client-app-base
|
||||||
name: 🚛 🤖 Client App Dev (Android App Distribution)
|
name: 🚚 🤖 Client App Dev (Android → Firebase App Distribution)
|
||||||
environment:
|
environment:
|
||||||
flutter: stable
|
flutter: stable
|
||||||
xcode: latest
|
xcode: latest
|
||||||
@@ -184,7 +186,7 @@ workflows:
|
|||||||
|
|
||||||
client-app-staging-android:
|
client-app-staging-android:
|
||||||
<<: *client-app-base
|
<<: *client-app-base
|
||||||
name: 🚛🤖 Client App Staging (Android App Distribution)
|
name: 🚚 🤖 Client App Staging (Android → Firebase App Distribution)
|
||||||
environment:
|
environment:
|
||||||
flutter: stable
|
flutter: stable
|
||||||
xcode: latest
|
xcode: latest
|
||||||
@@ -194,23 +196,19 @@ workflows:
|
|||||||
android_signing:
|
android_signing:
|
||||||
- keystore: KROW_CLIENT_STAGING
|
- keystore: KROW_CLIENT_STAGING
|
||||||
vars:
|
vars:
|
||||||
ENV: staging
|
ENV: stage
|
||||||
scripts:
|
scripts:
|
||||||
- *client-app-android-apk-build-script
|
- *client-app-android-apk-build-script
|
||||||
- *distribute-android-script
|
- *distribute-android-script
|
||||||
|
|
||||||
client-app-prod-android:
|
client-app-prod-android:
|
||||||
<<: *client-app-base
|
<<: *client-app-base
|
||||||
name: 🚛 🤖 Client App Prod (Android App Distribution)
|
name: 🚚 🤖 Client App Prod (Android → Firebase App Distribution)
|
||||||
environment:
|
environment:
|
||||||
groups:
|
groups:
|
||||||
- client_app_prod_credentials
|
- client_app_prod_credentials
|
||||||
android_signing:
|
android_signing:
|
||||||
- keystore: KROW_CLIENT_PROD
|
- keystore: KROW_CLIENT_PROD
|
||||||
keystore_environment_variable: CM_KEYSTORE_PATH_CLIENT
|
|
||||||
keystore_password_environment_variable: CM_KEYSTORE_PASSWORD_CLIENT
|
|
||||||
key_alias_environment_variable: CM_KEY_ALIAS_CLIENT
|
|
||||||
key_password_environment_variable: CM_KEY_PASSWORD_CLIENT
|
|
||||||
vars:
|
vars:
|
||||||
ENV: prod
|
ENV: prod
|
||||||
scripts:
|
scripts:
|
||||||
@@ -218,11 +216,11 @@ workflows:
|
|||||||
- *distribute-android-script
|
- *distribute-android-script
|
||||||
|
|
||||||
# =================================================================================
|
# =================================================================================
|
||||||
# Client App Workflows - iOS
|
# 💼 Client App Workflows - iOS
|
||||||
# =================================================================================
|
# =================================================================================
|
||||||
client-app-dev-ios:
|
client-app-dev-ios:
|
||||||
<<: *client-app-base
|
<<: *client-app-base
|
||||||
name: 🚛 🍎 Client App Dev (iOS App Distribution)
|
name: 🚚 🍎 Client App Dev (iOS → Firebase App Distribution)
|
||||||
environment:
|
environment:
|
||||||
groups:
|
groups:
|
||||||
- client_app_dev_credentials
|
- client_app_dev_credentials
|
||||||
@@ -234,19 +232,19 @@ workflows:
|
|||||||
|
|
||||||
client-app-staging-ios:
|
client-app-staging-ios:
|
||||||
<<: *client-app-base
|
<<: *client-app-base
|
||||||
name: 🚛 🍎 Client App Staging (iOS App Distribution)
|
name: 🚚 🍎 Client App Staging (iOS → Firebase App Distribution)
|
||||||
environment:
|
environment:
|
||||||
groups:
|
groups:
|
||||||
- client_app_staging_credentials
|
- client_app_staging_credentials
|
||||||
vars:
|
vars:
|
||||||
ENV: staging
|
ENV: stage
|
||||||
scripts:
|
scripts:
|
||||||
- *client-app-ios-build-script
|
- *client-app-ios-build-script
|
||||||
- *distribute-ios-script
|
- *distribute-ios-script
|
||||||
|
|
||||||
client-app-prod-ios:
|
client-app-prod-ios:
|
||||||
<<: *client-app-base
|
<<: *client-app-base
|
||||||
name: 🚛 🍎 Client App Prod (iOS App Distribution)
|
name: 🚚 🍎 Client App Prod (iOS → Firebase App Distribution)
|
||||||
environment:
|
environment:
|
||||||
groups:
|
groups:
|
||||||
- client_app_prod_credentials
|
- client_app_prod_credentials
|
||||||
@@ -257,11 +255,11 @@ workflows:
|
|||||||
- *distribute-ios-script
|
- *distribute-ios-script
|
||||||
|
|
||||||
# =================================================================================
|
# =================================================================================
|
||||||
# Staff App Workflows - Android
|
# 👨🍳 Staff App Workflows - Android
|
||||||
# =================================================================================
|
# =================================================================================
|
||||||
staff-app-dev-android:
|
staff-app-dev-android:
|
||||||
<<: *staff-app-base
|
<<: *staff-app-base
|
||||||
name: 🚛 🤖 👨🍳 Staff App Dev (Android App Distribution)
|
name: 🚚 🤖 👨🍳 Staff App Dev (Android → Firebase App Distribution)
|
||||||
environment:
|
environment:
|
||||||
flutter: stable
|
flutter: stable
|
||||||
xcode: latest
|
xcode: latest
|
||||||
@@ -278,7 +276,7 @@ workflows:
|
|||||||
|
|
||||||
staff-app-staging-android:
|
staff-app-staging-android:
|
||||||
<<: *staff-app-base
|
<<: *staff-app-base
|
||||||
name: 🚛 🤖 👨🍳 Staff App Staging (Android App Distribution)
|
name: 🚚 🤖 👨🍳 Staff App Staging (Android → Firebase App Distribution)
|
||||||
environment:
|
environment:
|
||||||
flutter: stable
|
flutter: stable
|
||||||
xcode: latest
|
xcode: latest
|
||||||
@@ -288,14 +286,14 @@ workflows:
|
|||||||
android_signing:
|
android_signing:
|
||||||
- keystore: KROW_STAFF_STAGING
|
- keystore: KROW_STAFF_STAGING
|
||||||
vars:
|
vars:
|
||||||
ENV: staging
|
ENV: stage
|
||||||
scripts:
|
scripts:
|
||||||
- *staff-app-android-apk-build-script
|
- *staff-app-android-apk-build-script
|
||||||
- *distribute-android-script
|
- *distribute-android-script
|
||||||
|
|
||||||
staff-app-prod-android:
|
staff-app-prod-android:
|
||||||
<<: *staff-app-base
|
<<: *staff-app-base
|
||||||
name: 🚛 🤖 👨🍳 Staff App Prod (Android App Distribution)
|
name: 🚚 🤖 👨🍳 Staff App Prod (Android → Firebase App Distribution)
|
||||||
environment:
|
environment:
|
||||||
flutter: stable
|
flutter: stable
|
||||||
xcode: latest
|
xcode: latest
|
||||||
@@ -311,11 +309,11 @@ workflows:
|
|||||||
- *distribute-android-script
|
- *distribute-android-script
|
||||||
|
|
||||||
# =================================================================================
|
# =================================================================================
|
||||||
# Staff App Workflows - iOS
|
# 👨🍳 Staff App Workflows - iOS
|
||||||
# =================================================================================
|
# =================================================================================
|
||||||
staff-app-dev-ios:
|
staff-app-dev-ios:
|
||||||
<<: *staff-app-base
|
<<: *staff-app-base
|
||||||
name: 🚛 🍎 👨🍳 Staff App Dev (iOS App Distribution)
|
name: 🚚 🍎 👨🍳 Staff App Dev (iOS → Firebase App Distribution)
|
||||||
environment:
|
environment:
|
||||||
groups:
|
groups:
|
||||||
- staff_app_dev_credentials
|
- staff_app_dev_credentials
|
||||||
@@ -327,19 +325,19 @@ workflows:
|
|||||||
|
|
||||||
staff-app-staging-ios:
|
staff-app-staging-ios:
|
||||||
<<: *staff-app-base
|
<<: *staff-app-base
|
||||||
name: 🚛 🍎 👨🍳 Staff App Staging (iOS App Distribution)
|
name: 🚚 🍎 👨🍳 Staff App Staging (iOS → Firebase App Distribution)
|
||||||
environment:
|
environment:
|
||||||
groups:
|
groups:
|
||||||
- staff_app_staging_credentials
|
- staff_app_staging_credentials
|
||||||
vars:
|
vars:
|
||||||
ENV: staging
|
ENV: stage
|
||||||
scripts:
|
scripts:
|
||||||
- *staff-app-ios-build-script
|
- *staff-app-ios-build-script
|
||||||
- *distribute-ios-script
|
- *distribute-ios-script
|
||||||
|
|
||||||
staff-app-prod-ios:
|
staff-app-prod-ios:
|
||||||
<<: *staff-app-base
|
<<: *staff-app-base
|
||||||
name: 🚛 🍎 👨🍳 Staff App Prod (iOS App Distribution)
|
name: 🚚 🍎 👨🍳 Staff App Prod (iOS → Firebase App Distribution)
|
||||||
environment:
|
environment:
|
||||||
groups:
|
groups:
|
||||||
- staff_app_prod_credentials
|
- staff_app_prod_credentials
|
||||||
@@ -348,4 +346,3 @@ workflows:
|
|||||||
scripts:
|
scripts:
|
||||||
- *staff-app-ios-build-script
|
- *staff-app-ios-build-script
|
||||||
- *distribute-ios-script
|
- *distribute-ios-script
|
||||||
|
|
||||||
|
|||||||
2778
docs/DESIGN/product-specification.md
Normal file
2778
docs/DESIGN/product-specification.md
Normal file
File diff suppressed because it is too large
Load Diff
@@ -8,6 +8,9 @@ MOBILE_DIR := apps/mobile
|
|||||||
# Find your device ID with: flutter devices
|
# Find your device ID with: flutter devices
|
||||||
DEVICE ?= android
|
DEVICE ?= android
|
||||||
|
|
||||||
|
# Environment (dev, stage, prod) — defaults to dev
|
||||||
|
ENV ?= dev
|
||||||
|
|
||||||
# --- General ---
|
# --- General ---
|
||||||
mobile-install: install-melos dataconnect-generate-sdk
|
mobile-install: install-melos dataconnect-generate-sdk
|
||||||
@echo "--> Bootstrapping mobile workspace (Melos)..."
|
@echo "--> Bootstrapping mobile workspace (Melos)..."
|
||||||
@@ -40,35 +43,35 @@ mobile-hot-restart:
|
|||||||
|
|
||||||
# --- Client App ---
|
# --- Client App ---
|
||||||
mobile-client-dev-android: dataconnect-generate-sdk
|
mobile-client-dev-android: dataconnect-generate-sdk
|
||||||
@echo "--> Running client app on Android (device: $(DEVICE))..."
|
@echo "--> Running client app on Android (device: $(DEVICE), env: $(ENV))..."
|
||||||
@cd $(MOBILE_DIR) && melos run start:client -- -d $(DEVICE) --dart-define-from-file=../../config.dev.json
|
@cd $(MOBILE_DIR) && melos run start:client -- -d $(DEVICE) --flavor $(ENV) --dart-define-from-file=../../config.$(ENV).json
|
||||||
|
|
||||||
mobile-client-build: dataconnect-generate-sdk
|
mobile-client-build: dataconnect-generate-sdk
|
||||||
@if [ -z "$(PLATFORM)" ]; then \
|
@if [ -z "$(PLATFORM)" ]; then \
|
||||||
echo "ERROR: PLATFORM is required (e.g. make mobile-client-build PLATFORM=apk)"; exit 1; \
|
echo "ERROR: PLATFORM is required (e.g. make mobile-client-build PLATFORM=apk)"; exit 1; \
|
||||||
fi
|
fi
|
||||||
$(eval MODE ?= release)
|
$(eval MODE ?= release)
|
||||||
@echo "--> Building client app for $(PLATFORM) in $(MODE) mode..."
|
@echo "--> Building client app for $(PLATFORM) in $(MODE) mode (env: $(ENV))..."
|
||||||
@cd $(MOBILE_DIR) && \
|
@cd $(MOBILE_DIR) && \
|
||||||
melos exec --scope="core_localization" -- "dart run slang" && \
|
melos run gen:l10n && \
|
||||||
melos exec --scope="core_localization" -- "dart run build_runner build --delete-conflicting-outputs" && \
|
melos run gen:build && \
|
||||||
melos exec --scope="krowwithus_client" -- "flutter build $(PLATFORM) --$(MODE) --dart-define-from-file=../../config.dev.json"
|
melos exec --scope="krowwithus_client" -- flutter build $(PLATFORM) --$(MODE) --flavor $(ENV) --dart-define-from-file=../../config.$(ENV).json
|
||||||
|
|
||||||
# --- Staff App ---
|
# --- Staff App ---
|
||||||
mobile-staff-dev-android: dataconnect-generate-sdk
|
mobile-staff-dev-android: dataconnect-generate-sdk
|
||||||
@echo "--> Running staff app on Android (device: $(DEVICE))..."
|
@echo "--> Running staff app on Android (device: $(DEVICE), env: $(ENV))..."
|
||||||
@cd $(MOBILE_DIR) && melos run start:staff -- -d $(DEVICE) --dart-define-from-file=../../config.dev.json
|
@cd $(MOBILE_DIR) && melos run start:staff -- -d $(DEVICE) --flavor $(ENV) --dart-define-from-file=../../config.$(ENV).json
|
||||||
|
|
||||||
mobile-staff-build: dataconnect-generate-sdk
|
mobile-staff-build: dataconnect-generate-sdk
|
||||||
@if [ -z "$(PLATFORM)" ]; then \
|
@if [ -z "$(PLATFORM)" ]; then \
|
||||||
echo "ERROR: PLATFORM is required (e.g. make mobile-staff-build PLATFORM=apk)"; exit 1; \
|
echo "ERROR: PLATFORM is required (e.g. make mobile-staff-build PLATFORM=apk)"; exit 1; \
|
||||||
fi
|
fi
|
||||||
$(eval MODE ?= release)
|
$(eval MODE ?= release)
|
||||||
@echo "--> Building staff app for $(PLATFORM) in $(MODE) mode..."
|
@echo "--> Building staff app for $(PLATFORM) in $(MODE) mode (env: $(ENV))..."
|
||||||
@cd $(MOBILE_DIR) && \
|
@cd $(MOBILE_DIR) && \
|
||||||
melos exec --scope="core_localization" -- "dart run slang" && \
|
melos run gen:l10n && \
|
||||||
melos exec --scope="core_localization" -- "dart run build_runner build --delete-conflicting-outputs" && \
|
melos run gen:build && \
|
||||||
melos exec --scope="krowwithus_staff" -- "flutter build $(PLATFORM) --$(MODE) --dart-define-from-file=../../config.dev.json"
|
melos exec --scope="krowwithus_staff" -- flutter build $(PLATFORM) --$(MODE) --flavor $(ENV) --dart-define-from-file=../../config.$(ENV).json
|
||||||
|
|
||||||
# --- E2E (Maestro) ---
|
# --- E2E (Maestro) ---
|
||||||
# Set env before running: TEST_CLIENT_EMAIL, TEST_CLIENT_PASSWORD, TEST_CLIENT_COMPANY, TEST_STAFF_PHONE, TEST_STAFF_OTP, TEST_STAFF_SIGNUP_PHONE
|
# Set env before running: TEST_CLIENT_EMAIL, TEST_CLIENT_PASSWORD, TEST_CLIENT_COMPANY, TEST_STAFF_PHONE, TEST_STAFF_OTP, TEST_STAFF_SIGNUP_PHONE
|
||||||
|
|||||||
Reference in New Issue
Block a user