diff --git a/.gitignore b/.gitignore index 562d207..f605a09 100644 --- a/.gitignore +++ b/.gitignore @@ -92,4 +92,10 @@ unlinked_spec.ds # Firebase configuration files ios/Runner/GoogleService-Info.plist -android/app/google-services.json \ No newline at end of file +ios/Firebase/GoogleService-Info.dev.plist +ios/Firebase/GoogleService-Info.staging.plist +ios/Firebase/GoogleService-Info.prod.plist +android/app/google-services.json +android/app/src/dev/google-services.json +android/app/src/staging/google-services.json +android/app/src/prod/google-services.json diff --git a/android/app/build.gradle b/android/app/build.gradle index 4293eaf..4a940d2 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -54,6 +54,24 @@ android { signingConfig signingConfigs.debug } } + + // https://stackoverflow.com/questions/30772201/google-services-json-for-different-productflavors + flavorDimensions "flavor-type" + + productFlavors { + dev { + dimension "flavor-type" + versionNameSuffix "-dev" + } + staging { + dimension "flavor-type" + versionNameSuffix "-staging" + } + prod { + dimension "flavor-type" + versionNameSuffix "-prod" + } + } } flutter { diff --git a/ios/Flutter/Debug-dev.xcconfig b/ios/Flutter/Debug-dev.xcconfig new file mode 100644 index 0000000..a3e13e5 --- /dev/null +++ b/ios/Flutter/Debug-dev.xcconfig @@ -0,0 +1,5 @@ +#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug-dev.xcconfig" +#include "Generated.xcconfig" + +GOOGLE_SERVICE_PLIST = GoogleService-Info.dev.plist +BUNDLE_SUFFIX = dev diff --git a/ios/Flutter/Debug-prod.xcconfig b/ios/Flutter/Debug-prod.xcconfig new file mode 100644 index 0000000..042f993 --- /dev/null +++ b/ios/Flutter/Debug-prod.xcconfig @@ -0,0 +1,5 @@ +#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug-live.xcconfig" +#include "Generated.xcconfig" + +GOOGLE_SERVICE_PLIST = GoogleService-Info.prod.plist +BUNDLE_SUFFIX = prod diff --git a/ios/Flutter/Debug-staging.xcconfig b/ios/Flutter/Debug-staging.xcconfig new file mode 100644 index 0000000..09c9d73 --- /dev/null +++ b/ios/Flutter/Debug-staging.xcconfig @@ -0,0 +1,5 @@ +#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug-staging.xcconfig" +#include "Generated.xcconfig" + +GOOGLE_SERVICE_PLIST = GoogleService-Info.staging.plist +BUNDLE_SUFFIX = staging diff --git a/ios/Flutter/Release-dev.xcconfig b/ios/Flutter/Release-dev.xcconfig new file mode 100644 index 0000000..1ecc7bd --- /dev/null +++ b/ios/Flutter/Release-dev.xcconfig @@ -0,0 +1,5 @@ +#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release-dev.xcconfig" +#include "Generated.xcconfig" + +GOOGLE_SERVICE_PLIST = GoogleService-Info.dev.plist +BUNDLE_SUFFIX = dev diff --git a/ios/Flutter/Release-prod.xcconfig b/ios/Flutter/Release-prod.xcconfig new file mode 100644 index 0000000..cf384d0 --- /dev/null +++ b/ios/Flutter/Release-prod.xcconfig @@ -0,0 +1,5 @@ +#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release-live.xcconfig" +#include "Generated.xcconfig" + +GOOGLE_SERVICE_PLIST = GoogleService-Info.prod.plist +BUNDLE_SUFFIX = prod diff --git a/ios/Flutter/Release-staging.xcconfig b/ios/Flutter/Release-staging.xcconfig new file mode 100644 index 0000000..1424f4a --- /dev/null +++ b/ios/Flutter/Release-staging.xcconfig @@ -0,0 +1,5 @@ +#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release-staging.xcconfig" +#include "Generated.xcconfig" + +GOOGLE_SERVICE_PLIST = GoogleService-Info.staging.plist +BUNDLE_SUFFIX = staging diff --git a/ios/Podfile b/ios/Podfile index 665b9b0..3b8279f 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -1,5 +1,7 @@ # Uncomment this line to define a global platform for your project -platform :ios, '9.0' +# Note about setting deployment target to 11.0 to prevent invalid architecture issue: +# https://github.com/flutter/flutter/issues/17749 +platform :ios, '11.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index c92fffd..ed569e4 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -43,10 +43,19 @@ 0DD993EE35EBA0AFEF715FFD /* 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 = ""; }; 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 = ""; }; + 308EA3D61DC224042A189F1A /* Pods-Runner.debug-prod.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug-prod.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug-prod.xcconfig"; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; 3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = ""; }; + 5D8DBB16887DF3DF24FEDAEA /* Pods-Runner.release-staging.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release-staging.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release-staging.xcconfig"; sourceTree = ""; }; + 653902792354C9D000959A1A /* Release-prod.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Release-prod.xcconfig"; path = "Flutter/Release-prod.xcconfig"; sourceTree = ""; }; + 6539027A2354C9D000959A1A /* Debug-prod.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Debug-prod.xcconfig"; path = "Flutter/Debug-prod.xcconfig"; sourceTree = ""; }; + 6539027B2354C9D100959A1A /* Debug-staging.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Debug-staging.xcconfig"; path = "Flutter/Debug-staging.xcconfig"; sourceTree = ""; }; + 6539027C2354C9D100959A1A /* Debug-dev.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Debug-dev.xcconfig"; path = "Flutter/Debug-dev.xcconfig"; sourceTree = ""; }; + 6539027D2354C9D100959A1A /* Release-dev.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Release-dev.xcconfig"; path = "Flutter/Release-dev.xcconfig"; sourceTree = ""; }; + 6539027E2354C9D100959A1A /* Release-staging.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Release-staging.xcconfig"; path = "Flutter/Release-staging.xcconfig"; sourceTree = ""; }; 659289A922F326CA00141BCB /* Runner.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Runner.entitlements; sourceTree = ""; }; 65BCA431225697F5006B0132 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; + 70AD69C3A027A74EF438632A /* Pods-Runner.release-prod.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release-prod.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release-prod.xcconfig"; sourceTree = ""; }; 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 = ""; }; @@ -59,6 +68,9 @@ 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 = ""; }; + BE217B93DF467FCD3024934A /* Pods-Runner.release-dev.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release-dev.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release-dev.xcconfig"; sourceTree = ""; }; + E25001D0EA98AD4B74A78E61 /* Pods-Runner.debug-dev.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug-dev.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug-dev.xcconfig"; sourceTree = ""; }; + E44A4D485AC1A77EFDFBD90C /* Pods-Runner.debug-staging.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug-staging.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug-staging.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -89,6 +101,12 @@ 00804C8FFF2E7BCD7FE381B2 /* Pods-Runner.debug.xcconfig */, 055483CA85DBB0A96C5BCC5C /* Pods-Runner.release.xcconfig */, 0DD993EE35EBA0AFEF715FFD /* Pods-Runner.profile.xcconfig */, + E25001D0EA98AD4B74A78E61 /* Pods-Runner.debug-dev.xcconfig */, + 308EA3D61DC224042A189F1A /* Pods-Runner.debug-prod.xcconfig */, + E44A4D485AC1A77EFDFBD90C /* Pods-Runner.debug-staging.xcconfig */, + BE217B93DF467FCD3024934A /* Pods-Runner.release-dev.xcconfig */, + 70AD69C3A027A74EF438632A /* Pods-Runner.release-prod.xcconfig */, + 5D8DBB16887DF3DF24FEDAEA /* Pods-Runner.release-staging.xcconfig */, ); path = Pods; sourceTree = ""; @@ -101,6 +119,12 @@ 9740EEBA1CF902C7004384FC /* Flutter.framework */, 9740EEB21CF90195004384FC /* Debug.xcconfig */, 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 6539027C2354C9D100959A1A /* Debug-dev.xcconfig */, + 6539027A2354C9D000959A1A /* Debug-prod.xcconfig */, + 6539027B2354C9D100959A1A /* Debug-staging.xcconfig */, + 6539027D2354C9D100959A1A /* Release-dev.xcconfig */, + 653902792354C9D000959A1A /* Release-prod.xcconfig */, + 6539027E2354C9D100959A1A /* Release-staging.xcconfig */, 9740EEB31CF90195004384FC /* Generated.xcconfig */, ); name = Flutter; @@ -159,6 +183,7 @@ buildPhases = ( 554449AE36070DC848C03225 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, + 6539028B2354CD4700959A1A /* [ENV] Choose GoogleService-Info.plist */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, @@ -287,6 +312,24 @@ 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; }; + 6539028B2354CD4700959A1A /* [ENV] Choose GoogleService-Info.plist */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "[ENV] Choose GoogleService-Info.plist"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "PLIST_FILE=${PROJECT_DIR}/Firebase/${GOOGLE_SERVICE_PLIST}\nif [ -f $PLIST_FILE ]; then\necho \"cp ${PLIST_FILE} ${PROJECT_DIR}/Runner/GoogleService-Info.plist\"\ncp ${PROJECT_DIR}/Firebase/${GOOGLE_SERVICE_PLIST} ${PROJECT_DIR}/Runner/GoogleService-Info.plist\nelse\necho \"${PLIST_FILE} does not exist.\"\nexit 1\nfi\n"; + }; 6B19C2228BCDF762A0EC924F /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -411,7 +454,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; @@ -435,7 +478,7 @@ "$(PROJECT_DIR)/Flutter", ); INFOPLIST_FILE = Runner/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", @@ -449,6 +492,516 @@ }; name = Profile; }; + 6539027F2354CA3900959A1A /* Debug-dev */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6539027C2354C9D100959A1A /* Debug-dev.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = "Debug-dev"; + }; + 653902802354CA3900959A1A /* Debug-dev */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6539027C2354C9D100959A1A /* Debug-dev.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = ""; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.codingwithflutter.firebaseAuthDemo; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_SWIFT3_OBJC_INFERENCE = On; + SWIFT_VERSION = 4.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = "Debug-dev"; + }; + 653902812354CA4200959A1A /* Release-dev */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6539027D2354C9D100959A1A /* Release-dev.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = "Release-dev"; + }; + 653902822354CA4200959A1A /* Release-dev */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6539027D2354C9D100959A1A /* Release-dev.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = ""; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.codingwithflutter.firebaseAuthDemo; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_SWIFT3_OBJC_INFERENCE = On; + SWIFT_VERSION = 4.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = "Release-dev"; + }; + 653902832354CA5F00959A1A /* Debug-staging */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6539027B2354C9D100959A1A /* Debug-staging.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = "Debug-staging"; + }; + 653902842354CA5F00959A1A /* Debug-staging */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6539027B2354C9D100959A1A /* Debug-staging.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = ""; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.codingwithflutter.firebaseAuthDemo; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_SWIFT3_OBJC_INFERENCE = On; + SWIFT_VERSION = 4.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = "Debug-staging"; + }; + 653902852354CA6900959A1A /* Release-staging */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6539027E2354C9D100959A1A /* Release-staging.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = "Release-staging"; + }; + 653902862354CA6900959A1A /* Release-staging */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6539027E2354C9D100959A1A /* Release-staging.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = ""; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.codingwithflutter.firebaseAuthDemo; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_SWIFT3_OBJC_INFERENCE = On; + SWIFT_VERSION = 4.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = "Release-staging"; + }; + 653902872354CA7100959A1A /* Debug-prod */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6539027A2354C9D000959A1A /* Debug-prod.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = "Debug-prod"; + }; + 653902882354CA7100959A1A /* Debug-prod */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6539027C2354C9D100959A1A /* Debug-dev.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = ""; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.codingwithflutter.firebaseAuthDemo; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_SWIFT3_OBJC_INFERENCE = On; + SWIFT_VERSION = 4.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = "Debug-prod"; + }; + 653902892354CA7800959A1A /* Release-prod */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 653902792354C9D000959A1A /* Release-prod.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = "Release-prod"; + }; + 6539028A2354CA7800959A1A /* Release-prod */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 653902792354C9D000959A1A /* Release-prod.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = ""; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.codingwithflutter.firebaseAuthDemo; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_SWIFT3_OBJC_INFERENCE = On; + SWIFT_VERSION = 4.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = "Release-prod"; + }; 97C147031CF9000F007C117D /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; @@ -495,7 +1048,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -543,7 +1096,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; @@ -569,7 +1122,7 @@ "$(PROJECT_DIR)/Flutter", ); INFOPLIST_FILE = Runner/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", @@ -603,7 +1156,7 @@ "$(PROJECT_DIR)/Flutter", ); INFOPLIST_FILE = Runner/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", @@ -626,7 +1179,13 @@ isa = XCConfigurationList; buildConfigurations = ( 97C147031CF9000F007C117D /* Debug */, + 6539027F2354CA3900959A1A /* Debug-dev */, + 653902872354CA7100959A1A /* Debug-prod */, + 653902832354CA5F00959A1A /* Debug-staging */, 97C147041CF9000F007C117D /* Release */, + 653902812354CA4200959A1A /* Release-dev */, + 653902892354CA7800959A1A /* Release-prod */, + 653902852354CA6900959A1A /* Release-staging */, 249021D3217E4FDB00AE95B9 /* Profile */, ); defaultConfigurationIsVisible = 0; @@ -636,7 +1195,13 @@ isa = XCConfigurationList; buildConfigurations = ( 97C147061CF9000F007C117D /* Debug */, + 653902802354CA3900959A1A /* Debug-dev */, + 653902882354CA7100959A1A /* Debug-prod */, + 653902842354CA5F00959A1A /* Debug-staging */, 97C147071CF9000F007C117D /* Release */, + 653902822354CA4200959A1A /* Release-dev */, + 6539028A2354CA7800959A1A /* Release-prod */, + 653902862354CA6900959A1A /* Release-staging */, 249021D4217E4FDB00AE95B9 /* Profile */, ); defaultConfigurationIsVisible = 0; diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/dev.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/dev.xcscheme new file mode 100644 index 0000000..37770c6 --- /dev/null +++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/dev.xcscheme @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/prod.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/prod.xcscheme new file mode 100644 index 0000000..662efe4 --- /dev/null +++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/prod.xcscheme @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/staging.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/staging.xcscheme new file mode 100644 index 0000000..1ec7d88 --- /dev/null +++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/staging.xcscheme @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lib/app/sign_in/developer_menu.dart b/lib/app/sign_in/developer_menu.dart index 477a9af..527fcc9 100644 --- a/lib/app/sign_in/developer_menu.dart +++ b/lib/app/sign_in/developer_menu.dart @@ -1,12 +1,14 @@ import 'package:firebase_auth_demo_flutter/app/sign_in/auth_service_type_selector.dart'; -import 'package:firebase_auth_demo_flutter/constants/keys.dart'; import 'package:firebase_auth_demo_flutter/constants/strings.dart'; +import 'package:firebase_auth_demo_flutter/flavor.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; class DeveloperMenu extends StatelessWidget { @override Widget build(BuildContext context) { + final flavor = Provider.of(context); return SizedBox( width: MediaQuery.of(context).size.width * 0.85, child: Drawer( @@ -14,7 +16,7 @@ class DeveloperMenu extends StatelessWidget { DrawerHeader( child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, - children: const [ + children: [ Text( Strings.developerMenu, style: TextStyle( @@ -22,6 +24,13 @@ class DeveloperMenu extends StatelessWidget { color: Colors.white, ), ), + Text( + flavor.toString(), + style: TextStyle( + fontSize: 16.0, + color: Colors.white, + ), + ), ], ), decoration: BoxDecoration( diff --git a/lib/flavor.dart b/lib/flavor.dart new file mode 100644 index 0000000..c9bf69c --- /dev/null +++ b/lib/flavor.dart @@ -0,0 +1 @@ +enum Flavor { dev, staging, prod } diff --git a/lib/main.dart b/lib/main.dart index 27e60ea..38c764f 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,56 +1,9 @@ -import 'package:firebase_auth_demo_flutter/app/auth_widget_builder.dart'; -import 'package:firebase_auth_demo_flutter/app/email_link_error_presenter.dart'; -import 'package:firebase_auth_demo_flutter/app/auth_widget.dart'; -import 'package:firebase_auth_demo_flutter/services/auth_service.dart'; -import 'package:firebase_auth_demo_flutter/services/auth_service_adapter.dart'; -import 'package:firebase_auth_demo_flutter/services/firebase_email_link_handler.dart'; -import 'package:firebase_auth_demo_flutter/services/email_secure_store.dart'; +import 'package:firebase_auth_demo_flutter/flavor.dart'; +import 'package:firebase_auth_demo_flutter/my_app.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:provider/provider.dart'; -void main() => runApp(MyApp()); - -class MyApp extends StatelessWidget { - // [initialAuthServiceType] is made configurable for testing - const MyApp({this.initialAuthServiceType = AuthServiceType.firebase}); - final AuthServiceType initialAuthServiceType; - - @override - Widget build(BuildContext context) { - // MultiProvider for top-level services that can be created right away - return MultiProvider( - providers: [ - Provider( - builder: (_) => AuthServiceAdapter( - initialAuthServiceType: initialAuthServiceType, - ), - dispose: (_, AuthService authService) => authService.dispose(), - ), - Provider( - builder: (_) => EmailSecureStore( - flutterSecureStorage: FlutterSecureStorage(), - ), - ), - ProxyProvider2( - builder: (_, AuthService authService, EmailSecureStore storage, __) => - FirebaseEmailLinkHandler.createAndConfigure( - auth: authService, - userCredentialsStorage: storage, - ), - dispose: (_, linkHandler) => linkHandler.dispose(), - ), - ], - child: AuthWidgetBuilder( - builder: (BuildContext context, AsyncSnapshot userSnapshot) { - return MaterialApp( - theme: ThemeData(primarySwatch: Colors.indigo), - home: EmailLinkErrorPresenter.create( - context, - child: AuthWidget(userSnapshot: userSnapshot), - ), - ); - }), - ); - } -} +void main() => runApp(Provider.value( + value: Flavor.dev, + child: MyApp(), + )); diff --git a/lib/main_prod.dart b/lib/main_prod.dart new file mode 100644 index 0000000..951f7c9 --- /dev/null +++ b/lib/main_prod.dart @@ -0,0 +1,9 @@ +import 'package:firebase_auth_demo_flutter/flavor.dart'; +import 'package:firebase_auth_demo_flutter/my_app.dart'; +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; + +void main() => runApp(Provider.value( + value: Flavor.prod, + child: MyApp(), + )); diff --git a/lib/main_staging.dart b/lib/main_staging.dart new file mode 100644 index 0000000..cdbf48e --- /dev/null +++ b/lib/main_staging.dart @@ -0,0 +1,9 @@ +import 'package:firebase_auth_demo_flutter/flavor.dart'; +import 'package:firebase_auth_demo_flutter/my_app.dart'; +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; + +void main() => runApp(Provider.value( + value: Flavor.staging, + child: MyApp(), + )); diff --git a/lib/my_app.dart b/lib/my_app.dart new file mode 100644 index 0000000..0bce932 --- /dev/null +++ b/lib/my_app.dart @@ -0,0 +1,54 @@ +import 'package:firebase_auth_demo_flutter/app/auth_widget_builder.dart'; +import 'package:firebase_auth_demo_flutter/app/email_link_error_presenter.dart'; +import 'package:firebase_auth_demo_flutter/app/auth_widget.dart'; +import 'package:firebase_auth_demo_flutter/services/auth_service.dart'; +import 'package:firebase_auth_demo_flutter/services/auth_service_adapter.dart'; +import 'package:firebase_auth_demo_flutter/services/firebase_email_link_handler.dart'; +import 'package:firebase_auth_demo_flutter/services/email_secure_store.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_secure_storage/flutter_secure_storage.dart'; +import 'package:provider/provider.dart'; + +class MyApp extends StatelessWidget { + // [initialAuthServiceType] is made configurable for testing + const MyApp({this.initialAuthServiceType = AuthServiceType.firebase}); + final AuthServiceType initialAuthServiceType; + + @override + Widget build(BuildContext context) { + // MultiProvider for top-level services that can be created right away + return MultiProvider( + providers: [ + Provider( + builder: (_) => AuthServiceAdapter( + initialAuthServiceType: initialAuthServiceType, + ), + dispose: (_, AuthService authService) => authService.dispose(), + ), + Provider( + builder: (_) => EmailSecureStore( + flutterSecureStorage: FlutterSecureStorage(), + ), + ), + ProxyProvider2( + builder: (_, AuthService authService, EmailSecureStore storage, __) => + FirebaseEmailLinkHandler.createAndConfigure( + auth: authService, + userCredentialsStorage: storage, + ), + dispose: (_, linkHandler) => linkHandler.dispose(), + ), + ], + child: AuthWidgetBuilder( + builder: (BuildContext context, AsyncSnapshot userSnapshot) { + return MaterialApp( + theme: ThemeData(primarySwatch: Colors.indigo), + home: EmailLinkErrorPresenter.create( + context, + child: AuthWidget(userSnapshot: userSnapshot), + ), + ); + }), + ); + } +} diff --git a/sylph.yaml b/sylph.yaml index 512632c..ddc0203 100644 --- a/sylph.yaml +++ b/sylph.yaml @@ -13,8 +13,11 @@ sylph_timeout: 720 # seconds approx # run on ios and android pools concurrently (for faster results) concurrent_runs: true +# flavor config +flavor: dev + # device farm config -project_name: test concurrent runs +project_name: test flavor runs default_job_timeout: 10 # minutes, set at project creation device_pools: @@ -52,9 +55,8 @@ test_suites: main: test_driver/app.dart tests: - test_driver/app_test.dart -# - test_driver/app_test.dart pool_names: - android pool 1 # - ios pool 1 # - iPhone 5c - job_timeout: 15 # minutes, set per job, over-rides default job timeout above \ No newline at end of file + job_timeout: 15 # minutes, set per job, over-rides default job timeout above diff --git a/test_driver/app.dart b/test_driver/app.dart index f178716..da96b5e 100644 --- a/test_driver/app.dart +++ b/test_driver/app.dart @@ -1,5 +1,5 @@ //import 'package:firebase_auth_demo_flutter/main.dart' as app; -import 'package:firebase_auth_demo_flutter/main.dart'; +import 'package:firebase_auth_demo_flutter/my_app.dart'; import 'package:firebase_auth_demo_flutter/services/auth_service_adapter.dart'; import 'package:flutter/material.dart'; import 'package:flutter_driver/driver_extension.dart';