diff --git a/.flutter-plugins-dependencies b/.flutter-plugins-dependencies index 19430da..ccf24f7 100644 --- a/.flutter-plugins-dependencies +++ b/.flutter-plugins-dependencies @@ -1 +1 @@ -{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"apple_sign_in","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/apple_sign_in-0.1.0/","dependencies":[]},{"name":"cloud_firestore","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/cloud_firestore-0.13.7/","dependencies":["firebase_core"]},{"name":"contacts_service","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/contacts_service-0.4.6/","dependencies":[]},{"name":"firebase_auth","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_auth-0.15.5+3/","dependencies":["firebase_core"]},{"name":"firebase_core","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_core-0.4.5/","dependencies":[]},{"name":"flutter_keyboard_visibility","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_keyboard_visibility-3.3.0/","dependencies":[]},{"name":"flutter_money_formatter","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_money_formatter-0.8.3/","dependencies":[]},{"name":"google_sign_in","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/google_sign_in-4.5.6/","dependencies":[]},{"name":"permission_handler","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/permission_handler-4.4.0+hotfix.4/","dependencies":[]},{"name":"shared_preferences","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/shared_preferences-0.5.12+4/","dependencies":[]}],"android":[{"name":"apple_sign_in","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/apple_sign_in-0.1.0/","dependencies":[]},{"name":"cloud_firestore","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/cloud_firestore-0.13.7/","dependencies":["firebase_core"]},{"name":"contacts_service","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/contacts_service-0.4.6/","dependencies":[]},{"name":"firebase_auth","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_auth-0.15.5+3/","dependencies":["firebase_core"]},{"name":"firebase_core","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_core-0.4.5/","dependencies":[]},{"name":"flutter_keyboard_visibility","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_keyboard_visibility-3.3.0/","dependencies":[]},{"name":"flutter_money_formatter","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_money_formatter-0.8.3/","dependencies":[]},{"name":"google_sign_in","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/google_sign_in-4.5.6/","dependencies":[]},{"name":"permission_handler","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/permission_handler-4.4.0+hotfix.4/","dependencies":[]},{"name":"shared_preferences","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/shared_preferences-0.5.12+4/","dependencies":[]}],"macos":[{"name":"cloud_firestore","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/cloud_firestore-0.13.7/","dependencies":["firebase_core"]},{"name":"firebase_auth","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_auth-0.15.5+3/","dependencies":["firebase_core"]},{"name":"firebase_core","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_core-0.4.5/","dependencies":[]},{"name":"shared_preferences_macos","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/shared_preferences_macos-0.0.1+11/","dependencies":[]}],"linux":[{"name":"path_provider_linux","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/path_provider_linux-0.0.1+2/","dependencies":[]},{"name":"shared_preferences_linux","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/shared_preferences_linux-0.0.2+4/","dependencies":["path_provider_linux"]}],"windows":[{"name":"path_provider_windows","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/path_provider_windows-0.0.4+3/","dependencies":[]},{"name":"shared_preferences_windows","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/shared_preferences_windows-0.0.1+3/","dependencies":["path_provider_windows"]}],"web":[{"name":"cloud_firestore_web","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/cloud_firestore_web-0.1.1+2/","dependencies":[]},{"name":"firebase_auth_web","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_auth_web-0.1.3+1/","dependencies":[]},{"name":"firebase_core_web","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_core_web-0.1.1+2/","dependencies":[]},{"name":"google_sign_in_web","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/google_sign_in_web-0.9.2/","dependencies":[]},{"name":"shared_preferences_web","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/shared_preferences_web-0.1.2+7/","dependencies":[]}]},"dependencyGraph":[{"name":"apple_sign_in","dependencies":[]},{"name":"cloud_firestore","dependencies":["firebase_core","cloud_firestore_web"]},{"name":"cloud_firestore_web","dependencies":["firebase_core"]},{"name":"contacts_service","dependencies":[]},{"name":"firebase_auth","dependencies":["firebase_core","firebase_auth_web"]},{"name":"firebase_auth_web","dependencies":[]},{"name":"firebase_core","dependencies":["firebase_core_web"]},{"name":"firebase_core_web","dependencies":[]},{"name":"flutter_keyboard_visibility","dependencies":[]},{"name":"flutter_money_formatter","dependencies":[]},{"name":"google_sign_in","dependencies":["google_sign_in_web"]},{"name":"google_sign_in_web","dependencies":[]},{"name":"path_provider_linux","dependencies":[]},{"name":"path_provider_windows","dependencies":[]},{"name":"permission_handler","dependencies":[]},{"name":"shared_preferences","dependencies":["shared_preferences_linux","shared_preferences_macos","shared_preferences_web","shared_preferences_windows"]},{"name":"shared_preferences_linux","dependencies":["path_provider_linux"]},{"name":"shared_preferences_macos","dependencies":[]},{"name":"shared_preferences_web","dependencies":[]},{"name":"shared_preferences_windows","dependencies":["path_provider_windows"]}],"date_created":"2021-01-01 11:31:04.543602","version":"1.17.5"} \ No newline at end of file +{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"apple_sign_in","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/apple_sign_in-0.1.0/","dependencies":[]},{"name":"cloud_firestore","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/cloud_firestore-2.2.2/","dependencies":["firebase_core"]},{"name":"contacts_service","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/contacts_service-0.6.1/","dependencies":[]},{"name":"firebase_auth","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_auth-1.4.1/","dependencies":["firebase_core"]},{"name":"firebase_core","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_core-1.3.0/","dependencies":[]},{"name":"flutter_keyboard_visibility","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_keyboard_visibility-5.0.2/","dependencies":[]},{"name":"google_sign_in","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/google_sign_in-5.0.4/","dependencies":[]},{"name":"permission_handler","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/permission_handler-8.1.0/","dependencies":[]},{"name":"shared_preferences","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/shared_preferences-2.0.6/","dependencies":[]}],"android":[{"name":"apple_sign_in","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/apple_sign_in-0.1.0/","dependencies":[]},{"name":"cloud_firestore","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/cloud_firestore-2.2.2/","dependencies":["firebase_core"]},{"name":"contacts_service","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/contacts_service-0.6.1/","dependencies":[]},{"name":"firebase_auth","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_auth-1.4.1/","dependencies":["firebase_core"]},{"name":"firebase_core","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_core-1.3.0/","dependencies":[]},{"name":"flutter_keyboard_visibility","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_keyboard_visibility-5.0.2/","dependencies":[]},{"name":"google_sign_in","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/google_sign_in-5.0.4/","dependencies":[]},{"name":"permission_handler","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/permission_handler-8.1.0/","dependencies":[]},{"name":"shared_preferences","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/shared_preferences-2.0.6/","dependencies":[]}],"macos":[{"name":"cloud_firestore","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/cloud_firestore-2.2.2/","dependencies":["firebase_core"]},{"name":"firebase_auth","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_auth-1.4.1/","dependencies":["firebase_core"]},{"name":"firebase_core","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_core-1.3.0/","dependencies":[]},{"name":"shared_preferences_macos","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/shared_preferences_macos-2.0.0/","dependencies":[]}],"linux":[{"name":"path_provider_linux","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/path_provider_linux-2.0.0/","dependencies":[]},{"name":"shared_preferences_linux","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/shared_preferences_linux-2.0.0/","dependencies":["path_provider_linux"]}],"windows":[{"name":"path_provider_windows","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/path_provider_windows-2.0.1/","dependencies":[]},{"name":"shared_preferences_windows","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/shared_preferences_windows-2.0.0/","dependencies":["path_provider_windows"]}],"web":[{"name":"cloud_firestore_web","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/cloud_firestore_web-2.1.2/","dependencies":["firebase_core_web"]},{"name":"firebase_auth_web","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_auth_web-1.3.1/","dependencies":["firebase_core_web"]},{"name":"firebase_core_web","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_core_web-1.1.0/","dependencies":[]},{"name":"flutter_keyboard_visibility_web","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_keyboard_visibility_web-2.0.0/","dependencies":[]},{"name":"google_sign_in_web","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/google_sign_in_web-0.10.0/","dependencies":[]},{"name":"shared_preferences_web","path":"/Users/mroudnitski/flutter/.pub-cache/hosted/pub.dartlang.org/shared_preferences_web-2.0.0/","dependencies":[]}]},"dependencyGraph":[{"name":"apple_sign_in","dependencies":[]},{"name":"cloud_firestore","dependencies":["cloud_firestore_web","firebase_core"]},{"name":"cloud_firestore_web","dependencies":["firebase_core","firebase_core_web"]},{"name":"contacts_service","dependencies":[]},{"name":"firebase_auth","dependencies":["firebase_auth_web","firebase_core"]},{"name":"firebase_auth_web","dependencies":["firebase_core","firebase_core_web"]},{"name":"firebase_core","dependencies":["firebase_core_web"]},{"name":"firebase_core_web","dependencies":[]},{"name":"flutter_keyboard_visibility","dependencies":["flutter_keyboard_visibility_web"]},{"name":"flutter_keyboard_visibility_web","dependencies":[]},{"name":"google_sign_in","dependencies":["google_sign_in_web"]},{"name":"google_sign_in_web","dependencies":[]},{"name":"path_provider_linux","dependencies":[]},{"name":"path_provider_windows","dependencies":[]},{"name":"permission_handler","dependencies":[]},{"name":"shared_preferences","dependencies":["shared_preferences_linux","shared_preferences_macos","shared_preferences_web","shared_preferences_windows"]},{"name":"shared_preferences_linux","dependencies":["path_provider_linux"]},{"name":"shared_preferences_macos","dependencies":[]},{"name":"shared_preferences_web","dependencies":[]},{"name":"shared_preferences_windows","dependencies":["path_provider_windows"]}],"date_created":"2021-06-13 20:27:08.299971","version":"2.2.2"} \ No newline at end of file diff --git a/ios/Flutter/.last_build_id b/ios/Flutter/.last_build_id new file mode 100644 index 0000000..ff0923d --- /dev/null +++ b/ios/Flutter/.last_build_id @@ -0,0 +1 @@ +0ee5d69d6a78cf951183509e3c06a54e \ No newline at end of file diff --git a/ios/Flutter/AppFrameworkInfo.plist b/ios/Flutter/AppFrameworkInfo.plist index 6b4c0f7..a3cfa71 100644 --- a/ios/Flutter/AppFrameworkInfo.plist +++ b/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 8.0 + 10.2 diff --git a/ios/Podfile b/ios/Podfile index 1e8c3c9..a16ce49 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -# platform :ios, '9.0' +platform :ios, '10.2' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' @@ -37,5 +37,8 @@ end post_install do |installer| installer.pods_project.targets.each do |target| flutter_additional_ios_build_settings(target) + target.build_configurations.each do |config| + config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '10.2' + end end end diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 1a57dc1..f37b12d 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -255,9 +255,50 @@ files = ( ); inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh", + "${BUILT_PRODUCTS_DIR}/AppAuth/AppAuth.framework", + "${BUILT_PRODUCTS_DIR}/BoringSSL-GRPC/openssl_grpc.framework", + "${BUILT_PRODUCTS_DIR}/FirebaseAuth/FirebaseAuth.framework", + "${BUILT_PRODUCTS_DIR}/FirebaseCore/FirebaseCore.framework", + "${BUILT_PRODUCTS_DIR}/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.framework", + "${BUILT_PRODUCTS_DIR}/FirebaseFirestore/FirebaseFirestore.framework", + "${BUILT_PRODUCTS_DIR}/GTMAppAuth/GTMAppAuth.framework", + "${BUILT_PRODUCTS_DIR}/GTMSessionFetcher/GTMSessionFetcher.framework", + "${BUILT_PRODUCTS_DIR}/GoogleDataTransport/GoogleDataTransport.framework", + "${BUILT_PRODUCTS_DIR}/GoogleUtilities/GoogleUtilities.framework", + "${BUILT_PRODUCTS_DIR}/PromisesObjC/FBLPromises.framework", + "${BUILT_PRODUCTS_DIR}/abseil/absl.framework", + "${BUILT_PRODUCTS_DIR}/apple_sign_in/apple_sign_in.framework", + "${BUILT_PRODUCTS_DIR}/contacts_service/contacts_service.framework", + "${BUILT_PRODUCTS_DIR}/flutter_keyboard_visibility/flutter_keyboard_visibility.framework", + "${BUILT_PRODUCTS_DIR}/gRPC-C++/grpcpp.framework", + "${BUILT_PRODUCTS_DIR}/gRPC-Core/grpc.framework", + "${BUILT_PRODUCTS_DIR}/leveldb-library/leveldb.framework", + "${BUILT_PRODUCTS_DIR}/nanopb/nanopb.framework", + "${BUILT_PRODUCTS_DIR}/shared_preferences/shared_preferences.framework", ); name = "[CP] Embed Pods Frameworks"; outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AppAuth.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/openssl_grpc.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseAuth.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCore.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCoreDiagnostics.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseFirestore.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GTMAppAuth.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GTMSessionFetcher.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleDataTransport.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleUtilities.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FBLPromises.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/absl.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/apple_sign_in.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/contacts_service.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_keyboard_visibility.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/grpcpp.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/grpc.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/leveldb.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/nanopb.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/shared_preferences.framework", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -270,9 +311,12 @@ files = ( ); inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh", + "${PODS_ROOT}/GoogleSignIn/Resources/GoogleSignIn.bundle", ); name = "[CP] Copy Pods Resources"; outputPaths = ( + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleSignIn.bundle", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -329,7 +373,6 @@ /* Begin XCBuildConfiguration section */ 249021D3217E4FDB00AE95B9 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; @@ -385,7 +428,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; - CURRENT_PROJECT_VERSION = 8; + CURRENT_PROJECT_VERSION = 2; DEVELOPMENT_TEAM = 6T9H3VD4F5; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( @@ -399,19 +442,18 @@ "$(inherited)", "$(PROJECT_DIR)/Flutter", ); - MARKETING_VERSION = 1.0.0; + MARKETING_VERSION = 1.0.4; PRODUCT_BUNDLE_IDENTIFIER = com.mroudnitski.tabs; PRODUCT_NAME = Runner; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = 1; + TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; }; name = Profile; }; 97C147031CF9000F007C117D /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; @@ -467,7 +509,6 @@ }; 97C147041CF9000F007C117D /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; @@ -524,7 +565,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; - CURRENT_PROJECT_VERSION = 8; + CURRENT_PROJECT_VERSION = 2; DEVELOPMENT_TEAM = 6T9H3VD4F5; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( @@ -538,13 +579,13 @@ "$(inherited)", "$(PROJECT_DIR)/Flutter", ); - MARKETING_VERSION = 1.0.0; + MARKETING_VERSION = 1.0.4; PRODUCT_BUNDLE_IDENTIFIER = com.mroudnitski.tabs; PRODUCT_NAME = Runner; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = 1; + TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; }; name = Debug; @@ -556,7 +597,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; - CURRENT_PROJECT_VERSION = 8; + CURRENT_PROJECT_VERSION = 2; DEVELOPMENT_TEAM = 6T9H3VD4F5; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( @@ -570,12 +611,12 @@ "$(inherited)", "$(PROJECT_DIR)/Flutter", ); - MARKETING_VERSION = 1.0.0; + MARKETING_VERSION = 1.0.4; PRODUCT_BUNDLE_IDENTIFIER = com.mroudnitski.tabs; PRODUCT_NAME = Runner; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = 1; + TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; }; name = Release; diff --git a/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata index 1d526a1..919434a 100644 --- a/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ b/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -2,6 +2,6 @@ + location = "self:"> diff --git a/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d9810..0000000 --- a/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/lib/controllers/suggestionsController.dart b/lib/controllers/suggestionsController.dart index bf554df..1a09bbc 100644 --- a/lib/controllers/suggestionsController.dart +++ b/lib/controllers/suggestionsController.dart @@ -11,16 +11,18 @@ abstract class SuggestionsController { static Future> fetchSuggestions() async { try { - FirebaseUser user = await Auth.getCurrentUser(); - DocumentSnapshot doc = await Firestore.instance + User user = await Auth.getCurrentUser(); + DocumentSnapshot doc = await FirebaseFirestore.instance .collection("suggestions") - .document(user.uid) + .doc(user.uid) .get(); if (doc == null) return _defaultSuggestions; + + Map data = doc.data() as Map; return { - "names": List.from(doc.data["names"]), - "amounts": List.from(doc.data["amounts"]), - "descriptions": Map.from(doc.data["descriptions"]) + "names": List.from(data["names"]), + "amounts": List.from(data["amounts"]), + "descriptions": Map.from(data["descriptions"]) }; } catch (e) { return null; @@ -28,10 +30,10 @@ abstract class SuggestionsController { } static void updateSuggestions(Map suggestions) async { - FirebaseUser user = await Auth.getCurrentUser(); - await Firestore.instance + User user = await Auth.getCurrentUser(); + await FirebaseFirestore.instance .collection("suggestions") - .document(user.uid) - .setData(suggestions); + .doc(user.uid) + .set(suggestions); } } diff --git a/lib/controllers/tabsController.dart b/lib/controllers/tabsController.dart index 4129ef6..49638c9 100644 --- a/lib/controllers/tabsController.dart +++ b/lib/controllers/tabsController.dart @@ -5,7 +5,7 @@ import 'package:flutter/services.dart'; abstract class TabsController { static Stream getUsersTabs(String uid) { - return Firestore.instance + return FirebaseFirestore.instance .collection("tabs") .where("uid", isEqualTo: uid) .snapshots(); @@ -17,9 +17,9 @@ abstract class TabsController { String description, bool userOwesFriend, }) async { - FirebaseUser user = await Auth.getCurrentUser(); + User user = await Auth.getCurrentUser(); HapticFeedback.mediumImpact(); - return Firestore.instance.collection("tabs").add({ + return FirebaseFirestore.instance.collection("tabs").add({ "name": name, "amount": amount, "description": description, @@ -32,37 +32,37 @@ abstract class TabsController { static Future updateAmount(String tabId, double newAmount) { HapticFeedback.mediumImpact(); - return Firestore.instance + return FirebaseFirestore.instance .collection("tabs") - .document(tabId) - .updateData({"amount": newAmount}); + .doc(tabId) + .update({"amount": newAmount}); } static Future closeTab(String tabId) { HapticFeedback.mediumImpact(); - return Firestore.instance + return FirebaseFirestore.instance .collection("tabs") - .document(tabId) - .updateData({"closed": true, "timeClosed": DateTime.now()}); + .doc(tabId) + .update({"closed": true, "timeClosed": DateTime.now()}); } static Future reopenTab(String tabId) { HapticFeedback.mediumImpact(); - return Firestore.instance + return FirebaseFirestore.instance .collection("tabs") - .document(tabId) - .updateData({"closed": false, "timeClosed": null}); + .doc(tabId) + .update({"closed": false, "timeClosed": null}); } static Future deleteTab(String tabId) { HapticFeedback.mediumImpact(); - return Firestore.instance.collection("tabs").document(tabId).delete(); + return FirebaseFirestore.instance.collection("tabs").doc(tabId).delete(); } static Future closeAllTabs(Iterable tabs) async { - WriteBatch writeBatch = Firestore.instance.batch(); + WriteBatch writeBatch = FirebaseFirestore.instance.batch(); tabs.forEach((t) { - writeBatch.updateData( + writeBatch.update( t.reference, {"closed": true, "timeClosed": DateTime.now()}); }); writeBatch.commit(); @@ -70,7 +70,7 @@ abstract class TabsController { } static Future deleteAllTabs(Iterable tabs) async { - WriteBatch writeBatch = Firestore.instance.batch(); + WriteBatch writeBatch = FirebaseFirestore.instance.batch(); tabs.forEach((t) { writeBatch.delete(t.reference); }); diff --git a/lib/create.form.dart b/lib/create.form.dart index b7d673e..b158c00 100644 --- a/lib/create.form.dart +++ b/lib/create.form.dart @@ -34,12 +34,6 @@ class _CreateFormState extends State { bool userOwesFriend = false; bool suggestionsRemovable = false; - @override - void initState() { - super.initState(); - Contacts.checkPermission(); - } - @override void dispose() { // Clean up the focus nodes when the Form is disposed. diff --git a/lib/main.dart b/lib/main.dart index 2826d09..c219867 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,3 +1,4 @@ +import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_auth/firebase_auth.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; @@ -10,7 +11,11 @@ import 'package:tabs/screens/settings.dart'; import 'package:tabs/screens/welcome.dart'; import 'package:tabs/services/auth.dart'; -void main() => runApp(App()); +void main() async { + WidgetsFlutterBinding.ensureInitialized(); + await Firebase.initializeApp(); + runApp(App()); +} class App extends StatelessWidget { final Color primaryColor = Color(0xff03da9d); @@ -60,11 +65,11 @@ class App extends StatelessWidget { Register.id: (context) => Register(), Login.id: (context) => Login(), NewTab.id: (context) => NewTab(), - Settings.id: (context) => Settings() + SettingsScreen.id: (context) => SettingsScreen() }, - home: FutureBuilder( + home: FutureBuilder( future: Auth.getCurrentUser(), - builder: (context, AsyncSnapshot userSnapshot) { + builder: (context, AsyncSnapshot userSnapshot) { if (userSnapshot.connectionState == ConnectionState.done) { if (userSnapshot.error != null) { print("error"); diff --git a/lib/providers/settingsState.dart b/lib/providers/settingsState.dart index 65a8d36..2b0eb5f 100644 --- a/lib/providers/settingsState.dart +++ b/lib/providers/settingsState.dart @@ -1,5 +1,6 @@ import 'package:shared_preferences/shared_preferences.dart'; import 'package:flutter/material.dart'; +import 'package:money2/money2.dart'; class SettingsState with ChangeNotifier { static const currencies = [ @@ -17,14 +18,15 @@ class SettingsState with ChangeNotifier { '฿', '₪' ]; - String selectedCurrency = "\$"; + Currency selectedCurrency = Currencies.find("USD"); SettingsState() { + CommonCurrencies().registerAll(); fetchSettings(); } - void selectCurrency(String currency) { - selectedCurrency = currency; + void selectCurrency(String currencyCode) { + selectedCurrency = Currencies.find(currencyCode); notifyListeners(); updateSettings(); } @@ -32,9 +34,9 @@ class SettingsState with ChangeNotifier { void fetchSettings() async { SharedPreferences prefs = await SharedPreferences.getInstance(); try { - String currency = prefs.getString('currency') ?? "\$"; + String currency = prefs.getString('currency') ?? "USD"; print(currency); - if (currency != "\$") selectCurrency(currency); + selectCurrency(currency); } catch (e) { return null; } @@ -42,6 +44,6 @@ class SettingsState with ChangeNotifier { void updateSettings() async { SharedPreferences prefs = await SharedPreferences.getInstance(); - await prefs.setString('currency', selectedCurrency); + await prefs.setString('currency', selectedCurrency.code); } } diff --git a/lib/providers/tabsState.dart b/lib/providers/tabsState.dart index 267470e..a43e530 100644 --- a/lib/providers/tabsState.dart +++ b/lib/providers/tabsState.dart @@ -15,8 +15,8 @@ class TabsState with ChangeNotifier { List openTabs(QuerySnapshot tabs) { // make sure we clear the name filter if all the tabs have been removed for that person - if (tabs.documents.where((t) => nameMatches(t["name"])).isEmpty) _name = ""; - return tabs.documents + if (tabs.docs.where((t) => nameMatches(t["name"])).isEmpty) _name = ""; + return tabs.docs .where((t) => t["closed"] == false) .where((t) => nameMatches(t["name"])) .toList() @@ -24,7 +24,7 @@ class TabsState with ChangeNotifier { } List closedTabs(QuerySnapshot tabs) { - return tabs.documents + return tabs.docs .where((t) => t["closed"] == true) .where((t) => nameMatches(t["name"])) .toList() diff --git a/lib/screens/home.dart b/lib/screens/home.dart index 05007a2..f1af953 100644 --- a/lib/screens/home.dart +++ b/lib/screens/home.dart @@ -47,7 +47,7 @@ class Home extends StatelessWidget { color: Theme.of(context).accentColor, icon: Icon(Icons.settings), onPressed: () { - Navigator.of(context).pushNamed(Settings.id); + Navigator.of(context).pushNamed(SettingsScreen.id); }, ), ), diff --git a/lib/screens/settings.dart b/lib/screens/settings.dart index d9d6b17..0bc72fc 100644 --- a/lib/screens/settings.dart +++ b/lib/screens/settings.dart @@ -7,14 +7,14 @@ import 'package:tabs/widgets/confirmDialog.dart'; import 'package:tabs/services/auth.dart'; import 'package:tabs/screens/welcome.dart'; -class Settings extends StatefulWidget { +class SettingsScreen extends StatefulWidget { static const String id = "/settings"; @override _SettingsState createState() => _SettingsState(); } -class _SettingsState extends State { +class _SettingsState extends State { final currencies = SettingsState.currencies; @override @@ -71,7 +71,7 @@ class _SettingsState extends State { future: Auth.getCurrentUser(), builder: ( BuildContext context, - AsyncSnapshot snapshot, + AsyncSnapshot snapshot, ) { if (snapshot.hasData) { return Column( @@ -82,7 +82,7 @@ class _SettingsState extends State { Text(snapshot.data.email, style: Theme.of(context).textTheme.subtitle1), - if (!snapshot.data.isEmailVerified) + if (!snapshot.data.emailVerified) Text( "Account pending email verification", style: TextStyle(color: Colors.orange), diff --git a/lib/services/auth.dart b/lib/services/auth.dart index 17db4a8..0de66bd 100644 --- a/lib/services/auth.dart +++ b/lib/services/auth.dart @@ -6,16 +6,16 @@ import 'package:google_sign_in/google_sign_in.dart'; abstract class Auth { static Future signIn(String email, String password) async { - AuthResult result = await FirebaseAuth.instance + UserCredential result = await FirebaseAuth.instance .signInWithEmailAndPassword(email: email, password: password); - FirebaseUser user = result.user; + User user = result.user; return user.uid; } static Future signUp(String email, String password) async { - AuthResult result = await FirebaseAuth.instance + UserCredential result = await FirebaseAuth.instance .createUserWithEmailAndPassword(email: email, password: password); - FirebaseUser user = result.user; + User user = result.user; return user.uid; } @@ -27,14 +27,13 @@ abstract class Auth { switch (result.status) { case AuthorizationStatus.authorized: final AppleIdCredential appleIdCredential = result.credential; - final OAuthProvider oAuthProvider = - OAuthProvider(providerId: "apple.com"); - final AuthCredential credential = oAuthProvider.getCredential( + final OAuthProvider oAuthProvider = OAuthProvider("apple.com"); + final AuthCredential credential = oAuthProvider.credential( idToken: String.fromCharCodes(appleIdCredential.identityToken), accessToken: String.fromCharCodes(appleIdCredential.authorizationCode), ); - final AuthResult _res = + final UserCredential _res = await FirebaseAuth.instance.signInWithCredential(credential); return _res.user.uid; break; @@ -58,20 +57,19 @@ abstract class Auth { final GoogleSignInAuthentication googleSignInAuthentication = await googleAccount.authentication; - final AuthCredential credential = GoogleAuthProvider.getCredential( + final AuthCredential credential = GoogleAuthProvider.credential( accessToken: googleSignInAuthentication.accessToken, idToken: googleSignInAuthentication.idToken, ); - final AuthResult authResult = + final UserCredential authResult = await FirebaseAuth.instance.signInWithCredential(credential); - final FirebaseUser user = authResult.user; + final User user = authResult.user; assert(!user.isAnonymous); assert(await user.getIdToken() != null); - final FirebaseUser currentUser = - await FirebaseAuth.instance.currentUser(); + final User currentUser = FirebaseAuth.instance.currentUser; assert(user.uid == currentUser.uid); return user.uid; } catch (error) { @@ -91,25 +89,25 @@ abstract class Auth { return FirebaseAuth.instance.signOut(); } - static Future getCurrentUser() async { - FirebaseUser user = await FirebaseAuth.instance.currentUser(); + static Future getCurrentUser() async { + User user = await FirebaseAuth.instance.currentUser; return user; } static Future sendEmailVerification() async { - FirebaseUser user = await FirebaseAuth.instance.currentUser(); + User user = await FirebaseAuth.instance.currentUser; user.sendEmailVerification(); } static Future isEmailVerified() async { - FirebaseUser user = await FirebaseAuth.instance.currentUser(); + User user = await FirebaseAuth.instance.currentUser; try { await user.reload(); } catch (e) { - return user.isEmailVerified; + return user.emailVerified; } - user = await FirebaseAuth.instance.currentUser(); - return user.isEmailVerified; + user = await FirebaseAuth.instance.currentUser; + return user.emailVerified; } static Future resetPassword(email) async { diff --git a/lib/services/contacts.dart b/lib/services/contacts.dart index e5c43f1..aa456ea 100644 --- a/lib/services/contacts.dart +++ b/lib/services/contacts.dart @@ -5,24 +5,6 @@ class Contacts { static List _contacts; static bool hasRequestedThisSession = false; - static Future checkPermission() async { - PermissionStatus permission = await PermissionHandler() - .checkPermissionStatus(PermissionGroup.contacts); - bool showRationale = await PermissionHandler() - .shouldShowRequestPermissionRationale(PermissionGroup.contacts) && - !hasRequestedThisSession; - if (permission == PermissionStatus.unknown || showRationale) { - // ask the user for contact permission - Map statuses = - await PermissionHandler() - .requestPermissions([PermissionGroup.contacts]); - hasRequestedThisSession = true; - return statuses[PermissionGroup.contacts]; - } else { - return permission; - } - } - static Future _getContacts() async { try { Iterable contacts = @@ -38,9 +20,9 @@ class Contacts { } static Future> queryContacts(pattern) async { - if (_contacts == null && - await checkPermission() == PermissionStatus.granted) + if (_contacts == null && await Permission.contacts.request().isGranted) await _getContacts(); + if (_contacts != null && _contacts.length > 0 && pattern.length > 0) { return _contacts .where((contact) => diff --git a/lib/widgets/changeAmountDialog.dart b/lib/widgets/changeAmountDialog.dart index 5f3df9e..c1f543a 100644 --- a/lib/widgets/changeAmountDialog.dart +++ b/lib/widgets/changeAmountDialog.dart @@ -53,7 +53,7 @@ class _ChangeAmountDialogState extends State { try { double newAmount = double.parse(_amountController.text); TabsController.updateAmount( - widget.tab.documentID, newAmount); + widget.tab.id, newAmount); Navigator.pop(context); Navigator.pop(context); } catch (e) {} diff --git a/lib/widgets/tabCard.dart b/lib/widgets/tabCard.dart index 1f55f5a..6069e5d 100644 --- a/lib/widgets/tabCard.dart +++ b/lib/widgets/tabCard.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; -import 'package:flutter_money_formatter/flutter_money_formatter.dart'; +import 'package:money2/money2.dart'; import 'package:provider/provider.dart'; import 'package:tabs/providers/tabsState.dart'; import 'package:tabs/providers/settingsState.dart'; @@ -20,7 +20,8 @@ class TabCard extends StatelessWidget { child: InkWell( borderRadius: BorderRadius.circular(18), onLongPress: () { - Provider.of(context, listen: false).filterByName(this.tab["name"]); + Provider.of(context, listen: false) + .filterByName(this.tab["name"]); }, onTap: () { showModalBottomSheet( @@ -42,7 +43,8 @@ class TabCard extends StatelessWidget { style: Theme.of(context).textTheme.subtitle1, ), Text( - "${Provider.of(context).selectedCurrency} ${FlutterMoneyFormatter(amount: this.tab["amount"]).output.nonSymbol}", + Money.from(this.tab["amount"], Currencies.find('USD')) + .toString(), style: Theme.of(context) .textTheme .headline5 diff --git a/lib/widgets/tabModal.dart b/lib/widgets/tabModal.dart index 5cadd50..adab2d3 100644 --- a/lib/widgets/tabModal.dart +++ b/lib/widgets/tabModal.dart @@ -1,7 +1,7 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; -import 'package:flutter_money_formatter/flutter_money_formatter.dart'; +import 'package:money2/money2.dart'; import 'package:provider/provider.dart'; import 'package:tabs/controllers/tabsController.dart'; import 'package:tabs/providers/settingsState.dart'; @@ -15,7 +15,7 @@ class TabModal extends StatelessWidget { @override Widget build(BuildContext context) { String displayAmount = - FlutterMoneyFormatter(amount: this.tab["amount"]).output.nonSymbol; + Money.from(this.tab["amount"], Currencies.find('USD')).toString(); DateFormat formatter = DateFormat("yyyy/MM/dd"); String formattedDateOpened = formatter.format(DateTime.parse(this.tab["time"].toDate().toString())); @@ -71,7 +71,7 @@ class TabModal extends StatelessWidget { style: Theme.of(context).textTheme.subtitle2, ), Text( - "${Provider.of(context).selectedCurrency} $displayAmount", + displayAmount, style: Theme.of(context).textTheme.subtitle2, ), ], @@ -95,7 +95,7 @@ class TabModal extends StatelessWidget { : "Change Amount"), onPressed: () { if (this.tab["closed"] == true) { - TabsController.reopenTab(this.tab.documentID); + TabsController.reopenTab(this.tab.id); Navigator.pop(context); } else showDialog( @@ -110,8 +110,8 @@ class TabModal extends StatelessWidget { Text(this.tab["closed"] == true ? "Delete" : "Close Tab"), onPressed: () { this.tab["closed"] == true - ? TabsController.deleteTab(this.tab.documentID) - : TabsController.closeTab(this.tab.documentID); + ? TabsController.deleteTab(this.tab.id) + : TabsController.closeTab(this.tab.id); Navigator.pop(context); }, ) diff --git a/lib/widgets/tabsInfoHeader.dart b/lib/widgets/tabsInfoHeader.dart index 9a33ad7..3c43ac8 100644 --- a/lib/widgets/tabsInfoHeader.dart +++ b/lib/widgets/tabsInfoHeader.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:provider/provider.dart'; import 'package:tabs/providers/tabsState.dart'; -import 'package:flutter_money_formatter/flutter_money_formatter.dart'; +import 'package:money2/money2.dart'; import 'package:tabs/providers/settingsState.dart'; class TabsInfoHeader extends StatelessWidget { @@ -19,7 +19,7 @@ class TabsInfoHeader extends StatelessWidget { ? total -= tab["amount"] : total += tab["amount"]; } - return "$currencySymbol ${FlutterMoneyFormatter(amount: total).output.nonSymbol}"; + return Money.from(total, Currencies.find('USD')).toString(); } String getHeaderText(List tabs) { diff --git a/pubspec.yaml b/pubspec.yaml index 76b02e9..e6994d5 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -11,19 +11,19 @@ dependencies: sdk: flutter cupertino_icons: firebase_core: - firebase_auth: ^0.15.3+1 - cloud_firestore: - provider: ^4.0.2 - permission_handler: ^4.0.0 + firebase_auth: ^1.0.0 + cloud_firestore: ^2.2.2 + provider: ^5.0.0 + permission_handler: ^8.1.0 contacts_service: flutter_typeahead: - flutter_money_formatter: timeago: flutter_spinkit: flutter_staggered_animations: - auto_animated: ^2.1.0 + auto_animated: ^3.0.0 + money2: ^2.1.4 google_sign_in: - flutter_signin_button: ^1.0.0 + flutter_signin_button: ^2.0.0 apple_sign_in: ^0.1.0 shared_preferences: diff --git a/workflows/flutter-ci.yml b/workflows/flutter-ci.yml deleted file mode 100644 index c50fdf3..0000000 --- a/workflows/flutter-ci.yml +++ /dev/null @@ -1,21 +0,0 @@ -name: Flutter CI - -# This workflow is triggered on pushes to the repository. - -on: - push: - branches: - - master - -jobs: - build: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v1 - - uses: actions/setup-java@v1 - with: - java-version: '12.x' - - uses: subosito/flutter-action@v1 - - run: flutter pub get - - run: flutter build appbundle - - run: flutter build ios --release --no-codesign