From 6568dc70c8b313a59585f3da5549c4b0eb090d01 Mon Sep 17 00:00:00 2001 From: Vaibhav Surve Date: Fri, 31 Oct 2025 15:22:05 +0530 Subject: [PATCH] refactor: Update package and bundle identifiers to reflect new naming convention --- android/app/build.gradle | 2 +- .../com/example/maxdash/MainActivity.kt | 2 +- ios/Runner.xcodeproj/project.pbxproj | 12 +- lib/view/dashboard/dashboard_screen.dart | 6 +- .../employees/employee_detail_screen.dart | 442 ++++++++++++------ lib/view/layouts/user_profile_right_bar.dart | 14 + lib/view/support/support_screen.dart | 4 +- linux/CMakeLists.txt | 2 +- macos/Runner.xcodeproj/project.pbxproj | 6 +- macos/Runner/Configs/AppInfo.xcconfig | 2 +- 10 files changed, 323 insertions(+), 169 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index 7cb551f..23b8b74 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -15,7 +15,7 @@ if (keystorePropertiesFile.exists()) { android { // Define the namespace for your Android application - namespace = "com.onfieldwork.marcoaiot" + namespace = "com.marcoonfieldwork.aiot" // Set the compile SDK version based on Flutter's configuration compileSdk = flutter.compileSdkVersion // Set the NDK version based on Flutter's configuration diff --git a/android/app/src/main/kotlin/com/example/maxdash/MainActivity.kt b/android/app/src/main/kotlin/com/example/maxdash/MainActivity.kt index fcacfad..072f2a5 100644 --- a/android/app/src/main/kotlin/com/example/maxdash/MainActivity.kt +++ b/android/app/src/main/kotlin/com/example/maxdash/MainActivity.kt @@ -1,4 +1,4 @@ -package com.onfieldwork.marcoaiot +package com.marcoonfieldwork.aiot import io.flutter.embedding.android.FlutterActivity diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 065543e..aec584f 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -368,7 +368,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.onfieldwork.marcoaiot; + PRODUCT_BUNDLE_IDENTIFIER = com.marcoonfieldwork.aiot; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; @@ -384,7 +384,7 @@ CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.onfieldwork.marcoaiot.RunnerTests; + PRODUCT_BUNDLE_IDENTIFIER = com.marcoonfieldwork.aiot.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; @@ -401,7 +401,7 @@ CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.onfieldwork.marcoaiot.RunnerTests; + PRODUCT_BUNDLE_IDENTIFIER = com.marcoonfieldwork.aiot.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; @@ -416,7 +416,7 @@ CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.onfieldwork.marcoaiot.RunnerTests; + PRODUCT_BUNDLE_IDENTIFIER = com.marcoonfieldwork.aiot.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; @@ -547,7 +547,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.onfieldwork.marcoaiot; + PRODUCT_BUNDLE_IDENTIFIER = com.marcoonfieldwork.aiot; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; @@ -569,7 +569,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.onfieldwork.marcoaiot; + PRODUCT_BUNDLE_IDENTIFIER = com.marcoonfieldwork.aiot; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; diff --git a/lib/view/dashboard/dashboard_screen.dart b/lib/view/dashboard/dashboard_screen.dart index cf5103f..5cb2e71 100644 --- a/lib/view/dashboard/dashboard_screen.dart +++ b/lib/view/dashboard/dashboard_screen.dart @@ -12,7 +12,7 @@ import 'package:marco/helpers/widgets/my_text.dart'; import 'package:marco/helpers/widgets/dashbaord/attendance_overview_chart.dart'; import 'package:marco/helpers/widgets/dashbaord/expense_by_status_widget.dart'; import 'package:marco/view/layouts/layout.dart'; -import 'package:marco/helpers/widgets/dashbaord/expense_breakdown_chart.dart'; +// import 'package:marco/helpers/widgets/dashbaord/expense_breakdown_chart.dart'; class DashboardScreen extends StatefulWidget { const DashboardScreen({super.key}); @@ -61,8 +61,8 @@ class _DashboardScreenState extends State with UIMixin { ExpenseByStatusWidget(controller: dashboardController), MySpacing.height(24), - // Expense Type Report Chart - ExpenseTypeReportChart(), + // // Expense Type Report Chart + // ExpenseTypeReportChart(), ], ), ), diff --git a/lib/view/employees/employee_detail_screen.dart b/lib/view/employees/employee_detail_screen.dart index ef05c7f..d7d3217 100644 --- a/lib/view/employees/employee_detail_screen.dart +++ b/lib/view/employees/employee_detail_screen.dart @@ -11,7 +11,6 @@ import 'package:marco/helpers/widgets/my_refresh_indicator.dart'; import 'package:marco/model/employees/add_employee_bottom_sheet.dart'; import 'package:marco/helpers/utils/mixins/ui_mixin.dart'; - class EmployeeDetailPage extends StatefulWidget { final String employeeId; final bool fromProfile; @@ -30,7 +29,6 @@ class _EmployeeDetailPageState extends State with UIMixin { final EmployeesScreenController controller = Get.put(EmployeesScreenController()); - @override void initState() { super.initState(); @@ -61,77 +59,58 @@ class _EmployeeDetailPageState extends State with UIMixin { } } - Widget _buildLabelValueRow(String label, String value, - {bool isMultiLine = false}) { - final lowerLabel = label.toLowerCase(); - final isEmail = lowerLabel == 'email'; - final isPhone = - lowerLabel == 'phone number' || lowerLabel == 'emergency phone number'; - - void handleTap() { - if (value == 'NA') return; - if (isEmail) { - LauncherUtils.launchEmail(value); - } else if (isPhone) { - LauncherUtils.launchPhone(value); - } - } - - void handleLongPress() { - if (value == 'NA') return; - LauncherUtils.copyToClipboard(value, typeLabel: label); - } - - final valueWidget = GestureDetector( - onTap: (isEmail || isPhone) ? handleTap : null, - onLongPress: (isEmail || isPhone) ? handleLongPress : null, - child: Text( - value, - style: TextStyle( - fontWeight: FontWeight.normal, - color: (isEmail || isPhone) ? contentTheme.primary : Colors.black54, - fontSize: 14, - decoration: (isEmail || isPhone) - ? TextDecoration.underline - : TextDecoration.none, - ), - ), - ); - - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - if (isMultiLine) ...[ - Text( - label, - style: const TextStyle( - fontWeight: FontWeight.bold, - color: Colors.black87, - fontSize: 14, + Widget _buildDetailRow({ + required IconData icon, + required String label, + required String value, + VoidCallback? onTap, + VoidCallback? onLongPress, + bool isActionable = false, + }) { + return Padding( + padding: const EdgeInsets.symmetric(vertical: 12), + child: InkWell( + onTap: isActionable && value != 'NA' ? onTap : null, + onLongPress: isActionable && value != 'NA' ? onLongPress : null, + borderRadius: BorderRadius.circular(5), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + padding: const EdgeInsets.all(8), + decoration: BoxDecoration( + color: contentTheme.primary.withOpacity(0.1), + borderRadius: BorderRadius.circular(5), + ), + child: Icon( + icon, + size: 20, + color: contentTheme.primary, + ), ), - ), - MySpacing.height(4), - valueWidget, - ] else - GestureDetector( - onTap: (isEmail || isPhone) ? handleTap : null, - onLongPress: (isEmail || isPhone) ? handleLongPress : null, - child: RichText( - text: TextSpan( - text: "$label: ", - style: const TextStyle( - fontWeight: FontWeight.bold, - color: Colors.black87, - fontSize: 14, - ), + MySpacing.width(16), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, children: [ - TextSpan( - text: value, + Text( + label, style: TextStyle( - fontWeight: FontWeight.normal, - color: - (isEmail || isPhone) ? Colors.indigo : Colors.black54, - decoration: (isEmail || isPhone) + fontSize: 12, + color: Colors.grey[600], + fontWeight: FontWeight.w500, + ), + ), + MySpacing.height(4), + Text( + value, + style: TextStyle( + fontSize: 15, + color: isActionable && value != 'NA' + ? contentTheme.primary + : Colors.black87, + fontWeight: FontWeight.w500, + decoration: isActionable && value != 'NA' ? TextDecoration.underline : TextDecoration.none, ), @@ -139,46 +118,53 @@ class _EmployeeDetailPageState extends State with UIMixin { ], ), ), - ), - MySpacing.height(10), - Divider(color: Colors.grey[300], height: 1), - MySpacing.height(10), - ], + if (isActionable && value != 'NA') + Icon( + Icons.chevron_right, + color: Colors.grey[400], + size: 20, + ), + ], + ), + ), ); } - Widget _buildInfoCard(employee) { + Widget _buildSectionCard({ + required String title, + required IconData titleIcon, + required List children, + }) { return Card( - elevation: 3, + elevation: 2, shadowColor: Colors.black12, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(5)), child: Padding( - padding: const EdgeInsets.fromLTRB(12, 16, 12, 16), + padding: const EdgeInsets.all(16), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - MySpacing.height(12), - _buildLabelValueRow('Email', _getDisplayValue(employee.email)), - _buildLabelValueRow( - 'Phone Number', _getDisplayValue(employee.phoneNumber)), - _buildLabelValueRow('Emergency Contact Person', - _getDisplayValue(employee.emergencyContactPerson)), - _buildLabelValueRow('Emergency Phone Number', - _getDisplayValue(employee.emergencyPhoneNumber)), - _buildLabelValueRow('Gender', _getDisplayValue(employee.gender)), - _buildLabelValueRow('Birth Date', _formatDate(employee.birthDate)), - _buildLabelValueRow( - 'Joining Date', _formatDate(employee.joiningDate)), - _buildLabelValueRow( - 'Current Address', - _getDisplayValue(employee.currentAddress), - isMultiLine: true, - ), - _buildLabelValueRow( - 'Permanent Address', - _getDisplayValue(employee.permanentAddress), - isMultiLine: true, + Row( + children: [ + Icon( + titleIcon, + size: 20, + color: contentTheme.primary, + ), + MySpacing.width(8), + Text( + title, + style: const TextStyle( + fontSize: 16, + fontWeight: FontWeight.bold, + color: Colors.black87, + ), + ), + ], ), + MySpacing.height(8), + const Divider(), + ...children, ], ), ), @@ -224,65 +210,219 @@ class _EmployeeDetailPageState extends State with UIMixin { child: Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ - Row( - children: [ - Avatar( - firstName: employee.firstName, - lastName: employee.lastName, - size: 45, - ), - MySpacing.width(12), - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - MyText.titleMedium( - '${employee.firstName} ${employee.lastName}', - fontWeight: 700, + // Header Section + Card( + elevation: 2, + shadowColor: Colors.black12, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(5), + ), + child: Padding( + padding: const EdgeInsets.all(16), + child: Row( + children: [ + Avatar( + firstName: employee.firstName, + lastName: employee.lastName, + size: 45, + ), + MySpacing.width(16), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + MyText.titleMedium( + '${employee.firstName} ${employee.lastName}', + fontWeight: 700, + ), + MySpacing.height(6), + MyText.bodySmall( + _getDisplayValue(employee.jobRole), + fontWeight: 500, + ), + ], ), - MySpacing.height(6), - MyText.bodySmall( - _getDisplayValue(employee.jobRole), - fontWeight: 500, - ), - ], - ), - ), - IconButton( - icon: - Icon(Icons.edit, size: 24, color: contentTheme.primary), - onPressed: () async { - final result = - await showModalBottomSheet>( - context: context, - isScrollControlled: true, - backgroundColor: Colors.transparent, - builder: (_) => AddEmployeeBottomSheet( - employeeData: { - 'id': employee.id, - 'first_name': employee.firstName, - 'last_name': employee.lastName, - 'phone_number': employee.phoneNumber, - 'email': employee.email, - 'hasApplicationAccess': - employee.hasApplicationAccess, - 'gender': employee.gender.toLowerCase(), - 'job_role_id': employee.jobRoleId, - 'joining_date': - employee.joiningDate?.toIso8601String(), - }, - ), - ); + ), + IconButton( + icon: Icon(Icons.edit, + size: 24, color: contentTheme.primary), + onPressed: () async { + final result = await showModalBottomSheet< + Map>( + context: context, + isScrollControlled: true, + backgroundColor: Colors.transparent, + builder: (_) => AddEmployeeBottomSheet( + employeeData: { + 'id': employee.id, + 'first_name': employee.firstName, + 'last_name': employee.lastName, + 'phone_number': employee.phoneNumber, + 'email': employee.email, + 'hasApplicationAccess': + employee.hasApplicationAccess, + 'gender': employee.gender.toLowerCase(), + 'job_role_id': employee.jobRoleId, + 'joining_date': + employee.joiningDate?.toIso8601String(), + }, + ), + ); - if (result != null) { - controller.fetchEmployeeDetails(widget.employeeId); + if (result != null) { + controller + .fetchEmployeeDetails(widget.employeeId); + } + }, + ), + ], + ), + ), + ), + MySpacing.height(16), + + // Contact Information Section + _buildSectionCard( + title: 'Contact Information', + titleIcon: Icons.contact_phone, + children: [ + _buildDetailRow( + icon: Icons.email_outlined, + label: 'Email', + value: _getDisplayValue(employee.email), + isActionable: true, + onTap: () { + if (employee.email != null && + employee.email.toString().trim().isNotEmpty) { + LauncherUtils.launchEmail(employee.email!); + } + }, + onLongPress: () { + if (employee.email != null && + employee.email.toString().trim().isNotEmpty) { + LauncherUtils.copyToClipboard(employee.email!, + typeLabel: 'Email'); + } + }, + ), + _buildDetailRow( + icon: Icons.phone_outlined, + label: 'Phone Number', + value: _getDisplayValue(employee.phoneNumber), + isActionable: true, + onTap: () { + if (employee.phoneNumber != null && + employee.phoneNumber + .toString() + .trim() + .isNotEmpty) { + LauncherUtils.launchPhone(employee.phoneNumber!); + } + }, + onLongPress: () { + if (employee.phoneNumber != null && + employee.phoneNumber + .toString() + .trim() + .isNotEmpty) { + LauncherUtils.copyToClipboard(employee.phoneNumber!, + typeLabel: 'Phone Number'); } }, ), ], ), - MySpacing.height(14), - _buildInfoCard(employee), + MySpacing.height(16), + + // Emergency Contact Section + _buildSectionCard( + title: 'Emergency Contact', + titleIcon: Icons.emergency, + children: [ + _buildDetailRow( + icon: Icons.person_outline, + label: 'Contact Person', + value: + _getDisplayValue(employee.emergencyContactPerson), + isActionable: false, + ), + _buildDetailRow( + icon: Icons.phone_in_talk_outlined, + label: 'Emergency Phone', + value: _getDisplayValue(employee.emergencyPhoneNumber), + isActionable: true, + onTap: () { + if (employee.emergencyPhoneNumber != null && + employee.emergencyPhoneNumber + .toString() + .trim() + .isNotEmpty) { + LauncherUtils.launchPhone( + employee.emergencyPhoneNumber!); + } + }, + onLongPress: () { + if (employee.emergencyPhoneNumber != null && + employee.emergencyPhoneNumber + .toString() + .trim() + .isNotEmpty) { + LauncherUtils.copyToClipboard( + employee.emergencyPhoneNumber!, + typeLabel: 'Emergency Phone'); + } + }, + ), + ], + ), + MySpacing.height(16), + + // Personal Information Section + _buildSectionCard( + title: 'Personal Information', + titleIcon: Icons.person, + children: [ + _buildDetailRow( + icon: Icons.wc_outlined, + label: 'Gender', + value: _getDisplayValue(employee.gender), + isActionable: false, + ), + _buildDetailRow( + icon: Icons.cake_outlined, + label: 'Birth Date', + value: _formatDate(employee.birthDate), + isActionable: false, + ), + _buildDetailRow( + icon: Icons.work_outline, + label: 'Joining Date', + value: _formatDate(employee.joiningDate), + isActionable: false, + ), + ], + ), + MySpacing.height(16), + + // Address Information Section + _buildSectionCard( + title: 'Address Information', + titleIcon: Icons.location_on, + children: [ + _buildDetailRow( + icon: Icons.home_outlined, + label: 'Current Address', + value: _getDisplayValue(employee.currentAddress), + isActionable: false, + ), + _buildDetailRow( + icon: Icons.home_work_outlined, + label: 'Permanent Address', + value: _getDisplayValue(employee.permanentAddress), + isActionable: false, + ), + ], + ), ], ), ), diff --git a/lib/view/layouts/user_profile_right_bar.dart b/lib/view/layouts/user_profile_right_bar.dart index 63bc6b2..b55a2ef 100644 --- a/lib/view/layouts/user_profile_right_bar.dart +++ b/lib/view/layouts/user_profile_right_bar.dart @@ -11,6 +11,8 @@ import 'package:marco/model/employees/employee_info.dart'; import 'package:marco/controller/auth/mpin_controller.dart'; import 'package:marco/view/employees/employee_profile_screen.dart'; import 'package:marco/helpers/theme/theme_editor_widget.dart'; +import 'package:marco/view/faq/faq_screen.dart'; +import 'package:marco/view/support/support_screen.dart'; class UserProfileBar extends StatefulWidget { @@ -122,6 +124,7 @@ class _UserProfileBarState extends State ), ); } + Widget _userProfileSection(bool condensed) { final padding = MySpacing.fromLTRB( condensed ? 16 : 26, @@ -206,6 +209,17 @@ class _UserProfileBarState extends State _menuItemRow( icon: LucideIcons.badge_alert, label: 'Support', + onTap: () { + Get.to(() => SupportScreen()); + }, + ), + SizedBox(height: spacingHeight), + _menuItemRow( + icon: LucideIcons.badge_help, + label: 'FAQ', + onTap: () { + Get.to(() => FAQScreen()); + }, ), SizedBox(height: spacingHeight), _menuItemRow( diff --git a/lib/view/support/support_screen.dart b/lib/view/support/support_screen.dart index b5606bd..7eef909 100644 --- a/lib/view/support/support_screen.dart +++ b/lib/view/support/support_screen.dart @@ -16,10 +16,10 @@ class _SupportScreenState extends State with UIMixin { final List> contacts = [ { "type": "email", - "label": "info@marcoaiot.com", + "label": "support@onfieldwork.com", "subLabel": "Email us your queries", "icon": LucideIcons.mail, - "action": "mailto:info@marcoaiot.com?subject=Support Request" + "action": "mailto:support@onfieldwork.com?subject=Support Request" }, { "type": "phone", diff --git a/linux/CMakeLists.txt b/linux/CMakeLists.txt index cb7c5a2..fa2be66 100644 --- a/linux/CMakeLists.txt +++ b/linux/CMakeLists.txt @@ -7,7 +7,7 @@ project(runner LANGUAGES CXX) set(BINARY_NAME "marco") # The unique GTK application identifier for this application. See: # https://wiki.gnome.org/HowDoI/ChooseApplicationID -set(APPLICATION_ID "com.onfieldwork.marcoaiot") +set(APPLICATION_ID "com.marcoonfieldwork.aiot") # Explicitly opt in to modern CMake behaviors to avoid warnings with recent # versions of CMake. diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj index cbcf812..a89772a 100644 --- a/macos/Runner.xcodeproj/project.pbxproj +++ b/macos/Runner.xcodeproj/project.pbxproj @@ -385,7 +385,7 @@ CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.onfieldwork.marcoaiot.RunnerTests; + PRODUCT_BUNDLE_IDENTIFIER = com.marcoonfieldwork.aiot.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/marco.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/marco"; @@ -399,7 +399,7 @@ CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.onfieldwork.marcoaiot.RunnerTests; + PRODUCT_BUNDLE_IDENTIFIER = com.marcoonfieldwork.aiot.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/marco.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/marco"; @@ -413,7 +413,7 @@ CURRENT_PROJECT_VERSION = 1; GENERATE_INFOPLIST_FILE = YES; MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.onfieldwork.marcoaiot.RunnerTests; + PRODUCT_BUNDLE_IDENTIFIER = com.marcoonfieldwork.aiot.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/marco.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/marco"; diff --git a/macos/Runner/Configs/AppInfo.xcconfig b/macos/Runner/Configs/AppInfo.xcconfig index e5e5002..52293a5 100644 --- a/macos/Runner/Configs/AppInfo.xcconfig +++ b/macos/Runner/Configs/AppInfo.xcconfig @@ -8,7 +8,7 @@ PRODUCT_NAME = marco // The application's bundle identifier -PRODUCT_BUNDLE_IDENTIFIER = com.onfieldwork.marcoaiot +PRODUCT_BUNDLE_IDENTIFIER = com.marcoonfieldwork.aiot // The copyright displayed in application information PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved.