diff --git a/android/app/build.gradle b/android/app/build.gradle index 44bbc2e..2f0db04 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -9,7 +9,7 @@ plugins { } android { - namespace = "com.example.qadirneyriz" + namespace = "com.nghsco.mizban" compileSdk = flutter.compileSdkVersion ndkVersion = flutter.ndkVersion @@ -24,7 +24,7 @@ android { defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId = "com.example.qadirneyriz" + applicationId = "com.nghsco.mizban" // You can update the following values to match your application needs. // For more information, see: https://flutter.dev/to/review-gradle-config. minSdk = flutter.minSdkVersion diff --git a/android/app/google-services.json b/android/app/google-services.json index e68a240..5f048ea 100644 --- a/android/app/google-services.json +++ b/android/app/google-services.json @@ -23,6 +23,25 @@ "other_platform_oauth_client": [] } } + }, + { + "client_info": { + "mobilesdk_app_id": "1:392489806594:android:6944e598f4a3f5313b301b", + "android_client_info": { + "package_name": "com.nghsco.mizban" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyAuDK456j4fFdNqrzQRDYyWRcB0VkQ2bCY" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } } ], "configuration_version": "1" diff --git a/android/app/src/main/kotlin/com/example/qadirneyriz/MainActivity.kt b/android/app/src/main/kotlin/com/nghsco/mizban/MainActivity.kt similarity index 74% rename from android/app/src/main/kotlin/com/example/qadirneyriz/MainActivity.kt rename to android/app/src/main/kotlin/com/nghsco/mizban/MainActivity.kt index 3081be0..7afad9b 100644 --- a/android/app/src/main/kotlin/com/example/qadirneyriz/MainActivity.kt +++ b/android/app/src/main/kotlin/com/nghsco/mizban/MainActivity.kt @@ -1,4 +1,4 @@ -package com.example.qadirneyriz +package com.nghsco.mizban import io.flutter.embedding.android.FlutterActivity diff --git a/assets/images/5893208387750053755.jpg b/assets/images/5893208387750053755.jpg deleted file mode 100644 index 1ca3730..0000000 Binary files a/assets/images/5893208387750053755.jpg and /dev/null differ diff --git a/assets/images/iconinappbar.png b/assets/images/iconinappbar.png deleted file mode 100644 index 7c09dd5..0000000 Binary files a/assets/images/iconinappbar.png and /dev/null differ diff --git a/assets/images/logo.png b/assets/images/logo.png deleted file mode 100644 index e004fd1..0000000 Binary files a/assets/images/logo.png and /dev/null differ diff --git a/assets/images/logoaboutus.png b/assets/images/logoaboutus.png deleted file mode 100644 index 35353ef..0000000 Binary files a/assets/images/logoaboutus.png and /dev/null differ diff --git a/assets/images/logoapp.jpg b/assets/images/logoapp.jpg deleted file mode 100644 index 4daeae1..0000000 Binary files a/assets/images/logoapp.jpg and /dev/null differ diff --git a/assets/images/logomizban.png b/assets/images/logomizban.png index 197fd3b..6d5d0f6 100644 Binary files a/assets/images/logomizban.png and b/assets/images/logomizban.png differ diff --git a/assets/images/template.png b/assets/images/template.png index 1d0f2d0..601238b 100644 Binary files a/assets/images/template.png and b/assets/images/template.png differ diff --git a/firebase.json b/firebase.json new file mode 100644 index 0000000..0c370d7 --- /dev/null +++ b/firebase.json @@ -0,0 +1 @@ +{"flutter":{"platforms":{"android":{"default":{"projectId":"folad-neiriz","appId":"1:392489806594:android:6944e598f4a3f5313b301b","fileOutput":"android/app/google-services.json"}},"ios":{"default":{"projectId":"folad-neiriz","appId":"1:392489806594:ios:b93d93374e9671ee3b301b","uploadDebugSymbols":false,"fileOutput":"ios/Runner/GoogleService-Info.plist"}},"dart":{"lib/firebase_options.dart":{"projectId":"folad-neiriz","configurations":{"android":"1:392489806594:android:6944e598f4a3f5313b301b","ios":"1:392489806594:ios:b93d93374e9671ee3b301b"}}}}}} \ No newline at end of file diff --git a/ios/Flutter/Debug.xcconfig b/ios/Flutter/Debug.xcconfig index 592ceee..ec97fc6 100644 --- a/ios/Flutter/Debug.xcconfig +++ b/ios/Flutter/Debug.xcconfig @@ -1 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/ios/Flutter/Release.xcconfig b/ios/Flutter/Release.xcconfig index 592ceee..c4855bf 100644 --- a/ios/Flutter/Release.xcconfig +++ b/ios/Flutter/Release.xcconfig @@ -1 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/ios/GoogleService-Info.plist b/ios/GoogleService-Info.plist new file mode 100644 index 0000000..8adff5d --- /dev/null +++ b/ios/GoogleService-Info.plist @@ -0,0 +1,30 @@ + + + + + API_KEY + AIzaSyDmiLNq_t5wyqDE2VW1wGyt6kArchRvLAQ + GCM_SENDER_ID + 392489806594 + PLIST_VERSION + 1 + BUNDLE_ID + com.nghsco.mizban + PROJECT_ID + folad-neiriz + STORAGE_BUCKET + folad-neiriz.firebasestorage.app + IS_ADS_ENABLED + + IS_ANALYTICS_ENABLED + + IS_APPINVITE_ENABLED + + IS_GCM_ENABLED + + IS_SIGNIN_ENABLED + + GOOGLE_APP_ID + 1:392489806594:ios:b93d93374e9671ee3b301b + + \ No newline at end of file diff --git a/ios/Podfile b/ios/Podfile new file mode 100644 index 0000000..c76d156 --- /dev/null +++ b/ios/Podfile @@ -0,0 +1,44 @@ +# Uncomment this line to define a global platform for your project +# platform :ios, '14.0' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_ios_podfile_setup + +target 'Runner' do + use_frameworks! + use_modular_headers! + + flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_ios_build_settings(target) + end +end diff --git a/ios/Podfile.lock b/ios/Podfile.lock new file mode 100644 index 0000000..e350528 --- /dev/null +++ b/ios/Podfile.lock @@ -0,0 +1,186 @@ +PODS: + - DKImagePickerController/Core (4.3.4): + - DKImagePickerController/ImageDataManager + - DKImagePickerController/Resource + - DKImagePickerController/ImageDataManager (4.3.4) + - DKImagePickerController/PhotoGallery (4.3.4): + - DKImagePickerController/Core + - DKPhotoGallery + - DKImagePickerController/Resource (4.3.4) + - DKPhotoGallery (0.0.17): + - DKPhotoGallery/Core (= 0.0.17) + - DKPhotoGallery/Model (= 0.0.17) + - DKPhotoGallery/Preview (= 0.0.17) + - DKPhotoGallery/Resource (= 0.0.17) + - SDWebImage + - SwiftyGif + - DKPhotoGallery/Core (0.0.17): + - DKPhotoGallery/Model + - DKPhotoGallery/Preview + - SDWebImage + - SwiftyGif + - DKPhotoGallery/Model (0.0.17): + - SDWebImage + - SwiftyGif + - DKPhotoGallery/Preview (0.0.17): + - DKPhotoGallery/Model + - DKPhotoGallery/Resource + - SDWebImage + - SwiftyGif + - DKPhotoGallery/Resource (0.0.17): + - SDWebImage + - SwiftyGif + - file_picker (0.0.1): + - DKImagePickerController/PhotoGallery + - Flutter + - Firebase/CoreOnly (11.4.0): + - FirebaseCore (= 11.4.0) + - Firebase/Messaging (11.4.0): + - Firebase/CoreOnly + - FirebaseMessaging (~> 11.4.0) + - firebase_core (3.8.0): + - Firebase/CoreOnly (= 11.4.0) + - Flutter + - firebase_messaging (15.1.5): + - Firebase/Messaging (= 11.4.0) + - firebase_core + - Flutter + - FirebaseCore (11.4.0): + - FirebaseCoreInternal (~> 11.0) + - GoogleUtilities/Environment (~> 8.0) + - GoogleUtilities/Logger (~> 8.0) + - FirebaseCoreInternal (11.6.0): + - "GoogleUtilities/NSData+zlib (~> 8.0)" + - FirebaseInstallations (11.4.0): + - FirebaseCore (~> 11.0) + - GoogleUtilities/Environment (~> 8.0) + - GoogleUtilities/UserDefaults (~> 8.0) + - PromisesObjC (~> 2.4) + - FirebaseMessaging (11.4.0): + - FirebaseCore (~> 11.0) + - FirebaseInstallations (~> 11.0) + - GoogleDataTransport (~> 10.0) + - GoogleUtilities/AppDelegateSwizzler (~> 8.0) + - GoogleUtilities/Environment (~> 8.0) + - GoogleUtilities/Reachability (~> 8.0) + - GoogleUtilities/UserDefaults (~> 8.0) + - nanopb (~> 3.30910.0) + - Flutter (1.0.0) + - GoogleDataTransport (10.1.0): + - nanopb (~> 3.30910.0) + - PromisesObjC (~> 2.4) + - GoogleUtilities/AppDelegateSwizzler (8.0.2): + - GoogleUtilities/Environment + - GoogleUtilities/Logger + - GoogleUtilities/Network + - GoogleUtilities/Privacy + - GoogleUtilities/Environment (8.0.2): + - GoogleUtilities/Privacy + - GoogleUtilities/Logger (8.0.2): + - GoogleUtilities/Environment + - GoogleUtilities/Privacy + - GoogleUtilities/Network (8.0.2): + - GoogleUtilities/Logger + - "GoogleUtilities/NSData+zlib" + - GoogleUtilities/Privacy + - GoogleUtilities/Reachability + - "GoogleUtilities/NSData+zlib (8.0.2)": + - GoogleUtilities/Privacy + - GoogleUtilities/Privacy (8.0.2) + - GoogleUtilities/Reachability (8.0.2): + - GoogleUtilities/Logger + - GoogleUtilities/Privacy + - GoogleUtilities/UserDefaults (8.0.2): + - GoogleUtilities/Logger + - GoogleUtilities/Privacy + - nanopb (3.30910.0): + - nanopb/decode (= 3.30910.0) + - nanopb/encode (= 3.30910.0) + - nanopb/decode (3.30910.0) + - nanopb/encode (3.30910.0) + - open_file_ios (0.0.1): + - Flutter + - path_provider_foundation (0.0.1): + - Flutter + - FlutterMacOS + - permission_handler_apple (9.3.0): + - Flutter + - PromisesObjC (2.4.0) + - SDWebImage (5.16.0): + - SDWebImage/Core (= 5.16.0) + - SDWebImage/Core (5.16.0) + - sqflite (0.0.3): + - Flutter + - FlutterMacOS + - SwiftyGif (5.4.4) + +DEPENDENCIES: + - file_picker (from `.symlinks/plugins/file_picker/ios`) + - firebase_core (from `.symlinks/plugins/firebase_core/ios`) + - firebase_messaging (from `.symlinks/plugins/firebase_messaging/ios`) + - Flutter (from `Flutter`) + - open_file_ios (from `.symlinks/plugins/open_file_ios/ios`) + - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) + - permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`) + - sqflite (from `.symlinks/plugins/sqflite/darwin`) + +SPEC REPOS: + trunk: + - DKImagePickerController + - DKPhotoGallery + - Firebase + - FirebaseCore + - FirebaseCoreInternal + - FirebaseInstallations + - FirebaseMessaging + - GoogleDataTransport + - GoogleUtilities + - nanopb + - PromisesObjC + - SDWebImage + - SwiftyGif + +EXTERNAL SOURCES: + file_picker: + :path: ".symlinks/plugins/file_picker/ios" + firebase_core: + :path: ".symlinks/plugins/firebase_core/ios" + firebase_messaging: + :path: ".symlinks/plugins/firebase_messaging/ios" + Flutter: + :path: Flutter + open_file_ios: + :path: ".symlinks/plugins/open_file_ios/ios" + path_provider_foundation: + :path: ".symlinks/plugins/path_provider_foundation/darwin" + permission_handler_apple: + :path: ".symlinks/plugins/permission_handler_apple/ios" + sqflite: + :path: ".symlinks/plugins/sqflite/darwin" + +SPEC CHECKSUMS: + DKImagePickerController: b512c28220a2b8ac7419f21c491fc8534b7601ac + DKPhotoGallery: fdfad5125a9fdda9cc57df834d49df790dbb4179 + file_picker: 09aa5ec1ab24135ccd7a1621c46c84134bfd6655 + Firebase: cf1b19f21410b029b6786a54e9764a0cacad3c99 + firebase_core: 9efc3ecf689cdbc90f13f4dc58108c83ea46b266 + firebase_messaging: 6bf60adb4b33a848d135e16bc363fb4924f98fba + FirebaseCore: e0510f1523bc0eb21653cac00792e1e2bd6f1771 + FirebaseCoreInternal: d98ab91e2d80a56d7b246856a8885443b302c0c2 + FirebaseInstallations: 6ef4a1c7eb2a61ee1f74727d7f6ce2e72acf1414 + FirebaseMessaging: f8a160d99c2c2e5babbbcc90c4a3e15db036aee2 + Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 + GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7 + GoogleUtilities: 26a3abef001b6533cf678d3eb38fd3f614b7872d + nanopb: fad817b59e0457d11a5dfbde799381cd727c1275 + open_file_ios: 461db5853723763573e140de3193656f91990d9e + path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 + permission_handler_apple: 9878588469a2b0d0fc1e048d9f43605f92e6cec2 + PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 + SDWebImage: 2aea163b50bfcb569a2726b6a754c54a4506fcf6 + sqflite: 673a0e54cc04b7d6dba8d24fb8095b31c3a99eec + SwiftyGif: 93a1cc87bf3a51916001cf8f3d63835fb64c819f + +PODFILE CHECKSUM: 1b50a4280f44a231b37f858aebc2a001225decec + +COCOAPODS: 1.16.2 diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 632a727..6770a3b 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -8,12 +8,15 @@ /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 279E98ED2D1AC59100A23113 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 279E98EC2D1AC59100A23113 /* GoogleService-Info.plist */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 4759CDBF48BBFAA16589BB1F /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A13A62BF8523DA69A6B7DED /* Pods_RunnerTests.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + EA2352549A2FAB01A3364E55 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B283BACC72FBA5C58553DEB5 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,9 +45,18 @@ /* Begin PBXFileReference section */ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 21E13784C9783A2D164934EC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 25F9A4FC0F94DB50E78EFC87 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 2718AC0B2D0EFA1300C32C95 /* RunnerRelease.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = RunnerRelease.entitlements; sourceTree = ""; }; + 2726A2F72D0ED5B5000CFFF8 /* Runner.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Runner.entitlements; sourceTree = ""; }; + 279E98EC2D1AC59100A23113 /* GoogleService-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3725BEAF3DF4B15F715B4D71 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 4A13A62BF8523DA69A6B7DED /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 57463A968D8F475ACFBD7AF9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 74285ED74C2E6E41B754C0CE /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; @@ -55,13 +67,24 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + B283BACC72FBA5C58553DEB5 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F5909DC65099B73BB95A6244 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 1E4C4A1290709861CA4805D3 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 4759CDBF48BBFAA16589BB1F /* Pods_RunnerTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + EA2352549A2FAB01A3364E55 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -90,10 +113,13 @@ 97C146E51CF9000F007C117D = { isa = PBXGroup; children = ( + 279E98EC2D1AC59100A23113 /* GoogleService-Info.plist */, 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, + F8BB147E565F68927290DB18 /* Pods */, + CDF87532872B2723CF8E0440 /* Frameworks */, ); sourceTree = ""; }; @@ -109,6 +135,8 @@ 97C146F01CF9000F007C117D /* Runner */ = { isa = PBXGroup; children = ( + 2718AC0B2D0EFA1300C32C95 /* RunnerRelease.entitlements */, + 2726A2F72D0ED5B5000CFFF8 /* Runner.entitlements */, 97C146FA1CF9000F007C117D /* Main.storyboard */, 97C146FD1CF9000F007C117D /* Assets.xcassets */, 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, @@ -121,6 +149,28 @@ path = Runner; sourceTree = ""; }; + CDF87532872B2723CF8E0440 /* Frameworks */ = { + isa = PBXGroup; + children = ( + B283BACC72FBA5C58553DEB5 /* Pods_Runner.framework */, + 4A13A62BF8523DA69A6B7DED /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + F8BB147E565F68927290DB18 /* Pods */ = { + isa = PBXGroup; + children = ( + F5909DC65099B73BB95A6244 /* Pods-Runner.debug.xcconfig */, + 25F9A4FC0F94DB50E78EFC87 /* Pods-Runner.release.xcconfig */, + 57463A968D8F475ACFBD7AF9 /* Pods-Runner.profile.xcconfig */, + 21E13784C9783A2D164934EC /* Pods-RunnerTests.debug.xcconfig */, + 74285ED74C2E6E41B754C0CE /* Pods-RunnerTests.release.xcconfig */, + 3725BEAF3DF4B15F715B4D71 /* Pods-RunnerTests.profile.xcconfig */, + ); + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -128,8 +178,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( + 67BC60F4D4382D10418A3A58 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, + 1E4C4A1290709861CA4805D3 /* Frameworks */, ); buildRules = ( ); @@ -145,12 +197,15 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + 92182B7D1D93B3076E45A1F8 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + 30C9A5270602859A8E6C794E /* [CP] Embed Pods Frameworks */, + 226F675192C22C6623CA1FCA /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -190,6 +245,8 @@ Base, ); mainGroup = 97C146E51CF9000F007C117D; + packageReferences = ( + ); productRefGroup = 97C146EF1CF9000F007C117D /* Products */; projectDirPath = ""; projectRoot = ""; @@ -214,6 +271,7 @@ files = ( 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 279E98ED2D1AC59100A23113 /* GoogleService-Info.plist in Resources */, 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, ); @@ -222,6 +280,40 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 226F675192C22C6623CA1FCA /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Copy Pods Resources"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + 30C9A5270602859A8E6C794E /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -238,6 +330,50 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; + 67BC60F4D4382D10418A3A58 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 92182B7D1D93B3076E45A1F8 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -361,15 +497,20 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = FE8CDVE4RJ; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.qadirneyriz; + PRODUCT_BUNDLE_IDENTIFIER = com.nghsco.mizban; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; VERSIONING_SYSTEM = "apple-generic"; @@ -378,13 +519,14 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 21E13784C9783A2D164934EC /* Pods-RunnerTests.debug.xcconfig */; 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.example.qadirneyriz.RunnerTests; + PRODUCT_BUNDLE_IDENTIFIER = com.nghsco.mizban.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; @@ -395,13 +537,14 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 74285ED74C2E6E41B754C0CE /* Pods-RunnerTests.release.xcconfig */; 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.example.qadirneyriz.RunnerTests; + PRODUCT_BUNDLE_IDENTIFIER = com.nghsco.mizban.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; @@ -410,13 +553,14 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 3725BEAF3DF4B15F715B4D71 /* Pods-RunnerTests.profile.xcconfig */; 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.example.qadirneyriz.RunnerTests; + PRODUCT_BUNDLE_IDENTIFIER = com.nghsco.mizban.RunnerTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; @@ -540,15 +684,20 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = FE8CDVE4RJ; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.qadirneyriz; + PRODUCT_BUNDLE_IDENTIFIER = com.nghsco.mizban; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; @@ -562,15 +711,20 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/RunnerRelease.entitlements; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = FE8CDVE4RJ; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.example.qadirneyriz; + PRODUCT_BUNDLE_IDENTIFIER = com.nghsco.mizban; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; VERSIONING_SYSTEM = "apple-generic"; diff --git a/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 0000000..7b7290f --- /dev/null +++ b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,123 @@ +{ + "originHash" : "c63c63846d9c539229e96de38d6af51417e28c0ee9a0bc48bd0f0f19d923c329", + "pins" : [ + { + "identity" : "abseil-cpp-binary", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/abseil-cpp-binary.git", + "state" : { + "revision" : "194a6706acbd25e4ef639bcaddea16e8758a3e27", + "version" : "1.2024011602.0" + } + }, + { + "identity" : "app-check", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/app-check.git", + "state" : { + "revision" : "61b85103a1aeed8218f17c794687781505fbbef5", + "version" : "11.2.0" + } + }, + { + "identity" : "firebase-ios-sdk", + "kind" : "remoteSourceControl", + "location" : "https://github.com/firebase/firebase-ios-sdk", + "state" : { + "revision" : "2e02253fd1ce99145bcbf1bb367ccf61bd0ca46b", + "version" : "11.6.0" + } + }, + { + "identity" : "googleappmeasurement", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/GoogleAppMeasurement.git", + "state" : { + "revision" : "4f234bcbdae841d7015258fbbf8e7743a39b8200", + "version" : "11.4.0" + } + }, + { + "identity" : "googledatatransport", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/GoogleDataTransport.git", + "state" : { + "revision" : "617af071af9aa1d6a091d59a202910ac482128f9", + "version" : "10.1.0" + } + }, + { + "identity" : "googleutilities", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/GoogleUtilities.git", + "state" : { + "revision" : "53156c7ec267db846e6b64c9f4c4e31ba4cf75eb", + "version" : "8.0.2" + } + }, + { + "identity" : "grpc-binary", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/grpc-binary.git", + "state" : { + "revision" : "f56d8fc3162de9a498377c7b6cea43431f4f5083", + "version" : "1.65.1" + } + }, + { + "identity" : "gtm-session-fetcher", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/gtm-session-fetcher.git", + "state" : { + "revision" : "5cfe5f090c982de9c58605d2a82a4fc77b774fbd", + "version" : "4.1.0" + } + }, + { + "identity" : "interop-ios-for-google-sdks", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/interop-ios-for-google-sdks.git", + "state" : { + "revision" : "2d12673670417654f08f5f90fdd62926dc3a2648", + "version" : "100.0.0" + } + }, + { + "identity" : "leveldb", + "kind" : "remoteSourceControl", + "location" : "https://github.com/firebase/leveldb.git", + "state" : { + "revision" : "a0bc79961d7be727d258d33d5a6b2f1023270ba1", + "version" : "1.22.5" + } + }, + { + "identity" : "nanopb", + "kind" : "remoteSourceControl", + "location" : "https://github.com/firebase/nanopb.git", + "state" : { + "revision" : "b7e1104502eca3a213b46303391ca4d3bc8ddec1", + "version" : "2.30910.0" + } + }, + { + "identity" : "promises", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/promises.git", + "state" : { + "revision" : "540318ecedd63d883069ae7f1ed811a2df00b6ac", + "version" : "2.4.0" + } + }, + { + "identity" : "swift-protobuf", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-protobuf.git", + "state" : { + "revision" : "ebc7251dd5b37f627c93698e4374084d98409633", + "version" : "1.28.2" + } + } + ], + "version" : 3 +} diff --git a/ios/Runner.xcworkspace/contents.xcworkspacedata b/ios/Runner.xcworkspace/contents.xcworkspacedata index 1d526a1..21a3cc1 100644 --- a/ios/Runner.xcworkspace/contents.xcworkspacedata +++ b/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -4,4 +4,7 @@ + + diff --git a/ios/Runner/AppDelegate.swift b/ios/Runner/AppDelegate.swift index 6f22ce4..b636303 100644 --- a/ios/Runner/AppDelegate.swift +++ b/ios/Runner/AppDelegate.swift @@ -1,7 +1,5 @@ -import Flutter import UIKit -import Firebase -import FirebaseMessaging +import Flutter @main @objc class AppDelegate: FlutterAppDelegate { @@ -9,55 +7,7 @@ import FirebaseMessaging _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? ) -> Bool { - // مقداردهی Firebase - FirebaseApp.configure() - - // ثبت Plugin های Flutter GeneratedPluginRegistrant.register(with: self) - - // تنظیمات Notification Center - UNUserNotificationCenter.current().delegate = self - Messaging.messaging().delegate = self - - // درخواست مجوز نوتیفیکیشن - UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound]) { granted, error in - if let error = error { - print("Error requesting notification permissions: \(error)") - } - print("Permission granted: \(granted)") - } - - // ثبت دستگاه برای دریافت Remote Notifications - application.registerForRemoteNotifications() - return super.application(application, didFinishLaunchingWithOptions: launchOptions) } - - // متد دریافت APNs Token و ارسال آن به Firebase - override func application( - _ application: UIApplication, - didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data - ) { - Messaging.messaging().apnsToken = deviceToken - } -} - -// افزودن پروتکل‌های UNUserNotificationCenterDelegate و MessagingDelegate -extension AppDelegate: UNUserNotificationCenterDelegate, MessagingDelegate { - // مدیریت دریافت توکن Firebase - func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) { - print("Firebase FCM Token: \(fcmToken ?? "No Token")") - // اگر نیاز به ارسال توکن به سرور دارید، اینجا انجام دهید. - } - - // مدیریت پیام‌های دریافت‌شده هنگام باز بودن اپلیکیشن - func userNotificationCenter( - _ center: UNUserNotificationCenter, - willPresent notification: UNNotification, - withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void - ) { - let userInfo = notification.request.content.userInfo - print("Foreground Notification Received: \(userInfo)") - completionHandler([.banner, .sound, .badge]) - } } diff --git a/ios/Runner/GoogleService-Info.plist b/ios/Runner/GoogleService-Info.plist index ea71079..8adff5d 100644 --- a/ios/Runner/GoogleService-Info.plist +++ b/ios/Runner/GoogleService-Info.plist @@ -9,7 +9,7 @@ PLIST_VERSION 1 BUNDLE_ID - com.example.qadirneyriz + com.nghsco.mizban PROJECT_ID folad-neiriz STORAGE_BUCKET @@ -25,6 +25,6 @@ IS_SIGNIN_ENABLED GOOGLE_APP_ID - 1:392489806594:ios:feeba2107eb852ec3b301b + 1:392489806594:ios:b93d93374e9671ee3b301b \ No newline at end of file diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index f840df9..1f7a941 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -2,6 +2,8 @@ + CADisableMinimumFrameDurationOnPhone + CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleDisplayName @@ -24,6 +26,26 @@ $(FLUTTER_BUILD_NUMBER) LSRequiresIPhoneOS + NSAppTransportSecurity + + NSAllowsLocalNetworking + + + NSPhotoLibraryUsageDescription + We need access to your photos to allow you to upload images. + UIApplicationSupportsIndirectInputEvents + + UIBackgroundModes + + remote-notification + processing + fetch + + BGTaskSchedulerPermittedIdentifiers + + com.nghsco.mizban.refresh + com.nghsco.mizban.processing + UILaunchStoryboardName LaunchScreen UIMainStoryboardFile @@ -41,9 +63,7 @@ UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight - CADisableMinimumFrameDurationOnPhone - - UIApplicationSupportsIndirectInputEvents - + FirebaseMessagingAutoInitEnabled + NO diff --git a/ios/Runner/Runner.entitlements b/ios/Runner/Runner.entitlements new file mode 100644 index 0000000..903def2 --- /dev/null +++ b/ios/Runner/Runner.entitlements @@ -0,0 +1,8 @@ + + + + + aps-environment + development + + diff --git a/ios/Runner/RunnerRelease.entitlements b/ios/Runner/RunnerRelease.entitlements new file mode 100644 index 0000000..903def2 --- /dev/null +++ b/ios/Runner/RunnerRelease.entitlements @@ -0,0 +1,8 @@ + + + + + aps-environment + development + + diff --git a/lib/firebase_options.dart b/lib/firebase_options.dart new file mode 100644 index 0000000..8196ab3 --- /dev/null +++ b/lib/firebase_options.dart @@ -0,0 +1,68 @@ +// File generated by FlutterFire CLI. +// ignore_for_file: type=lint +import 'package:firebase_core/firebase_core.dart' show FirebaseOptions; +import 'package:flutter/foundation.dart' + show defaultTargetPlatform, kIsWeb, TargetPlatform; + +/// Default [FirebaseOptions] for use with your Firebase apps. +/// +/// Example: +/// ```dart +/// import 'firebase_options.dart'; +/// // ... +/// await Firebase.initializeApp( +/// options: DefaultFirebaseOptions.currentPlatform, +/// ); +/// ``` +class DefaultFirebaseOptions { + static FirebaseOptions get currentPlatform { + if (kIsWeb) { + throw UnsupportedError( + 'DefaultFirebaseOptions have not been configured for web - ' + 'you can reconfigure this by running the FlutterFire CLI again.', + ); + } + switch (defaultTargetPlatform) { + case TargetPlatform.android: + return android; + case TargetPlatform.iOS: + return ios; + 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: + throw UnsupportedError( + 'DefaultFirebaseOptions are not supported for this platform.', + ); + } + } + + static const FirebaseOptions android = FirebaseOptions( + apiKey: 'AIzaSyAuDK456j4fFdNqrzQRDYyWRcB0VkQ2bCY', + appId: '1:392489806594:android:6944e598f4a3f5313b301b', + messagingSenderId: '392489806594', + projectId: 'folad-neiriz', + storageBucket: 'folad-neiriz.firebasestorage.app', + ); + + static const FirebaseOptions ios = FirebaseOptions( + apiKey: 'AIzaSyDmiLNq_t5wyqDE2VW1wGyt6kArchRvLAQ', + appId: '1:392489806594:ios:b93d93374e9671ee3b301b', + messagingSenderId: '392489806594', + projectId: 'folad-neiriz', + storageBucket: 'folad-neiriz.firebasestorage.app', + iosBundleId: 'com.nghsco.mizban', + ); +} diff --git a/lib/l10n/app_fa.arb b/lib/l10n/app_fa.arb index 172097b..2c2d1cd 100644 --- a/lib/l10n/app_fa.arb +++ b/lib/l10n/app_fa.arb @@ -122,5 +122,5 @@ "suretodelelteaccount": "آیا اطمینان دارید که می‌خواهید حساب کاربری خود را حذف کنید؟", "actioncantundo": "این عمل قابل بازگشت نیست!", "areusuretodeletfile":"آیا اطمینان دارید که میخواهید این فایل را حذف کنید؟", - "textaboutus":"نرم‌افزار مدیریت جلسات و ملاقات‌های “میزبان” با هدف تسهیل و بهینه‌سازی فرآیندهای برگزاری جلسات سازمانی و شخصی جناب آقای دکتر محسن مصطفی پور طراحی و توسعه یافته تا ابزاری کارآمد و نوآورانه برای تحقق بیشتر اسم رمز همدلی در مجموعه معظم فولاد غدیر نی ریز باشد . این نرم افزار با حمایت ، همت و پشتیبانی بی‌دریغ مدیریت محترم عامل ( دکتر محسن مصطفی پور ) ایجاد ، توسعه و راه اندازی شده است." + "textaboutus":"نرم‌افزار مدیریت جلسات و ملاقات‌های “میزبان” با هدف تسهیل و بهینه‌سازی فرآیندهای برگزاری جلسات شخصی جناب آقای دکتر محسن مصطفی پور طراحی و توسعه یافته تا ابزاری کارآمد و نوآورانه باشد. این نرم افزار با حمایت ، همت و پشتیبانی بی‌دریغ دکتر محسن مصطفی پور ایجاد ، توسعه و راه اندازی شده است." } \ No newline at end of file diff --git a/lib/main.dart b/lib/main.dart index 78a403a..af29a7d 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -5,6 +5,7 @@ import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:hive_flutter/hive_flutter.dart'; import 'package:provider/provider.dart'; import 'package:qadirneyriz/config/config.dart'; +import 'package:qadirneyriz/firebase_options.dart'; import 'package:qadirneyriz/global/global_state/global_state.dart'; import 'package:qadirneyriz/router/router.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; @@ -18,9 +19,14 @@ import 'package:qadirneyriz/setting/setting.dart'; final FirebaseMessaging messaging = FirebaseMessaging.instance; Future initializeApp() async { - await Firebase.initializeApp(); await Hive.initFlutter(); + await Firebase.initializeApp( + options: DefaultFirebaseOptions.currentPlatform, + ); await setting.userLocalDb.openBox(); + + // اجرای Firebase و تنظیمات نوتیفیکیشن فقط در اندروید + await requestNotificationPermission(); await getToken(); setupMessageListener(); @@ -45,15 +51,13 @@ Future requestNotificationPermission() async { } Future getToken() async { - String? token = await messaging.getToken(); - print("Device Token: $token"); - // You can send the token to your server here if needed + await messaging.getToken(); } void setupMessageListener() { FirebaseMessaging.onMessage.listen((RemoteMessage message) { - print('Message received: ${message.notification?.title}'); - print('Message body: ${message.notification?.body}'); + // print('Message received: ${message.notification?.title}'); + // print('Message body: ${message.notification?.body}'); // You can use a Dialog or Toast to display the message here }); } @@ -102,31 +106,42 @@ class _MyAppState extends State { Widget build(BuildContext context) { return Consumer( builder: (context, value, child) { - return MaterialApp.router( - theme: ThemeData( - colorScheme: ColorScheme.light(primary: config.ui.mainGreen), - buttonTheme: ButtonThemeData( - colorScheme: ColorScheme.light(primary: Colors.green), + return GestureDetector( + behavior: HitTestBehavior.opaque, + onTap: () { + FocusScopeNode currentFocus = FocusScope.of(context); + + if (!currentFocus.hasPrimaryFocus && + currentFocus.focusedChild != null) { + FocusManager.instance.primaryFocus?.unfocus(); + } + }, + child: MaterialApp.router( + theme: ThemeData( + colorScheme: ColorScheme.light(primary: config.ui.mainGreen), + buttonTheme: ButtonThemeData( + colorScheme: ColorScheme.light(primary: Colors.green), + ), + useMaterial3: true, + fontFamily: 'Font', + scaffoldBackgroundColor: Colors.white, ), - useMaterial3: true, - fontFamily: 'Font', - scaffoldBackgroundColor: Colors.white, + debugShowCheckedModeBanner: false, + routerDelegate: router.routerDelegate, + routeInformationParser: router.routeInformationParser, + routeInformationProvider: router.routeInformationProvider, + localizationsDelegates: const [ + AppLocalizations.delegate, + GlobalMaterialLocalizations.delegate, + GlobalWidgetsLocalizations.delegate, + GlobalCupertinoLocalizations.delegate, + ], + locale: Locale(value.language), + supportedLocales: const [ + Locale('en'), + Locale('fa'), + ], ), - debugShowCheckedModeBanner: false, - routerDelegate: router.routerDelegate, - routeInformationParser: router.routeInformationParser, - routeInformationProvider: router.routeInformationProvider, - localizationsDelegates: const [ - AppLocalizations.delegate, - GlobalMaterialLocalizations.delegate, - GlobalWidgetsLocalizations.delegate, - GlobalCupertinoLocalizations.delegate, - ], - locale: Locale(value.language), - supportedLocales: const [ - Locale('en'), - Locale('fa'), - ], ); }, ); diff --git a/lib/screens/auth/login_screen.dart b/lib/screens/auth/login_screen.dart index 6eabe25..dbd2ad1 100644 --- a/lib/screens/auth/login_screen.dart +++ b/lib/screens/auth/login_screen.dart @@ -152,9 +152,9 @@ class _LoginScreenState extends State { isError: true, context, ); - } else { String? token = await messaging.getToken(); + } else { final status = await state.login( - fcm_token: token??'', + mobile: phoneController.text, password: passwordController.text); if (status == Status.ready) { diff --git a/lib/screens/auth/otp_screen.dart b/lib/screens/auth/otp_screen.dart index d984672..9332a83 100644 --- a/lib/screens/auth/otp_screen.dart +++ b/lib/screens/auth/otp_screen.dart @@ -132,6 +132,7 @@ class _OtpScreenState extends State { }, ), ), + ], ), ], @@ -183,10 +184,9 @@ class _OtpScreenState extends State { } void otpCheckCode(onSubmitted, AuthState value) async { - String? token = await messaging.getToken(); if (onSubmitted.length == 4) { - final status = await value.login( - mobile: widget.phoneNumber, otp: onSubmitted, fcm_token: token ?? ''); + final status = + await value.login(mobile: widget.phoneNumber, otp: onSubmitted); if (status == Status.ready) { context.goNamed('navigate', pathParameters: {'tab': '0'}); } else if (status == Status.error) { diff --git a/lib/screens/auth/state/state.dart b/lib/screens/auth/state/state.dart index f5f78a0..c47e1f9 100644 --- a/lib/screens/auth/state/state.dart +++ b/lib/screens/auth/state/state.dart @@ -25,13 +25,13 @@ class AuthState extends ChangeNotifier { {required String mobile, String? password, String? otp, - required String fcm_token}) async { + }) async { assert(password != null || otp != null); statusLogin = Status.loading; notifyListeners(); try { final result = await authServises.loginApi( - mobile: mobile, password: password, otp: otp, fcm_token: fcm_token); + mobile: mobile, password: password, otp: otp, ); if (result == null) { statusLogin = Status.error; } else { diff --git a/lib/services/auth/auth.dart b/lib/services/auth/auth.dart index 00b6e6a..d4dc85e 100644 --- a/lib/services/auth/auth.dart +++ b/lib/services/auth/auth.dart @@ -1,26 +1,36 @@ +import 'package:flutter/foundation.dart'; // برای شناسایی پلتفرم import 'package:dio/dio.dart'; import 'package:qadirneyriz/config/config.dart'; +import 'package:qadirneyriz/main.dart'; import 'package:qadirneyriz/setting/setting.dart'; import 'package:qadirneyriz/utils/result/result.dart'; class AuthServices { - Future loginApi( - {required String mobile, - String? password, - String? otp, - required String fcm_token}) async { + Future loginApi({ + required String mobile, + String? password, + String? otp, + }) async { + String? token; + + token = await messaging.getToken(); + assert(password != null || otp != null); + try { Map headers = {"Accept": "application/json"}; - FormData? formData; + FormData formData; formData = password != null ? FormData.fromMap( - {"mobile": mobile, "password": password, "device_id": fcm_token}) + {"mobile": mobile, "password": password, "device_id": token}) : FormData.fromMap( - {"mobile": mobile, "otp": otp, "device_id": fcm_token}); + {"mobile": mobile, "otp": otp, "device_id": token}); + print('${formData.fields} resData'); - final res = await Dio().post("${config.network.baseUrl}login", - data: formData, options: Options(headers: headers)); + final res = await Dio().post( + "${config.network.baseUrl}login?lang=${setting.userLocalDb.getUser().language}", + data: formData, + options: Options(headers: headers)); if (res.statusCode == 200 || res.statusCode == 201) { setting.userLocalDb.saveUserField('token', res.data['token']); @@ -34,8 +44,8 @@ class AuthServices { print(e); return Result( isOk: false, - errors: e.response!.data['errors'], - message: e.response!.data['msg']); + errors: e.response?.data['errors'], + message: e.response?.data['msg']); } return const Result(isOk: false); } @@ -43,11 +53,12 @@ class AuthServices { Future sendOtpApi({required String mobile}) async { try { Map headers = {"Accept": "application/json"}; - FormData? formData; - formData = FormData.fromMap({"mobile": mobile}); + FormData formData = FormData.fromMap({"mobile": mobile}); - final res = await Dio().post("${config.network.baseUrl}sendOtp", - data: formData, options: Options(headers: headers)); + final res = await Dio().post( + "${config.network.baseUrl}sendOtp?lang=${setting.userLocalDb.getUser().language}", + data: formData, + options: Options(headers: headers)); if (res.statusCode == 200 || res.statusCode == 201) { return Result(isOk: true, message: res.data['msg']); @@ -55,8 +66,8 @@ class AuthServices { } on DioException catch (e) { return Result( isOk: false, - errors: e.response!.data['errors'], - message: e.response!.data['msg']); + errors: e.response?.data['errors'], + message: e.response?.data['msg']); } return const Result(isOk: false); } diff --git a/lib/services/home/home.dart b/lib/services/home/home.dart index b3eb168..0f5f4df 100644 --- a/lib/services/home/home.dart +++ b/lib/services/home/home.dart @@ -35,7 +35,8 @@ class HomeApi { headers['Authorization'] = "Bearer $dataToken"; } - final res = await Dio().post("${config.network.baseUrl}admin/logout", + final res = await Dio().post( + "${config.network.baseUrl}admin/logout?lang=${setting.userLocalDb.getUser().language}", options: Options(headers: headers)); if (res.statusCode == 200 || res.statusCode == 201) { @@ -64,7 +65,7 @@ class HomeApi { } final res = await Dio().post( - "${config.network.baseUrl}user/deleteaccount", + "${config.network.baseUrl}user/deleteaccount?lang=${setting.userLocalDb.getUser().language}", options: Options(headers: headers)); if (res.statusCode == 200 || res.statusCode == 201) { @@ -93,7 +94,8 @@ class HomeApi { headers['Authorization'] = "Bearer $dataToken"; } - final res = await Dio().post("${config.network.baseUrl}edit-profile", + final res = await Dio().post( + "${config.network.baseUrl}edit-profile?lang=${setting.userLocalDb.getUser().language}", options: Options( headers: headers, ), diff --git a/macos/Flutter/Flutter-Debug.xcconfig b/macos/Flutter/Flutter-Debug.xcconfig index c2efd0b..4b81f9b 100644 --- a/macos/Flutter/Flutter-Debug.xcconfig +++ b/macos/Flutter/Flutter-Debug.xcconfig @@ -1 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/macos/Flutter/Flutter-Release.xcconfig b/macos/Flutter/Flutter-Release.xcconfig index c2efd0b..5caa9d1 100644 --- a/macos/Flutter/Flutter-Release.xcconfig +++ b/macos/Flutter/Flutter-Release.xcconfig @@ -1 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "ephemeral/Flutter-Generated.xcconfig" diff --git a/macos/Podfile b/macos/Podfile new file mode 100644 index 0000000..c795730 --- /dev/null +++ b/macos/Podfile @@ -0,0 +1,43 @@ +platform :osx, '10.14' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_macos_podfile_setup + +target 'Runner' do + use_frameworks! + use_modular_headers! + + flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_macos_build_settings(target) + end +end diff --git a/pubspec.lock b/pubspec.lock index 88992b1..06b7bd4 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -142,6 +142,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.1" + change_app_package_name: + dependency: "direct dev" + description: + name: change_app_package_name + sha256: "1d6ca5fbaba7264f70857941543337b2efe48f19ae2eef29b89927541b52a787" + url: "https://pub.dev" + source: hosted + version: "1.4.0" characters: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index f23c33d..ff0034f 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -3,7 +3,7 @@ description: "A new Flutter project." publish_to: 'none' -version: 1.0.0+1 +version: 1.0.3+3 environment: sdk: ^3.5.3 @@ -43,6 +43,7 @@ dev_dependencies: sdk: flutter # flutter_lints: ^4.0.0 build_runner: ^2.4.9 + change_app_package_name: ^1.4.0 flutter: