From 43f0f07aba735016f8b9ffa7fc8bb21d3567a1a7 Mon Sep 17 00:00:00 2001 From: Nick Cooke Date: Fri, 12 Sep 2025 11:41:18 -0400 Subject: [PATCH 01/18] chore: Remove legacy ObjC quickstarts find . -name "Legacy*Qui*" | xargs rm -rf --- .../project.pbxproj | 590 -------- .../ABTestingExample/AppDelegate.swift | 30 - .../AppIcon.appiconset/Contents.json | 68 - .../Base.lproj/LaunchScreen.storyboard | 27 - .../Base.lproj/Main.storyboard | 91 -- .../ABTestingExample/Info.plist | 45 - .../ABTestingExample/ViewController.swift | 185 --- .../ABTestingExampleTests.swift | 20 - .../ABTestingExampleTests/Info.plist | 22 - .../ABTestingExampleUITests.swift | 31 - .../ABTestingExampleUITests/Info.plist | 22 - abtesting/LegacyABTestingQuickstart/Podfile | 14 - .../LegacyABTestingQuickstart/Podfile.lock | 140 -- abtesting/LegacyABTestingQuickstart/README.md | 25 - .../project.pbxproj | 917 ------------- .../xcschemes/AnalyticsExample.xcscheme | 117 -- .../xcschemes/AnalyticsExampleSwift.xcscheme | 113 -- .../AnalyticsExample/AppDelegate.h | 23 - .../AnalyticsExample/AppDelegate.m | 39 - .../Base.lproj/Main.storyboard | 284 ---- .../AnalyticsExample/CircleImageView.h | 27 - .../AnalyticsExample/CircleImageView.m | 59 - .../FoodPickerViewController.h | 26 - .../FoodPickerViewController.m | 69 - .../AnalyticsExample/Info.plist | 51 - .../PatternTabBarController.h | 28 - .../PatternTabBarController.m | 71 - .../AnalyticsExample/ViewController.h | 20 - .../AnalyticsExample/ViewController.m | 55 - .../AnalyticsExample/main.m | 24 - .../AnalyticsExampleSwift/AppDelegate.swift | 36 - .../FoodPickerViewController.swift | 52 - .../PatternTabBarController.swift | 65 - .../ViewController.swift | 49 - .../AnalyticsExampleSwiftUITests.swift | 42 - .../AnalyticsExampleSwiftUITests/Info.plist | 22 - .../AnalyticsExampleTests/AppTests.m | 88 -- .../AnalyticsExampleTests/LogWrapper.h | 32 - .../AnalyticsExampleTests/LogWrapper.mm | 65 - .../AnalyticsExampleUITests.m | 68 - .../AnalyticsExampleUITests/Info.plist | 22 - .../AnalyticsImages.xcassets/Contents.json | 6 - .../favorite.imageset/Contents.json | 23 - .../favorite.imageset/favorite.png | Bin 2907 -> 0 bytes .../favorite.imageset/favorite_2x.png | Bin 6598 -> 0 bytes .../favorite.imageset/favorite_3x.png | Bin 10590 -> 0 bytes .../flash_on.imageset/Contents.json | 23 - .../flash_on.imageset/flash_on.png | Bin 989 -> 0 bytes .../flash_on.imageset/flash_on_2x.png | Bin 2232 -> 0 bytes .../flash_on.imageset/flash_on_3x.png | Bin 4628 -> 0 bytes .../icon-favorite.imageset/Contents.json | 23 - .../icon-favorite.imageset/icon-favorite.png | Bin 470 -> 0 bytes .../icon-favorite_2x-1.png | Bin 878 -> 0 bytes .../icon-favorite_3x.png | Bin 1283 -> 0 bytes .../icon-flash_on.imageset/Contents.json | 23 - .../icon-flash_on.imageset/icon-flash_on.png | Bin 334 -> 0 bytes .../icon-flash_on_2x.png | Bin 476 -> 0 bytes .../icon-flash_on_3x.png | Bin 674 -> 0 bytes .../icon-tag_faces.imageset/Contents.json | 23 - .../icon-tag_faces.png | Bin 648 -> 0 bytes .../icon-tag_faces_2x.png | Bin 1266 -> 0 bytes .../icon-tag_faces_3x.png | Bin 1722 -> 0 bytes .../Contents.json | 23 - .../icon-wb_incandescent.png | Bin 475 -> 0 bytes .../icon-wb_incandescent_2x.png | Bin 785 -> 0 bytes .../icon-wb_incandescent_3x.png | Bin 1014 -> 0 bytes .../tag_faces.imageset/Contents.json | 23 - .../tag_faces.imageset/tag_faces.png | Bin 5271 -> 0 bytes .../tag_faces.imageset/tag_faces_2x.png | Bin 12219 -> 0 bytes .../tag_faces.imageset/tag_faces_3x.png | Bin 19002 -> 0 bytes .../wb_incandescent.imageset/Contents.json | 23 - .../wb_incandescent.png | Bin 2304 -> 0 bytes .../wb_incandescent_2x.png | Bin 4950 -> 0 bytes .../wb_incandescent_3x.png | Bin 8077 -> 0 bytes analytics/LegacyAnalyticsQuickstart/Podfile | 16 - .../LegacyAnalyticsQuickstart/Podfile.lock | 119 -- analytics/LegacyAnalyticsQuickstart/README.md | 43 - .../Screenshot/analytics-sample.png | Bin 77905 -> 0 bytes .../project.pbxproj | 951 ------------- .../xcschemes/AuthenticationExample.xcscheme | 117 -- .../AuthenticationExampleSwift.xcscheme | 97 -- .../AuthenticationExample/.clang-format | 4 - .../AuthenticationExample/AppDelegate.h | 27 - .../AuthenticationExample/AppDelegate.m | 97 -- .../AuthenticationExample.entitlements | 14 - .../Base.lproj/Main.storyboard | 588 -------- .../CustomTokenViewController.h | 20 - .../CustomTokenViewController.m | 54 - .../EmailViewController.h | 21 - .../EmailViewController.m | 191 --- .../AuthenticationExample/Info.plist | 107 -- .../MainViewController.h | 26 - .../MainViewController.m | 1197 ----------------- .../PasswordlessViewController.h | 21 - .../PasswordlessViewController.m | 102 -- .../UIViewController+Alerts.h | 60 - .../UIViewController+Alerts.m | 159 --- .../AuthenticationExample/main.m | 24 - .../AppDelegate.swift | 104 -- .../AuthenticationExample.entitlements | 10 - .../CustomTokenViewController.swift | 49 - .../EmailViewController.swift | 190 --- .../MainViewController.swift | 1121 --------------- .../PasswordlessViewController.swift | 98 -- .../UIViewController.swift | 98 -- .../AuthenticationExampleSwiftUITests.swift | 34 - .../Info.plist | 22 - .../AuthenticationExampleTests.m | 47 - .../AuthenticationExampleUITests.m | 321 ----- .../AuthenticationExampleUITests/Info.plist | 22 - authentication/LegacyAuthQuickstart/Podfile | 21 - .../LegacyAuthQuickstart/Podfile.lock | 191 --- authentication/LegacyAuthQuickstart/README.md | 130 -- .../LegacyAuthQuickstart/web/auth.html | 127 -- .../ConfigExample.xcodeproj/project.pbxproj | 875 ------------ .../xcschemes/ConfigExample.xcscheme | 111 -- .../xcschemes/ConfigExampleSwift.xcscheme | 101 -- .../ConfigExample/.clang-format | 4 - .../ConfigExample/AppDelegate.h | 23 - .../ConfigExample/AppDelegate.m | 30 - .../ConfigExample/Base.lproj/Main.storyboard | 83 -- .../ConfigExample/Info.plist | 51 - .../ConfigExample/RemoteConfigDefaults.plist | 12 - .../ConfigExample/ViewController.h | 24 - .../ConfigExample/ViewController.m | 113 -- .../ConfigExample/main.m | 24 - .../ConfigExampleSwift/AppDelegate.swift | 32 - .../ConfigExampleSwift/ViewController.swift | 91 -- .../ConfigExampleSwiftUITests.swift | 42 - .../ConfigExampleSwiftUITests/Info.plist | 22 - .../ConfigExampleTests/AppTests.m | 40 - .../ConfigExampleUITests.m | 46 - .../ConfigExampleUITests/Info.plist | 22 - config/LegacyConfigQuickstart/Podfile | 12 - config/LegacyConfigQuickstart/Podfile.lock | 66 - config/LegacyConfigQuickstart/README.md | 102 -- .../project.pbxproj | 954 ------------- .../xcschemes/CrashlyticsExample.xcscheme | 107 -- .../CrashlyticsExampleSwift.xcscheme | 97 -- .../CrashlyticsExample/.clang-format | 4 - .../CrashlyticsExample/AppDelegate.h | 23 - .../CrashlyticsExample/AppDelegate.m | 31 - .../Base.lproj/Main.storyboard | 70 - .../CrashlyticsExample/Info.plist | 51 - .../CrashlyticsExample/ViewController.h | 20 - .../CrashlyticsExample/ViewController.m | 57 - .../CrashlyticsExample/main.m | 24 - .../CrashlyticsExampleSwift/AppDelegate.swift | 31 - .../ViewController.swift | 116 -- .../CrashReportingExampleSwiftUITests.swift | 29 - .../CrashlyticsExampleSwiftUITests/Info.plist | 22 - .../CrashlyticsExampleTests/AppTests.m | 40 - .../CrashReportingExampleUITests.m | 36 - .../CrashlyticsExampleUITests/Info.plist | 22 - .../LegacyCrashlyticsQuickstart/Podfile | 13 - .../LegacyCrashlyticsQuickstart/Podfile.lock | 95 -- .../project.pbxproj | 986 -------------- .../xcschemes/FunctionsExample.xcscheme | 107 -- .../xcschemes/FunctionsExampleSwift.xcscheme | 97 -- .../FunctionsExample/.clang-format | 4 - .../FunctionsExample/AppDelegate.h | 23 - .../FunctionsExample/AppDelegate.m | 43 - .../Base.lproj/Main.storyboard | 220 --- .../FunctionsExample/CloudAddCell.h | 24 - .../FunctionsExample/CloudAddCell.m | 69 - .../FunctionsExample/CommentCell.h | 22 - .../FunctionsExample/CommentCell.m | 63 - .../FAuthPickerViewController.h | 20 - .../FAuthPickerViewController.m | 20 - .../FAuthPickerViewController.xib | 50 - .../FunctionsExample/Info.plist | 64 - .../FunctionsExample/MainViewController.h | 22 - .../FunctionsExample/MainViewController.m | 73 - .../FunctionsExample/SignInViewController.h | 20 - .../FunctionsExample/SignInViewController.m | 78 -- .../FunctionsExample/main.m | 24 - .../FunctionsExampleSwift/AppDelegate.swift | 63 - .../FunctionsExampleSwift/CloudAddCell.swift | 54 - .../FunctionsExampleSwift/CommentCell.swift | 51 - .../FAuthPickerViewController.swift | 20 - .../MainViewController.swift | 76 -- .../SignInViewController.swift | 73 - .../FunctionsExampleSwiftUITests.swift | 34 - .../FunctionsExampleSwiftUITests/Info.plist | 22 - .../FunctionsExampleTests.m | 47 - .../FunctionsExampleTests/Info.plist | 22 - .../FunctionsExampleUITests.m | 104 -- .../FunctionsExampleUITests/Info.plist | 22 - functions/LegacyFunctionsQuickstart/Podfile | 21 - .../LegacyFunctionsQuickstart/Podfile.lock | 316 ----- functions/LegacyFunctionsQuickstart/README.md | 45 - storage/LegacyStorageQuickstart/Podfile | 14 - storage/LegacyStorageQuickstart/Podfile.lock | 83 -- storage/LegacyStorageQuickstart/README.md | 44 - .../StorageExample.xcodeproj/project.pbxproj | 926 ------------- .../xcschemes/StorageExample.xcscheme | 107 -- .../xcschemes/StorageExampleSwift.xcscheme | 97 -- .../StorageExample/.clang-format | 4 - .../StorageExample/AppDelegate.h | 22 - .../StorageExample/AppDelegate.m | 28 - .../StorageExample/Base.lproj/Main.storyboard | 151 --- .../StorageExample/DownloadViewController.h | 20 - .../StorageExample/DownloadViewController.m | 53 - .../StorageExample/Info.plist | 55 - .../StorageExample/Placeholder.swift | 15 - .../StorageExample/ViewController.h | 20 - .../StorageExample/ViewController.m | 152 --- .../StorageExample/main.m | 24 - .../StorageExampleSwift/AppDelegate.swift | 34 - .../DownloadViewController.swift | 51 - .../StorageExampleSwift/ViewController.swift | 153 --- .../StorageExampleSwiftUITests/Info.plist | 22 - .../StorageExampleSwiftUITests.swift | 42 - .../StorageExampleTests/AppTests.m | 40 - .../StorageExampleUITests/Info.plist | 22 - .../StorageExampleUITests.m | 136 -- 216 files changed, 19686 deletions(-) delete mode 100644 abtesting/LegacyABTestingQuickstart/ABTestingExample.xcodeproj/project.pbxproj delete mode 100644 abtesting/LegacyABTestingQuickstart/ABTestingExample/AppDelegate.swift delete mode 100644 abtesting/LegacyABTestingQuickstart/ABTestingExample/Assets.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 abtesting/LegacyABTestingQuickstart/ABTestingExample/Base.lproj/LaunchScreen.storyboard delete mode 100644 abtesting/LegacyABTestingQuickstart/ABTestingExample/Base.lproj/Main.storyboard delete mode 100644 abtesting/LegacyABTestingQuickstart/ABTestingExample/Info.plist delete mode 100644 abtesting/LegacyABTestingQuickstart/ABTestingExample/ViewController.swift delete mode 100644 abtesting/LegacyABTestingQuickstart/ABTestingExampleTests/ABTestingExampleTests.swift delete mode 100644 abtesting/LegacyABTestingQuickstart/ABTestingExampleTests/Info.plist delete mode 100644 abtesting/LegacyABTestingQuickstart/ABTestingExampleUITests/ABTestingExampleUITests.swift delete mode 100644 abtesting/LegacyABTestingQuickstart/ABTestingExampleUITests/Info.plist delete mode 100644 abtesting/LegacyABTestingQuickstart/Podfile delete mode 100644 abtesting/LegacyABTestingQuickstart/Podfile.lock delete mode 100644 abtesting/LegacyABTestingQuickstart/README.md delete mode 100644 analytics/LegacyAnalyticsQuickstart/AnalyticsExample.xcodeproj/project.pbxproj delete mode 100644 analytics/LegacyAnalyticsQuickstart/AnalyticsExample.xcodeproj/xcshareddata/xcschemes/AnalyticsExample.xcscheme delete mode 100644 analytics/LegacyAnalyticsQuickstart/AnalyticsExample.xcodeproj/xcshareddata/xcschemes/AnalyticsExampleSwift.xcscheme delete mode 100644 analytics/LegacyAnalyticsQuickstart/AnalyticsExample/AppDelegate.h delete mode 100644 analytics/LegacyAnalyticsQuickstart/AnalyticsExample/AppDelegate.m delete mode 100644 analytics/LegacyAnalyticsQuickstart/AnalyticsExample/Base.lproj/Main.storyboard delete mode 100644 analytics/LegacyAnalyticsQuickstart/AnalyticsExample/CircleImageView.h delete mode 100644 analytics/LegacyAnalyticsQuickstart/AnalyticsExample/CircleImageView.m delete mode 100644 analytics/LegacyAnalyticsQuickstart/AnalyticsExample/FoodPickerViewController.h delete mode 100644 analytics/LegacyAnalyticsQuickstart/AnalyticsExample/FoodPickerViewController.m delete mode 100644 analytics/LegacyAnalyticsQuickstart/AnalyticsExample/Info.plist delete mode 100644 analytics/LegacyAnalyticsQuickstart/AnalyticsExample/PatternTabBarController.h delete mode 100644 analytics/LegacyAnalyticsQuickstart/AnalyticsExample/PatternTabBarController.m delete mode 100644 analytics/LegacyAnalyticsQuickstart/AnalyticsExample/ViewController.h delete mode 100644 analytics/LegacyAnalyticsQuickstart/AnalyticsExample/ViewController.m delete mode 100644 analytics/LegacyAnalyticsQuickstart/AnalyticsExample/main.m delete mode 100644 analytics/LegacyAnalyticsQuickstart/AnalyticsExampleSwift/AppDelegate.swift delete mode 100644 analytics/LegacyAnalyticsQuickstart/AnalyticsExampleSwift/FoodPickerViewController.swift delete mode 100644 analytics/LegacyAnalyticsQuickstart/AnalyticsExampleSwift/PatternTabBarController.swift delete mode 100644 analytics/LegacyAnalyticsQuickstart/AnalyticsExampleSwift/ViewController.swift delete mode 100644 analytics/LegacyAnalyticsQuickstart/AnalyticsExampleSwiftUITests/AnalyticsExampleSwiftUITests.swift delete mode 100644 analytics/LegacyAnalyticsQuickstart/AnalyticsExampleSwiftUITests/Info.plist delete mode 100644 analytics/LegacyAnalyticsQuickstart/AnalyticsExampleTests/AppTests.m delete mode 100644 analytics/LegacyAnalyticsQuickstart/AnalyticsExampleTests/LogWrapper.h delete mode 100644 analytics/LegacyAnalyticsQuickstart/AnalyticsExampleTests/LogWrapper.mm delete mode 100644 analytics/LegacyAnalyticsQuickstart/AnalyticsExampleUITests/AnalyticsExampleUITests.m delete mode 100644 analytics/LegacyAnalyticsQuickstart/AnalyticsExampleUITests/Info.plist delete mode 100644 analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/Contents.json delete mode 100644 analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/favorite.imageset/Contents.json delete mode 100644 analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/favorite.imageset/favorite.png delete mode 100644 analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/favorite.imageset/favorite_2x.png delete mode 100644 analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/favorite.imageset/favorite_3x.png delete mode 100644 analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/flash_on.imageset/Contents.json delete mode 100644 analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/flash_on.imageset/flash_on.png delete mode 100644 analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/flash_on.imageset/flash_on_2x.png delete mode 100644 analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/flash_on.imageset/flash_on_3x.png delete mode 100644 analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/icon-favorite.imageset/Contents.json delete mode 100644 analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/icon-favorite.imageset/icon-favorite.png delete mode 100644 analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/icon-favorite.imageset/icon-favorite_2x-1.png delete mode 100644 analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/icon-favorite.imageset/icon-favorite_3x.png delete mode 100644 analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/icon-flash_on.imageset/Contents.json delete mode 100644 analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/icon-flash_on.imageset/icon-flash_on.png delete mode 100644 analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/icon-flash_on.imageset/icon-flash_on_2x.png delete mode 100644 analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/icon-flash_on.imageset/icon-flash_on_3x.png delete mode 100644 analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/icon-tag_faces.imageset/Contents.json delete mode 100644 analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/icon-tag_faces.imageset/icon-tag_faces.png delete mode 100644 analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/icon-tag_faces.imageset/icon-tag_faces_2x.png delete mode 100644 analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/icon-tag_faces.imageset/icon-tag_faces_3x.png delete mode 100644 analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/icon-wb_incandescent.imageset/Contents.json delete mode 100644 analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/icon-wb_incandescent.imageset/icon-wb_incandescent.png delete mode 100644 analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/icon-wb_incandescent.imageset/icon-wb_incandescent_2x.png delete mode 100644 analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/icon-wb_incandescent.imageset/icon-wb_incandescent_3x.png delete mode 100644 analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/tag_faces.imageset/Contents.json delete mode 100644 analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/tag_faces.imageset/tag_faces.png delete mode 100644 analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/tag_faces.imageset/tag_faces_2x.png delete mode 100644 analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/tag_faces.imageset/tag_faces_3x.png delete mode 100644 analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/wb_incandescent.imageset/Contents.json delete mode 100644 analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/wb_incandescent.imageset/wb_incandescent.png delete mode 100644 analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/wb_incandescent.imageset/wb_incandescent_2x.png delete mode 100644 analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/wb_incandescent.imageset/wb_incandescent_3x.png delete mode 100644 analytics/LegacyAnalyticsQuickstart/Podfile delete mode 100644 analytics/LegacyAnalyticsQuickstart/Podfile.lock delete mode 100644 analytics/LegacyAnalyticsQuickstart/README.md delete mode 100644 analytics/LegacyAnalyticsQuickstart/Screenshot/analytics-sample.png delete mode 100644 authentication/LegacyAuthQuickstart/AuthenticationExample.xcodeproj/project.pbxproj delete mode 100644 authentication/LegacyAuthQuickstart/AuthenticationExample.xcodeproj/xcshareddata/xcschemes/AuthenticationExample.xcscheme delete mode 100644 authentication/LegacyAuthQuickstart/AuthenticationExample.xcodeproj/xcshareddata/xcschemes/AuthenticationExampleSwift.xcscheme delete mode 100644 authentication/LegacyAuthQuickstart/AuthenticationExample/.clang-format delete mode 100644 authentication/LegacyAuthQuickstart/AuthenticationExample/AppDelegate.h delete mode 100644 authentication/LegacyAuthQuickstart/AuthenticationExample/AppDelegate.m delete mode 100644 authentication/LegacyAuthQuickstart/AuthenticationExample/AuthenticationExample.entitlements delete mode 100644 authentication/LegacyAuthQuickstart/AuthenticationExample/Base.lproj/Main.storyboard delete mode 100644 authentication/LegacyAuthQuickstart/AuthenticationExample/CustomTokenViewController.h delete mode 100644 authentication/LegacyAuthQuickstart/AuthenticationExample/CustomTokenViewController.m delete mode 100644 authentication/LegacyAuthQuickstart/AuthenticationExample/EmailViewController.h delete mode 100644 authentication/LegacyAuthQuickstart/AuthenticationExample/EmailViewController.m delete mode 100644 authentication/LegacyAuthQuickstart/AuthenticationExample/Info.plist delete mode 100644 authentication/LegacyAuthQuickstart/AuthenticationExample/MainViewController.h delete mode 100644 authentication/LegacyAuthQuickstart/AuthenticationExample/MainViewController.m delete mode 100644 authentication/LegacyAuthQuickstart/AuthenticationExample/PasswordlessViewController.h delete mode 100644 authentication/LegacyAuthQuickstart/AuthenticationExample/PasswordlessViewController.m delete mode 100644 authentication/LegacyAuthQuickstart/AuthenticationExample/UIViewController+Alerts.h delete mode 100644 authentication/LegacyAuthQuickstart/AuthenticationExample/UIViewController+Alerts.m delete mode 100644 authentication/LegacyAuthQuickstart/AuthenticationExample/main.m delete mode 100644 authentication/LegacyAuthQuickstart/AuthenticationExampleSwift/AppDelegate.swift delete mode 100644 authentication/LegacyAuthQuickstart/AuthenticationExampleSwift/AuthenticationExample.entitlements delete mode 100644 authentication/LegacyAuthQuickstart/AuthenticationExampleSwift/CustomTokenViewController.swift delete mode 100644 authentication/LegacyAuthQuickstart/AuthenticationExampleSwift/EmailViewController.swift delete mode 100644 authentication/LegacyAuthQuickstart/AuthenticationExampleSwift/MainViewController.swift delete mode 100644 authentication/LegacyAuthQuickstart/AuthenticationExampleSwift/PasswordlessViewController.swift delete mode 100644 authentication/LegacyAuthQuickstart/AuthenticationExampleSwift/UIViewController.swift delete mode 100644 authentication/LegacyAuthQuickstart/AuthenticationExampleSwiftUITests/AuthenticationExampleSwiftUITests.swift delete mode 100644 authentication/LegacyAuthQuickstart/AuthenticationExampleSwiftUITests/Info.plist delete mode 100644 authentication/LegacyAuthQuickstart/AuthenticationExampleTests/AuthenticationExampleTests.m delete mode 100644 authentication/LegacyAuthQuickstart/AuthenticationExampleUITests/AuthenticationExampleUITests.m delete mode 100644 authentication/LegacyAuthQuickstart/AuthenticationExampleUITests/Info.plist delete mode 100644 authentication/LegacyAuthQuickstart/Podfile delete mode 100644 authentication/LegacyAuthQuickstart/Podfile.lock delete mode 100644 authentication/LegacyAuthQuickstart/README.md delete mode 100644 authentication/LegacyAuthQuickstart/web/auth.html delete mode 100644 config/LegacyConfigQuickstart/ConfigExample.xcodeproj/project.pbxproj delete mode 100644 config/LegacyConfigQuickstart/ConfigExample.xcodeproj/xcshareddata/xcschemes/ConfigExample.xcscheme delete mode 100644 config/LegacyConfigQuickstart/ConfigExample.xcodeproj/xcshareddata/xcschemes/ConfigExampleSwift.xcscheme delete mode 100644 config/LegacyConfigQuickstart/ConfigExample/.clang-format delete mode 100644 config/LegacyConfigQuickstart/ConfigExample/AppDelegate.h delete mode 100644 config/LegacyConfigQuickstart/ConfigExample/AppDelegate.m delete mode 100644 config/LegacyConfigQuickstart/ConfigExample/Base.lproj/Main.storyboard delete mode 100644 config/LegacyConfigQuickstart/ConfigExample/Info.plist delete mode 100644 config/LegacyConfigQuickstart/ConfigExample/RemoteConfigDefaults.plist delete mode 100644 config/LegacyConfigQuickstart/ConfigExample/ViewController.h delete mode 100644 config/LegacyConfigQuickstart/ConfigExample/ViewController.m delete mode 100644 config/LegacyConfigQuickstart/ConfigExample/main.m delete mode 100644 config/LegacyConfigQuickstart/ConfigExampleSwift/AppDelegate.swift delete mode 100644 config/LegacyConfigQuickstart/ConfigExampleSwift/ViewController.swift delete mode 100644 config/LegacyConfigQuickstart/ConfigExampleSwiftUITests/ConfigExampleSwiftUITests.swift delete mode 100644 config/LegacyConfigQuickstart/ConfigExampleSwiftUITests/Info.plist delete mode 100644 config/LegacyConfigQuickstart/ConfigExampleTests/AppTests.m delete mode 100644 config/LegacyConfigQuickstart/ConfigExampleUITests/ConfigExampleUITests.m delete mode 100644 config/LegacyConfigQuickstart/ConfigExampleUITests/Info.plist delete mode 100644 config/LegacyConfigQuickstart/Podfile delete mode 100644 config/LegacyConfigQuickstart/Podfile.lock delete mode 100644 config/LegacyConfigQuickstart/README.md delete mode 100644 crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExample.xcodeproj/project.pbxproj delete mode 100644 crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExample.xcodeproj/xcshareddata/xcschemes/CrashlyticsExample.xcscheme delete mode 100644 crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExample.xcodeproj/xcshareddata/xcschemes/CrashlyticsExampleSwift.xcscheme delete mode 100644 crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExample/.clang-format delete mode 100644 crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExample/AppDelegate.h delete mode 100644 crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExample/AppDelegate.m delete mode 100644 crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExample/Base.lproj/Main.storyboard delete mode 100644 crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExample/Info.plist delete mode 100644 crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExample/ViewController.h delete mode 100644 crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExample/ViewController.m delete mode 100644 crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExample/main.m delete mode 100644 crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExampleSwift/AppDelegate.swift delete mode 100644 crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExampleSwift/ViewController.swift delete mode 100644 crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExampleSwiftUITests/CrashReportingExampleSwiftUITests.swift delete mode 100644 crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExampleSwiftUITests/Info.plist delete mode 100644 crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExampleTests/AppTests.m delete mode 100644 crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExampleUITests/CrashReportingExampleUITests.m delete mode 100644 crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExampleUITests/Info.plist delete mode 100644 crashlytics/LegacyCrashlyticsQuickstart/Podfile delete mode 100644 crashlytics/LegacyCrashlyticsQuickstart/Podfile.lock delete mode 100644 functions/LegacyFunctionsQuickstart/FunctionsExample.xcodeproj/project.pbxproj delete mode 100644 functions/LegacyFunctionsQuickstart/FunctionsExample.xcodeproj/xcshareddata/xcschemes/FunctionsExample.xcscheme delete mode 100644 functions/LegacyFunctionsQuickstart/FunctionsExample.xcodeproj/xcshareddata/xcschemes/FunctionsExampleSwift.xcscheme delete mode 100644 functions/LegacyFunctionsQuickstart/FunctionsExample/.clang-format delete mode 100644 functions/LegacyFunctionsQuickstart/FunctionsExample/AppDelegate.h delete mode 100644 functions/LegacyFunctionsQuickstart/FunctionsExample/AppDelegate.m delete mode 100644 functions/LegacyFunctionsQuickstart/FunctionsExample/Base.lproj/Main.storyboard delete mode 100644 functions/LegacyFunctionsQuickstart/FunctionsExample/CloudAddCell.h delete mode 100644 functions/LegacyFunctionsQuickstart/FunctionsExample/CloudAddCell.m delete mode 100644 functions/LegacyFunctionsQuickstart/FunctionsExample/CommentCell.h delete mode 100644 functions/LegacyFunctionsQuickstart/FunctionsExample/CommentCell.m delete mode 100644 functions/LegacyFunctionsQuickstart/FunctionsExample/FAuthPickerViewController.h delete mode 100644 functions/LegacyFunctionsQuickstart/FunctionsExample/FAuthPickerViewController.m delete mode 100644 functions/LegacyFunctionsQuickstart/FunctionsExample/FAuthPickerViewController.xib delete mode 100644 functions/LegacyFunctionsQuickstart/FunctionsExample/Info.plist delete mode 100644 functions/LegacyFunctionsQuickstart/FunctionsExample/MainViewController.h delete mode 100644 functions/LegacyFunctionsQuickstart/FunctionsExample/MainViewController.m delete mode 100644 functions/LegacyFunctionsQuickstart/FunctionsExample/SignInViewController.h delete mode 100644 functions/LegacyFunctionsQuickstart/FunctionsExample/SignInViewController.m delete mode 100644 functions/LegacyFunctionsQuickstart/FunctionsExample/main.m delete mode 100644 functions/LegacyFunctionsQuickstart/FunctionsExampleSwift/AppDelegate.swift delete mode 100644 functions/LegacyFunctionsQuickstart/FunctionsExampleSwift/CloudAddCell.swift delete mode 100644 functions/LegacyFunctionsQuickstart/FunctionsExampleSwift/CommentCell.swift delete mode 100644 functions/LegacyFunctionsQuickstart/FunctionsExampleSwift/FAuthPickerViewController.swift delete mode 100644 functions/LegacyFunctionsQuickstart/FunctionsExampleSwift/MainViewController.swift delete mode 100644 functions/LegacyFunctionsQuickstart/FunctionsExampleSwift/SignInViewController.swift delete mode 100644 functions/LegacyFunctionsQuickstart/FunctionsExampleSwiftUITests/FunctionsExampleSwiftUITests.swift delete mode 100644 functions/LegacyFunctionsQuickstart/FunctionsExampleSwiftUITests/Info.plist delete mode 100644 functions/LegacyFunctionsQuickstart/FunctionsExampleTests/FunctionsExampleTests.m delete mode 100644 functions/LegacyFunctionsQuickstart/FunctionsExampleTests/Info.plist delete mode 100644 functions/LegacyFunctionsQuickstart/FunctionsExampleUITests/FunctionsExampleUITests.m delete mode 100644 functions/LegacyFunctionsQuickstart/FunctionsExampleUITests/Info.plist delete mode 100644 functions/LegacyFunctionsQuickstart/Podfile delete mode 100644 functions/LegacyFunctionsQuickstart/Podfile.lock delete mode 100644 functions/LegacyFunctionsQuickstart/README.md delete mode 100644 storage/LegacyStorageQuickstart/Podfile delete mode 100644 storage/LegacyStorageQuickstart/Podfile.lock delete mode 100644 storage/LegacyStorageQuickstart/README.md delete mode 100644 storage/LegacyStorageQuickstart/StorageExample.xcodeproj/project.pbxproj delete mode 100644 storage/LegacyStorageQuickstart/StorageExample.xcodeproj/xcshareddata/xcschemes/StorageExample.xcscheme delete mode 100644 storage/LegacyStorageQuickstart/StorageExample.xcodeproj/xcshareddata/xcschemes/StorageExampleSwift.xcscheme delete mode 100644 storage/LegacyStorageQuickstart/StorageExample/.clang-format delete mode 100644 storage/LegacyStorageQuickstart/StorageExample/AppDelegate.h delete mode 100644 storage/LegacyStorageQuickstart/StorageExample/AppDelegate.m delete mode 100644 storage/LegacyStorageQuickstart/StorageExample/Base.lproj/Main.storyboard delete mode 100644 storage/LegacyStorageQuickstart/StorageExample/DownloadViewController.h delete mode 100644 storage/LegacyStorageQuickstart/StorageExample/DownloadViewController.m delete mode 100644 storage/LegacyStorageQuickstart/StorageExample/Info.plist delete mode 100644 storage/LegacyStorageQuickstart/StorageExample/Placeholder.swift delete mode 100644 storage/LegacyStorageQuickstart/StorageExample/ViewController.h delete mode 100644 storage/LegacyStorageQuickstart/StorageExample/ViewController.m delete mode 100644 storage/LegacyStorageQuickstart/StorageExample/main.m delete mode 100644 storage/LegacyStorageQuickstart/StorageExampleSwift/AppDelegate.swift delete mode 100644 storage/LegacyStorageQuickstart/StorageExampleSwift/DownloadViewController.swift delete mode 100644 storage/LegacyStorageQuickstart/StorageExampleSwift/ViewController.swift delete mode 100644 storage/LegacyStorageQuickstart/StorageExampleSwiftUITests/Info.plist delete mode 100644 storage/LegacyStorageQuickstart/StorageExampleSwiftUITests/StorageExampleSwiftUITests.swift delete mode 100644 storage/LegacyStorageQuickstart/StorageExampleTests/AppTests.m delete mode 100644 storage/LegacyStorageQuickstart/StorageExampleUITests/Info.plist delete mode 100644 storage/LegacyStorageQuickstart/StorageExampleUITests/StorageExampleUITests.m diff --git a/abtesting/LegacyABTestingQuickstart/ABTestingExample.xcodeproj/project.pbxproj b/abtesting/LegacyABTestingQuickstart/ABTestingExample.xcodeproj/project.pbxproj deleted file mode 100644 index c34abf47f..000000000 --- a/abtesting/LegacyABTestingQuickstart/ABTestingExample.xcodeproj/project.pbxproj +++ /dev/null @@ -1,590 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 10B92C9F202E3603008DBD68 /* ABTestingExampleUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10B92C9E202E3603008DBD68 /* ABTestingExampleUITests.swift */; }; - 29E0D31D0ECE9DE41F33C00A /* GoogleService-Info.plist in Sources */ = {isa = PBXBuildFile; fileRef = EBCA43177E99956B67580EEC /* GoogleService-Info.plist */; }; - 8DFFBF9E1F9E6C5200C3483E /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DFFBF9D1F9E6C5200C3483E /* AppDelegate.swift */; }; - 8DFFBFA01F9E6C5200C3483E /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DFFBF9F1F9E6C5200C3483E /* ViewController.swift */; }; - 8DFFBFA31F9E6C5200C3483E /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8DFFBFA11F9E6C5200C3483E /* Main.storyboard */; }; - 8DFFBFA51F9E6C5200C3483E /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 8DFFBFA41F9E6C5200C3483E /* Assets.xcassets */; }; - 8DFFBFA81F9E6C5200C3483E /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8DFFBFA61F9E6C5200C3483E /* LaunchScreen.storyboard */; }; - 8DFFBFB31F9E6C5200C3483E /* ABTestingExampleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8DFFBFB21F9E6C5200C3483E /* ABTestingExampleTests.swift */; }; - 9014CF21F4720D01EBB1E21A /* GoogleService-Info.plist in Sources */ = {isa = PBXBuildFile; fileRef = EBCA43177E99956B67580EEC /* GoogleService-Info.plist */; }; - C2B56E8E65745789367E0646 /* GoogleService-Info.plist in Sources */ = {isa = PBXBuildFile; fileRef = EBCA43177E99956B67580EEC /* GoogleService-Info.plist */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 10B92CA1202E3603008DBD68 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 8DFFBF921F9E6C5200C3483E /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8DFFBF991F9E6C5200C3483E; - remoteInfo = ABTestingExample; - }; - 8DFFBFAF1F9E6C5200C3483E /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 8DFFBF921F9E6C5200C3483E /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8DFFBF991F9E6C5200C3483E; - remoteInfo = ABTestingExample; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 10B92C9C202E3603008DBD68 /* ABTestingExampleUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ABTestingExampleUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 10B92C9E202E3603008DBD68 /* ABTestingExampleUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ABTestingExampleUITests.swift; sourceTree = ""; }; - 10B92CA0202E3603008DBD68 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 8DFFBF9A1F9E6C5200C3483E /* ABTestingExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ABTestingExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 8DFFBF9D1F9E6C5200C3483E /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 8DFFBF9F1F9E6C5200C3483E /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; - 8DFFBFA21F9E6C5200C3483E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 8DFFBFA41F9E6C5200C3483E /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - 8DFFBFA71F9E6C5200C3483E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - 8DFFBFA91F9E6C5200C3483E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 8DFFBFAE1F9E6C5200C3483E /* ABTestingExampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ABTestingExampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 8DFFBFB21F9E6C5200C3483E /* ABTestingExampleTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ABTestingExampleTests.swift; sourceTree = ""; }; - 8DFFBFB41F9E6C5200C3483E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - EBCA43177E99956B67580EEC /* GoogleService-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "../GoogleService-Info.plist"; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 10B92C99202E3603008DBD68 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8DFFBF971F9E6C5200C3483E /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8DFFBFAB1F9E6C5200C3483E /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 10B92C9D202E3603008DBD68 /* ABTestingExampleUITests */ = { - isa = PBXGroup; - children = ( - 10B92C9E202E3603008DBD68 /* ABTestingExampleUITests.swift */, - 10B92CA0202E3603008DBD68 /* Info.plist */, - ); - path = ABTestingExampleUITests; - sourceTree = ""; - }; - 8DFFBF911F9E6C5200C3483E = { - isa = PBXGroup; - children = ( - 8DFFBF9C1F9E6C5200C3483E /* ABTestingExample */, - 8DFFBFB11F9E6C5200C3483E /* ABTestingExampleTests */, - 10B92C9D202E3603008DBD68 /* ABTestingExampleUITests */, - 8DFFBF9B1F9E6C5200C3483E /* Products */, - EBCA43177E99956B67580EEC /* GoogleService-Info.plist */, - ); - sourceTree = ""; - }; - 8DFFBF9B1F9E6C5200C3483E /* Products */ = { - isa = PBXGroup; - children = ( - 8DFFBF9A1F9E6C5200C3483E /* ABTestingExample.app */, - 8DFFBFAE1F9E6C5200C3483E /* ABTestingExampleTests.xctest */, - 10B92C9C202E3603008DBD68 /* ABTestingExampleUITests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - 8DFFBF9C1F9E6C5200C3483E /* ABTestingExample */ = { - isa = PBXGroup; - children = ( - 8DFFBF9D1F9E6C5200C3483E /* AppDelegate.swift */, - 8DFFBF9F1F9E6C5200C3483E /* ViewController.swift */, - 8DFFBFA11F9E6C5200C3483E /* Main.storyboard */, - 8DFFBFA41F9E6C5200C3483E /* Assets.xcassets */, - 8DFFBFA61F9E6C5200C3483E /* LaunchScreen.storyboard */, - 8DFFBFA91F9E6C5200C3483E /* Info.plist */, - ); - path = ABTestingExample; - sourceTree = ""; - }; - 8DFFBFB11F9E6C5200C3483E /* ABTestingExampleTests */ = { - isa = PBXGroup; - children = ( - 8DFFBFB21F9E6C5200C3483E /* ABTestingExampleTests.swift */, - 8DFFBFB41F9E6C5200C3483E /* Info.plist */, - ); - path = ABTestingExampleTests; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 10B92C9B202E3603008DBD68 /* ABTestingExampleUITests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 10B92CA5202E3603008DBD68 /* Build configuration list for PBXNativeTarget "ABTestingExampleUITests" */; - buildPhases = ( - 10B92C98202E3603008DBD68 /* Sources */, - 10B92C99202E3603008DBD68 /* Frameworks */, - 10B92C9A202E3603008DBD68 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 10B92CA2202E3603008DBD68 /* PBXTargetDependency */, - ); - name = ABTestingExampleUITests; - productName = ABTestingExampleUITests; - productReference = 10B92C9C202E3603008DBD68 /* ABTestingExampleUITests.xctest */; - productType = "com.apple.product-type.bundle.ui-testing"; - }; - 8DFFBF991F9E6C5200C3483E /* ABTestingExample */ = { - isa = PBXNativeTarget; - buildConfigurationList = 8DFFBFB71F9E6C5200C3483E /* Build configuration list for PBXNativeTarget "ABTestingExample" */; - buildPhases = ( - 8DFFBF961F9E6C5200C3483E /* Sources */, - 8DFFBF971F9E6C5200C3483E /* Frameworks */, - 8DFFBF981F9E6C5200C3483E /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = ABTestingExample; - productName = ABTestingExample; - productReference = 8DFFBF9A1F9E6C5200C3483E /* ABTestingExample.app */; - productType = "com.apple.product-type.application"; - }; - 8DFFBFAD1F9E6C5200C3483E /* ABTestingExampleTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 8DFFBFBA1F9E6C5200C3483E /* Build configuration list for PBXNativeTarget "ABTestingExampleTests" */; - buildPhases = ( - 8DFFBFAA1F9E6C5200C3483E /* Sources */, - 8DFFBFAB1F9E6C5200C3483E /* Frameworks */, - 8DFFBFAC1F9E6C5200C3483E /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 8DFFBFB01F9E6C5200C3483E /* PBXTargetDependency */, - ); - name = ABTestingExampleTests; - productName = ABTestingExampleTests; - productReference = 8DFFBFAE1F9E6C5200C3483E /* ABTestingExampleTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 8DFFBF921F9E6C5200C3483E /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftUpdateCheck = 0920; - LastUpgradeCheck = 1110; - ORGANIZATIONNAME = Firebase; - TargetAttributes = { - 10B92C9B202E3603008DBD68 = { - CreatedOnToolsVersion = 9.2; - LastSwiftMigration = 1110; - ProvisioningStyle = Automatic; - TestTargetID = 8DFFBF991F9E6C5200C3483E; - }; - 8DFFBF991F9E6C5200C3483E = { - CreatedOnToolsVersion = 8.3.3; - LastSwiftMigration = 1110; - ProvisioningStyle = Automatic; - }; - 8DFFBFAD1F9E6C5200C3483E = { - CreatedOnToolsVersion = 8.3.3; - LastSwiftMigration = 1110; - ProvisioningStyle = Automatic; - TestTargetID = 8DFFBF991F9E6C5200C3483E; - }; - }; - }; - buildConfigurationList = 8DFFBF951F9E6C5200C3483E /* Build configuration list for PBXProject "ABTestingExample" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 8DFFBF911F9E6C5200C3483E; - productRefGroup = 8DFFBF9B1F9E6C5200C3483E /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 8DFFBF991F9E6C5200C3483E /* ABTestingExample */, - 8DFFBFAD1F9E6C5200C3483E /* ABTestingExampleTests */, - 10B92C9B202E3603008DBD68 /* ABTestingExampleUITests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 10B92C9A202E3603008DBD68 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8DFFBF981F9E6C5200C3483E /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8DFFBFA81F9E6C5200C3483E /* LaunchScreen.storyboard in Resources */, - 8DFFBFA51F9E6C5200C3483E /* Assets.xcassets in Resources */, - 8DFFBFA31F9E6C5200C3483E /* Main.storyboard in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8DFFBFAC1F9E6C5200C3483E /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 10B92C98202E3603008DBD68 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 10B92C9F202E3603008DBD68 /* ABTestingExampleUITests.swift in Sources */, - 9014CF21F4720D01EBB1E21A /* GoogleService-Info.plist in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8DFFBF961F9E6C5200C3483E /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8DFFBFA01F9E6C5200C3483E /* ViewController.swift in Sources */, - 8DFFBF9E1F9E6C5200C3483E /* AppDelegate.swift in Sources */, - C2B56E8E65745789367E0646 /* GoogleService-Info.plist in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8DFFBFAA1F9E6C5200C3483E /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8DFFBFB31F9E6C5200C3483E /* ABTestingExampleTests.swift in Sources */, - 29E0D31D0ECE9DE41F33C00A /* GoogleService-Info.plist in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 10B92CA2202E3603008DBD68 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 8DFFBF991F9E6C5200C3483E /* ABTestingExample */; - targetProxy = 10B92CA1202E3603008DBD68 /* PBXContainerItemProxy */; - }; - 8DFFBFB01F9E6C5200C3483E /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 8DFFBF991F9E6C5200C3483E /* ABTestingExample */; - targetProxy = 8DFFBFAF1F9E6C5200C3483E /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - 8DFFBFA11F9E6C5200C3483E /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 8DFFBFA21F9E6C5200C3483E /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; - 8DFFBFA61F9E6C5200C3483E /* LaunchScreen.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 8DFFBFA71F9E6C5200C3483E /* Base */, - ); - name = LaunchScreen.storyboard; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 10B92CA3202E3603008DBD68 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = ABTestingExampleUITests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.firebase.ABTestingExample.ABTestingExampleUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = ABTestingExample; - }; - name = Debug; - }; - 10B92CA4202E3603008DBD68 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = ABTestingExampleUITests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.firebase.ABTestingExample.ABTestingExampleUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = ABTestingExample; - }; - name = Release; - }; - 8DFFBFB51F9E6C5200C3483E /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - 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 = 15.0; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 8DFFBFB61F9E6C5200C3483E /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - 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 = 15.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 8DFFBFB81F9E6C5200C3483E /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - INFOPLIST_FILE = ABTestingExample/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks $(PODS_CONFIGURATION_BUILD_DIR)/GoogleToolboxForMac $(PODS_CONFIGURATION_BUILD_DIR)/nanopb $(PODS_CONFIGURATION_BUILD_DIR)/Protobuf"; - PRODUCT_BUNDLE_IDENTIFIER = com.firebase.ABTestingExample; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_SWIFT3_OBJC_INFERENCE = Default; - SWIFT_VERSION = 5.0; - }; - name = Debug; - }; - 8DFFBFB91F9E6C5200C3483E /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - INFOPLIST_FILE = ABTestingExample/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks $(PODS_CONFIGURATION_BUILD_DIR)/GoogleToolboxForMac $(PODS_CONFIGURATION_BUILD_DIR)/nanopb $(PODS_CONFIGURATION_BUILD_DIR)/Protobuf"; - PRODUCT_BUNDLE_IDENTIFIER = com.firebase.ABTestingExample; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_SWIFT3_OBJC_INFERENCE = Default; - SWIFT_VERSION = 5.0; - }; - name = Release; - }; - 8DFFBFBB1F9E6C5200C3483E /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - BUNDLE_LOADER = "$(TEST_HOST)"; - INFOPLIST_FILE = ABTestingExampleTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.firebase.ABTestingExampleTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/ABTestingExample.app/ABTestingExample"; - }; - name = Debug; - }; - 8DFFBFBC1F9E6C5200C3483E /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - BUNDLE_LOADER = "$(TEST_HOST)"; - INFOPLIST_FILE = ABTestingExampleTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.firebase.ABTestingExampleTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/ABTestingExample.app/ABTestingExample"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 10B92CA5202E3603008DBD68 /* Build configuration list for PBXNativeTarget "ABTestingExampleUITests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 10B92CA3202E3603008DBD68 /* Debug */, - 10B92CA4202E3603008DBD68 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 8DFFBF951F9E6C5200C3483E /* Build configuration list for PBXProject "ABTestingExample" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 8DFFBFB51F9E6C5200C3483E /* Debug */, - 8DFFBFB61F9E6C5200C3483E /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 8DFFBFB71F9E6C5200C3483E /* Build configuration list for PBXNativeTarget "ABTestingExample" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 8DFFBFB81F9E6C5200C3483E /* Debug */, - 8DFFBFB91F9E6C5200C3483E /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 8DFFBFBA1F9E6C5200C3483E /* Build configuration list for PBXNativeTarget "ABTestingExampleTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 8DFFBFBB1F9E6C5200C3483E /* Debug */, - 8DFFBFBC1F9E6C5200C3483E /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 8DFFBF921F9E6C5200C3483E /* Project object */; -} diff --git a/abtesting/LegacyABTestingQuickstart/ABTestingExample/AppDelegate.swift b/abtesting/LegacyABTestingQuickstart/ABTestingExample/AppDelegate.swift deleted file mode 100644 index 18d472591..000000000 --- a/abtesting/LegacyABTestingQuickstart/ABTestingExample/AppDelegate.swift +++ /dev/null @@ -1,30 +0,0 @@ -// -// Copyright (c) Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import FirebaseCore -import UIKit - -@UIApplicationMain -class AppDelegate: UIResponder, UIApplicationDelegate { - var window: UIWindow? - - func application(_ application: UIApplication, - didFinishLaunchingWithOptions launchOptions: [UIApplication - .LaunchOptionsKey: Any]?) -> Bool { - FirebaseApp.configure() - return true - } -} diff --git a/abtesting/LegacyABTestingQuickstart/ABTestingExample/Assets.xcassets/AppIcon.appiconset/Contents.json b/abtesting/LegacyABTestingQuickstart/ABTestingExample/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 36d2c80d8..000000000 --- a/abtesting/LegacyABTestingQuickstart/ABTestingExample/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "images" : [ - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "29x29", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "40x40", - "scale" : "3x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "2x" - }, - { - "idiom" : "iphone", - "size" : "60x60", - "scale" : "3x" - }, - { - "idiom" : "ipad", - "size" : "29x29", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "29x29", - "scale" : "2x" - }, - { - "idiom" : "ipad", - "size" : "40x40", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "40x40", - "scale" : "2x" - }, - { - "idiom" : "ipad", - "size" : "76x76", - "scale" : "1x" - }, - { - "idiom" : "ipad", - "size" : "76x76", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/abtesting/LegacyABTestingQuickstart/ABTestingExample/Base.lproj/LaunchScreen.storyboard b/abtesting/LegacyABTestingQuickstart/ABTestingExample/Base.lproj/LaunchScreen.storyboard deleted file mode 100644 index fdf3f97d1..000000000 --- a/abtesting/LegacyABTestingQuickstart/ABTestingExample/Base.lproj/LaunchScreen.storyboard +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/abtesting/LegacyABTestingQuickstart/ABTestingExample/Base.lproj/Main.storyboard b/abtesting/LegacyABTestingQuickstart/ABTestingExample/Base.lproj/Main.storyboard deleted file mode 100644 index 46d947ee8..000000000 --- a/abtesting/LegacyABTestingQuickstart/ABTestingExample/Base.lproj/Main.storyboard +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/abtesting/LegacyABTestingQuickstart/ABTestingExample/Info.plist b/abtesting/LegacyABTestingQuickstart/ABTestingExample/Info.plist deleted file mode 100644 index d05247386..000000000 --- a/abtesting/LegacyABTestingQuickstart/ABTestingExample/Info.plist +++ /dev/null @@ -1,45 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UILaunchStoryboardName - LaunchScreen - UIMainStoryboardFile - Main - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/abtesting/LegacyABTestingQuickstart/ABTestingExample/ViewController.swift b/abtesting/LegacyABTestingQuickstart/ABTestingExample/ViewController.swift deleted file mode 100644 index e9f4c5ad5..000000000 --- a/abtesting/LegacyABTestingQuickstart/ABTestingExample/ViewController.swift +++ /dev/null @@ -1,185 +0,0 @@ -// -// Copyright (c) Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import FirebaseRemoteConfig -import FirebaseInstallations -import UIKit - -enum ColorScheme { - case light - case dark -} - -extension RemoteConfigFetchStatus { - var debugDescription: String { - switch self { - case .failure: - return "failure" - case .noFetchYet: - return "pending" - case .success: - return "success" - case .throttled: - return "throttled" - } - } -} - -class ViewController: UIViewController, UITableViewDataSource { - @IBOutlet var tableView: UITableView! - - var colorScheme: ColorScheme = .light { - didSet { - switchToColorScheme(colorScheme) - } - } - - override func viewDidLoad() { - super.viewDidLoad() - tableView.dataSource = self - tableView.tableFooterView = UIView() - - #if DEBUG - NotificationCenter.default.addObserver(self, - selector: #selector(printInstallationsID), - name: .InstallationIDDidChange, - object: nil) - #endif - } - - override func viewWillAppear(_ animated: Bool) { - super.viewWillAppear(animated) - RemoteConfig.remoteConfig().fetch(withExpirationDuration: 0) { status, error in - if let error = error { - print("Error fetching config: \(error)") - } - print("Config fetch completed with status: \(status.debugDescription)") - self.setAppearance() - } - } - - override func viewDidAppear(_ animated: Bool) { - super.viewDidAppear(animated) - setAppearance() - } - - func setAppearance() { - RemoteConfig.remoteConfig().activate { activated, error in - let configValue = RemoteConfig.remoteConfig()["color_scheme"] - print("Config value: \(configValue.stringValue ?? "null")") - DispatchQueue.main.async { - if configValue.stringValue == "dark" { - self.colorScheme = .dark - } else { - self.colorScheme = .light - } - } - } - } - - @objc func printInstallationsID() { - #if DEBUG - Installations.installations().authTokenForcingRefresh(true) { token, error in - if let error = error { - print("Error fetching token: \(error)") - return - } - guard let token = token else { return } - print("Installation auth token: \(token.authToken)") - } - Installations.installations().installationID { identifier, error in - if let error = error { - print("Error fetching installations ID: \(error)") - } else if let identifier = identifier { - print("Remote installations ID: \(identifier)") - } - } - #endif - } - - deinit { - NotificationCenter.default.removeObserver(self) - } - - // MARK: - UI Colors - - func switchToColorScheme(_ scheme: ColorScheme) { - switch scheme { - case .light: - navigationController?.navigationBar.barTintColor = ViewController.lightColors.primary - navigationController?.navigationBar.barStyle = .default - navigationController?.navigationBar.titleTextAttributes = [ - NSAttributedString.Key.foregroundColor: UIColor.black, - ] - tableView.separatorColor = .gray - tableView.backgroundColor = UIColor(red: 0.94, green: 0.94, blue: 0.94, alpha: 1) - - case .dark: - navigationController?.navigationBar.barTintColor = ViewController.darkColors.primary - navigationController?.navigationBar.barStyle = .black - navigationController?.navigationBar.titleTextAttributes = [ - NSAttributedString.Key.foregroundColor: UIColor.white, - ] - tableView.separatorColor = .lightGray - tableView.backgroundColor = ViewController.darkColors.secondary - } - - tableView.reloadData() - } - - static let darkColors = ( - primary: UIColor(red: 0x61 / 0xFF, green: 0x61 / 0xFF, blue: 0x61 / 0xFF, alpha: 1), - secondary: UIColor(red: 0x42 / 0xFF, green: 0x42 / 0xFF, blue: 0x42 / 0xFF, alpha: 1) - ) - - static let lightColors = ( - primary: UIColor(red: 0xFF / 0xFF, green: 0xC1 / 0xFF, blue: 0x07 / 0xFF, alpha: 1), - secondary: UIColor(red: 0xFF / 0xFF, green: 0xC1 / 0xFF, blue: 0x07 / 0xFF, alpha: 1) - ) - - // MARK: - UITableViewDataSource - - let data = [ - ("Getting Started with Firebase", "An Introduction to Firebase"), - ("Google Firestore", "Powerful Querying and Automatic Scaling"), - ("Analytics", "Simple App Insights"), - ("Remote Config", "Parameterize App Behavior"), - ] - - func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - return data.count - } - - func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - let cell = tableView.dequeueReusableCell(withIdentifier: "GenericSubtitleCell", for: indexPath) - cell.textLabel?.text = data[indexPath.row].0 - cell.detailTextLabel?.text = data[indexPath.row].1 - cell.detailTextLabel?.alpha = 0.8 - - switch colorScheme { - case .light: - cell.backgroundColor = UIColor(red: 0.99, green: 0.99, blue: 0.99, alpha: 1) - cell.textLabel?.textColor = .black - cell.detailTextLabel?.textColor = .black - case .dark: - cell.backgroundColor = ViewController.darkColors.secondary - cell.textLabel?.textColor = .white - cell.detailTextLabel?.textColor = .white - } - - return cell - } -} diff --git a/abtesting/LegacyABTestingQuickstart/ABTestingExampleTests/ABTestingExampleTests.swift b/abtesting/LegacyABTestingQuickstart/ABTestingExampleTests/ABTestingExampleTests.swift deleted file mode 100644 index b22d8c6fc..000000000 --- a/abtesting/LegacyABTestingQuickstart/ABTestingExampleTests/ABTestingExampleTests.swift +++ /dev/null @@ -1,20 +0,0 @@ -// -// Copyright (c) Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import XCTest -@testable import ABTestingExample - -class ABTestingExampleTests: XCTestCase {} diff --git a/abtesting/LegacyABTestingQuickstart/ABTestingExampleTests/Info.plist b/abtesting/LegacyABTestingQuickstart/ABTestingExampleTests/Info.plist deleted file mode 100644 index 6c6c23c43..000000000 --- a/abtesting/LegacyABTestingQuickstart/ABTestingExampleTests/Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - - diff --git a/abtesting/LegacyABTestingQuickstart/ABTestingExampleUITests/ABTestingExampleUITests.swift b/abtesting/LegacyABTestingQuickstart/ABTestingExampleUITests/ABTestingExampleUITests.swift deleted file mode 100644 index c02c9b1c9..000000000 --- a/abtesting/LegacyABTestingQuickstart/ABTestingExampleUITests/ABTestingExampleUITests.swift +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -import XCTest - -class ABTestingExampleUITests: XCTestCase { - override func setUp() { - super.setUp() - XCUIApplication().launch() - } - - override func tearDown() { - super.tearDown() - } - - func testExample() { - XCTAssertTrue(XCUIApplication().navigationBars["Firenotes"].exists, - "Firenotes is missing from the navigation bar") - } -} diff --git a/abtesting/LegacyABTestingQuickstart/ABTestingExampleUITests/Info.plist b/abtesting/LegacyABTestingQuickstart/ABTestingExampleUITests/Info.plist deleted file mode 100644 index 6c40a6cd0..000000000 --- a/abtesting/LegacyABTestingQuickstart/ABTestingExampleUITests/Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - - diff --git a/abtesting/LegacyABTestingQuickstart/Podfile b/abtesting/LegacyABTestingQuickstart/Podfile deleted file mode 100644 index 1fc057a62..000000000 --- a/abtesting/LegacyABTestingQuickstart/Podfile +++ /dev/null @@ -1,14 +0,0 @@ -platform :ios, '15.0' - -target 'ABTestingExample' do - use_frameworks! - - pod 'FirebaseAnalytics' - pod 'FirebaseRemoteConfig' - - target 'ABTestingExampleTests' do - inherit! :search_paths - # Pods for testing - end - -end diff --git a/abtesting/LegacyABTestingQuickstart/Podfile.lock b/abtesting/LegacyABTestingQuickstart/Podfile.lock deleted file mode 100644 index 6294f9bd2..000000000 --- a/abtesting/LegacyABTestingQuickstart/Podfile.lock +++ /dev/null @@ -1,140 +0,0 @@ -PODS: - - FirebaseABTesting (12.1.0): - - FirebaseCore (~> 12.1.0) - - FirebaseAnalytics (12.1.0): - - FirebaseAnalytics/Default (= 12.1.0) - - FirebaseCore (~> 12.1.0) - - FirebaseInstallations (~> 12.1.0) - - GoogleUtilities/AppDelegateSwizzler (~> 8.1) - - GoogleUtilities/MethodSwizzler (~> 8.1) - - GoogleUtilities/Network (~> 8.1) - - "GoogleUtilities/NSData+zlib (~> 8.1)" - - nanopb (~> 3.30910.0) - - FirebaseAnalytics/Default (12.1.0): - - FirebaseCore (~> 12.1.0) - - FirebaseInstallations (~> 12.1.0) - - GoogleAppMeasurement/Default (= 12.1.0) - - GoogleUtilities/AppDelegateSwizzler (~> 8.1) - - GoogleUtilities/MethodSwizzler (~> 8.1) - - GoogleUtilities/Network (~> 8.1) - - "GoogleUtilities/NSData+zlib (~> 8.1)" - - nanopb (~> 3.30910.0) - - FirebaseCore (12.1.0): - - FirebaseCoreInternal (~> 12.1.0) - - GoogleUtilities/Environment (~> 8.1) - - GoogleUtilities/Logger (~> 8.1) - - FirebaseCoreInternal (12.1.0): - - "GoogleUtilities/NSData+zlib (~> 8.1)" - - FirebaseInstallations (12.1.0): - - FirebaseCore (~> 12.1.0) - - GoogleUtilities/Environment (~> 8.1) - - GoogleUtilities/UserDefaults (~> 8.1) - - PromisesObjC (~> 2.4) - - FirebaseRemoteConfig (12.1.0): - - FirebaseABTesting (~> 12.1.0) - - FirebaseCore (~> 12.1.0) - - FirebaseInstallations (~> 12.1.0) - - FirebaseRemoteConfigInterop (~> 12.1.0) - - FirebaseSharedSwift (~> 12.1.0) - - GoogleUtilities/Environment (~> 8.1) - - "GoogleUtilities/NSData+zlib (~> 8.1)" - - FirebaseRemoteConfigInterop (12.1.0) - - FirebaseSharedSwift (12.1.0) - - GoogleAdsOnDeviceConversion (2.2.0): - - GoogleUtilities/Logger (~> 8.1) - - GoogleUtilities/Network (~> 8.1) - - nanopb (~> 3.30910.0) - - GoogleAppMeasurement/Core (12.1.0): - - GoogleUtilities/AppDelegateSwizzler (~> 8.1) - - GoogleUtilities/MethodSwizzler (~> 8.1) - - GoogleUtilities/Network (~> 8.1) - - "GoogleUtilities/NSData+zlib (~> 8.1)" - - nanopb (~> 3.30910.0) - - GoogleAppMeasurement/Default (12.1.0): - - GoogleAdsOnDeviceConversion (= 2.2.0) - - GoogleAppMeasurement/Core (= 12.1.0) - - GoogleAppMeasurement/IdentitySupport (= 12.1.0) - - GoogleUtilities/AppDelegateSwizzler (~> 8.1) - - GoogleUtilities/MethodSwizzler (~> 8.1) - - GoogleUtilities/Network (~> 8.1) - - "GoogleUtilities/NSData+zlib (~> 8.1)" - - nanopb (~> 3.30910.0) - - GoogleAppMeasurement/IdentitySupport (12.1.0): - - GoogleAppMeasurement/Core (= 12.1.0) - - GoogleUtilities/AppDelegateSwizzler (~> 8.1) - - GoogleUtilities/MethodSwizzler (~> 8.1) - - GoogleUtilities/Network (~> 8.1) - - "GoogleUtilities/NSData+zlib (~> 8.1)" - - nanopb (~> 3.30910.0) - - GoogleUtilities/AppDelegateSwizzler (8.1.0): - - GoogleUtilities/Environment - - GoogleUtilities/Logger - - GoogleUtilities/Network - - GoogleUtilities/Privacy - - GoogleUtilities/Environment (8.1.0): - - GoogleUtilities/Privacy - - GoogleUtilities/Logger (8.1.0): - - GoogleUtilities/Environment - - GoogleUtilities/Privacy - - GoogleUtilities/MethodSwizzler (8.1.0): - - GoogleUtilities/Logger - - GoogleUtilities/Privacy - - GoogleUtilities/Network (8.1.0): - - GoogleUtilities/Logger - - "GoogleUtilities/NSData+zlib" - - GoogleUtilities/Privacy - - GoogleUtilities/Reachability - - "GoogleUtilities/NSData+zlib (8.1.0)": - - GoogleUtilities/Privacy - - GoogleUtilities/Privacy (8.1.0) - - GoogleUtilities/Reachability (8.1.0): - - GoogleUtilities/Logger - - GoogleUtilities/Privacy - - GoogleUtilities/UserDefaults (8.1.0): - - 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) - - PromisesObjC (2.4.0) - -DEPENDENCIES: - - FirebaseAnalytics - - FirebaseRemoteConfig - -SPEC REPOS: - trunk: - - FirebaseABTesting - - FirebaseAnalytics - - FirebaseCore - - FirebaseCoreInternal - - FirebaseInstallations - - FirebaseRemoteConfig - - FirebaseRemoteConfigInterop - - FirebaseSharedSwift - - GoogleAdsOnDeviceConversion - - GoogleAppMeasurement - - GoogleUtilities - - nanopb - - PromisesObjC - -SPEC CHECKSUMS: - FirebaseABTesting: dfac26fef831cb16c35aa2df8bf5990ddada81d9 - FirebaseAnalytics: e89a37004bce8789cb53f4cb3e80160d925e6624 - FirebaseCore: 5a452ffa66f37c8e281076996837626c5d08c090 - FirebaseCoreInternal: ff526c22671bb564d1b34a47615e29ba99389dee - FirebaseInstallations: 6836550c466a6c3f753a777bec6f4e58ea228779 - FirebaseRemoteConfig: d4b28137ecdf1d92ddeb886066074eb3936736a7 - FirebaseRemoteConfigInterop: a30ffe29b80e3aec9580a44ec9deb7e19e08e6e8 - FirebaseSharedSwift: ee4344de8a4d5b5290de3600667307a44f85fd40 - GoogleAdsOnDeviceConversion: b225b50f2ee6bbf856fd51a26684929b32657215 - GoogleAppMeasurement: 61605c4152a142d797383a713ecfa5df98fe46ca - GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1 - nanopb: fad817b59e0457d11a5dfbde799381cd727c1275 - PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 - -PODFILE CHECKSUM: 46f08f1667aa6efa2162f0fe0fe92bd33c239dd7 - -COCOAPODS: 1.16.2 diff --git a/abtesting/LegacyABTestingQuickstart/README.md b/abtesting/LegacyABTestingQuickstart/README.md deleted file mode 100644 index 804da9970..000000000 --- a/abtesting/LegacyABTestingQuickstart/README.md +++ /dev/null @@ -1,25 +0,0 @@ -A/B Testing -======== - -Firebase A/B Testing leverages Remote Config to automatically trial new app -behaviors and exports the experiment results into Firebase Analytics. This -sample demonstrates using an A/B test to test multiple color schemes within -an app. - -## Quickstart Setup - -In Firebase Console, create a new A/B test with any name. In step two under -'Variants', click the 'Add Parameter' button and create a parameter named -`color_scheme`. Set its default value in the control group to `default` and -its value in 'Variant A' to `dark`. In the third step, select any goal metric. - -Verify the following two flows: - -Test on device: -Run the sample and copy the printed remote installations ID or the installation auth token from Xcode's console -into the 'Manage test devices' section in Firebase Console (click into details -in 'Experiment Overview' when experiment is in Draft status). - -Published experiment: -Run the experiment at a high percentage and reinstall the app until your app -instance is in the A/B test. diff --git a/analytics/LegacyAnalyticsQuickstart/AnalyticsExample.xcodeproj/project.pbxproj b/analytics/LegacyAnalyticsQuickstart/AnalyticsExample.xcodeproj/project.pbxproj deleted file mode 100644 index 0b02995aa..000000000 --- a/analytics/LegacyAnalyticsQuickstart/AnalyticsExample.xcodeproj/project.pbxproj +++ /dev/null @@ -1,917 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 107346D920315877004A66D1 /* AnalyticsExampleSwiftUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 107346D820315877004A66D1 /* AnalyticsExampleSwiftUITests.swift */; }; - 107347FF20333AD6004A66D1 /* AnalyticsExampleUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = 107347FE20333AD6004A66D1 /* AnalyticsExampleUITests.m */; }; - 15D22729762E9C62A1777AEF /* GoogleService-Info.plist in Sources */ = {isa = PBXBuildFile; fileRef = B719D0274FAE0575DEFC2BC2 /* GoogleService-Info.plist */; }; - 37C41742C3050BBAA05AEB2F /* GoogleService-Info.plist in Sources */ = {isa = PBXBuildFile; fileRef = B719D0274FAE0575DEFC2BC2 /* GoogleService-Info.plist */; }; - 4109F1E5F3ED7CC121BC3AEC /* GoogleService-Info.plist in Sources */ = {isa = PBXBuildFile; fileRef = B719D0274FAE0575DEFC2BC2 /* GoogleService-Info.plist */; }; - 5F3B16801AFC453200860007 /* CircleImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F3B167F1AFC453200860007 /* CircleImageView.m */; }; - 5F3B16811AFC453200860007 /* CircleImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F3B167F1AFC453200860007 /* CircleImageView.m */; }; - 5F5A53521ADE670C00F81DF0 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F5A53511ADE670C00F81DF0 /* main.m */; }; - 5F5A53551ADE670C00F81DF0 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F5A53541ADE670C00F81DF0 /* AppDelegate.m */; }; - 5F5A53581ADE670C00F81DF0 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F5A53571ADE670C00F81DF0 /* ViewController.m */; }; - 5F5A535B1ADE670C00F81DF0 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5F5A53591ADE670C00F81DF0 /* Main.storyboard */; }; - 5F5A537E1ADE67D500F81DF0 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F5A537D1ADE67D500F81DF0 /* AppDelegate.swift */; }; - 5F5A53801ADE67D500F81DF0 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F5A537F1ADE67D500F81DF0 /* ViewController.swift */; }; - 5F5A539C1ADE69AA00F81DF0 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5F5A53591ADE670C00F81DF0 /* Main.storyboard */; }; - 5F99610A1AE0CF4F0034F503 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5F9961061AE0CF4F0034F503 /* Images.xcassets */; }; - 5F99610B1AE0CF4F0034F503 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5F9961061AE0CF4F0034F503 /* Images.xcassets */; }; - 5F99610C1AE0CF4F0034F503 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5F9961071AE0CF4F0034F503 /* LaunchScreen.xib */; }; - 5F99610D1AE0CF4F0034F503 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5F9961071AE0CF4F0034F503 /* LaunchScreen.xib */; }; - 5FC04A7F1AF1DCAA00F787CA /* PatternTabBarController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FC04A7E1AF1DCAA00F787CA /* PatternTabBarController.m */; }; - 5FC04A811AF1DF8300F787CA /* PatternTabBarController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FC04A801AF1DF8300F787CA /* PatternTabBarController.swift */; }; - 5FC7AD8E1B0D446A004E3100 /* LogWrapper.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5FC7AD8D1B0D446A004E3100 /* LogWrapper.mm */; }; - 5FDE05641B0DAD5C0037B82F /* AppTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FDE05631B0DAD5C0037B82F /* AppTests.m */; }; - AD7774A577C995CEC721FBA9 /* GoogleService-Info.plist in Sources */ = {isa = PBXBuildFile; fileRef = B719D0274FAE0575DEFC2BC2 /* GoogleService-Info.plist */; }; - E735D5D1655322FCC076AC05 /* GoogleService-Info.plist in Sources */ = {isa = PBXBuildFile; fileRef = B719D0274FAE0575DEFC2BC2 /* GoogleService-Info.plist */; }; - EF01600C1BD07C1F00F8DA01 /* AnalyticsImages.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = EF01600B1BD07C1F00F8DA01 /* AnalyticsImages.xcassets */; }; - EF01600D1BD07C1F00F8DA01 /* AnalyticsImages.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = EF01600B1BD07C1F00F8DA01 /* AnalyticsImages.xcassets */; }; - EFB6C1B61C6524F4007CCA78 /* FoodPickerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EFB6C1B51C6524F4007CCA78 /* FoodPickerViewController.m */; }; - EFB6C1BA1C656D38007CCA78 /* FoodPickerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EFB6C1B91C656D38007CCA78 /* FoodPickerViewController.swift */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 107346DB20315877004A66D1 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5F5A53441ADE670C00F81DF0 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5F5A53781ADE67D500F81DF0; - remoteInfo = AnalyticsExampleSwift; - }; - 1073480120333AD6004A66D1 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5F5A53441ADE670C00F81DF0 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5F5A534B1ADE670C00F81DF0; - remoteInfo = AnalyticsExample; - }; - 5FC7AD881B0D4106004E3100 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5F5A53441ADE670C00F81DF0 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5F5A534B1ADE670C00F81DF0; - remoteInfo = AnalyticsExample; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 107346D620315877004A66D1 /* AnalyticsExampleSwiftUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AnalyticsExampleSwiftUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 107346D820315877004A66D1 /* AnalyticsExampleSwiftUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsExampleSwiftUITests.swift; sourceTree = ""; }; - 107346DA20315877004A66D1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 107347FC20333AD6004A66D1 /* AnalyticsExampleUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AnalyticsExampleUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 107347FE20333AD6004A66D1 /* AnalyticsExampleUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AnalyticsExampleUITests.m; sourceTree = ""; }; - 1073480020333AD6004A66D1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 5F3B167E1AFC453200860007 /* CircleImageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CircleImageView.h; sourceTree = ""; }; - 5F3B167F1AFC453200860007 /* CircleImageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CircleImageView.m; sourceTree = ""; }; - 5F5A534C1ADE670C00F81DF0 /* AnalyticsExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AnalyticsExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 5F5A53501ADE670C00F81DF0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 5F5A53511ADE670C00F81DF0 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - 5F5A53531ADE670C00F81DF0 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; - 5F5A53541ADE670C00F81DF0 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; - 5F5A53561ADE670C00F81DF0 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; - 5F5A53571ADE670C00F81DF0 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; - 5F5A535A1ADE670C00F81DF0 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 5F5A53791ADE67D500F81DF0 /* AnalyticsExampleSwift.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AnalyticsExampleSwift.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 5F5A537D1ADE67D500F81DF0 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 5F5A537F1ADE67D500F81DF0 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; - 5F9961061AE0CF4F0034F503 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; - 5F9961071AE0CF4F0034F503 /* LaunchScreen.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = LaunchScreen.xib; sourceTree = ""; }; - 5FC04A7D1AF1DCAA00F787CA /* PatternTabBarController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PatternTabBarController.h; sourceTree = ""; }; - 5FC04A7E1AF1DCAA00F787CA /* PatternTabBarController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PatternTabBarController.m; sourceTree = ""; }; - 5FC04A801AF1DF8300F787CA /* PatternTabBarController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PatternTabBarController.swift; sourceTree = ""; }; - 5FC7AD821B0D4106004E3100 /* AnalyticsExampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AnalyticsExampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 5FC7AD8D1B0D446A004E3100 /* LogWrapper.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = LogWrapper.mm; sourceTree = ""; }; - 5FC7AD8F1B0D44B9004E3100 /* LogWrapper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LogWrapper.h; sourceTree = ""; }; - 5FDE05631B0DAD5C0037B82F /* AppTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppTests.m; sourceTree = ""; }; - B719D0274FAE0575DEFC2BC2 /* GoogleService-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "../GoogleService-Info.plist"; sourceTree = ""; }; - EF01600B1BD07C1F00F8DA01 /* AnalyticsImages.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = AnalyticsImages.xcassets; sourceTree = ""; }; - EFB6C1B41C6524F4007CCA78 /* FoodPickerViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FoodPickerViewController.h; sourceTree = ""; }; - EFB6C1B51C6524F4007CCA78 /* FoodPickerViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FoodPickerViewController.m; sourceTree = ""; }; - EFB6C1B91C656D38007CCA78 /* FoodPickerViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FoodPickerViewController.swift; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 107346D320315877004A66D1 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 107347F920333AD6004A66D1 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5F5A53491ADE670C00F81DF0 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5F5A53761ADE67D500F81DF0 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5FC7AD7F1B0D4106004E3100 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 107346D720315877004A66D1 /* AnalyticsExampleSwiftUITests */ = { - isa = PBXGroup; - children = ( - 107346D820315877004A66D1 /* AnalyticsExampleSwiftUITests.swift */, - 107346DA20315877004A66D1 /* Info.plist */, - ); - path = AnalyticsExampleSwiftUITests; - sourceTree = ""; - }; - 107347FD20333AD6004A66D1 /* AnalyticsExampleUITests */ = { - isa = PBXGroup; - children = ( - 107347FE20333AD6004A66D1 /* AnalyticsExampleUITests.m */, - 1073480020333AD6004A66D1 /* Info.plist */, - ); - path = AnalyticsExampleUITests; - sourceTree = ""; - }; - 5F5A53431ADE670C00F81DF0 = { - isa = PBXGroup; - children = ( - 5F5A534E1ADE670C00F81DF0 /* AnalyticsExample */, - 5F5A537A1ADE67D500F81DF0 /* AnalyticsExampleSwift */, - 5FC7AD831B0D4106004E3100 /* AnalyticsExampleTests */, - 107346D720315877004A66D1 /* AnalyticsExampleSwiftUITests */, - 107347FD20333AD6004A66D1 /* AnalyticsExampleUITests */, - 5F5A534D1ADE670C00F81DF0 /* Products */, - 5F9961041AE0CF4F0034F503 /* Shared */, - 5FC29E541AE9255700668C8D /* Images */, - B719D0274FAE0575DEFC2BC2 /* GoogleService-Info.plist */, - ); - sourceTree = ""; - }; - 5F5A534D1ADE670C00F81DF0 /* Products */ = { - isa = PBXGroup; - children = ( - 5F5A534C1ADE670C00F81DF0 /* AnalyticsExample.app */, - 5F5A53791ADE67D500F81DF0 /* AnalyticsExampleSwift.app */, - 5FC7AD821B0D4106004E3100 /* AnalyticsExampleTests.xctest */, - 107346D620315877004A66D1 /* AnalyticsExampleSwiftUITests.xctest */, - 107347FC20333AD6004A66D1 /* AnalyticsExampleUITests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - 5F5A534E1ADE670C00F81DF0 /* AnalyticsExample */ = { - isa = PBXGroup; - children = ( - 5F5A53531ADE670C00F81DF0 /* AppDelegate.h */, - 5F5A53541ADE670C00F81DF0 /* AppDelegate.m */, - EFB6C1B41C6524F4007CCA78 /* FoodPickerViewController.h */, - EFB6C1B51C6524F4007CCA78 /* FoodPickerViewController.m */, - 5FC04A7D1AF1DCAA00F787CA /* PatternTabBarController.h */, - 5FC04A7E1AF1DCAA00F787CA /* PatternTabBarController.m */, - 5F5A53561ADE670C00F81DF0 /* ViewController.h */, - 5F5A53571ADE670C00F81DF0 /* ViewController.m */, - 5F5A534F1ADE670C00F81DF0 /* Supporting Files */, - ); - path = AnalyticsExample; - sourceTree = ""; - }; - 5F5A534F1ADE670C00F81DF0 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - 5F3B167E1AFC453200860007 /* CircleImageView.h */, - 5F3B167F1AFC453200860007 /* CircleImageView.m */, - 5F5A53511ADE670C00F81DF0 /* main.m */, - 5F5A53501ADE670C00F81DF0 /* Info.plist */, - 5F5A53591ADE670C00F81DF0 /* Main.storyboard */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - 5F5A537A1ADE67D500F81DF0 /* AnalyticsExampleSwift */ = { - isa = PBXGroup; - children = ( - 5F5A537D1ADE67D500F81DF0 /* AppDelegate.swift */, - EFB6C1B91C656D38007CCA78 /* FoodPickerViewController.swift */, - 5FC04A801AF1DF8300F787CA /* PatternTabBarController.swift */, - 5F5A537F1ADE67D500F81DF0 /* ViewController.swift */, - ); - path = AnalyticsExampleSwift; - sourceTree = ""; - }; - 5F9961041AE0CF4F0034F503 /* Shared */ = { - isa = PBXGroup; - children = ( - 5F9961061AE0CF4F0034F503 /* Images.xcassets */, - 5F9961071AE0CF4F0034F503 /* LaunchScreen.xib */, - ); - name = Shared; - path = ../../shared; - sourceTree = ""; - }; - 5FC29E541AE9255700668C8D /* Images */ = { - isa = PBXGroup; - children = ( - EF01600B1BD07C1F00F8DA01 /* AnalyticsImages.xcassets */, - ); - path = Images; - sourceTree = ""; - }; - 5FC7AD831B0D4106004E3100 /* AnalyticsExampleTests */ = { - isa = PBXGroup; - children = ( - 5FDE05631B0DAD5C0037B82F /* AppTests.m */, - 5FC7AD8D1B0D446A004E3100 /* LogWrapper.mm */, - 5FC7AD8F1B0D44B9004E3100 /* LogWrapper.h */, - ); - path = AnalyticsExampleTests; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 107346D520315877004A66D1 /* AnalyticsExampleSwiftUITests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 107346DD20315877004A66D1 /* Build configuration list for PBXNativeTarget "AnalyticsExampleSwiftUITests" */; - buildPhases = ( - 107346D220315877004A66D1 /* Sources */, - 107346D320315877004A66D1 /* Frameworks */, - 107346D420315877004A66D1 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 107346DC20315877004A66D1 /* PBXTargetDependency */, - ); - name = AnalyticsExampleSwiftUITests; - productName = AnalyticsExampleSwiftUITests; - productReference = 107346D620315877004A66D1 /* AnalyticsExampleSwiftUITests.xctest */; - productType = "com.apple.product-type.bundle.ui-testing"; - }; - 107347FB20333AD6004A66D1 /* AnalyticsExampleUITests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 1073480320333AD7004A66D1 /* Build configuration list for PBXNativeTarget "AnalyticsExampleUITests" */; - buildPhases = ( - 107347F820333AD6004A66D1 /* Sources */, - 107347F920333AD6004A66D1 /* Frameworks */, - 107347FA20333AD6004A66D1 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 1073480220333AD6004A66D1 /* PBXTargetDependency */, - ); - name = AnalyticsExampleUITests; - productName = AnalyticsExampleUITests; - productReference = 107347FC20333AD6004A66D1 /* AnalyticsExampleUITests.xctest */; - productType = "com.apple.product-type.bundle.ui-testing"; - }; - 5F5A534B1ADE670C00F81DF0 /* AnalyticsExample */ = { - isa = PBXNativeTarget; - buildConfigurationList = 5F5A536F1ADE670C00F81DF0 /* Build configuration list for PBXNativeTarget "AnalyticsExample" */; - buildPhases = ( - 5F5A53481ADE670C00F81DF0 /* Sources */, - 5F5A53491ADE670C00F81DF0 /* Frameworks */, - 5F5A534A1ADE670C00F81DF0 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = AnalyticsExample; - productName = AnalyticsExample; - productReference = 5F5A534C1ADE670C00F81DF0 /* AnalyticsExample.app */; - productType = "com.apple.product-type.application"; - }; - 5F5A53781ADE67D500F81DF0 /* AnalyticsExampleSwift */ = { - isa = PBXNativeTarget; - buildConfigurationList = 5F5A53991ADE67D500F81DF0 /* Build configuration list for PBXNativeTarget "AnalyticsExampleSwift" */; - buildPhases = ( - 5F5A53751ADE67D500F81DF0 /* Sources */, - 5F5A53761ADE67D500F81DF0 /* Frameworks */, - 5F5A53771ADE67D500F81DF0 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = AnalyticsExampleSwift; - productName = AnalyticsExampleSwift; - productReference = 5F5A53791ADE67D500F81DF0 /* AnalyticsExampleSwift.app */; - productType = "com.apple.product-type.application"; - }; - 5FC7AD811B0D4106004E3100 /* AnalyticsExampleTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 5FC7AD8C1B0D4106004E3100 /* Build configuration list for PBXNativeTarget "AnalyticsExampleTests" */; - buildPhases = ( - 5FC7AD7E1B0D4106004E3100 /* Sources */, - 5FC7AD7F1B0D4106004E3100 /* Frameworks */, - 5FC7AD801B0D4106004E3100 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 5FC7AD891B0D4106004E3100 /* PBXTargetDependency */, - ); - name = AnalyticsExampleTests; - productName = AnalyticsExampleTests; - productReference = 5FC7AD821B0D4106004E3100 /* AnalyticsExampleTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 5F5A53441ADE670C00F81DF0 /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftUpdateCheck = 0920; - LastUpgradeCheck = 0930; - ORGANIZATIONNAME = "Google Inc."; - TargetAttributes = { - 107346D520315877004A66D1 = { - CreatedOnToolsVersion = 9.2; - LastSwiftMigration = 1110; - ProvisioningStyle = Automatic; - TestTargetID = 5F5A53781ADE67D500F81DF0; - }; - 107347FB20333AD6004A66D1 = { - CreatedOnToolsVersion = 9.2; - ProvisioningStyle = Automatic; - TestTargetID = 5F5A534B1ADE670C00F81DF0; - }; - 5F5A534B1ADE670C00F81DF0 = { - CreatedOnToolsVersion = 6.3; - LastSwiftMigration = 0800; - ProvisioningStyle = Automatic; - }; - 5F5A53781ADE67D500F81DF0 = { - CreatedOnToolsVersion = 6.3; - LastSwiftMigration = 1110; - ProvisioningStyle = Automatic; - }; - 5FC7AD811B0D4106004E3100 = { - CreatedOnToolsVersion = 6.3.2; - LastSwiftMigration = ""; - ProvisioningStyle = Automatic; - TestTargetID = 5F5A534B1ADE670C00F81DF0; - }; - }; - }; - buildConfigurationList = 5F5A53471ADE670C00F81DF0 /* Build configuration list for PBXProject "AnalyticsExample" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 5F5A53431ADE670C00F81DF0; - productRefGroup = 5F5A534D1ADE670C00F81DF0 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 5F5A534B1ADE670C00F81DF0 /* AnalyticsExample */, - 5F5A53781ADE67D500F81DF0 /* AnalyticsExampleSwift */, - 5FC7AD811B0D4106004E3100 /* AnalyticsExampleTests */, - 107346D520315877004A66D1 /* AnalyticsExampleSwiftUITests */, - 107347FB20333AD6004A66D1 /* AnalyticsExampleUITests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 107346D420315877004A66D1 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 107347FA20333AD6004A66D1 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5F5A534A1ADE670C00F81DF0 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5F99610C1AE0CF4F0034F503 /* LaunchScreen.xib in Resources */, - 5F99610A1AE0CF4F0034F503 /* Images.xcassets in Resources */, - EF01600C1BD07C1F00F8DA01 /* AnalyticsImages.xcassets in Resources */, - 5F5A535B1ADE670C00F81DF0 /* Main.storyboard in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5F5A53771ADE67D500F81DF0 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5F99610D1AE0CF4F0034F503 /* LaunchScreen.xib in Resources */, - EF01600D1BD07C1F00F8DA01 /* AnalyticsImages.xcassets in Resources */, - 5F5A539C1ADE69AA00F81DF0 /* Main.storyboard in Resources */, - 5F99610B1AE0CF4F0034F503 /* Images.xcassets in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5FC7AD801B0D4106004E3100 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 107346D220315877004A66D1 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 107346D920315877004A66D1 /* AnalyticsExampleSwiftUITests.swift in Sources */, - 15D22729762E9C62A1777AEF /* GoogleService-Info.plist in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 107347F820333AD6004A66D1 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 107347FF20333AD6004A66D1 /* AnalyticsExampleUITests.m in Sources */, - 4109F1E5F3ED7CC121BC3AEC /* GoogleService-Info.plist in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5F5A53481ADE670C00F81DF0 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5F5A53581ADE670C00F81DF0 /* ViewController.m in Sources */, - 5F5A53551ADE670C00F81DF0 /* AppDelegate.m in Sources */, - 5FC04A7F1AF1DCAA00F787CA /* PatternTabBarController.m in Sources */, - 5F3B16801AFC453200860007 /* CircleImageView.m in Sources */, - EFB6C1B61C6524F4007CCA78 /* FoodPickerViewController.m in Sources */, - 5F5A53521ADE670C00F81DF0 /* main.m in Sources */, - 37C41742C3050BBAA05AEB2F /* GoogleService-Info.plist in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5F5A53751ADE67D500F81DF0 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5F3B16811AFC453200860007 /* CircleImageView.m in Sources */, - 5FC04A811AF1DF8300F787CA /* PatternTabBarController.swift in Sources */, - 5F5A53801ADE67D500F81DF0 /* ViewController.swift in Sources */, - EFB6C1BA1C656D38007CCA78 /* FoodPickerViewController.swift in Sources */, - 5F5A537E1ADE67D500F81DF0 /* AppDelegate.swift in Sources */, - AD7774A577C995CEC721FBA9 /* GoogleService-Info.plist in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5FC7AD7E1B0D4106004E3100 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5FC7AD8E1B0D446A004E3100 /* LogWrapper.mm in Sources */, - 5FDE05641B0DAD5C0037B82F /* AppTests.m in Sources */, - E735D5D1655322FCC076AC05 /* GoogleService-Info.plist in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 107346DC20315877004A66D1 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5F5A53781ADE67D500F81DF0 /* AnalyticsExampleSwift */; - targetProxy = 107346DB20315877004A66D1 /* PBXContainerItemProxy */; - }; - 1073480220333AD6004A66D1 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5F5A534B1ADE670C00F81DF0 /* AnalyticsExample */; - targetProxy = 1073480120333AD6004A66D1 /* PBXContainerItemProxy */; - }; - 5FC7AD891B0D4106004E3100 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5F5A534B1ADE670C00F81DF0 /* AnalyticsExample */; - targetProxy = 5FC7AD881B0D4106004E3100 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - 5F5A53591ADE670C00F81DF0 /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 5F5A535A1ADE670C00F81DF0 /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 107346DE20315877004A66D1 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - DEBUG_INFORMATION_FORMAT = dwarf; - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = AnalyticsExampleSwiftUITests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.quickstart.AnalyticsExampleSwiftUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = AnalyticsExampleSwift; - }; - name = Debug; - }; - 107346DF20315877004A66D1 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = AnalyticsExampleSwiftUITests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.quickstart.AnalyticsExampleSwiftUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = AnalyticsExampleSwift; - }; - name = Release; - }; - 1073480420333AD7004A66D1 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - DEBUG_INFORMATION_FORMAT = dwarf; - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = AnalyticsExampleUITests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.quickstart.AnalyticsExampleUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = AnalyticsExample; - }; - name = Debug; - }; - 1073480520333AD7004A66D1 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = AnalyticsExampleUITests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.quickstart.AnalyticsExampleUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = AnalyticsExample; - }; - name = Release; - }; - 1073F3B81DA830C500C3EDCB /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEVELOPMENT_TEAM = ""; - ENABLE_BITCODE = NO; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - INFOPLIST_FILE = "$(SRCROOT)/AnalyticsExample/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.quickstart.AnalyticsExample; - PRODUCT_NAME = AnalyticsExampleSwift; - PROVISIONING_PROFILE_SPECIFIER = ""; - SWIFT_VERSION = 5.0; - }; - name = Debug; - }; - 5F5A536D1ADE670C00F81DF0 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - 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_SYMBOLS_PRIVATE_EXTERN = NO; - 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 = 15.0; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 5F5A536E1ADE670C00F81DF0 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = YES; - 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 = 15.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 5F5A53701ADE670C00F81DF0 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; - CODE_SIGN_IDENTITY = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - DEVELOPMENT_TEAM = ""; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = AnalyticsExample/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.quickstart.AnalyticsExample; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - }; - name = Debug; - }; - 5F5A53711ADE670C00F81DF0 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; - CODE_SIGN_IDENTITY = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - DEVELOPMENT_TEAM = ""; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = AnalyticsExample/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.quickstart.AnalyticsExample; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - }; - name = Release; - }; - 5F5A53961ADE67D500F81DF0 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - DEVELOPMENT_TEAM = ""; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = "$(SRCROOT)/AnalyticsExample/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.quickstart.AnalyticsExample; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SWIFT_OBJC_BRIDGING_HEADER = ""; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 5.0; - }; - name = Release; - }; - 5FC7AD8A1B0D4106004E3100 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = ""; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - HEADER_SEARCH_PATHS = ( - "$(inherited)", - AnalyticsExample, - ); - INFOPLIST_FILE = AnalyticsExample/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/AnalyticsExample.app/AnalyticsExample"; - }; - name = Debug; - }; - 5FC7AD8B1B0D4106004E3100 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = ""; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - HEADER_SEARCH_PATHS = ( - "$(inherited)", - AnalyticsExample, - ); - INFOPLIST_FILE = AnalyticsExample/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/AnalyticsExample.app/AnalyticsExample"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 107346DD20315877004A66D1 /* Build configuration list for PBXNativeTarget "AnalyticsExampleSwiftUITests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 107346DE20315877004A66D1 /* Debug */, - 107346DF20315877004A66D1 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 1073480320333AD7004A66D1 /* Build configuration list for PBXNativeTarget "AnalyticsExampleUITests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1073480420333AD7004A66D1 /* Debug */, - 1073480520333AD7004A66D1 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 5F5A53471ADE670C00F81DF0 /* Build configuration list for PBXProject "AnalyticsExample" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 5F5A536D1ADE670C00F81DF0 /* Debug */, - 5F5A536E1ADE670C00F81DF0 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 5F5A536F1ADE670C00F81DF0 /* Build configuration list for PBXNativeTarget "AnalyticsExample" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 5F5A53701ADE670C00F81DF0 /* Debug */, - 5F5A53711ADE670C00F81DF0 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 5F5A53991ADE67D500F81DF0 /* Build configuration list for PBXNativeTarget "AnalyticsExampleSwift" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 5F5A53961ADE67D500F81DF0 /* Release */, - 1073F3B81DA830C500C3EDCB /* Debug */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 5FC7AD8C1B0D4106004E3100 /* Build configuration list for PBXNativeTarget "AnalyticsExampleTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 5FC7AD8A1B0D4106004E3100 /* Debug */, - 5FC7AD8B1B0D4106004E3100 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 5F5A53441ADE670C00F81DF0 /* Project object */; -} diff --git a/analytics/LegacyAnalyticsQuickstart/AnalyticsExample.xcodeproj/xcshareddata/xcschemes/AnalyticsExample.xcscheme b/analytics/LegacyAnalyticsQuickstart/AnalyticsExample.xcodeproj/xcshareddata/xcschemes/AnalyticsExample.xcscheme deleted file mode 100644 index 70d6d152c..000000000 --- a/analytics/LegacyAnalyticsQuickstart/AnalyticsExample.xcodeproj/xcshareddata/xcschemes/AnalyticsExample.xcscheme +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/analytics/LegacyAnalyticsQuickstart/AnalyticsExample.xcodeproj/xcshareddata/xcschemes/AnalyticsExampleSwift.xcscheme b/analytics/LegacyAnalyticsQuickstart/AnalyticsExample.xcodeproj/xcshareddata/xcschemes/AnalyticsExampleSwift.xcscheme deleted file mode 100644 index cf9dc012f..000000000 --- a/analytics/LegacyAnalyticsQuickstart/AnalyticsExample.xcodeproj/xcshareddata/xcschemes/AnalyticsExampleSwift.xcscheme +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/analytics/LegacyAnalyticsQuickstart/AnalyticsExample/AppDelegate.h b/analytics/LegacyAnalyticsQuickstart/AnalyticsExample/AppDelegate.h deleted file mode 100644 index 498396760..000000000 --- a/analytics/LegacyAnalyticsQuickstart/AnalyticsExample/AppDelegate.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// Copyright (c) 2015 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -@import UIKit; - -@interface AppDelegate : UIResponder - -@property (strong, nonatomic) UIWindow *window; - -@end diff --git a/analytics/LegacyAnalyticsQuickstart/AnalyticsExample/AppDelegate.m b/analytics/LegacyAnalyticsQuickstart/AnalyticsExample/AppDelegate.m deleted file mode 100644 index 3814a0d6b..000000000 --- a/analytics/LegacyAnalyticsQuickstart/AnalyticsExample/AppDelegate.m +++ /dev/null @@ -1,39 +0,0 @@ -// -// Copyright (c) 2015 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -// -// For more information on setting up and running this sample code, see -// https://firebase.google.com/docs/analytics/ios/start -// - -#import "AppDelegate.h" - -@import FirebaseCore; - -@implementation AppDelegate - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - // [START configure] - [FIRApp configure]; - // [END configure] - - // Set a white background so that patterns are showcased. - self.window.backgroundColor = [UIColor whiteColor]; - - return YES; -} - -@end diff --git a/analytics/LegacyAnalyticsQuickstart/AnalyticsExample/Base.lproj/Main.storyboard b/analytics/LegacyAnalyticsQuickstart/AnalyticsExample/Base.lproj/Main.storyboard deleted file mode 100644 index 53add7abb..000000000 --- a/analytics/LegacyAnalyticsQuickstart/AnalyticsExample/Base.lproj/Main.storyboard +++ /dev/null @@ -1,284 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/analytics/LegacyAnalyticsQuickstart/AnalyticsExample/CircleImageView.h b/analytics/LegacyAnalyticsQuickstart/AnalyticsExample/CircleImageView.h deleted file mode 100644 index cc22e3937..000000000 --- a/analytics/LegacyAnalyticsQuickstart/AnalyticsExample/CircleImageView.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// Copyright (c) 2015 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -@import UIKit; - -/** - * CircleImageView is a UIImageView subclass that renders an image inside a - * circle that has a drop shadow. It should be given equal width and height. - * - * This is shared between the Objective-C and Swift versions of the samples. - */ -IB_DESIGNABLE -@interface CircleImageView : UIImageView -@end diff --git a/analytics/LegacyAnalyticsQuickstart/AnalyticsExample/CircleImageView.m b/analytics/LegacyAnalyticsQuickstart/AnalyticsExample/CircleImageView.m deleted file mode 100644 index 876e892e5..000000000 --- a/analytics/LegacyAnalyticsQuickstart/AnalyticsExample/CircleImageView.m +++ /dev/null @@ -1,59 +0,0 @@ -// -// Copyright (c) 2015 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "CircleImageView.h" - -@implementation CircleImageView - -- (instancetype)initWithFrame:(CGRect)frame { - if ((self = [super initWithFrame:frame])) { - [self sharedInit]; - } - return self; -} - -- (instancetype)initWithCoder:(NSCoder *)aDecoder { - if ((self = [super initWithCoder:aDecoder])) { - [self sharedInit]; - } - return self; -} - -- (void)sharedInit { - self.backgroundColor = [UIColor whiteColor]; - super.contentMode = UIViewContentModeCenter; - - CALayer *layer = super.layer; - layer.shadowOffset = CGSizeMake(0, 2); - layer.shadowOpacity = 0.25; - layer.shadowColor = [UIColor grayColor].CGColor; - layer.shadowRadius = 4.0; - layer.shadowOffset = CGSizeMake(0, 2); -} - -- (void)layoutSubviews { - [super layoutSubviews]; - - CGSize size = self.bounds.size; - CGFloat dim = MAX(size.width, size.height); - self.layer.cornerRadius = dim / 2; -} - -- (void)setContentMode:(UIViewContentMode)contentMode { - // ignore -} - -@end diff --git a/analytics/LegacyAnalyticsQuickstart/AnalyticsExample/FoodPickerViewController.h b/analytics/LegacyAnalyticsQuickstart/AnalyticsExample/FoodPickerViewController.h deleted file mode 100644 index 30bcfeed5..000000000 --- a/analytics/LegacyAnalyticsQuickstart/AnalyticsExample/FoodPickerViewController.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// Copyright (c) 2015 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -// -// For more information on setting up and running this sample code, see -// https://firebase.google.com/docs/analytics/ios/start -// - -@import UIKit; - -@interface FoodPickerViewController : UIViewController - -@end diff --git a/analytics/LegacyAnalyticsQuickstart/AnalyticsExample/FoodPickerViewController.m b/analytics/LegacyAnalyticsQuickstart/AnalyticsExample/FoodPickerViewController.m deleted file mode 100644 index f00e95538..000000000 --- a/analytics/LegacyAnalyticsQuickstart/AnalyticsExample/FoodPickerViewController.m +++ /dev/null @@ -1,69 +0,0 @@ -// -// Copyright (c) 2015 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -// -// For more information on setting up and running this sample code, see -// https://firebase.google.com/docs/analytics/ios/start -// - -#import "FoodPickerViewController.h" - -@import FirebaseAnalytics; - -@interface FoodPickerViewController () -@property (nonatomic, strong) NSArray *foodStuffs; -@end - -@implementation FoodPickerViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - self.foodStuffs = @[ - @"Hot Dogs", - @"Hamburger", - @"Pizza" - ]; -} - - -- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row - inComponent:(NSInteger)component { - NSString *food = self.foodStuffs[row]; - - [[NSUserDefaults standardUserDefaults] setObject:food forKey:@"favorite_food"]; - - // [START user_property] - [FIRAnalytics setUserPropertyString:food forName:@"favorite_food"]; - // [END user_property] - - [self performSegueWithIdentifier:@"goToShareScreen" sender:self]; -} - -- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { - return 1; -} - -- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { - return self.foodStuffs.count; -} - -- (NSString *)pickerView:(UIPickerView *)pickerView - titleForRow:(NSInteger)row - forComponent:(NSInteger)component { - return self.foodStuffs[row]; -} - -@end diff --git a/analytics/LegacyAnalyticsQuickstart/AnalyticsExample/Info.plist b/analytics/LegacyAnalyticsQuickstart/AnalyticsExample/Info.plist deleted file mode 100644 index d67c8fe8a..000000000 --- a/analytics/LegacyAnalyticsQuickstart/AnalyticsExample/Info.plist +++ /dev/null @@ -1,51 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIcons - - CFBundleIcons~ipad - - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0.1 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UILaunchStoryboardName - LaunchScreen - UIMainStoryboardFile - Main - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/analytics/LegacyAnalyticsQuickstart/AnalyticsExample/PatternTabBarController.h b/analytics/LegacyAnalyticsQuickstart/AnalyticsExample/PatternTabBarController.h deleted file mode 100644 index e2d5a4117..000000000 --- a/analytics/LegacyAnalyticsQuickstart/AnalyticsExample/PatternTabBarController.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// Copyright (c) 2015 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -@import UIKit; - -/** - * PatternTabBarController exists as a subclass of UITabBarConttroller that - * supports a 'share' action. This will trigger a custom event to Analytics and - * display a dialog. - */ -@interface PatternTabBarController : UITabBarController - -- (IBAction)didTapShare:(id)sender; - -@end diff --git a/analytics/LegacyAnalyticsQuickstart/AnalyticsExample/PatternTabBarController.m b/analytics/LegacyAnalyticsQuickstart/AnalyticsExample/PatternTabBarController.m deleted file mode 100644 index 1602ef01e..000000000 --- a/analytics/LegacyAnalyticsQuickstart/AnalyticsExample/PatternTabBarController.m +++ /dev/null @@ -1,71 +0,0 @@ -// -// Copyright (c) 2015 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -// -// For more information on setting up and running this sample code, see -// https://firebase.google.com/docs/analytics/ios/start -// - -#import "PatternTabBarController.h" - -@import FirebaseAnalytics; - -@implementation PatternTabBarController - -- (void)viewDidAppear:(BOOL)animated { - [super viewDidAppear:animated]; - // For first run, ask for the user's favorite food. - if (![self getUserFavoriteFood]) { - [self askForFavoriteFood]; - } -} - -- (void)didTapShare:(id)sender { - NSString *name = [NSString stringWithFormat:@"Pattern~%@", self.selectedViewController.title]; - NSString *text = [NSString stringWithFormat:@"I'd love you to hear about %@", name]; - - // [START custom_event_objc] - [FIRAnalytics logEventWithName:@"share_image" - parameters:@{ - @"name": name, - @"full_text": text - }]; - // [END custom_event_objc] - - NSString *title = [NSString stringWithFormat:@"Share: %@", - self.selectedViewController.title]; - NSString *message = - @"Share event sent to Analytics; actual share not implemented in this quickstart"; - - UIAlertController *alert = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert]; - [alert addAction:[UIAlertAction actionWithTitle:@"Ok" style:UIAlertActionStyleDefault handler:nil]]; - [self presentViewController:alert animated:true completion:nil]; -} - -- (NSString *)getUserFavoriteFood { - return [[NSUserDefaults standardUserDefaults] stringForKey:@"favorite_food"]; -} - -- (void)askForFavoriteFood { - [self performSegueWithIdentifier:@"pickFavoriteFood" sender:self]; -} - --(IBAction)unwindToHome:(UIStoryboardSegue *)segue { - UINavigationController *nc = self.navigationController; - [nc dismissViewControllerAnimated:YES completion: nil]; -} - -@end diff --git a/analytics/LegacyAnalyticsQuickstart/AnalyticsExample/ViewController.h b/analytics/LegacyAnalyticsQuickstart/AnalyticsExample/ViewController.h deleted file mode 100644 index 327d97a4a..000000000 --- a/analytics/LegacyAnalyticsQuickstart/AnalyticsExample/ViewController.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// Copyright (c) 2015 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -@import UIKit; - -@interface ViewController : UIViewController -@end diff --git a/analytics/LegacyAnalyticsQuickstart/AnalyticsExample/ViewController.m b/analytics/LegacyAnalyticsQuickstart/AnalyticsExample/ViewController.m deleted file mode 100644 index cefbafc05..000000000 --- a/analytics/LegacyAnalyticsQuickstart/AnalyticsExample/ViewController.m +++ /dev/null @@ -1,55 +0,0 @@ -// -// Copyright (c) 2015 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -// -// For more information on setting up and running this sample code, see -// https://firebase.google.com/docs/analytics/ios/start -// - -#import "ViewController.h" - -@import FirebaseAnalytics; - -@implementation ViewController - -- (void)viewDidAppear:(BOOL)animated { - [super viewDidAppear:animated]; - - [self recordScreenView]; - - // [START custom_event_objc] - [FIRAnalytics logEventWithName:kFIREventSelectContent - parameters:@{ - kFIRParameterItemID:[NSString stringWithFormat:@"id-%@", self.title], - kFIRParameterItemName:self.title, - kFIRParameterContentType:@"image" - }]; - // [END custom_event_objc] -} - -// Manually record "screen views" as user selects tabs. -- (void)recordScreenView { - // These strings must be <= 36 characters long in order for setScreenName:screenClass: to succeed. - NSString *screenName = self.title; - NSString *screenClass = [self.classForCoder description]; - - // [START set_current_screen] - [FIRAnalytics logEventWithName:kFIREventScreenView - parameters:@{kFIRParameterScreenClass: screenClass, - kFIRParameterScreenName: screenName}]; - // [END set_current_screen] -} - -@end diff --git a/analytics/LegacyAnalyticsQuickstart/AnalyticsExample/main.m b/analytics/LegacyAnalyticsQuickstart/AnalyticsExample/main.m deleted file mode 100644 index 8218f2256..000000000 --- a/analytics/LegacyAnalyticsQuickstart/AnalyticsExample/main.m +++ /dev/null @@ -1,24 +0,0 @@ -// -// Copyright (c) 2015 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import -#import "AppDelegate.h" - -int main(int argc, char * argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/analytics/LegacyAnalyticsQuickstart/AnalyticsExampleSwift/AppDelegate.swift b/analytics/LegacyAnalyticsQuickstart/AnalyticsExampleSwift/AppDelegate.swift deleted file mode 100644 index d778168de..000000000 --- a/analytics/LegacyAnalyticsQuickstart/AnalyticsExampleSwift/AppDelegate.swift +++ /dev/null @@ -1,36 +0,0 @@ -// -// Copyright (c) 2015 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import UIKit -import FirebaseCore - -@UIApplicationMain -class AppDelegate: UIResponder, UIApplicationDelegate { - var window: UIWindow? - - func application(_ application: UIApplication, - didFinishLaunchingWithOptions launchOptions: [UIApplication - .LaunchOptionsKey: Any]?) -> Bool { - // [START tracker_swift] - FirebaseApp.configure() - // [END tracker_swift] - - // Set a white background so that patterns are showcased. - window?.backgroundColor = .white - - return true - } -} diff --git a/analytics/LegacyAnalyticsQuickstart/AnalyticsExampleSwift/FoodPickerViewController.swift b/analytics/LegacyAnalyticsQuickstart/AnalyticsExampleSwift/FoodPickerViewController.swift deleted file mode 100644 index 166868902..000000000 --- a/analytics/LegacyAnalyticsQuickstart/AnalyticsExampleSwift/FoodPickerViewController.swift +++ /dev/null @@ -1,52 +0,0 @@ -// -// Copyright (c) 2015 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -// -// For more information on setting up and running this sample code, see -// https://firebase.google.com/docs/analytics/ios/start -// - -import UIKit -import FirebaseAnalytics - -@objc(FoodPickerViewController) // match the ObjC symbol name inside Storyboard -class FoodPickerViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource { - let foodStuffs = ["Hot Dogs", "Hamburger", "Pizza"] - - func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { - let food = foodStuffs[row] - UserDefaults.standard.set(food, forKey: "favorite_food") - - // [START user_property] - Analytics.setUserProperty(food, forName: "favorite_food") - // [END user_property] - - performSegue(withIdentifier: "goToShareScreen", sender: self) - } - - func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { - return foodStuffs.count - } - - func numberOfComponents(in pickerView: UIPickerView) -> Int { - return 1 - } - - func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, - forComponent component: Int) -> String? { - return foodStuffs[row] - } -} diff --git a/analytics/LegacyAnalyticsQuickstart/AnalyticsExampleSwift/PatternTabBarController.swift b/analytics/LegacyAnalyticsQuickstart/AnalyticsExampleSwift/PatternTabBarController.swift deleted file mode 100644 index 6cb099f70..000000000 --- a/analytics/LegacyAnalyticsQuickstart/AnalyticsExampleSwift/PatternTabBarController.swift +++ /dev/null @@ -1,65 +0,0 @@ -// -// Copyright (c) 2015 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import UIKit -import FirebaseAnalytics - -/** - * PatternTabBarController exists as a subclass of UITabBarConttroller that - * supports a 'share' action. This will trigger a custom event to Analytics and - * display a dialog. - */ -@objc(PatternTabBarController) // match the ObjC symbol name inside Storyboard -class PatternTabBarController: UITabBarController { - override func viewDidAppear(_ animated: Bool) { - super.viewDidAppear(animated) - if getUserFavoriteFood() == nil { - askForFavoriteFood() - } - } - - @IBAction func didTapShare(_ sender: AnyObject) { - let name = "Pattern~\(selectedViewController!.title!)", - text = "I'd love you to hear about\(name)" - - // [START custom_event_swift] - Analytics.logEvent("share_image", parameters: [ - "name": name as NSObject, - "full_text": text as NSObject, - ]) - // [END custom_event_swift] - - let title = "Share: \(selectedViewController!.title!)", - message = "Share event sent to Analytics; actual share not implemented in this quickstart", - alert = UIAlertController(title: title, message: message, preferredStyle: .alert) - alert.addAction(UIAlertAction(title: "Ok", style: .default, handler: nil)) - present(alert, animated: true, completion: nil) - } - - @IBAction func unwindToHome(_ segue: UIStoryboardSegue?) { - if let nc = navigationController { - nc.dismiss(animated: true, completion: nil) - } - } - - func getUserFavoriteFood() -> String? { - return UserDefaults.standard.string(forKey: "favorite_food") - } - - func askForFavoriteFood() { - performSegue(withIdentifier: "pickFavoriteFood", sender: self) - } -} diff --git a/analytics/LegacyAnalyticsQuickstart/AnalyticsExampleSwift/ViewController.swift b/analytics/LegacyAnalyticsQuickstart/AnalyticsExampleSwift/ViewController.swift deleted file mode 100644 index 21e24f1da..000000000 --- a/analytics/LegacyAnalyticsQuickstart/AnalyticsExampleSwift/ViewController.swift +++ /dev/null @@ -1,49 +0,0 @@ -// -// Copyright (c) 2015 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import UIKit -import FirebaseAnalytics - -@objc(ViewController) // match the ObjC symbol name inside Storyboard -class ViewController: UIViewController { - override func viewDidAppear(_ animated: Bool) { - super.viewDidAppear(animated) - - recordScreenView() - - // [START custom_event_swift] - Analytics.logEvent(AnalyticsEventSelectContent, parameters: [ - AnalyticsParameterItemID: "id-\(title!)", - AnalyticsParameterItemName: title!, - AnalyticsParameterContentType: "cont", - ]) - // [END custom_event_swift] - } - - func recordScreenView() { - // These strings must be <= 36 characters long in order for setScreenName:screenClass: to succeed. - guard let screenName = title else { - return - } - let screenClass = classForCoder.description() - - // [START set_current_screen] - Analytics.logEvent(AnalyticsEventScreenView, - parameters: [AnalyticsParameterScreenName: screenName, - AnalyticsParameterScreenClass: screenClass]) - // [END set_current_screen] - } -} diff --git a/analytics/LegacyAnalyticsQuickstart/AnalyticsExampleSwiftUITests/AnalyticsExampleSwiftUITests.swift b/analytics/LegacyAnalyticsQuickstart/AnalyticsExampleSwiftUITests/AnalyticsExampleSwiftUITests.swift deleted file mode 100644 index d7a5b5d7f..000000000 --- a/analytics/LegacyAnalyticsQuickstart/AnalyticsExampleSwiftUITests/AnalyticsExampleSwiftUITests.swift +++ /dev/null @@ -1,42 +0,0 @@ -// -// Copyright (c) 2015 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import XCTest - -class AnalyticsExampleSwiftUITests: XCTestCase { - override func setUp() { - super.setUp() - - // Put setup code here. This method is called before the invocation of each test method in the class. - - // In UI tests it is usually best to stop immediately when a failure occurs. - continueAfterFailure = false - // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. - XCUIApplication().launch() - - // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. - } - - override func tearDown() { - // Put teardown code here. This method is called after the invocation of each test method in the class. - super.tearDown() - } - - func testExample() { - // Use recording to get started writing UI tests. - // Use XCTAssert and related functions to verify your tests produce the correct results. - } -} diff --git a/analytics/LegacyAnalyticsQuickstart/AnalyticsExampleSwiftUITests/Info.plist b/analytics/LegacyAnalyticsQuickstart/AnalyticsExampleSwiftUITests/Info.plist deleted file mode 100644 index 6c40a6cd0..000000000 --- a/analytics/LegacyAnalyticsQuickstart/AnalyticsExampleSwiftUITests/Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - - diff --git a/analytics/LegacyAnalyticsQuickstart/AnalyticsExampleTests/AppTests.m b/analytics/LegacyAnalyticsQuickstart/AnalyticsExampleTests/AppTests.m deleted file mode 100644 index d94992a3a..000000000 --- a/analytics/LegacyAnalyticsQuickstart/AnalyticsExampleTests/AppTests.m +++ /dev/null @@ -1,88 +0,0 @@ -// -// Copyright (c) 2015 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import -#import - -@import FirebaseCore; - -#import "LogWrapper.h" - -static NSString * const kSearchTerm = @" Measurement data sent to network. "; - -@interface AppTests : XCTestCase -@end - -@implementation AppTests { - LogWrapper *_logWrapper; - UITabBarController *_patternsController; -} - -- (void)setUp { - _logWrapper = [[LogWrapper alloc] init]; - - [[FIRConfiguration sharedInstance] setLoggerLevel:FIRLoggerLevelDebug]; - - UIWindow *window = [UIApplication sharedApplication].keyWindow; - UIViewController *rootViewController = window.rootViewController; - for (UIViewController *candidate in rootViewController.childViewControllers) { - if ([candidate isKindOfClass:[UITabBarController class]]) { - _patternsController = (UITabBarController *)candidate; - break; - } - } -} - -- (void)tearDown { - _logWrapper = nil; -} - -// This test passes when run in Xcode but fails when run via the command line. -// It's disabled to avoid failures in Travis. -- (void)disabled_testLogs { - XCTestExpectation *expectation = - [self expectationWithDescription:@"Send event inside logs"]; - [_logWrapper lines]; // force clear - - // Trigger a new, different tab to be shown. - XCTAssertEqual(_patternsController.selectedIndex, 0, - @"Expected left-most index to be initially selected"); - _patternsController.selectedIndex = 2; - - // Check the logs constantly until a send message is found. - NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:0.1 - target:self - selector:@selector(checkTimer:) - userInfo:expectation - repeats:YES]; - [self waitForExpectationsWithTimeout:30.0 handler:nil]; - [timer invalidate]; -} - -- (void)checkTimer:(NSTimer *)timer { - XCTestExpectation *expectation = timer.userInfo; - NSArray *lines = [_logWrapper lines]; - - for (NSString *line in lines) { - if ([line containsString:kSearchTerm]) { - [expectation fulfill]; - break; - } - } - -} - -@end diff --git a/analytics/LegacyAnalyticsQuickstart/AnalyticsExampleTests/LogWrapper.h b/analytics/LegacyAnalyticsQuickstart/AnalyticsExampleTests/LogWrapper.h deleted file mode 100644 index edb675ddb..000000000 --- a/analytics/LegacyAnalyticsQuickstart/AnalyticsExampleTests/LogWrapper.h +++ /dev/null @@ -1,32 +0,0 @@ -// -// Copyright (c) 2015 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -/** - * LogWrapper replaces the current stderr, matched to its lifetime. Any lines written to stderr - * during this time can be retrieved by the -lines method. - */ -@interface LogWrapper : NSObject - -/** - * Returns any lines (as NSString instances) written since LogWrapper was created, or the last - * call to this method. This may return a nil/empty array if nothing was written. - */ -- (NSArray *)lines; - -@end - diff --git a/analytics/LegacyAnalyticsQuickstart/AnalyticsExampleTests/LogWrapper.mm b/analytics/LegacyAnalyticsQuickstart/AnalyticsExampleTests/LogWrapper.mm deleted file mode 100644 index fad99a398..000000000 --- a/analytics/LegacyAnalyticsQuickstart/AnalyticsExampleTests/LogWrapper.mm +++ /dev/null @@ -1,65 +0,0 @@ -// -// Copyright (c) 2015 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "LogWrapper.h" - -#include -#include - -#define ARRAYSIZE(x) (sizeof(x)/sizeof(x[0])) - -@implementation LogWrapper { - char _tempLogFile[64]; - NSFileHandle *_handle; - int _dupFd; -} - -- (instancetype)init { - if ((self = [super init])) { - _dupFd = dup(fileno(stderr)); - - snprintf(_tempLogFile, ARRAYSIZE(_tempLogFile), "/tmp/objc-logwrapper.XXXXXX"); - int fd = mkstemp(_tempLogFile); - - NSLog(@"LogWrapper writing to: %s", _tempLogFile); - - freopen(_tempLogFile, "w+", stderr); - _handle = [[NSFileHandle alloc] initWithFileDescriptor:fd closeOnDealloc:YES]; - } - return self; -} - -- (void)dealloc { - unlink(_tempLogFile); - NSLog(@"~LogWrapper removed: %s", _tempLogFile); - - dup2(_dupFd, fileno(stderr)); - close(_dupFd); -} - -- (NSArray *)lines { - NSData *data = [_handle readDataToEndOfFile]; - [_handle seekToFileOffset:data.length]; - - if (data == nil || !data.bytes) { - return nil; - } - - NSString *allData = [NSString stringWithUTF8String:(const char *)[data bytes]]; - return [allData componentsSeparatedByString:@"\n"]; -} - -@end diff --git a/analytics/LegacyAnalyticsQuickstart/AnalyticsExampleUITests/AnalyticsExampleUITests.m b/analytics/LegacyAnalyticsQuickstart/AnalyticsExampleUITests/AnalyticsExampleUITests.m deleted file mode 100644 index 421b42c96..000000000 --- a/analytics/LegacyAnalyticsQuickstart/AnalyticsExampleUITests/AnalyticsExampleUITests.m +++ /dev/null @@ -1,68 +0,0 @@ -// -// Copyright (c) 2019 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -static NSTimeInterval const defaultTimeout = 10; - -@interface AnalyticsUITest : XCTestCase -@end - -@implementation AnalyticsUITest { - XCUIApplication *_app; -} - -- (void)setUp { - [super setUp]; - _app = [[XCUIApplication alloc] init]; - [_app launch]; -} - -- (void)testVerifyAppLaunched { - NSArray *tapArray = @[ @"A", @"B", @"C", @"D" ]; - - FIRWaitForVisible(_app.staticTexts[@"Pick Your Favorite Food!"]); - [[_app.pickerWheels firstMatch] adjustToPickerWheelValue:@"Pizza"]; - - // Tap on each tab - for (NSString *tap_label in tapArray) { - [_app.buttons[tap_label] tap]; - } - - // Share - [_app.buttons[@"Share"] tap]; - FIRWaitForVisible([_app.alerts firstMatch]); - XCTAssertTrue(_app.alerts[@"Share: D"].exists); -} - -static void FIRWaitForVisibleWithTimeout(XCUIElement *element, NSUInteger timeout) { - NSPredicate *visible = [NSPredicate predicateWithFormat:@"exists == true"]; - FIRWaitForPredicateWithTimeout(visible, element, timeout); -} - -static void FIRWaitForVisible(XCUIElement *element) { - FIRWaitForVisibleWithTimeout(element, defaultTimeout); -} - -static void FIRWaitForPredicateWithTimeout(NSPredicate *predicate, XCUIElement *element, - NSUInteger timeout) { - XCTestExpectation *expectation = - [[XCTNSPredicateExpectation alloc] initWithPredicate:predicate object:element]; - NSArray *expectationArray = @[ expectation ]; - (void)[XCTWaiter waitForExpectations:expectationArray timeout:timeout]; -} - -@end diff --git a/analytics/LegacyAnalyticsQuickstart/AnalyticsExampleUITests/Info.plist b/analytics/LegacyAnalyticsQuickstart/AnalyticsExampleUITests/Info.plist deleted file mode 100644 index 6c40a6cd0..000000000 --- a/analytics/LegacyAnalyticsQuickstart/AnalyticsExampleUITests/Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - - diff --git a/analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/Contents.json b/analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/Contents.json deleted file mode 100644 index da4a164c9..000000000 --- a/analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/favorite.imageset/Contents.json b/analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/favorite.imageset/Contents.json deleted file mode 100644 index 884f47ee2..000000000 --- a/analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/favorite.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "favorite.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "favorite_2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "favorite_3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/favorite.imageset/favorite.png b/analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/favorite.imageset/favorite.png deleted file mode 100644 index 1e218a2ef4a792e7525fbdebb9aadff404282ddc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2907 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 diff --git a/analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/favorite.imageset/favorite_2x.png b/analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/favorite.imageset/favorite_2x.png deleted file mode 100644 index e0c2dc11b985f81717d93e7f5af9afc683c27e95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6598 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 diff --git a/analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/favorite.imageset/favorite_3x.png b/analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/favorite.imageset/favorite_3x.png deleted file mode 100644 index 5b7ad85f664e3af75815faeacfb8218a00d4b7c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10590 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 J&2*6}{tpft)$#xU diff --git a/analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/icon-favorite.imageset/Contents.json b/analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/icon-favorite.imageset/Contents.json deleted file mode 100644 index 7dd9947de..000000000 --- a/analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/icon-favorite.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "icon-favorite.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "icon-favorite_2x-1.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "icon-favorite_3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/icon-favorite.imageset/icon-favorite.png b/analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/icon-favorite.imageset/icon-favorite.png deleted file mode 100644 index 914ded97ae204c081bb9386147ce7dd7180b86ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 470 zcmV;{0V)28P)Px$kV!;AR9M69SG`IEF%Vv`y~2atq!TME-#`n&TJQ}l?5*rnuCP$h=TO<(ku$0GY4aNaecFr(^UkF@3F3GGhVQRA zyFaji=|mn0b({$_D?}OrbM*&yE_v8bH(bHW8aT2;FZ4~*0>EJ<@5lk8aDFr{fH=T4 zm+<{9 diff --git a/analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/icon-favorite.imageset/icon-favorite_2x-1.png b/analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/icon-favorite.imageset/icon-favorite_2x-1.png deleted file mode 100644 index 5ad2ce11f83a2bf75b40047c5de4a5d0030be464..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 878 zcmV-!1CjiRP)Px&C`m*?RCwC$T0LkKK^R>v#3CUi-tATv)`FFwjaC60!9vi&#zq3xlETIl32C%Z zJ7WYv6D~VTv_0_rIk}x7Wg3Zf5QBtZ2ukqhz0*TULbAIzd%H842Ls1t_S^T~%zc@k z&+{A{92^`R930Z3UOyDf#TWcgJ@kca2SR;D`yNEXILIb9g=YUAwvn~ffQ}P)Qs%zHG0BA~VKqZtXZ8LzH((MBxwPKM0E2;MbSUyf! zv=p97zZVekX16O|QX38HwiI0NFzQdG-eyE#$77I&glB|}I=xA)Do-z6uE_d)!4sf))@;B-BYdqu`% zY$Gb@K=z8x#ZqUHgP2B@5&o_5+t85gHafM2CZakg&tT+MdzkjCjA3*^DXyhY;ACbw z!)eYkpS7Z@mM1f5w$kjY?KGz>UsI5-r6-*Y)fR?0=1#sB~S07*qoM6N<$ Ef=t1hE&u=k diff --git a/analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/icon-favorite.imageset/icon-favorite_3x.png b/analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/icon-favorite.imageset/icon-favorite_3x.png deleted file mode 100644 index f89f87390f07f67330460996e079554dce8fcd7d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1283 zcmV+e1^oJnP)Px(y-7qtRCwC$Ts>$MK@?v95uyh5ZVMZ=6cj59!9rBhr4q$77AZs>o6>9Z`1Nn9b6aJSu?yZd6W*Mi;{k3B$kfJ(0*lI;-AE9K=KY^XGd=fWat~-Q<=& zm{#TVmR3*K)Nc{X!yGUdk(18@Q{?1tw7#$Aki4``zU^LC*J6@~xrovTJ7Q`1Tgzf$ zNL=8;-{Y1?^@J$gk(yb=PyX+o@P$ia_Z3Ud?Q?1<<2Axo5oy`V zR{Q55G+-}q+nb;L@WBMg4Au*XJNW;!j|1w64rB&h54_jW1Lipk-M{510j!fqTHLjzM?|WCk9Dr;mbVw;g0x#0hzF48*Uyp0UUi z_e}fkNgDCLfqdeCxQHc9jQm~)e81?3HBFKPc#>oC2jWjuRoRmH8xNGGV8P^)>6ftLTkNHb`u-k0KShCU+;NMo9lmh_@T zjR}s|n;rvry+#(1hA|=aK0np7qqNR;{2Rf$o1{Q5B@4-9gTo|G_dCc}6YbE{=D;Eru4smO3L0RnC(io{!My&+{|E{9ir6J3}tvQv`13 z6F&=#{{t!vKE$j{u3LN9c;G0000000000008_4zX19wyZpAdV#ELd002ovPDHLkV1gtTYdin| diff --git a/analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/icon-flash_on.imageset/Contents.json b/analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/icon-flash_on.imageset/Contents.json deleted file mode 100644 index 610bf3634..000000000 --- a/analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/icon-flash_on.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "icon-flash_on.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "icon-flash_on_2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "icon-flash_on_3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/icon-flash_on.imageset/icon-flash_on.png b/analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/icon-flash_on.imageset/icon-flash_on.png deleted file mode 100644 index 407f4b93a67a81451a7afd46f8247db4bea94c74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 334 zcmV-U0kQsxP)Px$2uVaiR9M4fU>F5N0P(daEJW9x3?&J#Ic7*b2dq1}N_^d^|D<4%)yEwM(gFLa z8wDgffU3SH!vXuLp9o2CfXJ$2_5NJkQY3z(mvPSZwXdPx$mPtfGRCwC$**!`GK@bJt4vd6F(e0kZKyP4ZX5bkXyo8=X^b#7HD9lowm^)zL zPIc@J_5g-PqM3={?2KJa{q%#r!1spbQR`eyO-)VB|I-Gx(bnJHkB>?;Oi2?YxPYEEReL?^k z?Nb4WX`cu{PWu!9qS_|_kkx)}0CDYS29Vc&P5_bZX9SShel7s9?dJdpfNLLdvB{g= z$)3IRyymeYK79hm*K6~iqW&u3lh0~N#09^NeF#xW6zXSm5 zy-yCneeY8Pc<67O)(ioN*!z?KBKAHNfSSEO1whr_p9Y|4?~esgxA(^a_?Rx8mHYzG zxc5f^Xx#go0tCS5tmOwl^WNVCK=s}q0#LvAhXB;?{lBvNxH@z-H8nLgyz&iYw66&s SbE_Hv0000Px%TuDShRCwC$o3TzpK@de3;x8Eg1khMm8!JU(Z*75$c2H|)_ynx9 z0v;wNbijLKfeG4J8RpK+y_Mard+sdkNl1xd7=~dOhGCd!DXn|Kt;fCqpU3m)u(G$# z1XK z0Nef$0Fc`s0RVLS-2*^xzjpxe?RO2pLi;@fFwuUu0Iam%D*!X?cL~5!`%~iY1Aa%O zJ36W!Z~{~gKg|k}Ca)m1^Ots3ue}n0%FQFg;&Xn(4`DR`>0)xaJ0$>}^s{>PUTg7< z*!O;te6cuN{>gWM0)gW0qp{QHLrmve&s6gAC11jN2(Gh6Wk>)z?H`O6@3#nhi3y;P zW@ZU6uP diff --git a/analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/icon-tag_faces.imageset/Contents.json b/analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/icon-tag_faces.imageset/Contents.json deleted file mode 100644 index 6fe161ff3..000000000 --- a/analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/icon-tag_faces.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "icon-tag_faces.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "icon-tag_faces_2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "icon-tag_faces_3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/icon-tag_faces.imageset/icon-tag_faces.png b/analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/icon-tag_faces.imageset/icon-tag_faces.png deleted file mode 100644 index f89c7adeeb413f6df18afe400e455748444dda97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 648 zcmV;30(bq1P)Px%LP6|5AI zG?!7Z2!hx)cmIG;!H$Z5K?jSz7n=00ZPFx-TEv3~A@@Fh_df3w<$pz33A0R8-CEUX zbq5K*6Z(VttwvSDnkObZA(YiLlYjOi+ylz0dSxy)!{o}+Kxv*(-t;ou1IPz}y+BV5 zX1rKg0Yz_;0m|ROKmh=yiOEwo;Wzxly$&F+8nu=px}5KUl15u0s}sZ8S2FkGo;#EsMtCBxlO$%|u`Yz>6{>h`^q(V=lNI6dgwnA;^m1K;1!v^3ur% zO=7_ln3(-b&CPaJ7u`Nh%d@0tZ7P?ylb#A-4|$MR42P2ws2go~qlG$m(PF~2R#LBQ zxH&=jQ%?}^5BHpyql~N9PE6OUSwDBxoKh3BU85`~l^1%VQ`TTxa=EgcSRGD@q7BdX zDxfS#p`q+Z%xKBQLWso5L79%j6`Z}E4N5JtwKf2rmg_q+YJ-4NiLUKjcBp{IHV!f} z0G@Wi!R+V~wg-!wtvnU?EJ2;^@Kkq(4}d*hy+RNNfPNwHPeQ(q{X7&wPK8QB-!e4# zLC{g`63B!qL%&7@YXn?a3Vt8pC6o!>i2Pb{^89fM0N(XA4m`*ksTKDfM!G&msC5Xn z{?cU}{^1_-L>@+A#_^0%Sxi#4jfCH^jpJXxkPO9@Y$z_JgI&vcGnQ+)H0iF{LhE7j i{G$((p?RA9+4Tk2@pb~)+U98h0000Px(tVu*cRCwC$TfI*dK@>+xv;jo8+f8gO)L0PxZ9l;G|?CfFi{CHL{TC!=zDV)Iqqg=clKuPgWX9sT*%J6d2inQ z-h029ZEH(f(vp_6r0H+QglG1;{&~YD*9^zc7_L7Ce{+UQ#!J65hV2ie9PeC*yI{1w z#v>#9%_(xhaL8lR_1~H<`78JMZ%oI3hz5bt_O*=OofC5@!|`szimu2j&3%?(yphgl zes9w%-u+~*8(cXHll`es@m&uX;RndLd)Rt?sJZsH>t6wP{i;iGh9N!!c3f(bRVR*= z0*=3FI%E<4&H_Hn;Df(Q|J#(r39BdPbu~o!9-Ewm34aV$nEVD0nWhMD%^yQ>6ago` zgYRM=>>KC}F8RBD?B`dh=krH&$;Yu#hR74NZ3hfJqCF38 zdQ-T+6((3HON0qpfRTsxFquDT+q+tC5Js6On=_{=^>LnK@kS_LZUn9;*xqGjv7VRY zP`7V%62{pMuxMYDWQ>s4-{%2dUG{t^Oke{eRG#;0E^JsK55tj8w2u@WSRoQZV@(AV zR&|_kGbl1z+9t!LIzOATyi<`CgT6Qhj)i05*t~afPMoN4tCn!H!piV?Nlx0%_kq<{ zD<-fFE;=M{d@_W6D^_$BW$=|eKj5dy;dE* zGcv``7{dc*TZNjZ9AhJ(OT^Rxx@g;7N`>lHr@cWf?&ij*c44g z7>t?-HA7R92t`SSQ#QF+OoH@3C`)T99Hkh-3lQLXzqB8Yf((?UwHS(04wt}ZRKEep zC{MoHa#)rS!S>+gK@hg2arKu_hAb@>i4ciGiBS-OqbYh=soVeo$6l%_v8beI5s3?@ zAsbs)cOinTPGZ1C6c-LUn)_M@>mZyZ-qEtlG<&A5ZB}&ZQgU&nil93HiivR!s07*qoM6N<$f;rJl(f|Me diff --git a/analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/icon-tag_faces.imageset/icon-tag_faces_3x.png b/analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/icon-tag_faces.imageset/icon-tag_faces_3x.png deleted file mode 100644 index ad9110471389c7ccaa53f9ec51493e4fa8e08266..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1722 zcmV;r21WUaP)Px*bV)=(RCwC$UCoaaMHKJ7_!R+JX1YBXqbK9Rlbk&GaS(&w9z4iDu*R zP9}&7BqV%<1V6T?d!o@m0tcevOjpMPOXA`|MTv$0$s&*}i7e>*)ePAskgn?K>aOaZ z_mWN~Gt>R5URAyNy^nhBc}z@9OiWBnOiWBnOb*e#;rDI7ldNgS;$1&VxBGE=BEyPIzFyXgtK zt_R)pzakf&L4$PMkHpqiN4)6mJ9-xj`evGF#mO^%ob2jSg9G(%^y(5&)5?DZ3g1+AWq)*!rtAD zmObg=S7`(N(-pzra>e5JRxDm+=k0qZv5d=blNJj6t_=)z54MEs@tRPgJz%%5t=$Qqe>yIlw`(b4*gb&?G zGw_!Y^zJ3Hc0XM8W&hE#+Jt; z5T{$=u}9pU`8k9?a5IQK%RWEavZgADH`nWeN9{-pw9|XS8T*9Vf;Qz* zN6W+Bq%&wI--auuCl4gcU0cCu6WW$%V|D@^QA2j*P&w;e2N7tawn_p-wQXc+&X#|J zNW4)O7>%~dHf#0GlCcKEN5{fNN7|kK+S*z0)MlMQfW>UZZK31akxRKoGyk?LK|>wU zKz&_p!zgN{x#6z&YEI~bPG4oTttx*$&Hg`h&`wjlxq9eGoT?>fRw5l%S!e@L}iiK%_-_Un7r$9u%d1Yies_g_{uUN@4J%X3QqHDIwD=ZC&3)lihaWYFoBZd1i@ z^^p{9e%dZyak)5hD~F#d#!RV?9~m^h(h~~kwPD-_U=ZlfeAbK+;RAXp9a4kr1#etb zkbExnS!IwK3AZ9YUzN9$2lqB%6JE57vh$8`KEW%y14w|f2@7rVlgVFM14@TPimw1V znW9)~n{66KHu=eHy=-W{-GKiG$AU8T<~m!h0o(l0cZGI1V!{D6n~itHYHv(Q=Avf9 z^H~!vh|G-!vEgwY0Q6l0pcIC2^I1&B`4pl|Le5st^9J?+ItH4-q;{#>hW8Z(vRdE) zsQUo03bL$%coQzN35&A~L+cJhOEbh8KpKYFVJBS?O(B&l0!2gIbH+7k04j0D8FoiE zh^lc%n+(XPH!b^DD@-2O(*IQjWQNArjKPrPcg~)Ur?%x4QoRPhT`th z8}mYPYw76&VU=@01NGWeaRlQ}8oI&hcv5Ewn#YR`#;0gW5y2G)Pi*RssmOho?Gad2Wc}ri4w$w$FIsumLsO`k_(s8*O>$OF>V3Td)l4bU3P^dLM$wm7t5|^!XfVgn0D=UFZ z7hB#Fu(Y{&w|#WPZoeUjP6A diff --git a/analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/icon-wb_incandescent.imageset/Contents.json b/analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/icon-wb_incandescent.imageset/Contents.json deleted file mode 100644 index 4678d64da..000000000 --- a/analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/icon-wb_incandescent.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "icon-wb_incandescent.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "icon-wb_incandescent_2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "icon-wb_incandescent_3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/icon-wb_incandescent.imageset/icon-wb_incandescent.png b/analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/icon-wb_incandescent.imageset/icon-wb_incandescent.png deleted file mode 100644 index 900cf2b3bf2191ebadb99be558ba141376c68fc0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 475 zcmV<10VMv3P)Px$l}SWFR9M69mOo3wKor31po=KAHOcOxh##PG5b=9-5*;tOL)@Gk zH0|Aeh(e**rASv5)c4v5ml~S8+!aCc;Am;zpWnTINu^SXp#)5RO*`k z13;bG+??`LpUKZWfRPU9y1hB$CwYN?WddxR1g~B{Rs$wpO##pbZLI-(D$dP=C*=TJ z2LLiI4j^OA(Go;8^q4qO0EQL-!yiBBbD~5<3m~BKttbH6>H?gNA(BIRLjmYo0Cbfx zZlq#B%tGZcoCIRugkk%@VhZ+Mtb#d6r7VzsiMEc`@Y5Qkb6}AA0opiS$15z}3aIGh z-&}N1*M9$#=k*}ud#N999~S+HUqNkq8TIbrf2fnrUVFD5wKj}{!xDM%nfL&whgp45 zBYe|iat9B7&#E^zA^3TR&%QRqGHKN?xbk?V7SEAT$xwgkM$|Q%PFy6Nd|x4Cp>Q3W z&3VY;UE=G~$ab`jrvz75tGc?gAiPK(JAXsc2AGxnIRK96_)Q7UPx%%Sl8*RCwC$nZIjPK@i995G}OPXx>@)<39*iVr8Q!SSb?F|G+dh!GL}I3&i4r zHX;!=x34jcQG`I$ovlofSXl_^k|ssqAVi(X9d{48_wvrSKjz^KEFAalX7>Ae`(t*t z(GU|86Z2@T)c&s01b_e#00KY&2mk>f00e*l5CAo_cKdi`0O+HZ+9#F0l4$r=6#)8J zCttM^e=ao-u=Cxj;xnz=>cGQVh)+83C`s)vhvIu90evPNJHuW4-9+01*W!oM!5-k0 zxW`ib8MSsPNnzKQ_~A%^-P8K>Wqxm8+ZEs9Gb7;xuf2ZB-Uuar&@d(+02)382Y@kI zh@W`7deO(KUuIXJ*zpsd)IJXW_WO-u$6x$XSd0aLVmo}3FkKuF)ab(wY{mjWv2*&Q ziboDiI|N|2;{mYS(E;Ev+>bZ~_Bo7zy@(@VFFpWme?|jdp#NejLjh%Zbn%Ldh@@@n ze+nx#Tj9jR7R6*%4m09u73_JYHMTz{-2l^tPoFq2Ol%~(BFIQ0nQ~&_v=Px&ut`KgRCwC$oV#ulK@^4;Bsu~D+iO7w5^sP+K?8^ffC_OdAq@x+B6S)l5h+tr z08-f5Hccdx3--w3XxDkT!e_gIqS$-Bj3H3IkW#SZIf8uWPbS>0 zs&F@J^E(h!_}f*%{bD9trSA}c{k+VNJqi1+7u+k9`6XXp%X8%SdJ?LtalJ4J*Y)+5 zDdrzO2^5p{iFtnhsH^mTuS?0ic-e==G?zGqke! zBMkt@%&}WA{pi~QM}PaG*ew7MEXV~AEEvBdHN4}gSEK^q*t7O4c>qfP5DS1}mk&Td z^*g94wgJGNU;umK0hrYHpP(hND<6QbH^l;=*pY;hgr^3uEEvFY<^Ymb#Sh;|1;DY3 zuY@bAaZ4-!id{T_DOYGpA@Tgry|N9HqKIMzayaiu*0!hc{Yd&n>hi+*PLUm78j3Ehp}mJ_p`|{ zIyS4~1sCXpZX0O+Hpk`^LG+m4H0h)S$3ltshEpUFgjs{;{aL4o;t!tZlMs#kqMF|| z9p#V{_@0HEc7`P8W|pg+!X(_WmZ)4Oq*<)ddq?Yho0pm;uW^Y+Sbfq~E?1!kZHpv( zM=gHONh{o$_q8(Riw##bE=w@KeGW+J@6+_txfyoQMV+RVt@%BsX{<%&`{B1v-Y^wH zm-(GXemV&8Oy;w?hnr)_Wa(`gGn@)8|;(VP4?{vW@FUz@~z@4&#+e^a%xRDOJWn4p1p4OW6Q{_+?}7pV00000000000000000000WZ&}m kGU$Rs5ClOG1VIw?4-5}D;%-w|P5=M^07*qoM6N<$g2Zvm9{>OV diff --git a/analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/tag_faces.imageset/Contents.json b/analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/tag_faces.imageset/Contents.json deleted file mode 100644 index 5699db3df..000000000 --- a/analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/tag_faces.imageset/Contents.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "filename" : "tag_faces.png", - "scale" : "1x" - }, - { - "idiom" : "universal", - "filename" : "tag_faces_2x.png", - "scale" : "2x" - }, - { - "idiom" : "universal", - "filename" : "tag_faces_3x.png", - "scale" : "3x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/tag_faces.imageset/tag_faces.png b/analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/tag_faces.imageset/tag_faces.png deleted file mode 100644 index 7c77eb0e4fd6c6146784bf6cec2bd3bbc017f89c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5271 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 U`l#Vy&D|9yr_2rV^c-*f2aH0XR{#J2 diff --git a/analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/wb_incandescent.imageset/wb_incandescent_3x.png b/analytics/LegacyAnalyticsQuickstart/Images/AnalyticsImages.xcassets/wb_incandescent.imageset/wb_incandescent_3x.png deleted file mode 100644 index 210496e30380472fb5ace385d54b0e159221bbc9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8077 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�l+$AsUXr)pA*l~$<(%eT|spJ<;#jTaC z+d@IX&I_Fboz~ArR+J9}&C!(CIrYVzBrbuG)dV3!`tc}A&d2%WUdJ~7@MhlyDDn z{_Jj>fd#}OOOO2s*TS)lhvyM=ru7t>a&%B8O?mnJ<)4}*Q>K1{?oPBieDuti@$=tS z=9>F6H(jvK z7!6M5HyZZ`wK=!fDE!*{{fpEPlqh=8t4FJoL6L3SHMsm&^jq0lc~;5u&f8EDpn0{3 z9#dCFbeF!d)lI^`ma9BFlT|1Ff%2`ICRIy4+O5HS|MS;T>(y+cPd9T(9{a2Lb(=PN z88v8ah@MHMD{b}6ujAS10{+`&%|Q-ZJ*#`4itok^1|>2CIfDNcV?=nqTFLRV_h%rI zB%v|Uta^SCd;tGW@3MI&{infDmOua%5tMrjohB`v$q8@>Acr9MI}JoFRgas-ug(J5 zl3Of8d%JW%&4pnCJQHqQbS3L!jgPvz0+%dp4dxXjlA-*O(CpaB5dt8r2NnUk3YH{! znPfyjK`)Ti)67PsolFBMxrA9Dihm)DNm$$fcu6q$b!N@yiUcM&!6ae+hG^JS?fHUQ zXuym}3*Vobg2G+rr^UDQYvn**2~brP41y%dX=Vr@v$w0+hL zw4Fzi-x72t=OO6)`6grH|5b}1T-et`Z?u8I^_uLyL6O%4Kk^w7!B2mhpcw%8tquUc zQh_)gN$^9}f9c%m_#5$V8{z_qcRGL_E=baU)A>uqFXCVA|6eNqa|m|5`YR+m?O 12.1.0) - - FirebaseInstallations (~> 12.1.0) - - GoogleUtilities/AppDelegateSwizzler (~> 8.1) - - GoogleUtilities/MethodSwizzler (~> 8.1) - - GoogleUtilities/Network (~> 8.1) - - "GoogleUtilities/NSData+zlib (~> 8.1)" - - nanopb (~> 3.30910.0) - - FirebaseAnalytics/Default (12.1.0): - - FirebaseCore (~> 12.1.0) - - FirebaseInstallations (~> 12.1.0) - - GoogleAppMeasurement/Default (= 12.1.0) - - GoogleUtilities/AppDelegateSwizzler (~> 8.1) - - GoogleUtilities/MethodSwizzler (~> 8.1) - - GoogleUtilities/Network (~> 8.1) - - "GoogleUtilities/NSData+zlib (~> 8.1)" - - nanopb (~> 3.30910.0) - - FirebaseCore (12.1.0): - - FirebaseCoreInternal (~> 12.1.0) - - GoogleUtilities/Environment (~> 8.1) - - GoogleUtilities/Logger (~> 8.1) - - FirebaseCoreInternal (12.1.0): - - "GoogleUtilities/NSData+zlib (~> 8.1)" - - FirebaseInstallations (12.1.0): - - FirebaseCore (~> 12.1.0) - - GoogleUtilities/Environment (~> 8.1) - - GoogleUtilities/UserDefaults (~> 8.1) - - PromisesObjC (~> 2.4) - - GoogleAdsOnDeviceConversion (2.2.0): - - GoogleUtilities/Logger (~> 8.1) - - GoogleUtilities/Network (~> 8.1) - - nanopb (~> 3.30910.0) - - GoogleAppMeasurement/Core (12.1.0): - - GoogleUtilities/AppDelegateSwizzler (~> 8.1) - - GoogleUtilities/MethodSwizzler (~> 8.1) - - GoogleUtilities/Network (~> 8.1) - - "GoogleUtilities/NSData+zlib (~> 8.1)" - - nanopb (~> 3.30910.0) - - GoogleAppMeasurement/Default (12.1.0): - - GoogleAdsOnDeviceConversion (= 2.2.0) - - GoogleAppMeasurement/Core (= 12.1.0) - - GoogleAppMeasurement/IdentitySupport (= 12.1.0) - - GoogleUtilities/AppDelegateSwizzler (~> 8.1) - - GoogleUtilities/MethodSwizzler (~> 8.1) - - GoogleUtilities/Network (~> 8.1) - - "GoogleUtilities/NSData+zlib (~> 8.1)" - - nanopb (~> 3.30910.0) - - GoogleAppMeasurement/IdentitySupport (12.1.0): - - GoogleAppMeasurement/Core (= 12.1.0) - - GoogleUtilities/AppDelegateSwizzler (~> 8.1) - - GoogleUtilities/MethodSwizzler (~> 8.1) - - GoogleUtilities/Network (~> 8.1) - - "GoogleUtilities/NSData+zlib (~> 8.1)" - - nanopb (~> 3.30910.0) - - GoogleUtilities/AppDelegateSwizzler (8.1.0): - - GoogleUtilities/Environment - - GoogleUtilities/Logger - - GoogleUtilities/Network - - GoogleUtilities/Privacy - - GoogleUtilities/Environment (8.1.0): - - GoogleUtilities/Privacy - - GoogleUtilities/Logger (8.1.0): - - GoogleUtilities/Environment - - GoogleUtilities/Privacy - - GoogleUtilities/MethodSwizzler (8.1.0): - - GoogleUtilities/Logger - - GoogleUtilities/Privacy - - GoogleUtilities/Network (8.1.0): - - GoogleUtilities/Logger - - "GoogleUtilities/NSData+zlib" - - GoogleUtilities/Privacy - - GoogleUtilities/Reachability - - "GoogleUtilities/NSData+zlib (8.1.0)": - - GoogleUtilities/Privacy - - GoogleUtilities/Privacy (8.1.0) - - GoogleUtilities/Reachability (8.1.0): - - GoogleUtilities/Logger - - GoogleUtilities/Privacy - - GoogleUtilities/UserDefaults (8.1.0): - - 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) - - PromisesObjC (2.4.0) - -DEPENDENCIES: - - FirebaseAnalytics - -SPEC REPOS: - trunk: - - FirebaseAnalytics - - FirebaseCore - - FirebaseCoreInternal - - FirebaseInstallations - - GoogleAdsOnDeviceConversion - - GoogleAppMeasurement - - GoogleUtilities - - nanopb - - PromisesObjC - -SPEC CHECKSUMS: - FirebaseAnalytics: e89a37004bce8789cb53f4cb3e80160d925e6624 - FirebaseCore: 5a452ffa66f37c8e281076996837626c5d08c090 - FirebaseCoreInternal: ff526c22671bb564d1b34a47615e29ba99389dee - FirebaseInstallations: 6836550c466a6c3f753a777bec6f4e58ea228779 - GoogleAdsOnDeviceConversion: b225b50f2ee6bbf856fd51a26684929b32657215 - GoogleAppMeasurement: 61605c4152a142d797383a713ecfa5df98fe46ca - GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1 - nanopb: fad817b59e0457d11a5dfbde799381cd727c1275 - PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 - -PODFILE CHECKSUM: 9092820812ba08f8312f6f0c9577dd8d312ea8b3 - -COCOAPODS: 1.16.2 diff --git a/analytics/LegacyAnalyticsQuickstart/README.md b/analytics/LegacyAnalyticsQuickstart/README.md deleted file mode 100644 index 82b77f2bf..000000000 --- a/analytics/LegacyAnalyticsQuickstart/README.md +++ /dev/null @@ -1,43 +0,0 @@ -Google Analytics for Firebase Quickstart -=========================== - -Google Analytics for Firebase iOS Quickstart app demonstrates collecting app usage analytics via the -Analytics API. - -Introduction ------------- - -- [Read more about Google Analytics for Firebase](https://firebase.google.com/docs/analytics) - -Getting Started ---------------- - -- [Add Firebase to your iOS Project](https://firebase.google.com/docs/ios/setup). -- Run the sample on your iOS device or emulator. - -Note: You will need Swift 3.0 to run the Swift version of this quickstart. - -Support -------- - -- [Firebase Support](https://firebase.google.com/support/) - -License -------- - -Copyright 2015 Google, Inc. - -Licensed to the Apache Software Foundation (ASF) under one or more contributor -license agreements. See the NOTICE file distributed with this work for -additional information regarding copyright ownership. The ASF licenses this -file to you under the Apache License, Version 2.0 (the "License"); you may not -use this file except in compliance with the License. You may obtain a copy of -the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -License for the specific language governing permissions and limitations under -the License. diff --git a/analytics/LegacyAnalyticsQuickstart/Screenshot/analytics-sample.png b/analytics/LegacyAnalyticsQuickstart/Screenshot/analytics-sample.png deleted file mode 100644 index c3af6790044eaca0e8ada1bbead69755c91df21d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 77905 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 diff --git a/authentication/LegacyAuthQuickstart/AuthenticationExample.xcodeproj/project.pbxproj b/authentication/LegacyAuthQuickstart/AuthenticationExample.xcodeproj/project.pbxproj deleted file mode 100644 index 990ddc7a6..000000000 --- a/authentication/LegacyAuthQuickstart/AuthenticationExample.xcodeproj/project.pbxproj +++ /dev/null @@ -1,951 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 47; - objects = { - -/* Begin PBXBuildFile section */ - 107346F52031590C004A66D1 /* AuthenticationExampleSwiftUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 107346F42031590C004A66D1 /* AuthenticationExampleSwiftUITests.swift */; }; - 1073480D20333B18004A66D1 /* AuthenticationExampleUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = 1073480C20333B18004A66D1 /* AuthenticationExampleUITests.m */; }; - 10757BD22059CC9E007623FD /* PasswordlessViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10757BD02059CC9E007623FD /* PasswordlessViewController.swift */; }; - 10757BD52059CFC7007623FD /* PasswordlessViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 10757BD42059CFC7007623FD /* PasswordlessViewController.m */; }; - 10AF4D111DD3966C0096D192 /* AuthenticationExampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 10AF4D101DD3966C0096D192 /* AuthenticationExampleTests.m */; }; - 10B053F91C6631CD0061077D /* UIViewController+Alerts.m in Sources */ = {isa = PBXBuildFile; fileRef = 10B053F81C6631CD0061077D /* UIViewController+Alerts.m */; }; - 10B054031C6A3C630061077D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 10B054011C6A3C630061077D /* Main.storyboard */; }; - 5F5A53521ADE670C00F81DF0 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F5A53511ADE670C00F81DF0 /* main.m */; }; - 5F5A53551ADE670C00F81DF0 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F5A53541ADE670C00F81DF0 /* AppDelegate.m */; }; - 5F5A537E1ADE67D500F81DF0 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F5A537D1ADE67D500F81DF0 /* AppDelegate.swift */; }; - 5F99610A1AE0CF4F0034F503 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5F9961061AE0CF4F0034F503 /* Images.xcassets */; }; - 5F99610B1AE0CF4F0034F503 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5F9961061AE0CF4F0034F503 /* Images.xcassets */; }; - 5F99610C1AE0CF4F0034F503 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5F9961071AE0CF4F0034F503 /* LaunchScreen.xib */; }; - 5F99610D1AE0CF4F0034F503 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5F9961071AE0CF4F0034F503 /* LaunchScreen.xib */; }; - DE31A564244E2B9300A7924A /* UIViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE31A55F244DFC9800A7924A /* UIViewController.swift */; }; - DEC82E4423AAEDF7000EA7B1 /* FIREGSignInHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = DEC82E3F23AAEDEC000EA7B1 /* FIREGSignInHelper.m */; }; - DEC82E4523AAEDFD000EA7B1 /* FIREGHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = DEC82E4023AAEDEC000EA7B1 /* FIREGHelper.m */; }; - EF4857041C752B7700649485 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 10B054011C6A3C630061077D /* Main.storyboard */; }; - EF6DB4CB1CDD60F700319C08 /* CustomTokenViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF6DB4C81CDD60F700319C08 /* CustomTokenViewController.swift */; }; - EF6DB4CC1CDD60F700319C08 /* EmailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF6DB4C91CDD60F700319C08 /* EmailViewController.swift */; }; - EF6DB4CD1CDD60F700319C08 /* MainViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF6DB4CA1CDD60F700319C08 /* MainViewController.swift */; }; - EF6DB4D41CDD610200319C08 /* CustomTokenViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EF6DB4CE1CDD610200319C08 /* CustomTokenViewController.m */; }; - EF6DB4D51CDD610200319C08 /* EmailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EF6DB4CF1CDD610200319C08 /* EmailViewController.m */; }; - EF6DB4D61CDD610200319C08 /* MainViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EF6DB4D01CDD610200319C08 /* MainViewController.m */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 107346F72031590C004A66D1 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5F5A53441ADE670C00F81DF0 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5F5A53781ADE67D500F81DF0; - remoteInfo = AuthenticationExampleSwift; - }; - 1073480F20333B18004A66D1 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5F5A53441ADE670C00F81DF0 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5F5A534B1ADE670C00F81DF0; - remoteInfo = AuthenticationExample; - }; - 10AF4D131DD3966C0096D192 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5F5A53441ADE670C00F81DF0 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5F5A534B1ADE670C00F81DF0; - remoteInfo = AuthenticationExample; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 107346F22031590C004A66D1 /* AuthenticationExampleSwiftUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AuthenticationExampleSwiftUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 107346F42031590C004A66D1 /* AuthenticationExampleSwiftUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthenticationExampleSwiftUITests.swift; sourceTree = ""; }; - 107346F62031590C004A66D1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 1073480A20333B18004A66D1 /* AuthenticationExampleUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AuthenticationExampleUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 1073480C20333B18004A66D1 /* AuthenticationExampleUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AuthenticationExampleUITests.m; sourceTree = ""; }; - 1073480E20333B18004A66D1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 10757BD02059CC9E007623FD /* PasswordlessViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PasswordlessViewController.swift; sourceTree = ""; }; - 10757BD32059CFC7007623FD /* PasswordlessViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PasswordlessViewController.h; sourceTree = ""; }; - 10757BD42059CFC7007623FD /* PasswordlessViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PasswordlessViewController.m; sourceTree = ""; }; - 10757BDD205AD4FC007623FD /* AuthenticationExample.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = AuthenticationExample.entitlements; sourceTree = ""; }; - 10AF4D0E1DD3966C0096D192 /* AuthenticationExampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AuthenticationExampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 10AF4D101DD3966C0096D192 /* AuthenticationExampleTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AuthenticationExampleTests.m; sourceTree = ""; }; - 10B053F71C6631CD0061077D /* UIViewController+Alerts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIViewController+Alerts.h"; sourceTree = ""; }; - 10B053F81C6631CD0061077D /* UIViewController+Alerts.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIViewController+Alerts.m"; sourceTree = ""; }; - 10B054021C6A3C630061077D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 5F5A534C1ADE670C00F81DF0 /* AuthenticationExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AuthenticationExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 5F5A53501ADE670C00F81DF0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 5F5A53511ADE670C00F81DF0 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - 5F5A53531ADE670C00F81DF0 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; - 5F5A53541ADE670C00F81DF0 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; - 5F5A53791ADE67D500F81DF0 /* AuthenticationExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AuthenticationExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 5F5A537D1ADE67D500F81DF0 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 5F9961061AE0CF4F0034F503 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; - 5F9961071AE0CF4F0034F503 /* LaunchScreen.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = LaunchScreen.xib; sourceTree = ""; }; - DE31A55F244DFC9800A7924A /* UIViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIViewController.swift; sourceTree = ""; }; - DEC82E3E23AAEDEC000EA7B1 /* FIREGHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FIREGHelper.h; sourceTree = ""; }; - DEC82E3F23AAEDEC000EA7B1 /* FIREGSignInHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FIREGSignInHelper.m; sourceTree = ""; }; - DEC82E4023AAEDEC000EA7B1 /* FIREGHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FIREGHelper.m; sourceTree = ""; }; - DEC82E4123AAEDEC000EA7B1 /* FIREGSignInHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FIREGSignInHelper.h; sourceTree = ""; }; - DED65CF723E9DE6400461312 /* FIREGSignInInfo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FIREGSignInInfo.h; sourceTree = ""; }; - EF6DB4C81CDD60F700319C08 /* CustomTokenViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CustomTokenViewController.swift; sourceTree = ""; }; - EF6DB4C91CDD60F700319C08 /* EmailViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EmailViewController.swift; sourceTree = ""; }; - EF6DB4CA1CDD60F700319C08 /* MainViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MainViewController.swift; sourceTree = ""; }; - EF6DB4CE1CDD610200319C08 /* CustomTokenViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CustomTokenViewController.m; sourceTree = ""; }; - EF6DB4CF1CDD610200319C08 /* EmailViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EmailViewController.m; sourceTree = ""; }; - EF6DB4D01CDD610200319C08 /* MainViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MainViewController.m; sourceTree = ""; }; - EF6DB4D11CDD610200319C08 /* CustomTokenViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CustomTokenViewController.h; sourceTree = ""; }; - EF6DB4D21CDD610200319C08 /* EmailViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EmailViewController.h; sourceTree = ""; }; - EF6DB4D31CDD610200319C08 /* MainViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MainViewController.h; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 107346EF2031590C004A66D1 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1073480720333B18004A66D1 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 10AF4D0B1DD3966C0096D192 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5F5A53491ADE670C00F81DF0 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5F5A53761ADE67D500F81DF0 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 107346F32031590C004A66D1 /* AuthenticationExampleSwiftUITests */ = { - isa = PBXGroup; - children = ( - 107346F42031590C004A66D1 /* AuthenticationExampleSwiftUITests.swift */, - 107346F62031590C004A66D1 /* Info.plist */, - ); - path = AuthenticationExampleSwiftUITests; - sourceTree = ""; - }; - 1073480B20333B18004A66D1 /* AuthenticationExampleUITests */ = { - isa = PBXGroup; - children = ( - 1073480C20333B18004A66D1 /* AuthenticationExampleUITests.m */, - 1073480E20333B18004A66D1 /* Info.plist */, - ); - path = AuthenticationExampleUITests; - sourceTree = ""; - }; - 10AF4D0F1DD3966C0096D192 /* AuthenticationExampleTests */ = { - isa = PBXGroup; - children = ( - 10AF4D101DD3966C0096D192 /* AuthenticationExampleTests.m */, - ); - path = AuthenticationExampleTests; - sourceTree = ""; - }; - 5F5A53431ADE670C00F81DF0 = { - isa = PBXGroup; - children = ( - 5F5A534E1ADE670C00F81DF0 /* AuthenticationExample */, - 5F5A537A1ADE67D500F81DF0 /* AuthenticationExampleSwift */, - 10AF4D0F1DD3966C0096D192 /* AuthenticationExampleTests */, - 107346F32031590C004A66D1 /* AuthenticationExampleSwiftUITests */, - 1073480B20333B18004A66D1 /* AuthenticationExampleUITests */, - DEC82E3D23AAEDEC000EA7B1 /* TestUtils */, - 5F5A534D1ADE670C00F81DF0 /* Products */, - 5F9961041AE0CF4F0034F503 /* Shared */, - ); - sourceTree = ""; - wrapsLines = 0; - }; - 5F5A534D1ADE670C00F81DF0 /* Products */ = { - isa = PBXGroup; - children = ( - 5F5A534C1ADE670C00F81DF0 /* AuthenticationExample.app */, - 5F5A53791ADE67D500F81DF0 /* AuthenticationExample.app */, - 10AF4D0E1DD3966C0096D192 /* AuthenticationExampleTests.xctest */, - 107346F22031590C004A66D1 /* AuthenticationExampleSwiftUITests.xctest */, - 1073480A20333B18004A66D1 /* AuthenticationExampleUITests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - 5F5A534E1ADE670C00F81DF0 /* AuthenticationExample */ = { - isa = PBXGroup; - children = ( - 10757BDD205AD4FC007623FD /* AuthenticationExample.entitlements */, - 10757BD32059CFC7007623FD /* PasswordlessViewController.h */, - 10757BD42059CFC7007623FD /* PasswordlessViewController.m */, - EF6DB4D11CDD610200319C08 /* CustomTokenViewController.h */, - EF6DB4CE1CDD610200319C08 /* CustomTokenViewController.m */, - EF6DB4D21CDD610200319C08 /* EmailViewController.h */, - EF6DB4CF1CDD610200319C08 /* EmailViewController.m */, - EF6DB4D31CDD610200319C08 /* MainViewController.h */, - EF6DB4D01CDD610200319C08 /* MainViewController.m */, - 5F5A53531ADE670C00F81DF0 /* AppDelegate.h */, - 5F5A53541ADE670C00F81DF0 /* AppDelegate.m */, - 5F5A534F1ADE670C00F81DF0 /* Supporting Files */, - ); - path = AuthenticationExample; - sourceTree = ""; - }; - 5F5A534F1ADE670C00F81DF0 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - 10B053F71C6631CD0061077D /* UIViewController+Alerts.h */, - 10B053F81C6631CD0061077D /* UIViewController+Alerts.m */, - 10B054011C6A3C630061077D /* Main.storyboard */, - 5F5A53501ADE670C00F81DF0 /* Info.plist */, - 5F5A53511ADE670C00F81DF0 /* main.m */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - 5F5A537A1ADE67D500F81DF0 /* AuthenticationExampleSwift */ = { - isa = PBXGroup; - children = ( - 10757BD02059CC9E007623FD /* PasswordlessViewController.swift */, - EF6DB4C81CDD60F700319C08 /* CustomTokenViewController.swift */, - EF6DB4C91CDD60F700319C08 /* EmailViewController.swift */, - EF6DB4CA1CDD60F700319C08 /* MainViewController.swift */, - 5F5A537D1ADE67D500F81DF0 /* AppDelegate.swift */, - DE31A55F244DFC9800A7924A /* UIViewController.swift */, - ); - path = AuthenticationExampleSwift; - sourceTree = ""; - }; - 5F9961041AE0CF4F0034F503 /* Shared */ = { - isa = PBXGroup; - children = ( - 5F9961061AE0CF4F0034F503 /* Images.xcassets */, - 5F9961071AE0CF4F0034F503 /* LaunchScreen.xib */, - ); - name = Shared; - path = ../../shared; - sourceTree = ""; - }; - DEC82E3D23AAEDEC000EA7B1 /* TestUtils */ = { - isa = PBXGroup; - children = ( - DEC82E3E23AAEDEC000EA7B1 /* FIREGHelper.h */, - DEC82E3F23AAEDEC000EA7B1 /* FIREGSignInHelper.m */, - DEC82E4023AAEDEC000EA7B1 /* FIREGHelper.m */, - DEC82E4123AAEDEC000EA7B1 /* FIREGSignInHelper.h */, - DED65CF723E9DE6400461312 /* FIREGSignInInfo.h */, - ); - name = TestUtils; - path = ../TestUtils; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 107346F12031590C004A66D1 /* AuthenticationExampleSwiftUITests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 107346F92031590C004A66D1 /* Build configuration list for PBXNativeTarget "AuthenticationExampleSwiftUITests" */; - buildPhases = ( - 107346EE2031590C004A66D1 /* Sources */, - 107346EF2031590C004A66D1 /* Frameworks */, - 107346F02031590C004A66D1 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 107346F82031590C004A66D1 /* PBXTargetDependency */, - ); - name = AuthenticationExampleSwiftUITests; - productName = AuthenticationExampleSwiftUITests; - productReference = 107346F22031590C004A66D1 /* AuthenticationExampleSwiftUITests.xctest */; - productType = "com.apple.product-type.bundle.ui-testing"; - }; - 1073480920333B18004A66D1 /* AuthenticationExampleUITests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 1073481120333B18004A66D1 /* Build configuration list for PBXNativeTarget "AuthenticationExampleUITests" */; - buildPhases = ( - 1073480620333B18004A66D1 /* Sources */, - 1073480720333B18004A66D1 /* Frameworks */, - 1073480820333B18004A66D1 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 1073481020333B18004A66D1 /* PBXTargetDependency */, - ); - name = AuthenticationExampleUITests; - productName = AuthenticationExampleUITests; - productReference = 1073480A20333B18004A66D1 /* AuthenticationExampleUITests.xctest */; - productType = "com.apple.product-type.bundle.ui-testing"; - }; - 10AF4D0D1DD3966C0096D192 /* AuthenticationExampleTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 10AF4D151DD3966C0096D192 /* Build configuration list for PBXNativeTarget "AuthenticationExampleTests" */; - buildPhases = ( - 10AF4D0A1DD3966C0096D192 /* Sources */, - 10AF4D0B1DD3966C0096D192 /* Frameworks */, - 10AF4D0C1DD3966C0096D192 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 10AF4D141DD3966C0096D192 /* PBXTargetDependency */, - ); - name = AuthenticationExampleTests; - productName = AuthenticationExampleTests; - productReference = 10AF4D0E1DD3966C0096D192 /* AuthenticationExampleTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; - 5F5A534B1ADE670C00F81DF0 /* AuthenticationExample */ = { - isa = PBXNativeTarget; - buildConfigurationList = 5F5A536F1ADE670C00F81DF0 /* Build configuration list for PBXNativeTarget "AuthenticationExample" */; - buildPhases = ( - 5F5A53481ADE670C00F81DF0 /* Sources */, - 5F5A53491ADE670C00F81DF0 /* Frameworks */, - 5F5A534A1ADE670C00F81DF0 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = AuthenticationExample; - productName = UserManagementExample; - productReference = 5F5A534C1ADE670C00F81DF0 /* AuthenticationExample.app */; - productType = "com.apple.product-type.application"; - }; - 5F5A53781ADE67D500F81DF0 /* AuthenticationExampleSwift */ = { - isa = PBXNativeTarget; - buildConfigurationList = 5F5A53991ADE67D500F81DF0 /* Build configuration list for PBXNativeTarget "AuthenticationExampleSwift" */; - buildPhases = ( - 5F5A53751ADE67D500F81DF0 /* Sources */, - 5F5A53761ADE67D500F81DF0 /* Frameworks */, - 5F5A53771ADE67D500F81DF0 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = AuthenticationExampleSwift; - productName = UserManagementExampleSwift; - productReference = 5F5A53791ADE67D500F81DF0 /* AuthenticationExample.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 5F5A53441ADE670C00F81DF0 /* Project object */ = { - isa = PBXProject; - attributes = { - KnownAssetTags = ( - New, - ); - LastSwiftUpdateCheck = 0920; - LastUpgradeCheck = 1110; - ORGANIZATIONNAME = "Google Inc."; - TargetAttributes = { - 107346F12031590C004A66D1 = { - CreatedOnToolsVersion = 9.2; - LastSwiftMigration = 1110; - ProvisioningStyle = Automatic; - TestTargetID = 5F5A53781ADE67D500F81DF0; - }; - 1073480920333B18004A66D1 = { - CreatedOnToolsVersion = 9.2; - ProvisioningStyle = Automatic; - TestTargetID = 5F5A534B1ADE670C00F81DF0; - }; - 10AF4D0D1DD3966C0096D192 = { - CreatedOnToolsVersion = 8.1; - ProvisioningStyle = Automatic; - TestTargetID = 5F5A534B1ADE670C00F81DF0; - }; - 5F5A534B1ADE670C00F81DF0 = { - CreatedOnToolsVersion = 6.3; - LastSwiftMigration = 1140; - ProvisioningStyle = Automatic; - SystemCapabilities = { - com.apple.Keychain = { - enabled = 1; - }; - com.apple.SafariKeychain = { - enabled = 1; - }; - }; - }; - 5F5A53781ADE67D500F81DF0 = { - CreatedOnToolsVersion = 6.3; - LastSwiftMigration = 1110; - ProvisioningStyle = Automatic; - SystemCapabilities = { - com.apple.Keychain = { - enabled = 1; - }; - com.apple.SafariKeychain = { - enabled = 1; - }; - }; - }; - }; - }; - buildConfigurationList = 5F5A53471ADE670C00F81DF0 /* Build configuration list for PBXProject "AuthenticationExample" */; - compatibilityVersion = "Xcode 6.3"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 5F5A53431ADE670C00F81DF0; - productRefGroup = 5F5A534D1ADE670C00F81DF0 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 5F5A534B1ADE670C00F81DF0 /* AuthenticationExample */, - 5F5A53781ADE67D500F81DF0 /* AuthenticationExampleSwift */, - 10AF4D0D1DD3966C0096D192 /* AuthenticationExampleTests */, - 107346F12031590C004A66D1 /* AuthenticationExampleSwiftUITests */, - 1073480920333B18004A66D1 /* AuthenticationExampleUITests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 107346F02031590C004A66D1 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1073480820333B18004A66D1 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 10AF4D0C1DD3966C0096D192 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5F5A534A1ADE670C00F81DF0 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5F99610C1AE0CF4F0034F503 /* LaunchScreen.xib in Resources */, - 10B054031C6A3C630061077D /* Main.storyboard in Resources */, - 5F99610A1AE0CF4F0034F503 /* Images.xcassets in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5F5A53771ADE67D500F81DF0 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - EF4857041C752B7700649485 /* Main.storyboard in Resources */, - 5F99610D1AE0CF4F0034F503 /* LaunchScreen.xib in Resources */, - 5F99610B1AE0CF4F0034F503 /* Images.xcassets in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 107346EE2031590C004A66D1 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 107346F52031590C004A66D1 /* AuthenticationExampleSwiftUITests.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1073480620333B18004A66D1 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 1073480D20333B18004A66D1 /* AuthenticationExampleUITests.m in Sources */, - DEC82E4423AAEDF7000EA7B1 /* FIREGSignInHelper.m in Sources */, - DEC82E4523AAEDFD000EA7B1 /* FIREGHelper.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 10AF4D0A1DD3966C0096D192 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 10AF4D111DD3966C0096D192 /* AuthenticationExampleTests.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5F5A53481ADE670C00F81DF0 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 10757BD52059CFC7007623FD /* PasswordlessViewController.m in Sources */, - EF6DB4D51CDD610200319C08 /* EmailViewController.m in Sources */, - EF6DB4D61CDD610200319C08 /* MainViewController.m in Sources */, - 10B053F91C6631CD0061077D /* UIViewController+Alerts.m in Sources */, - EF6DB4D41CDD610200319C08 /* CustomTokenViewController.m in Sources */, - 5F5A53551ADE670C00F81DF0 /* AppDelegate.m in Sources */, - 5F5A53521ADE670C00F81DF0 /* main.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5F5A53751ADE67D500F81DF0 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - DE31A564244E2B9300A7924A /* UIViewController.swift in Sources */, - 10757BD22059CC9E007623FD /* PasswordlessViewController.swift in Sources */, - 5F5A537E1ADE67D500F81DF0 /* AppDelegate.swift in Sources */, - EF6DB4CB1CDD60F700319C08 /* CustomTokenViewController.swift in Sources */, - EF6DB4CC1CDD60F700319C08 /* EmailViewController.swift in Sources */, - EF6DB4CD1CDD60F700319C08 /* MainViewController.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 107346F82031590C004A66D1 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5F5A53781ADE67D500F81DF0 /* AuthenticationExampleSwift */; - targetProxy = 107346F72031590C004A66D1 /* PBXContainerItemProxy */; - }; - 1073481020333B18004A66D1 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5F5A534B1ADE670C00F81DF0 /* AuthenticationExample */; - targetProxy = 1073480F20333B18004A66D1 /* PBXContainerItemProxy */; - }; - 10AF4D141DD3966C0096D192 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5F5A534B1ADE670C00F81DF0 /* AuthenticationExample */; - targetProxy = 10AF4D131DD3966C0096D192 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - 10B054011C6A3C630061077D /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 10B054021C6A3C630061077D /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 107346FA2031590C004A66D1 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - DEBUG_INFORMATION_FORMAT = dwarf; - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = AuthenticationExampleSwiftUITests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.quickstart.AuthenticationExampleSwiftUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_SWIFT3_OBJC_INFERENCE = On; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = AuthenticationExampleSwift; - }; - name = Debug; - }; - 107346FB2031590C004A66D1 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = AuthenticationExampleSwiftUITests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.quickstart.AuthenticationExampleSwiftUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_SWIFT3_OBJC_INFERENCE = On; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = AuthenticationExampleSwift; - }; - name = Release; - }; - 1073481220333B18004A66D1 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - DEBUG_INFORMATION_FORMAT = dwarf; - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = AuthenticationExampleUITests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.quickstart.AuthenticationExampleUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = AuthenticationExample; - }; - name = Debug; - }; - 1073481320333B18004A66D1 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = AuthenticationExampleUITests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.quickstart.AuthenticationExampleUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = AuthenticationExample; - }; - name = Release; - }; - 10AF4D161DD3966C0096D192 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CLANG_ANALYZER_NONNULL = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_SUSPICIOUS_MOVES = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = ""; - INFOPLIST_FILE = AuthenticationExample/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.samples.AuthenticationExampleTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/AuthenticationExample.app/AuthenticationExample"; - }; - name = Debug; - }; - 10AF4D171DD3966C0096D192 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CLANG_ANALYZER_NONNULL = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_SUSPICIOUS_MOVES = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = ""; - INFOPLIST_FILE = AuthenticationExample/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.samples.AuthenticationExampleTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/AuthenticationExample.app/AuthenticationExample"; - }; - name = Release; - }; - 5F5A536D1ADE670C00F81DF0 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - ENABLE_BITCODE = NO; - 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_SYMBOLS_PRIVATE_EXTERN = NO; - 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 = 15.0; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 5F5A536E1ADE670C00F81DF0 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = YES; - ENABLE_BITCODE = NO; - 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 = 15.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 5F5A53701ADE670C00F81DF0 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_ENTITLEMENTS = AuthenticationExample/AuthenticationExample.entitlements; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = ""; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = "$(SRCROOT)/AuthenticationExample/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.quickstart.AuthenticationExample; - PRODUCT_NAME = AuthenticationExample; - PROVISIONING_PROFILE = ""; - PROVISIONING_PROFILE_SPECIFIER = ""; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 3.0; - }; - name = Debug; - }; - 5F5A53711ADE670C00F81DF0 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_ENTITLEMENTS = AuthenticationExample/AuthenticationExample.entitlements; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = ""; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = "$(SRCROOT)/AuthenticationExample/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.quickstart.AuthenticationExample; - PRODUCT_NAME = AuthenticationExample; - PROVISIONING_PROFILE = ""; - PROVISIONING_PROFILE_SPECIFIER = ""; - SWIFT_VERSION = 3.0; - }; - name = Release; - }; - 5F5A53951ADE67D500F81DF0 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; - CODE_SIGN_ENTITLEMENTS = AuthenticationExample/AuthenticationExample.entitlements; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = ""; - INFOPLIST_FILE = "$(SRCROOT)/AuthenticationExample/Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.quickstart.AuthenticationExample; - PRODUCT_NAME = AuthenticationExample; - PROVISIONING_PROFILE = ""; - PROVISIONING_PROFILE_SPECIFIER = ""; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_SWIFT3_OBJC_INFERENCE = Default; - SWIFT_VERSION = 5.0; - }; - name = Debug; - }; - 5F5A53961ADE67D500F81DF0 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; - CODE_SIGN_ENTITLEMENTS = AuthenticationExample/AuthenticationExample.entitlements; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = ""; - INFOPLIST_FILE = "$(SRCROOT)/AuthenticationExample/Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.quickstart.AuthenticationExample; - PRODUCT_NAME = AuthenticationExample; - PROVISIONING_PROFILE = ""; - PROVISIONING_PROFILE_SPECIFIER = ""; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_SWIFT3_OBJC_INFERENCE = Default; - SWIFT_VERSION = 5.0; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 107346F92031590C004A66D1 /* Build configuration list for PBXNativeTarget "AuthenticationExampleSwiftUITests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 107346FA2031590C004A66D1 /* Debug */, - 107346FB2031590C004A66D1 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 1073481120333B18004A66D1 /* Build configuration list for PBXNativeTarget "AuthenticationExampleUITests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1073481220333B18004A66D1 /* Debug */, - 1073481320333B18004A66D1 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 10AF4D151DD3966C0096D192 /* Build configuration list for PBXNativeTarget "AuthenticationExampleTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 10AF4D161DD3966C0096D192 /* Debug */, - 10AF4D171DD3966C0096D192 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 5F5A53471ADE670C00F81DF0 /* Build configuration list for PBXProject "AuthenticationExample" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 5F5A536D1ADE670C00F81DF0 /* Debug */, - 5F5A536E1ADE670C00F81DF0 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 5F5A536F1ADE670C00F81DF0 /* Build configuration list for PBXNativeTarget "AuthenticationExample" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 5F5A53701ADE670C00F81DF0 /* Debug */, - 5F5A53711ADE670C00F81DF0 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 5F5A53991ADE67D500F81DF0 /* Build configuration list for PBXNativeTarget "AuthenticationExampleSwift" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 5F5A53951ADE67D500F81DF0 /* Debug */, - 5F5A53961ADE67D500F81DF0 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 5F5A53441ADE670C00F81DF0 /* Project object */; -} diff --git a/authentication/LegacyAuthQuickstart/AuthenticationExample.xcodeproj/xcshareddata/xcschemes/AuthenticationExample.xcscheme b/authentication/LegacyAuthQuickstart/AuthenticationExample.xcodeproj/xcshareddata/xcschemes/AuthenticationExample.xcscheme deleted file mode 100644 index c1acaeed1..000000000 --- a/authentication/LegacyAuthQuickstart/AuthenticationExample.xcodeproj/xcshareddata/xcschemes/AuthenticationExample.xcscheme +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/authentication/LegacyAuthQuickstart/AuthenticationExample.xcodeproj/xcshareddata/xcschemes/AuthenticationExampleSwift.xcscheme b/authentication/LegacyAuthQuickstart/AuthenticationExample.xcodeproj/xcshareddata/xcschemes/AuthenticationExampleSwift.xcscheme deleted file mode 100644 index b592ace31..000000000 --- a/authentication/LegacyAuthQuickstart/AuthenticationExample.xcodeproj/xcshareddata/xcschemes/AuthenticationExampleSwift.xcscheme +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/authentication/LegacyAuthQuickstart/AuthenticationExample/.clang-format b/authentication/LegacyAuthQuickstart/AuthenticationExample/.clang-format deleted file mode 100644 index 1f09ce0f2..000000000 --- a/authentication/LegacyAuthQuickstart/AuthenticationExample/.clang-format +++ /dev/null @@ -1,4 +0,0 @@ -BasedOnStyle: Google -ColumnLimit: 100 -BinPackParameters: false -AllowAllParametersOfDeclarationOnNextLine: true diff --git a/authentication/LegacyAuthQuickstart/AuthenticationExample/AppDelegate.h b/authentication/LegacyAuthQuickstart/AuthenticationExample/AppDelegate.h deleted file mode 100644 index 00665f375..000000000 --- a/authentication/LegacyAuthQuickstart/AuthenticationExample/AppDelegate.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -@import UIKit; - -@import GoogleSignIn; - -// [START signin_delegate] -@interface AppDelegate : UIResponder -// [END signin_delegate] - -@property(nonatomic, strong) UIWindow *window; - -@end diff --git a/authentication/LegacyAuthQuickstart/AuthenticationExample/AppDelegate.m b/authentication/LegacyAuthQuickstart/AuthenticationExample/AppDelegate.m deleted file mode 100644 index 599a79ed2..000000000 --- a/authentication/LegacyAuthQuickstart/AuthenticationExample/AppDelegate.m +++ /dev/null @@ -1,97 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "AppDelegate.h" -#import "MainViewController.h" -#import "UIViewController+Alerts.h" -// [START auth_import] -@import FirebaseCore; -// [END auth_import] - -// [START google_import] -@import GoogleSignIn; -// [END google_import] -@import FBSDKCoreKit; - -@implementation AppDelegate - -- (BOOL)application:(UIApplication *)application - didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - // [START firebase_configure] - // Use Firebase library to configure APIs - [FIRApp configure]; - // [END firebase_configure] - - [[FBSDKApplicationDelegate sharedInstance] application:application - didFinishLaunchingWithOptions:launchOptions]; - return YES; -} - -// [START new_delegate] -- (BOOL)application:(nonnull UIApplication *)application - openURL:(nonnull NSURL *)url - options:(nonnull NSDictionary *)options { - // [END new_delegate] - return [self application:application - openURL:url - // [START new_options] - sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey] - annotation:options[UIApplicationOpenURLOptionsAnnotationKey]]; -} -// [END new_options] - -// [START old_delegate] -- (BOOL)application:(UIApplication *)application - openURL:(NSURL *)url - sourceApplication:(NSString *)sourceApplication - annotation:(id)annotation { - // [END old_delegate] - if ([self handlePasswordlessSignInWithLink:url]) { - return YES; - } - if ([[GIDSignIn sharedInstance] handleURL:url]) { - return YES; - } - return [[FBSDKApplicationDelegate sharedInstance] application:application - openURL:url - // [START old_options] - sourceApplication:sourceApplication - annotation:annotation]; -} -// [END old_options] - -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 120000 -- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray> * _Nullable))restorationHandler { -#else -- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray * __nullable restorableObjects))restorationHandler { -#endif - return [self handlePasswordlessSignInWithLink:userActivity.webpageURL]; -} - -- (BOOL)handlePasswordlessSignInWithLink:(nonnull NSURL*)url { - NSString *link = url.absoluteString; - // [START is_signin_link] - if ([[FIRAuth auth] isSignInWithEmailLink:link]) { - // [END is_signin_link] - [NSUserDefaults.standardUserDefaults setObject:link forKey:@"Link"]; - [(UINavigationController*)_window.rootViewController popToRootViewControllerAnimated:NO]; - [_window.rootViewController.childViewControllers[0] performSegueWithIdentifier:@"passwordless" sender:nil]; - return YES; - } - return NO; -} - -@end diff --git a/authentication/LegacyAuthQuickstart/AuthenticationExample/AuthenticationExample.entitlements b/authentication/LegacyAuthQuickstart/AuthenticationExample/AuthenticationExample.entitlements deleted file mode 100644 index f2ab301e3..000000000 --- a/authentication/LegacyAuthQuickstart/AuthenticationExample/AuthenticationExample.entitlements +++ /dev/null @@ -1,14 +0,0 @@ - - - - - com.apple.developer.applesignin - - Default - - com.apple.developer.associated-domains - - applinks:sen9z.app.goo.gl - - - diff --git a/authentication/LegacyAuthQuickstart/AuthenticationExample/Base.lproj/Main.storyboard b/authentication/LegacyAuthQuickstart/AuthenticationExample/Base.lproj/Main.storyboard deleted file mode 100644 index df3954471..000000000 --- a/authentication/LegacyAuthQuickstart/AuthenticationExample/Base.lproj/Main.storyboard +++ /dev/null @@ -1,588 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Please enter your custom token here, which is signed using the private key from a service account downloaded from the Google Developer Console - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/authentication/LegacyAuthQuickstart/AuthenticationExample/CustomTokenViewController.h b/authentication/LegacyAuthQuickstart/AuthenticationExample/CustomTokenViewController.h deleted file mode 100644 index a787bbbae..000000000 --- a/authentication/LegacyAuthQuickstart/AuthenticationExample/CustomTokenViewController.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -@import UIKit; - -@interface CustomTokenViewController : UIViewController -@end \ No newline at end of file diff --git a/authentication/LegacyAuthQuickstart/AuthenticationExample/CustomTokenViewController.m b/authentication/LegacyAuthQuickstart/AuthenticationExample/CustomTokenViewController.m deleted file mode 100644 index 268b75570..000000000 --- a/authentication/LegacyAuthQuickstart/AuthenticationExample/CustomTokenViewController.m +++ /dev/null @@ -1,54 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "CustomTokenViewController.h" -#import "UIViewController+Alerts.h" - -// [START auth_view_import] -@import FirebaseAuth; -// [END auth_view_import] - -@interface CustomTokenViewController () -@property(weak, nonatomic) IBOutlet UITextView *tokenField; -@end -@implementation CustomTokenViewController - -- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { - [self.view endEditing:YES]; -} - -- (IBAction)didTapCustomTokenLogin:(id)sender { - NSString *customToken = _tokenField.text; - [self showSpinner:^{ - // [START signinwithcustomtoken] - [[FIRAuth auth] signInWithCustomToken:customToken - completion:^(FIRAuthDataResult * _Nullable authResult, - NSError * _Nullable error) { - // [START_EXCLUDE] - [self hideSpinner:^{ - if (error) { - [self showMessagePrompt:error.localizedDescription]; - return; - } - [self.navigationController popViewControllerAnimated:YES]; - }]; - // [END_EXCLUDE] - }]; - // [END signinwithcustomtoken] - }]; -} - -@end diff --git a/authentication/LegacyAuthQuickstart/AuthenticationExample/EmailViewController.h b/authentication/LegacyAuthQuickstart/AuthenticationExample/EmailViewController.h deleted file mode 100644 index da4c22d4d..000000000 --- a/authentication/LegacyAuthQuickstart/AuthenticationExample/EmailViewController.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -@interface EmailViewController : UIViewController - -@end diff --git a/authentication/LegacyAuthQuickstart/AuthenticationExample/EmailViewController.m b/authentication/LegacyAuthQuickstart/AuthenticationExample/EmailViewController.m deleted file mode 100644 index 4d7001441..000000000 --- a/authentication/LegacyAuthQuickstart/AuthenticationExample/EmailViewController.m +++ /dev/null @@ -1,191 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "EmailViewController.h" -#import "UIViewController+Alerts.h" - -@import FirebaseAuth; - -@interface EmailViewController () -@property(weak, nonatomic) IBOutlet UITextField *emailField; -@property(weak, nonatomic) IBOutlet UITextField *passwordField; -@end - -@implementation EmailViewController - -- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { - [self.view endEditing:YES]; -} - -- (IBAction)didTapEmailLogin:(id)sender { - [self showSpinner:^{ - // [START headless_email_auth] - [[FIRAuth auth] signInWithEmail:self->_emailField.text - password:self->_passwordField.text - completion:^(FIRAuthDataResult * _Nullable authResult, - NSError * _Nullable error) { - // [START_EXCLUDE] - [self hideSpinner:^{ - if (error && error.code == FIRAuthErrorCodeSecondFactorRequired) { - FIRMultiFactorResolver *resolver = error.userInfo[FIRAuthErrorUserInfoMultiFactorResolverKey]; - NSMutableString *displayNameString = [NSMutableString string]; - for (FIRMultiFactorInfo *tmpFactorInfo in resolver.hints) { - [displayNameString appendString:tmpFactorInfo.displayName]; - [displayNameString appendString:@" "]; - } - [self showTextInputPromptWithMessage:[NSString stringWithFormat:@"Select factor to sign in\n%@", displayNameString] - completionBlock:^(BOOL userPressedOK, NSString *_Nullable displayName) { - FIRPhoneMultiFactorInfo* selectedHint; - for (FIRMultiFactorInfo *tmpFactorInfo in resolver.hints) { - if ([displayName isEqualToString:tmpFactorInfo.displayName]) { - selectedHint = (FIRPhoneMultiFactorInfo *)tmpFactorInfo; - } - } - [FIRPhoneAuthProvider.provider - verifyPhoneNumberWithMultiFactorInfo:selectedHint - UIDelegate:nil - multiFactorSession:resolver.session - completion:^(NSString * _Nullable verificationID, NSError * _Nullable error) { - if (error) { - NSLog(@"Multi factor start sign in failed. Error: %@", error.description); - } else { - [self showTextInputPromptWithMessage:[NSString stringWithFormat:@"Verification code for %@", selectedHint.displayName] - completionBlock:^(BOOL userPressedOK, NSString *_Nullable verificationCode) { - FIRPhoneAuthCredential *credential = - [[FIRPhoneAuthProvider provider] credentialWithVerificationID:verificationID - verificationCode:verificationCode]; - FIRMultiFactorAssertion *assertion = [FIRPhoneMultiFactorGenerator assertionWithCredential:credential]; - [resolver resolveSignInWithAssertion:assertion completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) { - if (error) { - NSLog(@"Multi factor finanlize sign in failed. Error: %@", error.description); - } else { - [self.navigationController popViewControllerAnimated:YES]; - } - }]; - }]; - } - }]; - }]; - } else if (error) { - [self showMessagePrompt:error.localizedDescription]; - return; - } - [self.navigationController popViewControllerAnimated:YES]; - }]; - // [END_EXCLUDE] - }]; - // [END headless_email_auth] - }]; -} - -/** @fn requestPasswordReset - @brief Requests a "password reset" email be sent. - */ -- (IBAction)didRequestPasswordReset:(id)sender { - [self showTextInputPromptWithMessage:@"Email:" - completionBlock:^(BOOL userPressedOK, NSString *_Nullable userInput) { - if (!userPressedOK || !userInput.length) { - return; - } - - [self showSpinner:^{ - // [START password_reset] - [[FIRAuth auth] sendPasswordResetWithEmail:userInput completion:^(NSError *_Nullable error) { - // [START_EXCLUDE] - [self hideSpinner:^{ - if (error) { - [self showMessagePrompt:error.localizedDescription]; - return; - } - - [self showMessagePrompt:@"Sent"]; - }]; - // [END_EXCLUDE] - }]; - // [END password_reset] - }]; - }]; -} - -/** @fn getProvidersForEmail - @brief Prompts the user for an email address, calls @c FIRAuth.getProvidersForEmail:callback: - and displays the result. - */ -- (IBAction)didGetProvidersForEmail:(id)sender { - [self showTextInputPromptWithMessage:@"Email:" - completionBlock:^(BOOL userPressedOK, NSString *_Nullable userInput) { - if (!userPressedOK || !userInput.length) { - return; - } - - [self showSpinner:^{ - // [START get_methods] - [[FIRAuth auth] fetchSignInMethodsForEmail:userInput - completion:^(NSArray *_Nullable providers, - NSError *_Nullable error) { - // [START_EXCLUDE] - [self hideSpinner:^{ - if (error) { - [self showMessagePrompt:error.localizedDescription]; - return; - } - - [self showMessagePrompt:[providers componentsJoinedByString:@", "]]; - }]; - // [END_EXCLUDE] - }]; - // [END get_methods] - }]; - }]; -} - -- (IBAction)didCreateAccount:(id)sender { - [self showTextInputPromptWithMessage:@"Email:" - completionBlock:^(BOOL userPressedOK, NSString *_Nullable email) { - if (!userPressedOK || !email.length) { - return; - } - - [self showTextInputPromptWithMessage:@"Password:" - completionBlock:^(BOOL userPressedOK, NSString *_Nullable password) { - if (!userPressedOK || !password.length) { - return; - } - - [self showSpinner:^{ - // [START create_user] - [[FIRAuth auth] createUserWithEmail:email - password:password - completion:^(FIRAuthDataResult * _Nullable authResult, - NSError * _Nullable error) { - // [START_EXCLUDE] - [self hideSpinner:^{ - if (error) { - [self showMessagePrompt: error.localizedDescription]; - return; - } - NSLog(@"%@ created", authResult.user.email); - [self.navigationController popViewControllerAnimated:YES]; - }]; - // [END_EXCLUDE] - }]; - // [END create_user] - }]; - }]; - }]; -} - -@end diff --git a/authentication/LegacyAuthQuickstart/AuthenticationExample/Info.plist b/authentication/LegacyAuthQuickstart/AuthenticationExample/Info.plist deleted file mode 100644 index ac8f75903..000000000 --- a/authentication/LegacyAuthQuickstart/AuthenticationExample/Info.plist +++ /dev/null @@ -1,107 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIcons - - CFBundleIcons~ipad - - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleURLTypes - - - CFBundleTypeRole - Editor - CFBundleURLName - Client - CFBundleURLSchemes - - REVERSED_CLIENT_ID - - - - CFBundleVersion - 1 - FacebookAppID - Placeholder - FacebookDisplayName - Dev - LSApplicationQueriesSchemes - - fbapi - fbauth2 - - LSRequiresIPhoneOS - - NSAppTransportSecurity - - NSExceptionDomains - - akamaihd.net - - NSIncludesSubdomains - - NSThirdPartyExceptionRequiresForwardSecrecy - - - facebook.com - - NSIncludesSubdomains - - NSThirdPartyExceptionRequiresForwardSecrecy - - - fbcdn.net - - NSIncludesSubdomains - - NSThirdPartyExceptionRequiresForwardSecrecy - - - twimg.com - - NSIncludesSubdomains - - NSTemporaryExceptionAllowsInsecureHTTPLoads - - - - - UILaunchStoryboardName - LaunchScreen - UIMainStoryboardFile - Main - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/authentication/LegacyAuthQuickstart/AuthenticationExample/MainViewController.h b/authentication/LegacyAuthQuickstart/AuthenticationExample/MainViewController.h deleted file mode 100644 index d9d82f4bf..000000000 --- a/authentication/LegacyAuthQuickstart/AuthenticationExample/MainViewController.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -@import GoogleSignIn; -@import FirebaseAuth; - -// [START signin_controller] -@interface MainViewController : UITableViewController -// [END signin_controller] -- (void)firebaseLoginWithCredential:(FIRAuthCredential *)credential; -@end diff --git a/authentication/LegacyAuthQuickstart/AuthenticationExample/MainViewController.m b/authentication/LegacyAuthQuickstart/AuthenticationExample/MainViewController.m deleted file mode 100644 index b3220651a..000000000 --- a/authentication/LegacyAuthQuickstart/AuthenticationExample/MainViewController.m +++ /dev/null @@ -1,1197 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "MainViewController.h" -#import "UIViewController+Alerts.h" - -#import -#import - -@import AuthenticationServices; -@import FBSDKCoreKit; -@import FBSDKLoginKit; -@import FirebaseCore; -@import FirebaseAnalytics; - -static const int kSectionMultiFactor = 4; -static const int kSectionToken = 3; -static const int kSectionProviders = 2; -static const int kSectionUser = 1; -static const int kSectionSignIn = 0; - -typedef enum : NSUInteger { - AuthEmail, - AuthAnonymous, - AuthApple, - AuthFacebook, - AuthGoogle, - AuthTwitter, - AuthGitHub, - AuthCustom, - AuthPhone, - AuthPasswordless, - AuthGameCenter, - AuthMicrosoft, - AuthEmailMFA, -} AuthProvider; - -/*! @var kOKButtonText - @brief The text of the "OK" button for the Sign In result dialogs. - */ -static NSString *const kOKButtonText = @"OK"; - -/*! @var kTokenRefreshedAlertTitle - @brief The title of the "Token Refreshed" alert. - */ -static NSString *const kTokenRefreshedAlertTitle = @"Token"; - -/*! @var kTokenRefreshErrorAlertTitle - @brief The title of the "Token Refresh error" alert. - */ -static NSString *const kTokenRefreshErrorAlertTitle = @"Get Token Error"; - -/** @var kSetDisplayNameTitle - @brief The title of the "Set Display Name" error dialog. - */ -static NSString *const kSetDisplayNameTitle = @"Set Display Name"; - -/** @var kUnlinkTitle - @brief The text of the "Unlink from Provider" error Dialog. - */ -static NSString *const kUnlinkTitle = @"Unlink from Provider"; - -/** @var kChangeEmailText - @brief The title of the "Change Email" button. - */ -static NSString *const kChangeEmailText = @"Change Email"; - -/** @var kChangePasswordText - @brief The title of the "Change Password" button. - */ -static NSString *const kChangePasswordText = @"Change Password"; - -/** @var kUpdatePhoneNumberText - @brief The title of the "Update Phone Number" button. - */ -static NSString *const kUpdatePhoneNumberText = @"Update Phone Number"; - -static BOOL isMFAEnabled = NO; - -@interface MainViewController () -@property(strong, nonatomic) FIRAuthStateDidChangeListenerHandle handle; -@property(strong, nonatomic) FIROAuthProvider *microsoftProvider; -@property(strong, nonatomic) FIROAuthProvider *twitterProvider; -@property(strong, nonatomic) FIROAuthProvider *gitHubProvider; -@end - -@interface MainViewController (SignInWithApple) - -@property(nonatomic, readwrite, nullable) NSString *currentNonce; - -- (void)startSignInWithAppleFlow API_AVAILABLE(ios(13.0)); - -- (void)startSignInWithGoogleFlow; - -@end - -@implementation MainViewController { - NSString *_currentNonce; -} - -- (void)firebaseLoginWithCredential:(FIRAuthCredential *)credential { - [self showSpinner:^{ - if ([FIRAuth auth].currentUser) { - // [START link_credential] - [[FIRAuth auth].currentUser linkWithCredential:credential - completion:^(FIRAuthDataResult *result, NSError *_Nullable error) { - // [START_EXCLUDE] - [self hideSpinner:^{ - if (error) { - [self showMessagePrompt:error.localizedDescription]; - return; - } - [self.tableView reloadData]; - }]; - // [END_EXCLUDE] - }]; - // [END link_credential] - } else { - // [START signin_credential] - [[FIRAuth auth] signInWithCredential:credential - completion:^(FIRAuthDataResult * _Nullable authResult, - NSError * _Nullable error) { - // [START_EXCLUDE silent] - [self hideSpinner:^{ - // [END_EXCLUDE] - if (isMFAEnabled && error && error.code == FIRAuthErrorCodeSecondFactorRequired) { - FIRMultiFactorResolver *resolver = error.userInfo[FIRAuthErrorUserInfoMultiFactorResolverKey]; - NSMutableString *displayNameString = [NSMutableString string]; - for (FIRMultiFactorInfo *tmpFactorInfo in resolver.hints) { - [displayNameString appendString:tmpFactorInfo.displayName]; - [displayNameString appendString:@" "]; - } - [self showTextInputPromptWithMessage:[NSString stringWithFormat:@"Select factor to sign in\n%@", displayNameString] - completionBlock:^(BOOL userPressedOK, NSString *_Nullable displayName) { - FIRPhoneMultiFactorInfo* selectedHint; - for (FIRMultiFactorInfo *tmpFactorInfo in resolver.hints) { - if ([displayName isEqualToString:tmpFactorInfo.displayName]) { - selectedHint = (FIRPhoneMultiFactorInfo *)tmpFactorInfo; - } - } - [FIRPhoneAuthProvider.provider - verifyPhoneNumberWithMultiFactorInfo:selectedHint - UIDelegate:nil - multiFactorSession:resolver.session - completion:^(NSString * _Nullable verificationID, NSError * _Nullable error) { - if (error) { - [self showMessagePrompt:error.localizedDescription]; - } else { - [self showTextInputPromptWithMessage:[NSString stringWithFormat:@"Verification code for %@", selectedHint.displayName] - completionBlock:^(BOOL userPressedOK, NSString *_Nullable verificationCode) { - FIRPhoneAuthCredential *credential = - [[FIRPhoneAuthProvider provider] credentialWithVerificationID:verificationID - verificationCode:verificationCode]; - FIRMultiFactorAssertion *assertion = [FIRPhoneMultiFactorGenerator assertionWithCredential:credential]; - [resolver resolveSignInWithAssertion:assertion completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) { - if (error) { - [self showMessagePrompt:error.localizedDescription]; - } else { - NSLog(@"Multi factor finanlize sign in succeeded."); - } - }]; - }]; - } - }]; - }]; - } - else if (error) { - // [START_EXCLUDE] - [self showMessagePrompt:error.localizedDescription]; - // [END_EXCLUDE] - return; - } - // User successfully signed in. Get user data from the FIRUser object - if (authResult == nil) { return; } - FIRUser *user = authResult.user; - // [START_EXCLUDE] - }]; - // [END_EXCLUDE] - }]; - // [END signin_credential] - } - }]; -} - -- (void)showAuthPicker: (NSArray*) providers { - UIAlertController *picker = - [UIAlertController alertControllerWithTitle:@"Select Provider" - message:nil - preferredStyle:UIAlertControllerStyleAlert]; - - for (NSNumber *provider in providers) { - UIAlertAction *action; - switch (provider.unsignedIntegerValue) { - case AuthEmail: - { - action = [UIAlertAction actionWithTitle:@"Email" - style:UIAlertActionStyleDefault - handler:^(UIAlertAction * _Nonnull action) { - [self performSegueWithIdentifier:@"email" sender:nil]; - }]; - } - break; - case AuthEmailMFA: - { - action = [UIAlertAction actionWithTitle:@"Email with MFA" - style:UIAlertActionStyleDefault - handler:^(UIAlertAction * _Nonnull action) { - isMFAEnabled = YES; - [self performSegueWithIdentifier:@"email" sender:nil]; - }]; - } - break; - case AuthPasswordless: - { - action = [UIAlertAction actionWithTitle:@"Passwordless" - style:UIAlertActionStyleDefault - handler:^(UIAlertAction * _Nonnull action) { - [self performSegueWithIdentifier:@"passwordless" sender:nil]; - }]; - } - break; - case AuthCustom: - { - action = [UIAlertAction actionWithTitle:@"Custom" - style:UIAlertActionStyleDefault - handler:^(UIAlertAction * _Nonnull action) { - [self performSegueWithIdentifier:@"customToken" sender:nil]; - }]; - } - break; - case AuthApple: - { - if (@available(iOS 13, *)) { - action = [UIAlertAction actionWithTitle:@"Apple" - style:UIAlertActionStyleDefault - handler:^(UIAlertAction * _Nonnull action) { - [self startSignInWithAppleFlow]; - }]; - } else { - continue; - } - } - break; - case AuthTwitter: - { - action = [UIAlertAction actionWithTitle:@"Twitter" - style:UIAlertActionStyleDefault - handler:^(UIAlertAction * _Nonnull action) { - // [START firebase_auth_twitter] - [self.twitterProvider getCredentialWithUIDelegate:nil - completion:^(FIRAuthCredential *_Nullable credential, NSError *_Nullable error) { - [self showSpinner:^{ - if (error) { - [self hideSpinner:^{ - [self showMessagePrompt:error.localizedDescription]; - return; - }]; - } - if (credential) { - [[FIRAuth auth] signInWithCredential:credential - completion:^(FIRAuthDataResult *_Nullable authResult, - NSError *_Nullable error) { - [self hideSpinner:^{ - if (error) { - [self showMessagePrompt:error.localizedDescription]; - return; - } - }]; - }]; - } - }]; - }]; - // [END firebase_auth_twitter] - }]; - } - break; - case AuthGitHub: - { - action = [UIAlertAction actionWithTitle:@"GitHub" - style:UIAlertActionStyleDefault - handler:^(UIAlertAction * _Nonnull action) { - // [START firebase_auth_github] - [self.gitHubProvider getCredentialWithUIDelegate:nil - completion:^(FIRAuthCredential *_Nullable credential, NSError *_Nullable error) { - [self showSpinner:^{ - if (error) { - [self hideSpinner:^{ - [self showMessagePrompt:error.localizedDescription]; - return; - }]; - } - if (credential) { - [[FIRAuth auth] signInWithCredential:credential - completion:^(FIRAuthDataResult *_Nullable authResult, - NSError *_Nullable error) { - [self hideSpinner:^{ - if (error) { - [self showMessagePrompt:error.localizedDescription]; - return; - } - }]; - }]; - } - }]; - }]; - // [END firebase_auth_github] - }]; - } - break; - case AuthFacebook: { - action = [UIAlertAction actionWithTitle:@"Facebook" - style:UIAlertActionStyleDefault - handler:^(UIAlertAction * _Nonnull action) { - FBSDKLoginManager *loginManager = [[FBSDKLoginManager alloc] init]; - [loginManager logInWithPermissions:@[ @"public_profile", @"email" ] - fromViewController:self - handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) { - if (error) { - [self showMessagePrompt:error.localizedDescription]; - } else if (result.isCancelled) { - NSLog(@"FBLogin cancelled"); - } else { - // [START headless_facebook_auth] - FIRAuthCredential *credential = [FIRFacebookAuthProvider - credentialWithAccessToken:[FBSDKAccessToken currentAccessToken].tokenString]; - // [END headless_facebook_auth] - [self firebaseLoginWithCredential:credential]; - } - }]; - }]; - } - break; - case AuthGoogle: { - action = [UIAlertAction actionWithTitle:@"Google" - style:UIAlertActionStyleDefault - handler:^(UIAlertAction * _Nonnull action) { - [self startSignInWithGoogleFlow]; - }]; - } - break; - case AuthPhone: { - action = [UIAlertAction actionWithTitle:@"Phone" - style:UIAlertActionStyleDefault - handler:^(UIAlertAction * _Nonnull action) { - [self showTextInputPromptWithMessage:@"Phone Number:" - completionBlock:^(BOOL userPressedOK, NSString *_Nullable userInput) { - if (!userPressedOK || !userInput.length) { - return; - } - - [self showSpinner:^{ - // [START phone_auth] - [[FIRPhoneAuthProvider provider] verifyPhoneNumber:userInput - UIDelegate:nil - completion:^(NSString * _Nullable verificationID, NSError * _Nullable error) { - // [START_EXCLUDE silent] - [self hideSpinner:^{ - // [END_EXCLUDE] - if (error) { - [self showMessagePrompt:error.localizedDescription]; - return; - } - // Sign in using the verificationID and the code sent to the user - // [START_EXCLUDE] - [self showTextInputPromptWithMessage:@"Verification Code:" - completionBlock:^(BOOL userPressedOK, NSString *_Nullable userInput) { - if (!userPressedOK || !userInput.length) { - return; - } - - // [START get_phone_cred] - FIRAuthCredential *credential = [[FIRPhoneAuthProvider provider] - credentialWithVerificationID:verificationID - verificationCode:userInput]; - // [END get_phone_cred] - [self firebaseLoginWithCredential:credential]; - }]; - }]; - // [END_EXCLUDE] - }]; - // [END phone_auth] - }]; - }]; - }]; - } - break; - case AuthAnonymous: { - action = [UIAlertAction actionWithTitle:@"Anonymous" - style:UIAlertActionStyleDefault - handler:^(UIAlertAction * _Nonnull action) { - [self showSpinner:^{ - // [START firebase_auth_anonymous] - [[FIRAuth auth] signInAnonymouslyWithCompletion:^(FIRAuthDataResult * _Nullable authResult, - NSError * _Nullable error) { - // [START_EXCLUDE] - [self hideSpinner:^{ - if (error) { - [self showMessagePrompt:error.localizedDescription]; - return; - } - }]; - // [END_EXCLUDE] - }]; - // [END firebase_auth_anonymous] - }]; - }]; - } - break; - case AuthGameCenter: { - action = [UIAlertAction actionWithTitle:@"Game Center" - style:UIAlertActionStyleDefault - handler:^(UIAlertAction * _Nonnull action) { - // [START firebase_auth_gamecenter] - [FIRGameCenterAuthProvider - getCredentialWithCompletion:^(FIRAuthCredential * _Nullable credential, - NSError * _Nullable error) { - [self showSpinner:^{ - if (error) { - [self hideSpinner:^{ - [self showMessagePrompt:error.localizedDescription]; - return; - }]; - } - if (credential) { - [[FIRAuth auth] signInWithCredential:credential - completion:^(FIRAuthDataResult * _Nullable authResult, - NSError * _Nullable error) { - [self hideSpinner:^{ - if (error) { - [self showMessagePrompt:error.localizedDescription]; - return; - } - }]; - }]; - } - }]; - }]; - // [END firebase_auth_gamecenter] - }]; - }; - break; - case AuthMicrosoft: { - action = [UIAlertAction actionWithTitle:@"Microsoft" - style:UIAlertActionStyleDefault - handler:^(UIAlertAction * _Nonnull action) { - // [START firebase_auth_microsoft] - [self.microsoftProvider getCredentialWithUIDelegate:nil - completion:^(FIRAuthCredential *_Nullable credential, NSError *_Nullable error) { - [self showSpinner:^{ - if (error) { - [self hideSpinner:^{ - [self showMessagePrompt:error.localizedDescription]; - return; - }]; - } - if (credential) { - [[FIRAuth auth] signInWithCredential:credential - completion:^(FIRAuthDataResult *_Nullable authResult, - NSError *_Nullable error) { - [self hideSpinner:^{ - if (error) { - [self showMessagePrompt:error.localizedDescription]; - return; - } - }]; - }]; - } - }]; - }]; - // [END firebase_auth_microsoft] - }]; - } - break; - } - - [picker addAction:action]; - } - - - UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"Cancel" - style:UIAlertActionStyleCancel - handler:nil]; - [picker addAction:cancel]; - - [self presentViewController:picker animated:YES completion:nil]; -} - -- (IBAction)didTapSignIn:(id)sender { - [self showAuthPicker:@[@(AuthEmail), - @(AuthEmailMFA), - @(AuthAnonymous), - @(AuthApple), - @(AuthGoogle), - @(AuthFacebook), - @(AuthTwitter), - @(AuthGitHub), - @(AuthPhone), - @(AuthCustom), - @(AuthPasswordless), - @(AuthGameCenter), - @(AuthMicrosoft)]]; -} - -- (IBAction)didTapLink:(id)sender { - NSMutableArray *providers = [@[@(AuthGoogle), - @(AuthFacebook), - @(AuthTwitter), - @(AuthPhone)] mutableCopy]; - - // Remove any existing providers. Note that this is not a complete list of - // providers, so always check the documentation for a complete reference: - // https://firebase.google.com/docs/auth - for (id userInfo in [FIRAuth auth].currentUser.providerData) { - if ([userInfo.providerID isEqualToString:FIRFacebookAuthProviderID]) { - [providers removeObject:@(AuthFacebook)]; - } else if ([userInfo.providerID isEqualToString:FIRGoogleAuthProviderID]) { - [providers removeObject:@(AuthGoogle)]; - } else if ([userInfo.providerID isEqualToString:FIRTwitterAuthProviderID]) { - [providers removeObject:@(AuthTwitter)]; - } else if ([userInfo.providerID isEqualToString:FIRPhoneAuthProviderID]) { - [providers removeObject:@(AuthPhone)]; - } - } - [self showAuthPicker:providers]; -} - -- (IBAction)didTapSignOut:(id)sender { - // [START signout] - NSError *signOutError; - BOOL status = [[FIRAuth auth] signOut:&signOutError]; - if (!status) { - NSLog(@"Error signing out: %@", signOutError); - return; - } - // [END signout] -} - -- (void)authenticateGameCenterLocalPlayer { - __weak GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer]; - localPlayer.authenticateHandler = ^(UIViewController *gcAuthViewController, - NSError *error) { - if (gcAuthViewController != nil) { - // Pause any activities that require user interaction, then present the - // gcAuthViewController to the player. - [self presentViewController:gcAuthViewController animated:YES completion:nil]; - } else if (localPlayer.isAuthenticated) { - // Local player is logged in to Game Center. - } else { - // Error - if (error) { - [self showMessagePrompt:error.localizedDescription]; - return; - } - } - }; -} - -- (void)viewWillAppear:(BOOL)animated { - [super viewWillAppear:animated]; - // [START auth_listener] - self.handle = [[FIRAuth auth] - addAuthStateDidChangeListener:^(FIRAuth *_Nonnull auth, FIRUser *_Nullable user) { - // [START_EXCLUDE] - [self setTitleDisplay:user]; - [self.tableView reloadData]; - // [END_EXCLUDE] - }]; - // [END auth_listener] - - self.microsoftProvider = [FIROAuthProvider providerWithProviderID:@"microsoft.com"]; - self.twitterProvider = [FIROAuthProvider providerWithProviderID:@"twitter.com"]; - self.gitHubProvider = [FIROAuthProvider providerWithProviderID:@"github.com"]; - - // Authenticate Game Center Local Player - // Uncomment to sign in with Game Center - // [self authenticateGameCenterLocalPlayer]; -} - -- (void)setTitleDisplay: (FIRUser *)user { - if (user.displayName) { - self.navigationItem.title = [NSString stringWithFormat:@"Welcome %@", user.displayName]; - } else { - self.navigationItem.title = @"Authentication Example"; - } -} - -- (void)viewWillDisappear:(BOOL)animated { - [super viewWillDisappear:animated]; - // [START remove_auth_listener] - [[FIRAuth auth] removeAuthStateDidChangeListener:_handle]; - // [END remove_auth_listener] -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - if (section == kSectionSignIn) { - return 1; - } else if (section == kSectionUser || section == kSectionToken || section == kSectionMultiFactor) { - if ([FIRAuth auth].currentUser) { - return 1; - } else { - return 0; - } - } else if (section == kSectionProviders) { - return [[FIRAuth auth].currentUser.providerData count]; - } - NSAssert(NO, @"Unexpected section"); - return 0; -} - -- (UITableViewCell *)tableView:(UITableView *)tableView - cellForRowAtIndexPath:(NSIndexPath *)indexPath { - UITableViewCell *cell; - if (indexPath.section == kSectionSignIn) { - // [START current_user] - if ([FIRAuth auth].currentUser) { - // User is signed in. - // [START_EXCLUDE] - cell = [tableView dequeueReusableCellWithIdentifier:@"SignOut"]; - // [END_EXCLUDE] - } else { - // No user is signed in. - // [START_EXCLUDE] - cell = [tableView dequeueReusableCellWithIdentifier:@"SignIn"]; - // [END_EXCLUDE] - } - // [END current_user] - } else if (indexPath.section == kSectionUser) { - cell = [tableView dequeueReusableCellWithIdentifier:@"Profile"]; - // [START get_user_profile] - FIRUser *user = [FIRAuth auth].currentUser; - // [END get_user_profile] - // [START user_profile] - if (user) { - // The user's ID, unique to the Firebase project. - // Do NOT use this value to authenticate with your backend server, - // if you have one. Use getTokenWithCompletion:completion: instead. - NSString *email = user.email; - NSString *uid = user.uid; - NSMutableString *multiFactorString = [NSMutableString stringWithFormat:@"MultiFactor: "]; - for (FIRMultiFactorInfo *info in user.multiFactor.enrolledFactors) { - [multiFactorString appendString:info.displayName]; - [multiFactorString appendString:@" "]; - } - NSURL *photoURL = user.photoURL; - // [START_EXCLUDE] - UILabel *emailLabel = [(UILabel *)cell viewWithTag:1]; - UILabel *userIDLabel = [(UILabel *)cell viewWithTag:2]; - UIImageView *profileImageView = [(UIImageView *)cell viewWithTag:3]; - UILabel *multiFactorLabel = [(UILabel *)cell viewWithTag:4]; - emailLabel.text = email; - userIDLabel.text = uid; - multiFactorLabel.text = multiFactorString; - if (isMFAEnabled) { - multiFactorLabel.hidden = NO; - } else { - multiFactorLabel.hidden = YES; - } - - static NSURL *lastPhotoURL = nil; - lastPhotoURL = photoURL; // to prevent earlier image overwrites later one. - if (photoURL) { - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^() { - UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:photoURL]]; - dispatch_async(dispatch_get_main_queue(), ^() { - if (photoURL == lastPhotoURL) { - profileImageView.image = image; - } - }); - }); - } else { - profileImageView.image = [UIImage imageNamed:@"ic_account_circle"]; - } - // [END_EXCLUDE] - } - // [END user_profile] - } else if (indexPath.section == kSectionProviders) { - cell = [tableView dequeueReusableCellWithIdentifier:@"Provider"]; - // [START provider_data] - id userInfo = [FIRAuth auth].currentUser.providerData[indexPath.row]; - cell.textLabel.text = [userInfo providerID]; - // Provider-specific UID - cell.detailTextLabel.text = [userInfo uid]; - // [END provider_data] - } else if (indexPath.section == kSectionToken) { - cell = [tableView dequeueReusableCellWithIdentifier:@"Token"]; - UIButton *requestEmailButton = [(UIButton *)cell viewWithTag:4]; - requestEmailButton.enabled = [FIRAuth auth].currentUser.email ? YES : NO; - } else if (indexPath.section == kSectionMultiFactor) { - cell = [tableView dequeueReusableCellWithIdentifier:@"MultiFactor"]; - } else { - [NSException raise:NSInternalInconsistencyException format:@"Unexpected state"]; - } - return cell; -} - -- (NSString *)tableView:(UITableView *)tableView - titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath { - return @"Unlink"; -} - -- (UITableViewCellEditingStyle)tableView:(UITableView *)aTableView - editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath { - if (indexPath.section == kSectionProviders) { - return UITableViewCellEditingStyleDelete; - } - return UITableViewCellEditingStyleNone; -} - -// Swipe to delete. -- (void)tableView:(UITableView *)tableView - commitEditingStyle:(UITableViewCellEditingStyle)editingStyle - forRowAtIndexPath:(NSIndexPath *)indexPath { - if (editingStyle == UITableViewCellEditingStyleDelete) { - NSString *providerID = [[FIRAuth auth].currentUser.providerData[indexPath.row] providerID]; - [self showSpinner:^{ - // [START unlink_provider] - [[FIRAuth auth].currentUser unlinkFromProvider:providerID - completion:^(FIRUser *_Nullable user, NSError *_Nullable error) { - // [START_EXCLUDE] - [self hideSpinner:^{ - if (error) { - [self showMessagePrompt:error.localizedDescription]; - return; - } - [self.tableView reloadData]; - }]; - // [END_EXCLUDE] - }]; - // [END unlink_provider] - }]; - } -} - -- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { - if (indexPath.section == kSectionUser) { - return 200; - } - return 44; -} -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { - if (isMFAEnabled) { - return 5; - } else { - return 4; - } -} - -- (IBAction)didMultiFactorEnroll:(id)sender { - FIRUser *user = FIRAuth.auth.currentUser; - if (!user) { - NSLog(@"Please sign in first."); - } else { - [self showTextInputPromptWithMessage:@"Phone Number" - completionBlock:^(BOOL userPressedOK, NSString *_Nullable phoneNumber) { - [user.multiFactor - getSessionWithCompletion:^(FIRMultiFactorSession *_Nullable session, NSError *_Nullable error) { - [FIRPhoneAuthProvider.provider verifyPhoneNumber:phoneNumber - UIDelegate:nil - multiFactorSession:session - completion:^(NSString * _Nullable verificationID, - NSError * _Nullable error) { - if (error) { - [self showMessagePrompt:error.localizedDescription]; - } else { - [self showTextInputPromptWithMessage:@"Verification code" - completionBlock:^(BOOL userPressedOK, - NSString *_Nullable verificationCode) { - FIRPhoneAuthCredential *credential = - [[FIRPhoneAuthProvider provider] credentialWithVerificationID:verificationID - verificationCode:verificationCode]; - FIRMultiFactorAssertion *assertion = - [FIRPhoneMultiFactorGenerator assertionWithCredential:credential]; - [self showTextInputPromptWithMessage:@"Display name" - completionBlock:^(BOOL userPressedOK, - NSString *_Nullable displayName) { - [user.multiFactor enrollWithAssertion:assertion - displayName:displayName - completion:^(NSError *_Nullable error) { - if (error) { - [self showMessagePrompt:error.localizedDescription]; - } else { - NSLog(@"Multi factor finanlize enroll succeeded."); - [self showTypicalUIForUserUpdateResultsWithTitle:@"Multi Factor" error:error]; - } - }]; - }]; - }]; - } - }]; - }]; - }]; - } -} - -- (IBAction)didMultiFactorUnenroll:(id)sender { - NSMutableString *displayNameString = [NSMutableString string]; - for (FIRMultiFactorInfo *tmpFactorInfo in FIRAuth.auth.currentUser.multiFactor.enrolledFactors) { - [displayNameString appendString:tmpFactorInfo.displayName]; - [displayNameString appendString:@" "]; - } - [self showTextInputPromptWithMessage:[NSString stringWithFormat:@"Multifactor Unenroll\n%@", displayNameString] - completionBlock:^(BOOL userPressedOK, NSString *_Nullable displayName) { - FIRMultiFactorInfo *factorInfo; - for (FIRMultiFactorInfo *tmpFactorInfo in FIRAuth.auth.currentUser.multiFactor.enrolledFactors) { - if ([displayName isEqualToString:tmpFactorInfo.displayName]) { - factorInfo = tmpFactorInfo; - } - } - [FIRAuth.auth.currentUser.multiFactor unenrollWithInfo:factorInfo - completion:^(NSError * _Nullable error) { - if (error) { - [self showMessagePrompt:error.localizedDescription]; - } else { - NSLog(@"Multi factor finanlize unenroll succeeded."); - [self showTypicalUIForUserUpdateResultsWithTitle:@"Multi Factor" error:error]; - } - }]; - }]; -} - -- (IBAction)didTokenRefresh:(id)sender { - FIRAuthTokenCallback action = ^(NSString *_Nullable token, NSError *_Nullable error) { - UIAlertAction *okAction = [UIAlertAction actionWithTitle:kOKButtonText - style:UIAlertActionStyleDefault - handler:^(UIAlertAction *action) { - NSLog(kOKButtonText); - }]; - if (error) { - UIAlertController *alertController = - [UIAlertController alertControllerWithTitle:kTokenRefreshErrorAlertTitle - message:error.localizedDescription - preferredStyle:UIAlertControllerStyleAlert]; - [alertController addAction:okAction]; - [self presentViewController:alertController animated:YES completion:nil]; - return; - } - - // Log token refresh event to Analytics. - [FIRAnalytics logEventWithName:@"tokenrefresh" parameters:nil]; - - UIAlertController *alertController = - [UIAlertController alertControllerWithTitle:kTokenRefreshedAlertTitle - message:token - preferredStyle:UIAlertControllerStyleAlert]; - [alertController addAction:okAction]; - [self presentViewController:alertController animated:YES completion:nil]; - }; - // [START token_refresh] - [[FIRAuth auth].currentUser getIDTokenForcingRefresh:YES completion:action]; - // [END token_refresh] -} - - -/** @fn setDisplayName - @brief Changes the display name of the current user. - */ -- (IBAction)didSetDisplayName:(id)sender { - [self showTextInputPromptWithMessage:@"Display Name:" - completionBlock:^(BOOL userPressedOK, NSString *_Nullable userInput) { - if (!userPressedOK || !userInput.length) { - return; - } - - [self showSpinner:^{ - // [START profile_change] - FIRUserProfileChangeRequest *changeRequest = [[FIRAuth auth].currentUser profileChangeRequest]; - changeRequest.displayName = userInput; - [changeRequest commitChangesWithCompletion:^(NSError *_Nullable error) { - // [START_EXCLUDE] - [self hideSpinner:^{ - [self showTypicalUIForUserUpdateResultsWithTitle:kSetDisplayNameTitle error:error]; - [self setTitleDisplay:[FIRAuth auth].currentUser]; - }]; - // [END_EXCLUDE] - }]; - // [END profile_change] - }]; - }]; -} - -/** @fn requestVerifyEmail - @brief Requests a "verify email" email be sent. - */ -- (IBAction)didRequestVerifyEmail:(id)sender { - [self showSpinner:^{ - // [START send_verification_email] - [[FIRAuth auth].currentUser sendEmailVerificationWithCompletion:^(NSError *_Nullable error) { - // [START_EXCLUDE] - [self hideSpinner:^{ - if (error) { - [self showMessagePrompt:error.localizedDescription]; - return; - } - - [self showMessagePrompt:@"Sent"]; - }]; - // [END_EXCLUDE] - }]; - // [END send_verification_email] - }]; -} - -/** @fn changeEmail - @brief Changes the email address of the current user. - */ -- (IBAction)didChangeEmail:(id)sender { - [self showTextInputPromptWithMessage:@"Email Address:" - completionBlock:^(BOOL userPressedOK, NSString *_Nullable userInput) { - if (!userPressedOK || !userInput.length) { - return; - } - - [self showSpinner:^{ - // [START change_email] - [[FIRAuth auth].currentUser updateEmail:userInput completion:^(NSError *_Nullable error) { - // [START_EXCLUDE] - [self hideSpinner:^{ - [self showTypicalUIForUserUpdateResultsWithTitle:kChangeEmailText error:error]; - }]; - // [END_EXCLUDE] - }]; - // [END change_email] - }]; - }]; -} - -/** @fn changePassword - @brief Changes the password of the current user. - */ -- (IBAction)didChangePassword:(id)sender { - [self showTextInputPromptWithMessage:@"New Password:" - completionBlock:^(BOOL userPressedOK, NSString *_Nullable userInput) { - if (!userPressedOK || !userInput.length) { - return; - } - - [self showSpinner:^{ - // [START change_password] - [[FIRAuth auth].currentUser updatePassword:userInput completion:^(NSError *_Nullable error) { - // [START_EXCLUDE] - [self hideSpinner:^{ - [self showTypicalUIForUserUpdateResultsWithTitle:kChangePasswordText error:error]; - }]; - // [END_EXCLUDE] - }]; - // [END change_password] - }]; - }]; -} - -/** @fn updatePhoneNumber - @brief Updates the phone number of the current user. - */ -- (IBAction)didUpdatePhoneNumber:(id)sender { - [self showTextInputPromptWithMessage:@"New Phone Number:" - completionBlock:^(BOOL userPressedOK, NSString *_Nullable userInput) { - if (!userPressedOK || !userInput.length) { - return; - } - - [self showSpinner:^{ - // [START update_phone] - [[FIRPhoneAuthProvider provider] verifyPhoneNumber:userInput - UIDelegate:nil - completion:^(NSString * _Nullable verificationID, - NSError * _Nullable error) { - // [START_EXCLUDE] - [self hideSpinner:^{ - if (error) { - [self showMessagePrompt:error.localizedDescription]; - return; - } - [self showTextInputPromptWithMessage:@"Verification Code:" - completionBlock:^(BOOL userPressedOK, NSString *_Nullable userInput) { - if (!userPressedOK || !userInput.length) { - return; - } - - [self showSpinner:^{ - // [END_EXCLUDE] - FIRPhoneAuthCredential *credential = [[FIRPhoneAuthProvider provider] - credentialWithVerificationID:verificationID - verificationCode:userInput]; - [[FIRAuth auth].currentUser updatePhoneNumberCredential:credential - completion:^(NSError * _Nullable error) { - // [END update_phone] - [self hideSpinner:^{ - [self showTypicalUIForUserUpdateResultsWithTitle:kUpdatePhoneNumberText - error:error]; - }]; - }]; - }]; - }]; - }]; - }]; - }]; - }]; -} - -/** @fn showTypicalUIForUserUpdateResultsWithTitle:error: - @brief Shows a @c UIAlertView if error is non-nil with the localized description of the error. - @param resultsTitle The title of the @c UIAlertView - @param error The error details to display if non-nil. - */ -- (void)showTypicalUIForUserUpdateResultsWithTitle:(NSString *)resultsTitle error:(NSError *)error { - if (error) { - NSString *message = [NSString stringWithFormat:@"%@ (%ld)\n%@", error.domain, (long)error.code, - error.localizedDescription]; - if ([UIAlertController class]) { - UIAlertAction *okAction = [UIAlertAction actionWithTitle:kOKButtonText - style:UIAlertActionStyleDefault - handler:^(UIAlertAction *action) { - NSLog(@"OK"); - }]; - - UIAlertController *alertController = [UIAlertController alertControllerWithTitle:resultsTitle - message:message - preferredStyle:UIAlertControllerStyleAlert]; - [alertController addAction:okAction]; - [self presentViewController:alertController - animated:YES - completion:nil]; - } else { - UIAlertView *alert = [[UIAlertView alloc] initWithTitle:resultsTitle - message:message - delegate:nil - cancelButtonTitle:nil - otherButtonTitles:kOKButtonText, nil]; - [alert show]; - return; - } - } - [self.tableView reloadData]; -} - -@end - -#pragma mark - Sign in with Apple - -@implementation MainViewController (SignInWithApple) - -- (void)startSignInWithAppleFlow { - NSString *nonce = [self randomNonce:32]; - self.currentNonce = nonce; - ASAuthorizationAppleIDProvider *appleIDProvider = [[ASAuthorizationAppleIDProvider alloc] init]; - ASAuthorizationAppleIDRequest *request = [appleIDProvider createRequest]; - request.requestedScopes = @[ASAuthorizationScopeFullName, ASAuthorizationScopeEmail]; - request.nonce = [self stringBySha256HashingString:nonce]; - - ASAuthorizationController *authorizationController = - [[ASAuthorizationController alloc] initWithAuthorizationRequests:@[request]]; - authorizationController.delegate = self; - authorizationController.presentationContextProvider = self; - [authorizationController performRequests]; -} - -// [START random_nonce] -// Adapted from https://auth0.com/docs/api-auth/tutorials/nonce#generate-a-cryptographically-random-nonce -- (NSString *)randomNonce:(NSInteger)length { - NSAssert(length > 0, @"Expected nonce to have positive length"); - NSString *characterSet = @"0123456789ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvwxyz-._"; - NSMutableString *result = [NSMutableString string]; - NSInteger remainingLength = length; - - while (remainingLength > 0) { - NSMutableArray *randoms = [NSMutableArray arrayWithCapacity:16]; - for (NSInteger i = 0; i < 16; i++) { - uint8_t random = 0; - int errorCode = SecRandomCopyBytes(kSecRandomDefault, 1, &random); - NSAssert(errorCode == errSecSuccess, @"Unable to generate nonce: OSStatus %i", errorCode); - - [randoms addObject:@(random)]; - } - - for (NSNumber *random in randoms) { - if (remainingLength == 0) { - break; - } - - if (random.unsignedIntValue < characterSet.length) { - unichar character = [characterSet characterAtIndex:random.unsignedIntValue]; - [result appendFormat:@"%C", character]; - remainingLength--; - } - } - } - - return [result copy]; -} -// [END random_nonce] - -// [START sha_256] -- (NSString *)stringBySha256HashingString:(NSString *)input { - const char *string = [input UTF8String]; - unsigned char result[CC_SHA256_DIGEST_LENGTH]; - CC_SHA256(string, (CC_LONG)strlen(string), result); - - NSMutableString *hashed = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH * 2]; - for (NSInteger i = 0; i < CC_SHA256_DIGEST_LENGTH; i++) { - [hashed appendFormat:@"%02x", result[i]]; - } - return hashed; -} -// [END sha_256] - -- (void)authorizationController:(ASAuthorizationController *)controller - didCompleteWithAuthorization:(ASAuthorization *)authorization API_AVAILABLE(ios(13.0)) { - if ([authorization.credential isKindOfClass:[ASAuthorizationAppleIDCredential class]]) { - ASAuthorizationAppleIDCredential *appleIDCredential = authorization.credential; - NSString *rawNonce = self.currentNonce; - NSAssert(rawNonce != nil, @"Invalid state: A login callback was received, but no login request was sent."); - - if (appleIDCredential.identityToken == nil) { - NSLog(@"Unable to fetch identity token."); - return; - } - - NSString *idToken = [[NSString alloc] initWithData:appleIDCredential.identityToken - encoding:NSUTF8StringEncoding]; - if (idToken == nil) { - NSLog(@"Unable to serialize id token from data: %@", appleIDCredential.identityToken); - } - - // Initialize a Firebase credential. - FIROAuthCredential *credential = [FIROAuthProvider credentialWithProviderID:@"apple.com" - IDToken:idToken - rawNonce:rawNonce]; - - // Sign in with Firebase. - [self firebaseLoginWithCredential:credential]; - } -} - -- (void)authorizationController:(ASAuthorizationController *)controller - didCompleteWithError:(NSError *)error API_AVAILABLE(ios(13.0)) { - NSLog(@"Sign in with Apple errored: %@", error); -} - -- (ASPresentationAnchor)presentationAnchorForAuthorizationController:(ASAuthorizationController *)controller API_AVAILABLE(ios(13.0)) { - return self.view.window; -} - -- (void)setCurrentNonce:(NSString *)currentNonce { - _currentNonce = [currentNonce copy]; -} - -- (NSString *)currentNonce { - return [_currentNonce copy]; -} - -#pragma mark - Sign in with Google - -- (void)startSignInWithGoogleFlow { - // [START headless_google_auth] - GIDConfiguration *config = [[GIDConfiguration alloc] initWithClientID:[FIRApp defaultApp].options.clientID]; - [GIDSignIn.sharedInstance setConfiguration:config]; - - __weak __auto_type weakSelf = self; - [GIDSignIn.sharedInstance signInWithPresentingViewController:self - completion:^(GIDSignInResult * _Nullable result, NSError * _Nullable error) { - __auto_type strongSelf = weakSelf; - if (strongSelf == nil) { return; } - - if (error == nil) { - // [START google_credential] - FIRAuthCredential *credential = - [FIRGoogleAuthProvider credentialWithIDToken:result.user.idToken.tokenString - accessToken:result.user.accessToken.tokenString]; - // [END google_credential] - // [START_EXCLUDE] - [strongSelf firebaseLoginWithCredential:credential]; - // [END_EXCLUDE] - } else { - // [START_EXCLUDE] - [strongSelf showMessagePrompt:error.localizedDescription]; - // [END_EXCLUDE] - } - }]; - - // [END headless_google_auth] -} - -@end diff --git a/authentication/LegacyAuthQuickstart/AuthenticationExample/PasswordlessViewController.h b/authentication/LegacyAuthQuickstart/AuthenticationExample/PasswordlessViewController.h deleted file mode 100644 index 8a42259a8..000000000 --- a/authentication/LegacyAuthQuickstart/AuthenticationExample/PasswordlessViewController.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// Copyright (c) 2018 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -@import UIKit; - -@interface PasswordlessViewController : UIViewController -@end - diff --git a/authentication/LegacyAuthQuickstart/AuthenticationExample/PasswordlessViewController.m b/authentication/LegacyAuthQuickstart/AuthenticationExample/PasswordlessViewController.m deleted file mode 100644 index dbe167c69..000000000 --- a/authentication/LegacyAuthQuickstart/AuthenticationExample/PasswordlessViewController.m +++ /dev/null @@ -1,102 +0,0 @@ -// -// Copyright (c) 2018 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "PasswordlessViewController.h" -#import "UIViewController+Alerts.h" - -@import FirebaseAuth; - -@interface PasswordlessViewController () -@property (weak, nonatomic) IBOutlet UITextField *emailField; -@property (weak, nonatomic) IBOutlet UIButton *signInButton; -@property(strong, nonatomic) NSString *link; -@end - -@implementation PasswordlessViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - _emailField.text = [NSUserDefaults.standardUserDefaults valueForKey:@"Email"]; - self.link = [NSUserDefaults.standardUserDefaults valueForKey:@"Link"]; - if (_link) { - _signInButton.enabled = YES; - } -} - -- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { - [self.view endEditing:YES]; -} - -- (IBAction)didTapSignInWithEmailLink:(id)sender { - NSString *email = _emailField.text; - NSString *link = _link; - [self showSpinner:^{ - // [START signin_emaillink] - [[FIRAuth auth] signInWithEmail:email - link:link - completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) { - // [START_EXCLUDE] - [self hideSpinner:^{ - if (error) { - [self showMessagePrompt:error.localizedDescription]; - return; - } - [self.navigationController popViewControllerAnimated:YES]; - }]; - // [END_EXCLUDE] - }]; - // [END signin_emaillink] - }]; -} - -- (IBAction)didTapSendSignInLink:(id)sender { - NSString *email = _emailField.text; - [self showSpinner:^{ - // [START action_code_settings] - FIRActionCodeSettings *actionCodeSettings = [[FIRActionCodeSettings alloc] init]; - [actionCodeSettings setURL:[NSURL URLWithString:@"https://www.example.com"]]; - // The sign-in operation has to always be completed in the app. - actionCodeSettings.handleCodeInApp = YES; - [actionCodeSettings setIOSBundleID:[[NSBundle mainBundle] bundleIdentifier]]; - [actionCodeSettings setAndroidPackageName:@"com.example.android" - installIfNotAvailable:NO - minimumVersion:@"12"]; - // [END action_code_settings] - // [START send_signin_link] - [[FIRAuth auth] sendSignInLinkToEmail:email - actionCodeSettings:actionCodeSettings - completion:^(NSError *_Nullable error) { - // [START_EXCLUDE] - [self hideSpinner:^{ - // [END_EXCLUDE] - if (error) { - [self showMessagePrompt:error.localizedDescription]; - return; - } - // The link was successfully sent. Inform the user. - // Save the email locally so you don't need to ask the user for it again - // if they open the link on the same device. - [NSUserDefaults.standardUserDefaults setObject:email forKey:@"Email"]; - [self showMessagePrompt:@"Check your email for link"]; - // [START_EXCLUDE] - }]; - // [END_EXCLUDE] - }]; - // [END send_signin_link] - }]; -} - -@end diff --git a/authentication/LegacyAuthQuickstart/AuthenticationExample/UIViewController+Alerts.h b/authentication/LegacyAuthQuickstart/AuthenticationExample/UIViewController+Alerts.h deleted file mode 100644 index c610cddd4..000000000 --- a/authentication/LegacyAuthQuickstart/AuthenticationExample/UIViewController+Alerts.h +++ /dev/null @@ -1,60 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -/*! @typedef AlertPromptCompletionBlock - @brief The type of callback used to report text input prompt results. - */ -typedef void (^AlertPromptCompletionBlock)(BOOL userPressedOK, NSString *_Nullable userInput); - -/*! @class Alerts - @brief Wrapper for @c UIAlertController and @c UIAlertView for backwards compatability with - iOS 6+. - */ -@interface UIViewController (Alerts) - -/*! @fn showMessagePrompt: - @brief Displays an alert with an 'OK' button and a message. - @param message The message to display. - */ -- (void)showMessagePrompt:(NSString *)message; - -/*! @fn showTextInputPromptWithMessage:completionBlock: - @brief Shows a prompt with a text field and 'OK'/'Cancel' buttons. - @param message The message to display. - @param completion A block to call when the user taps 'OK' or 'Cancel'. - */ -- (void)showTextInputPromptWithMessage:(NSString *)message - completionBlock:(AlertPromptCompletionBlock)completion; - -/*! @fn showSpinner - @brief Shows the please wait spinner. - @param completion Called after the spinner has been shown. - */ -- (void)showSpinner:(nullable void (^)(void))completion; - -/*! @fn hideSpinner - @brief Hides the please wait spinner. - @param completion Called after the spinner has been hidden. - */ -- (void)hideSpinner:(nullable void (^)(void))completion; - -@end - -NS_ASSUME_NONNULL_END diff --git a/authentication/LegacyAuthQuickstart/AuthenticationExample/UIViewController+Alerts.m b/authentication/LegacyAuthQuickstart/AuthenticationExample/UIViewController+Alerts.m deleted file mode 100644 index c7e297f5f..000000000 --- a/authentication/LegacyAuthQuickstart/AuthenticationExample/UIViewController+Alerts.m +++ /dev/null @@ -1,159 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "UIViewController+Alerts.h" - -#import - -/*! @var kPleaseWaitAssociatedObjectKey - @brief Key used to identify the "please wait" spinner associated object. - */ -static NSString *const kPleaseWaitAssociatedObjectKey = - @"_UIViewControllerAlertCategory_PleaseWaitScreenAssociatedObject"; - -/*! @var kOK - @brief Text for an 'OK' button. - */ -static NSString *const kOK = @"OK"; - -/*! @var kCancel - @brief Text for an 'Cancel' button. - */ -static NSString *const kCancel = @"Cancel"; - -/*! @class SimpleTextPromptDelegate - @brief A @c UIAlertViewDelegate which allows @c UIAlertView to be used with blocks more easily. - */ -@interface SimpleTextPromptDelegate : NSObject - -/*! @fn init - @brief Please use initWithCompletionHandler. - */ -- (nullable instancetype)init NS_UNAVAILABLE; - -/*! @fn initWithCompletionHandler: - @brief Designated initializer. - @param completionHandler The block to call when the alert view is dismissed. - */ -- (nullable instancetype)initWithCompletionHandler:(AlertPromptCompletionBlock)completionHandler - NS_DESIGNATED_INITIALIZER; - -@end - -@implementation UIViewController (Alerts) - -- (void)showMessagePrompt:(NSString *)message { - UIAlertController *alert = - [UIAlertController alertControllerWithTitle:nil - message:message - preferredStyle:UIAlertControllerStyleAlert]; - UIAlertAction *okAction = - [UIAlertAction actionWithTitle:kOK style:UIAlertActionStyleDefault handler:nil]; - [alert addAction:okAction]; - [self presentViewController:alert animated:YES completion:nil]; -} - -- (void)showTextInputPromptWithMessage:(NSString *)message - completionBlock:(AlertPromptCompletionBlock)completion { - UIAlertController *prompt = - [UIAlertController alertControllerWithTitle:nil - message:message - preferredStyle:UIAlertControllerStyleAlert]; - __weak UIAlertController *weakPrompt = prompt; - UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:kCancel - style:UIAlertActionStyleCancel - handler:^(UIAlertAction *_Nonnull action) { - completion(NO, nil); - }]; - UIAlertAction *okAction = - [UIAlertAction actionWithTitle:kOK - style:UIAlertActionStyleDefault - handler:^(UIAlertAction *_Nonnull action) { - UIAlertController *strongPrompt = weakPrompt; - completion(YES, strongPrompt.textFields[0].text); - }]; - [prompt addTextFieldWithConfigurationHandler:nil]; - [prompt addAction:cancelAction]; - [prompt addAction:okAction]; - [self presentViewController:prompt animated:YES completion:nil]; -} - -- (void)showSpinner:(nullable void (^)(void))completion { - UIAlertController *pleaseWaitAlert = - objc_getAssociatedObject(self, (__bridge const void *)(kPleaseWaitAssociatedObjectKey)); - if (pleaseWaitAlert) { - if (completion) { - completion(); - } - return; - } - pleaseWaitAlert = [UIAlertController alertControllerWithTitle:nil - message:@"Please Wait...\n\n\n\n" - preferredStyle:UIAlertControllerStyleAlert]; - - UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] - initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; - spinner.color = [UIColor blackColor]; - spinner.center = CGPointMake(pleaseWaitAlert.view.bounds.size.width / 2, - pleaseWaitAlert.view.bounds.size.height / 2); - spinner.autoresizingMask = - UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleTopMargin | - UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin; - [spinner startAnimating]; - [pleaseWaitAlert.view addSubview:spinner]; - - objc_setAssociatedObject(self, (__bridge const void *)(kPleaseWaitAssociatedObjectKey), - pleaseWaitAlert, OBJC_ASSOCIATION_RETAIN_NONATOMIC); - [self presentViewController:pleaseWaitAlert animated:YES completion:completion]; -} - -- (void)hideSpinner:(nullable void (^)(void))completion { - UIAlertController *pleaseWaitAlert = - objc_getAssociatedObject(self, (__bridge const void *)(kPleaseWaitAssociatedObjectKey)); - - [pleaseWaitAlert dismissViewControllerAnimated:YES completion:completion]; - - objc_setAssociatedObject(self, (__bridge const void *)(kPleaseWaitAssociatedObjectKey), nil, - OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -@end - -@implementation SimpleTextPromptDelegate { - AlertPromptCompletionBlock _completionHandler; - SimpleTextPromptDelegate *_retainedSelf; -} - -- (instancetype)initWithCompletionHandler:(AlertPromptCompletionBlock)completionHandler { - self = [super init]; - if (self) { - _completionHandler = completionHandler; - _retainedSelf = self; - } - return self; -} - -- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex { - if (buttonIndex == alertView.firstOtherButtonIndex) { - _completionHandler(YES, [alertView textFieldAtIndex:0].text); - } else { - _completionHandler(NO, nil); - } - _completionHandler = nil; - _retainedSelf = nil; -} - -@end diff --git a/authentication/LegacyAuthQuickstart/AuthenticationExample/main.m b/authentication/LegacyAuthQuickstart/AuthenticationExample/main.m deleted file mode 100644 index d4878306b..000000000 --- a/authentication/LegacyAuthQuickstart/AuthenticationExample/main.m +++ /dev/null @@ -1,24 +0,0 @@ -// -// Copyright (c) 2015 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import -#import "AppDelegate.h" - -int main(int argc, char* argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/authentication/LegacyAuthQuickstart/AuthenticationExampleSwift/AppDelegate.swift b/authentication/LegacyAuthQuickstart/AuthenticationExampleSwift/AppDelegate.swift deleted file mode 100644 index ec762c4bf..000000000 --- a/authentication/LegacyAuthQuickstart/AuthenticationExampleSwift/AppDelegate.swift +++ /dev/null @@ -1,104 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import UIKit - -// [START auth_import] -import FirebaseCore -// [END auth_import] - -// [START google_import] -import GoogleSignIn -// [END google_import] -import FBSDKCoreKit - -@UIApplicationMain -// [START signin_delegate] -class AppDelegate: UIResponder, UIApplicationDelegate { - // [END signin_delegate] - - var window: UIWindow? - - func application(_ application: UIApplication, - didFinishLaunchingWithOptions launchOptions: [ - UIApplication.LaunchOptionsKey: Any - ]?) -> Bool { - // [START firebase_configure] - // Use Firebase library to configure APIs - FirebaseApp.configure() - // [END firebase_configure] - - ApplicationDelegate.shared.application(application, - didFinishLaunchingWithOptions: launchOptions) - - return true - } - - // [START new_delegate] - @available(iOS 9.0, *) - func application(_ application: UIApplication, open url: URL, - options: [UIApplication.OpenURLOptionsKey: Any]) - -> Bool { - // [END new_delegate] - return self.application(application, - open: url, - // [START new_options] - sourceApplication: options[UIApplication.OpenURLOptionsKey - .sourceApplication] as? String, - annotation: [:]) - } - - // [END new_options] - - // [START old_delegate] - func application(_ application: UIApplication, open url: URL, sourceApplication: String?, - annotation: Any) -> Bool { - // [END old_delegate] - if handlePasswordlessSignIn(withURL: url) { - return true - } - if GIDSignIn.sharedInstance.handle(url) { - return true - } - return ApplicationDelegate.shared.application(application, - open: url, - // [START old_options] - sourceApplication: sourceApplication, - annotation: annotation) - } - - // [END old_options] - - func application(_ application: UIApplication, continue userActivity: NSUserActivity, - restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool { - return userActivity.webpageURL.flatMap(handlePasswordlessSignIn)! - } - - func handlePasswordlessSignIn(withURL url: URL) -> Bool { - let link = url.absoluteString - // [START is_signin_link] - if Auth.auth().isSignIn(withEmailLink: link) { - // [END is_signin_link] - UserDefaults.standard.set(link, forKey: "Link") - (window?.rootViewController as? UINavigationController)? - .popToRootViewController(animated: false) - window?.rootViewController?.children[0] - .performSegue(withIdentifier: "passwordless", sender: nil) - return true - } - return false - } -} diff --git a/authentication/LegacyAuthQuickstart/AuthenticationExampleSwift/AuthenticationExample.entitlements b/authentication/LegacyAuthQuickstart/AuthenticationExampleSwift/AuthenticationExample.entitlements deleted file mode 100644 index a8aefa8f0..000000000 --- a/authentication/LegacyAuthQuickstart/AuthenticationExampleSwift/AuthenticationExample.entitlements +++ /dev/null @@ -1,10 +0,0 @@ - - - - - keychain-access-groups - - $(AppIdentifierPrefix)com.google.firebase.quickstart.AuthenticationExample - - - diff --git a/authentication/LegacyAuthQuickstart/AuthenticationExampleSwift/CustomTokenViewController.swift b/authentication/LegacyAuthQuickstart/AuthenticationExampleSwift/CustomTokenViewController.swift deleted file mode 100644 index fc7fccfc0..000000000 --- a/authentication/LegacyAuthQuickstart/AuthenticationExampleSwift/CustomTokenViewController.swift +++ /dev/null @@ -1,49 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import UIKit - -// [START auth_view_import] -import FirebaseAuth -// [END auth_view_import] - -@objc(CustomTokenViewController) -class CustomTokenViewController: UIViewController { - @IBOutlet var tokenField: UITextView! - - override func touchesBegan(_ touches: Set, with event: UIEvent?) { - view.endEditing(true) - } - - @IBAction func didTapCustomTokenLogin(_ sender: AnyObject) { - let customToken = tokenField.text - showSpinner { - // [START signinwithcustomtoken] - Auth.auth().signIn(withCustomToken: customToken ?? "") { user, error in - // [START_EXCLUDE] - self.hideSpinner { - if let error = error { - self.showMessagePrompt(error.localizedDescription) - return - } - self.navigationController!.popViewController(animated: true) - } - // [END_EXCLUDE] - } - // [END signinwithcustomtoken] - } - } -} diff --git a/authentication/LegacyAuthQuickstart/AuthenticationExampleSwift/EmailViewController.swift b/authentication/LegacyAuthQuickstart/AuthenticationExampleSwift/EmailViewController.swift deleted file mode 100644 index bdb55d25d..000000000 --- a/authentication/LegacyAuthQuickstart/AuthenticationExampleSwift/EmailViewController.swift +++ /dev/null @@ -1,190 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import UIKit - -import FirebaseAuth - -@objc(EmailViewController) -class EmailViewController: UIViewController { - @IBOutlet var emailField: UITextField! - @IBOutlet var passwordField: UITextField! - - override func touchesBegan(_ touches: Set, with event: UIEvent?) { - view.endEditing(true) - } - - @IBAction func didTapEmailLogin(_ sender: AnyObject) { - guard let email = emailField.text, let password = passwordField.text else { - showMessagePrompt("email/password can't be empty") - return - } - showSpinner { - // [START headless_email_auth] - Auth.auth().signIn(withEmail: email, password: password) { [weak self] authResult, error in - guard let strongSelf = self else { return } - // [START_EXCLUDE] - strongSelf.hideSpinner { - if let error = error { - let authError = error as NSError - if authError.code == AuthErrorCode.secondFactorRequired.rawValue { - // The user is a multi-factor user. Second factor challenge is required. - let resolver = authError - .userInfo[AuthErrorUserInfoMultiFactorResolverKey] as! MultiFactorResolver - var displayNameString = "" - for tmpFactorInfo in resolver.hints { - displayNameString += tmpFactorInfo.displayName ?? "" - displayNameString += " " - } - self!.showTextInputPrompt( - withMessage: "Select factor to sign in\n\(displayNameString)", - completionBlock: { userPressedOK, displayName in - var selectedHint: PhoneMultiFactorInfo? - for tmpFactorInfo in resolver.hints { - if displayName == tmpFactorInfo.displayName { - selectedHint = tmpFactorInfo as? PhoneMultiFactorInfo - } - } - PhoneAuthProvider.provider() - .verifyPhoneNumber(with: selectedHint!, uiDelegate: nil, - multiFactorSession: resolver - .session) { verificationID, error in - if error != nil { - print("Multi factor start sign in failed. Error: \(error.debugDescription)") - } else { - self!.showTextInputPrompt( - withMessage: "Verification code for \(selectedHint?.displayName ?? "")", - completionBlock: { userPressedOK, verificationCode in - let credential: PhoneAuthCredential? = PhoneAuthProvider.provider() - .credential(withVerificationID: verificationID!, - verificationCode: verificationCode!) - let assertion: MultiFactorAssertion? = PhoneMultiFactorGenerator - .assertion(with: credential!) - resolver.resolveSignIn(with: assertion!) { authResult, error in - if error != nil { - print( - "Multi factor finanlize sign in failed. Error: \(error.debugDescription)" - ) - } else { - strongSelf.navigationController?.popViewController(animated: true) - } - } - } - ) - } - } - } - ) - } else { - strongSelf.showMessagePrompt(error.localizedDescription) - return - } - } - strongSelf.navigationController?.popViewController(animated: true) - } - // [END_EXCLUDE] - } - // [END headless_email_auth] - } - } - - /** @fn requestPasswordReset - @brief Requests a "password reset" email be sent. - */ - @IBAction func didRequestPasswordReset(_ sender: AnyObject) { - showTextInputPrompt(withMessage: "Email:") { [weak self] userPressedOK, email in - guard let strongSelf = self, let email = email else { - return - } - strongSelf.showSpinner { - // [START password_reset] - Auth.auth().sendPasswordReset(withEmail: email) { error in - // [START_EXCLUDE] - strongSelf.hideSpinner { - if let error = error { - strongSelf.showMessagePrompt(error.localizedDescription) - return - } - strongSelf.showMessagePrompt("Sent") - } - // [END_EXCLUDE] - } - // [END password_reset] - } - } - } - - /** @fn getProvidersForEmail - @brief Prompts the user for an email address, calls @c FIRAuth.getProvidersForEmail:callback: - and displays the result. - */ - @IBAction func didGetProvidersForEmail(_ sender: AnyObject) { - showTextInputPrompt(withMessage: "Email:") { [weak self] userPressedOK, email in - guard let strongSelf = self else { return } - guard let email = email else { - strongSelf.showMessagePrompt("email can't be empty") - return - } - strongSelf.showSpinner { - // [START get_methods] - Auth.auth().fetchSignInMethods(forEmail: email) { methods, error in - // [START_EXCLUDE] - strongSelf.hideSpinner { - if let error = error { - strongSelf.showMessagePrompt(error.localizedDescription) - return - } - strongSelf.showMessagePrompt(methods!.joined(separator: ", ")) - } - // [END_EXCLUDE] - } - // [END get_methods] - } - } - } - - @IBAction func didCreateAccount(_ sender: AnyObject) { - showTextInputPrompt(withMessage: "Email:") { [weak self] userPressedOK, email in - guard let strongSelf = self else { return } - guard let email = email else { - strongSelf.showMessagePrompt("email can't be empty") - return - } - strongSelf.showTextInputPrompt(withMessage: "Password:") { userPressedOK, password in - guard let password = password else { - strongSelf.showMessagePrompt("password can't be empty") - return - } - strongSelf.showSpinner { - // [START create_user] - Auth.auth().createUser(withEmail: email, password: password) { authResult, error in - // [START_EXCLUDE] - strongSelf.hideSpinner { - guard let user = authResult?.user, error == nil else { - strongSelf.showMessagePrompt(error!.localizedDescription) - return - } - print("\(user.email!) created") - strongSelf.navigationController?.popViewController(animated: true) - } - // [END_EXCLUDE] - } - // [END create_user] - } - } - } - } -} diff --git a/authentication/LegacyAuthQuickstart/AuthenticationExampleSwift/MainViewController.swift b/authentication/LegacyAuthQuickstart/AuthenticationExampleSwift/MainViewController.swift deleted file mode 100644 index 71ab339e6..000000000 --- a/authentication/LegacyAuthQuickstart/AuthenticationExampleSwift/MainViewController.swift +++ /dev/null @@ -1,1121 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import AuthenticationServices -import CryptoKit -import GameKit -import UIKit - -import FirebaseCore -import Security - -// [START usermanagement_view_import] -import FirebaseAuth -// [END usermanagement_view_import] -import GoogleSignIn -import FBSDKCoreKit -import FBSDKLoginKit - -private var isMFAEnabled = false - -@objc(MainViewController) -// [START signin_controller] -class MainViewController: UITableViewController { - // [END signin_controller] - - let kSectionMultiFactor = 4 - let kSectionToken = 3 - let kSectionProviders = 2 - let kSectionUser = 1 - let kSectionSignIn = 0 - - enum AuthProvider { - case authEmail - case authEmailMFA - case authAnonymous - case authApple - case authFacebook - case authGoogle - case authTwitter - case authGitHub - case authPhone - case authCustom - case authPasswordless - case authGameCenter - case authMicrosoft - } - - /*! @var kOKButtonText - @brief The text of the "OK" button for the Sign In result dialogs. - */ - let kOKButtonText = "OK" - - /*! @var kTokenRefreshedAlertTitle - @brief The title of the "Token Refreshed" alert. - */ - let kTokenRefreshedAlertTitle = "Token" - - /*! @var kTokenRefreshErrorAlertTitle - @brief The title of the "Token Refresh error" alert. - */ - let kTokenRefreshErrorAlertTitle = "Get Token Error" - - /** @var kSetDisplayNameTitle - @brief The title of the "Set Display Name" error dialog. - */ - let kSetDisplayNameTitle = "Set Display Name" - - /** @var kUnlinkTitle - @brief The text of the "Unlink from Provider" error Dialog. - */ - let kUnlinkTitle = "Unlink from Provider" - - /** @var kChangeEmailText - @brief The title of the "Change Email" button. - */ - let kChangeEmailText = "Change Email" - - /** @var kChangePasswordText - @brief The title of the "Change Password" button. - */ - let kChangePasswordText = "Change Password" - - /** @var kUpdatePhoneNumberText - @brief The title of the "Update Phone Number" button. - */ - let kUpdatePhoneNumberText = "Update Phone Number" - - /** @var handle - @brief The handler for the auth state listener, to allow cancelling later. - */ - var handle: AuthStateDidChangeListenerHandle? - - /** @var microsoftProvider - @brief The OAuth provider instance for Microsoft. - */ - var microsoftProvider: OAuthProvider? - - /** @var twitterProvider - @brief The OAuth provider instance for Twitter. - */ - var twitterProvider: OAuthProvider? - - /** @var gitHubProvider - @brief The OAuth provider instance for GitHub. - */ - var gitHubProvider: OAuthProvider? - - func showAuthPicker(_ providers: [AuthProvider]) { - let picker = UIAlertController(title: "Select Provider", - message: nil, - preferredStyle: .alert) - for provider in providers { - var action: UIAlertAction - switch provider { - case .authEmail: - action = UIAlertAction(title: "Email", style: .default) { UIAlertAction in - self.performSegue(withIdentifier: "email", sender: nil) - } - case .authEmailMFA: - action = UIAlertAction(title: "Email with MFA", style: .default) { UIAlertAction in - isMFAEnabled = true - self.performSegue(withIdentifier: "email", sender: nil) - } - case .authPasswordless: - action = UIAlertAction(title: "Passwordless", style: .default) { UIAlertAction in - self.performSegue(withIdentifier: "passwordless", sender: nil) - } - case .authCustom: - action = UIAlertAction(title: "Custom", style: .default) { UIAlertAction in - self.performSegue(withIdentifier: "customToken", sender: nil) - } - case .authAnonymous: - action = UIAlertAction(title: "Anonymous", style: .default) { UIAlertAction in - self.showSpinner { - // [START firebase_auth_anonymous] - Auth.auth().signInAnonymously { authResult, error in - // [START_EXCLUDE] - self.hideSpinner { - if let error = error { - self.showMessagePrompt(error.localizedDescription) - return - } - } - // [END_EXCLUDE] - } - // [END firebase_auth_anonymous] - } - } - case .authApple: - if #available(iOS 13, *) { - action = UIAlertAction(title: "Apple", style: .default) { UIAlertAction in - self.startSignInWithAppleFlow() - } - } else { - continue - } - case .authFacebook: - action = UIAlertAction(title: "Facebook", style: .default) { UIAlertAction in - let loginManager = LoginManager() - loginManager.logIn(permissions: ["email"], from: self, handler: { result, error in - if let error = error { - self.showMessagePrompt(error.localizedDescription) - } else if result!.isCancelled { - print("FBLogin cancelled") - } else { - // [START headless_facebook_auth] - let credential = FacebookAuthProvider - .credential(withAccessToken: AccessToken.current!.tokenString) - // [END headless_facebook_auth] - self.firebaseLogin(credential) - } - }) - } - case .authGoogle: - action = UIAlertAction(title: "Google", style: .default) { UIAlertAction in - self.startSignInWithGoogleFlow() - } - case .authTwitter: - action = UIAlertAction(title: "Twitter", style: .default) { UIAlertAction in - // [START firebase_auth_twitter] - self.twitterProvider?.getCredentialWith(_: nil) { credential, error in - self.showSpinner { - if let error = error { - self.hideSpinner { - self.showMessagePrompt(error.localizedDescription) - return - } - } - if let credential = credential { - Auth.auth().signIn(with: credential) { result, error in - self.hideSpinner { - if let error = error { - self.showMessagePrompt(error.localizedDescription) - return - } - } - } - } - } - } - // [END firebase_auth_twitter] - } - case .authGitHub: - action = UIAlertAction(title: "GitHub", style: .default) { UIAlertAction in - // [START firebase_auth_github] - self.gitHubProvider?.getCredentialWith(_: nil) { credential, error in - self.showSpinner { - if let error = error { - self.hideSpinner { - self.showMessagePrompt(error.localizedDescription) - return - } - } - if let credential = credential { - Auth.auth().signIn(with: credential) { result, error in - self.hideSpinner { - if let error = error { - self.showMessagePrompt(error.localizedDescription) - return - } - } - } - } - } - } - // [END firebase_auth_github] - } - case .authPhone: - action = UIAlertAction(title: "Phone", style: .default) { UIAlertAction in - self.showTextInputPrompt(withMessage: "Phone Number:") { userPressedOK, userInput in - if let phoneNumber = userInput { - self.showSpinner { - // [START phone_auth] - PhoneAuthProvider.provider() - .verifyPhoneNumber(phoneNumber, uiDelegate: nil) { verificationID, error in - // [START_EXCLUDE silent] - self.hideSpinner { - // [END_EXCLUDE] - if let error = error { - self.showMessagePrompt(error.localizedDescription) - return - } - // Sign in using the verificationID and the code sent to the user - // [START_EXCLUDE] - guard let verificationID = verificationID else { return } - self - .showTextInputPrompt(withMessage: "Verification Code:") { userPressedOK, verificationCode in - if let verificationCode = verificationCode { - // [START get_phone_cred] - let credential = PhoneAuthProvider.provider().credential( - withVerificationID: verificationID, - verificationCode: verificationCode - ) - // [END get_phone_cred] - self.firebaseLogin(credential) - } else { - self.showMessagePrompt("verification code can't be empty") - } - } - } - // [END_EXCLUDE] - } - // [END phone_auth] - } - } else { - self.showMessagePrompt("phone number can't be empty") - } - } - } - case .authGameCenter: - action = UIAlertAction(title: "Game Center", style: .default) { UIAlertAction in - // [START firebase_auth_gamecenter] - GameCenterAuthProvider.getCredential { credential, error in - self.showSpinner { - if let error = error { - self.hideSpinner { - self.showMessagePrompt(error.localizedDescription) - return - } - } - if let credential = credential { - Auth.auth().signIn(with: credential) { result, error in - self.hideSpinner { - if let error = error { - self.showMessagePrompt(error.localizedDescription) - return - } - } - } - } - } - } - // [END firebase_auth_gamecenter] - } - case .authMicrosoft: - action = UIAlertAction(title: "Microsoft", style: .default) { UIAlertAction in - // [START firebase_auth_microsoft] - self.microsoftProvider?.getCredentialWith(_: nil) { credential, error in - self.showSpinner { - if let error = error { - self.hideSpinner { - self.showMessagePrompt(error.localizedDescription) - return - } - } - if let credential = credential { - Auth.auth().signIn(with: credential) { result, error in - self.hideSpinner { - if let error = error { - self.showMessagePrompt(error.localizedDescription) - return - } - } - } - } - } - } - // [END firebase_auth_microsoft] - } - } - picker.addAction(action) - } - - picker.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil)) - present(picker, animated: true, completion: nil) - } - - @IBAction func didTapSignIn(_ sender: AnyObject) { - showAuthPicker([ - AuthProvider.authEmail, - AuthProvider.authAnonymous, - AuthProvider.authApple, - AuthProvider.authGoogle, - AuthProvider.authFacebook, - AuthProvider.authTwitter, - AuthProvider.authGitHub, - AuthProvider.authPhone, - AuthProvider.authCustom, - AuthProvider.authPasswordless, - AuthProvider.authGameCenter, - AuthProvider.authMicrosoft, - ]) - } - - @IBAction func didTapLink(_ sender: AnyObject) { - var providers = Set([ - AuthProvider.authGoogle, - AuthProvider.authFacebook, - AuthProvider.authTwitter, - AuthProvider.authPhone, - ]) - // Remove any existing providers. Note that this is not a complete list of - // providers, so always check the documentation for a complete reference: - // https://firebase.google.com/docs/auth - let user = Auth.auth().currentUser - for info in (user?.providerData)! { - switch info.providerID { - case TwitterAuthProviderID: - providers.remove(AuthProvider.authTwitter) - case FacebookAuthProviderID: - providers.remove(AuthProvider.authFacebook) - case GoogleAuthProviderID: - providers.remove(AuthProvider.authGoogle) - case PhoneAuthProviderID: - providers.remove(AuthProvider.authPhone) - default: - break - } - } - showAuthPicker(Array(providers)) - } - - func setTitleDisplay(_ user: User?) { - if let name = user?.displayName { - navigationItem.title = "Welcome \(name)" - } else { - navigationItem.title = "Authentication Example" - } - } - - func firebaseLogin(_ credential: AuthCredential) { - showSpinner { - if let user = Auth.auth().currentUser { - // [START link_credential] - user.link(with: credential) { authResult, error in - // [START_EXCLUDE] - self.hideSpinner { - if let error = error { - self.showMessagePrompt(error.localizedDescription) - return - } - self.tableView.reloadData() - } - // [END_EXCLUDE] - } - // [END link_credential] - } else { - // [START signin_credential] - Auth.auth().signIn(with: credential) { authResult, error in - // [START_EXCLUDE silent] - self.hideSpinner { - // [END_EXCLUDE] - if let error = error { - let authError = error as NSError - if isMFAEnabled, authError.code == AuthErrorCode.secondFactorRequired.rawValue { - // The user is a multi-factor user. Second factor challenge is required. - let resolver = authError - .userInfo[AuthErrorUserInfoMultiFactorResolverKey] as! MultiFactorResolver - var displayNameString = "" - for tmpFactorInfo in resolver.hints { - displayNameString += tmpFactorInfo.displayName ?? "" - displayNameString += " " - } - self.showTextInputPrompt( - withMessage: "Select factor to sign in\n\(displayNameString)", - completionBlock: { userPressedOK, displayName in - var selectedHint: PhoneMultiFactorInfo? - for tmpFactorInfo in resolver.hints { - if displayName == tmpFactorInfo.displayName { - selectedHint = tmpFactorInfo as? PhoneMultiFactorInfo - } - } - PhoneAuthProvider.provider() - .verifyPhoneNumber(with: selectedHint!, uiDelegate: nil, - multiFactorSession: resolver - .session) { verificationID, error in - if error != nil { - print( - "Multi factor start sign in failed. Error: \(error.debugDescription)" - ) - } else { - self.showTextInputPrompt( - withMessage: "Verification code for \(selectedHint?.displayName ?? "")", - completionBlock: { userPressedOK, verificationCode in - let credential: PhoneAuthCredential? = PhoneAuthProvider.provider() - .credential(withVerificationID: verificationID!, - verificationCode: verificationCode!) - let assertion: MultiFactorAssertion? = PhoneMultiFactorGenerator - .assertion(with: credential!) - resolver.resolveSignIn(with: assertion!) { authResult, error in - if error != nil { - print( - "Multi factor finanlize sign in failed. Error: \(error.debugDescription)" - ) - } else { - self.navigationController?.popViewController(animated: true) - } - } - } - ) - } - } - } - ) - } else { - self.showMessagePrompt(error.localizedDescription) - return - } - // [START_EXCLUDE] - self.showMessagePrompt(error.localizedDescription) - // [END_EXCLUDE] - return - } - // User is signed in - // [START_EXCLUDE] - // Merge prevUser and currentUser accounts and data - // ... - // [END_EXCLUDE] - // [START_EXCLUDE silent] - } - // [END_EXCLUDE] - } - // [END signin_credential] - } - } - } - - @IBAction func didTapSignOut(_ sender: AnyObject) { - // [START signout] - let firebaseAuth = Auth.auth() - do { - try firebaseAuth.signOut() - } catch let signOutError as NSError { - print("Error signing out: %@", signOutError) - } - // [END signout] - } - - override func viewWillAppear(_ animated: Bool) { - super.viewWillAppear(animated) - // [START auth_listener] - handle = Auth.auth().addStateDidChangeListener { auth, user in - // [START_EXCLUDE] - self.setTitleDisplay(user) - self.tableView.reloadData() - // [END_EXCLUDE] - } - // [END auth_listener] - microsoftProvider = OAuthProvider(providerID: "microsoft.com") - twitterProvider = OAuthProvider(providerID: "twitter.com") - gitHubProvider = OAuthProvider(providerID: "github.com") - // Authenticate Game Center Local Player - // Uncomment to sign in with Game Center - // self.authenticateGameCenterLocalPlayer() - } - - override func viewWillDisappear(_ animated: Bool) { - super.viewWillDisappear(animated) - // [START remove_auth_listener] - Auth.auth().removeStateDidChangeListener(handle!) - // [END remove_auth_listener] - } - - func authenticateGameCenterLocalPlayer() { - let localPlayer = GKLocalPlayer.local - localPlayer.authenticateHandler = { gcAuthViewController, error in - if let gcAuthViewController = gcAuthViewController { - // Pause any activities that require user interaction, then present the - // gcAuthViewController to the player. - self.present(gcAuthViewController, animated: true, completion: nil) - } else if localPlayer.isAuthenticated { - // Local player is logged in to Game Center. - } else { - // Error - if let error = error { - self.showMessagePrompt(error.localizedDescription) - return - } - } - } - } - - override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - switch section { - case kSectionSignIn: - return 1 - case kSectionUser, kSectionToken, kSectionMultiFactor: - if Auth.auth().currentUser != nil { - return 1 - } else { - return 0 - } - case kSectionProviders: - if let user = Auth.auth().currentUser { - return user.providerData.count - } - return 0 - default: - return 0 - } - } - - override func tableView(_ tableView: UITableView, - cellForRowAt indexPath: IndexPath) -> UITableViewCell { - let cell: UITableViewCell? - switch indexPath.section { - case kSectionSignIn: - // [START current_user] - if Auth.auth().currentUser != nil { - // User is signed in. - // [START_EXCLUDE] - cell = tableView.dequeueReusableCell(withIdentifier: "SignOut") - // [END_EXCLUDE] - } else { - // No user is signed in. - // [START_EXCLUDE] - cell = tableView.dequeueReusableCell(withIdentifier: "SignIn") - // [END_EXCLUDE] - } - // [END current_user] - case kSectionUser: - cell = tableView.dequeueReusableCell(withIdentifier: "Profile") - // [START get_user_profile] - let user = Auth.auth().currentUser - // [END get_user_profile] - // [START user_profile] - if let user = user { - // The user's ID, unique to the Firebase project. - // Do NOT use this value to authenticate with your backend server, - // if you have one. Use getTokenWithCompletion:completion: instead. - let uid = user.uid - let email = user.email - let photoURL = user.photoURL - var multiFactorString = "MultiFactor: " - for info in user.multiFactor.enrolledFactors { - multiFactorString += info.displayName ?? "[DispayName]" - multiFactorString += " " - } - // [START_EXCLUDE] - let emailLabel = cell?.viewWithTag(1) as? UILabel - let userIDLabel = cell?.viewWithTag(2) as? UILabel - let profileImageView = cell?.viewWithTag(3) as? UIImageView - let multiFactorLabel = cell?.viewWithTag(4) as? UILabel - emailLabel?.text = email - userIDLabel?.text = uid - multiFactorLabel?.text = multiFactorString - if isMFAEnabled { - multiFactorLabel?.isHidden = false - } else { - multiFactorLabel?.isHidden = true - } - - struct last { - static var photoURL: URL? = nil - } - last.photoURL = photoURL // to prevent earlier image overwrites later one. - if let photoURL = photoURL { - DispatchQueue.global(qos: .default).async { - let data = try? Data(contentsOf: photoURL) - if let data = data { - let image = UIImage(data: data) - DispatchQueue.main.async { - if photoURL == last.photoURL { - profileImageView?.image = image - } - } - } - } - } else { - profileImageView?.image = UIImage(named: "ic_account_circle") - } - // [END_EXCLUDE] - } - // [END user_profile] - case kSectionProviders: - cell = tableView.dequeueReusableCell(withIdentifier: "Provider") - // [START provider_data] - let userInfo = Auth.auth().currentUser?.providerData[indexPath.row] - cell?.textLabel?.text = userInfo?.providerID - // Provider-specific UID - cell?.detailTextLabel?.text = userInfo?.uid - // [END provider_data] - case kSectionToken: - cell = tableView.dequeueReusableCell(withIdentifier: "Token") - let requestEmailButton = cell?.viewWithTag(4) as? UIButton - requestEmailButton?.isEnabled = (Auth.auth().currentUser?.email != nil) ? true : false - case kSectionMultiFactor: - cell = tableView.dequeueReusableCell(withIdentifier: "MultiFactor") - - default: - fatalError("Unknown section in UITableView") - } - return cell! - } - - override func tableView(_ tableView: UITableView, - titleForDeleteConfirmationButtonForRowAt indexPath: IndexPath) - -> String? { - return "Unlink" - } - - override func tableView(_ tableView: UITableView, - editingStyleForRowAt indexPath: IndexPath) -> UITableViewCell - .EditingStyle { - if indexPath.section == kSectionProviders { - return .delete - } - return .none - } - - // Swipe to delete - override func tableView(_ tableView: UITableView, - commit editingStyle: UITableViewCell.EditingStyle, - forRowAt indexPath: IndexPath) { - if editingStyle == .delete { - let providerID = Auth.auth().currentUser?.providerData[indexPath.row].providerID - showSpinner { - // [START unlink_provider] - Auth.auth().currentUser?.unlink(fromProvider: providerID!) { user, error in - // [START_EXCLUDE] - self.hideSpinner { - if let error = error { - self.showMessagePrompt(error.localizedDescription) - return - } - tableView.reloadData() - } - // [END_EXCLUDE] - } - // [END unlink_provider] - } - } - } - - override func tableView(_ tableView: UITableView, - heightForRowAt indexPath: IndexPath) -> CGFloat { - if indexPath.section == kSectionUser { - return 200 - } - return 44 - } - - override func numberOfSections(in tableView: UITableView) -> Int { - if isMFAEnabled { - return 5 - } else { - return 4 - } - } - - @IBAction func didMultiFactorEnroll(_ sender: Any) { - let user = Auth.auth().currentUser - if user == nil { - print("Please sign in first.") - } else { - showTextInputPrompt(withMessage: "Phone Number") { userPressedOK, phoneNumber in - user?.multiFactor.getSessionWithCompletion { session, error in - PhoneAuthProvider.provider().verifyPhoneNumber( - phoneNumber!, - uiDelegate: nil, - multiFactorSession: session, - completion: { verificationID, error in - if let error = error { - self.showMessagePrompt(error.localizedDescription) - } else { - self.showTextInputPrompt( - withMessage: "Verification code", - completionBlock: { userPressedOK, verificationCode in - let credential = PhoneAuthProvider.provider() - .credential(withVerificationID: verificationID!, - verificationCode: verificationCode!) - let assertion = PhoneMultiFactorGenerator.assertion(with: credential) - self.showTextInputPrompt( - withMessage: "Display name", - completionBlock: { userPressedOK, displayName in - user?.multiFactor.enroll( - with: assertion, - displayName: displayName, - completion: { error in - if let error = error { - self.showMessagePrompt(error.localizedDescription) - } else { - print("Multi factor finanlize enroll succeeded.") - self.showTypicalUIForUserUpdateResults( - withTitle: "Multi Factor", - error: error - ) - } - } - ) - } - ) - } - ) - } - } - ) - } - } - } - } - - @IBAction func didMultiFactorUnenroll(_ sender: Any) { - var displayNameString = "" - for tmpFactorInfo in Auth.auth().currentUser!.multiFactor.enrolledFactors { - displayNameString += tmpFactorInfo.displayName ?? " " - displayNameString += " " - } - showTextInputPrompt(withMessage: "Multifactor Unenroll \(displayNameString)") { userPressedOK, displayName in - var factorInfo: MultiFactorInfo? - for tmpFactorInfo: MultiFactorInfo in Auth.auth().currentUser!.multiFactor.enrolledFactors { - if displayName == tmpFactorInfo.displayName { - factorInfo = tmpFactorInfo - } - } - Auth.auth().currentUser?.multiFactor.unenroll(with: factorInfo!, completion: { error in - if let error = error { - self.showMessagePrompt(error.localizedDescription) - } else { - print("Multi factor finanlize unenroll succeeded.") - self.showTypicalUIForUserUpdateResults(withTitle: "Multi Factor", error: error) - } - }) - } - } - - @IBAction func didTokenRefresh(_ sender: AnyObject) { - let action: AuthTokenCallback = { token, error in - let okAction = UIAlertAction(title: self.kOKButtonText, style: .default) { - action in print(self.kOKButtonText) - } - if let error = error { - let alertController = UIAlertController(title: self.kTokenRefreshErrorAlertTitle, - message: error.localizedDescription, - preferredStyle: .alert) - alertController.addAction(okAction) - self.present(alertController, animated: true, completion: nil) - return - } - - // Log token refresh event to Scion. - Analytics.logEvent("tokenrefresh", parameters: nil) - - let alertController = UIAlertController(title: self.kTokenRefreshedAlertTitle, - message: token, preferredStyle: .alert) - alertController.addAction(okAction) - self.present(alertController, animated: true, completion: nil) - } - // [START token_refresh] - Auth.auth().currentUser?.getIDTokenForcingRefresh(true, completion: action) - // [END token_refresh] - } - - /** @fn setDisplayName - @brief Changes the display name of the current user. - */ - @IBAction func didSetDisplayName(_ sender: AnyObject) { - showTextInputPrompt(withMessage: "Display Name:") { userPressedOK, userInput in - if let displayName = userInput { - self.showSpinner { - // [START profile_change] - let changeRequest = Auth.auth().currentUser?.createProfileChangeRequest() - changeRequest?.displayName = displayName - changeRequest?.commitChanges { error in - // [START_EXCLUDE] - self.hideSpinner { - self.showTypicalUIForUserUpdateResults( - withTitle: self.kSetDisplayNameTitle, - error: error as NSError? - ) - self.setTitleDisplay(Auth.auth().currentUser) - } - // [END_EXCLUDE] - } - // [END profile_change] - } - } else { - self.showMessagePrompt("displayname can't be empty") - } - } - } - - /** @fn requestVerifyEmail - @brief Requests a "verify email" email be sent. - */ - @IBAction func didRequestVerifyEmail(_ sender: AnyObject) { - showSpinner { - // [START send_verification_email] - Auth.auth().currentUser?.sendEmailVerification { error in - // [START_EXCLUDE] - self.hideSpinner { - if let error = error { - self.showMessagePrompt(error.localizedDescription) - return - } - self.showMessagePrompt("Sent") - } - // [END_EXCLUDE] - } - // [END send_verification_email] - } - } - - /** @fn changeEmail - @brief Changes the email address of the current user. - */ - @IBAction func didChangeEmail(_ sender: AnyObject) { - showTextInputPrompt(withMessage: "Email Address:") { userPressedOK, userInput in - if let email = userInput { - self.showSpinner { - // [START change_email] - Auth.auth().currentUser?.updateEmail(to: email) { error in - // [START_EXCLUDE] - self.hideSpinner { - self.showTypicalUIForUserUpdateResults(withTitle: self.kChangeEmailText, error: error) - } - // [END_EXCLUDE] - } - // [END change_email] - } - } else { - self.showMessagePrompt("email can't be empty") - } - } - } - - /** @fn changePassword - @brief Changes the password of the current user. - */ - @IBAction func didChangePassword(_ sender: AnyObject) { - showTextInputPrompt(withMessage: "New Password:") { userPressedOK, userInput in - if let password = userInput { - self.showSpinner { - // [START change_password] - Auth.auth().currentUser?.updatePassword(to: password) { error in - // [START_EXCLUDE] - self.hideSpinner { - self.showTypicalUIForUserUpdateResults( - withTitle: self.kChangePasswordText, - error: error - ) - } - // [END_EXCLUDE] - } - // [END change_password] - } - } else { - self.showMessagePrompt("password can't be empty") - } - } - } - - /** @fn updatePhoneNumber - @brief Updates the phone number of the current user. - */ - @IBAction func didUpdatePhoneNumber(_ sender: AnyObject) { - showTextInputPrompt(withMessage: "New Phone Number:") { userPressedOK, userInput in - if let phoneNumber = userInput { - self.showSpinner { - // [START update_phone] - PhoneAuthProvider.provider() - .verifyPhoneNumber(phoneNumber, uiDelegate: nil) { verificationID, error in - // [START_EXCLUDE] - self.hideSpinner { - if let error = error { - self.showMessagePrompt(error.localizedDescription) - return - } - guard let verificationID = verificationID else { return } - self - .showTextInputPrompt(withMessage: "Verification Code:") { userPressedOK, userInput in - if let verificationCode = userInput { - self.showSpinner { - // [END_EXCLUDE] - let credential = PhoneAuthProvider.provider() - .credential(withVerificationID: verificationID, - verificationCode: verificationCode) - Auth.auth().currentUser?.updatePhoneNumber(credential) { error in - // [END update_phone] - self.hideSpinner { - self.showTypicalUIForUserUpdateResults( - withTitle: self.kUpdatePhoneNumberText, - error: error - ) - } - } - } - } else { - self.showMessagePrompt("verification code can't be empty") - } - } - } - } - } - } else { - self.showMessagePrompt("phone number can't be empty") - } - } - } - - // MARK: - Helpers - - /** @fn showTypicalUIForUserUpdateResultsWithTitle:error: - @brief Shows a @c UIAlertView if error is non-nil with the localized description of the error. - @param resultsTitle The title of the @c UIAlertView - @param error The error details to display if non-nil. - */ - func showTypicalUIForUserUpdateResults(withTitle resultsTitle: String, error: Error?) { - if let error = error { - let message = "\(error.localizedDescription)" - let okAction = UIAlertAction(title: kOKButtonText, style: .default) { - action in print(self.kOKButtonText) - } - let alertController = UIAlertController(title: resultsTitle, - message: message, preferredStyle: .alert) - alertController.addAction(okAction) - present(alertController, animated: true, completion: nil) - return - } - tableView.reloadData() - } - - // MARK: - Sign in with Google - - func startSignInWithGoogleFlow() { - // [START headless_google_auth] - guard let clientID = FirebaseApp.app()?.options.clientID else { return } - - // Create Google Sign In configuration object. - let config = GIDConfiguration(clientID: clientID) - - // Start the sign in flow! - GIDSignIn.sharedInstance.signIn(with: config, presenting: self) { [unowned self] user, error in - - if let error = error { - // [START_EXCLUDE] - self.showMessagePrompt(error.localizedDescription) - // [END_EXCLUDE] - return - } - - // [START google_credential] - guard - let authentication = user?.authentication, - let idToken = authentication.idToken - else { - return - } - - let credential = GoogleAuthProvider.credential(withIDToken: idToken, - accessToken: authentication.accessToken) - // [END google_credential] - - // [START_EXCLUDE] - self.firebaseLogin(credential) - // [END_EXCLUDE] - } - // [END headless_google_auth] - } - - // MARK: - Sign in with Apple - - // Unhashed nonce. - fileprivate var currentNonce: String? - - @available(iOS 13, *) - func startSignInWithAppleFlow() { - let nonce = randomNonceString() - currentNonce = nonce - let appleIDProvider = ASAuthorizationAppleIDProvider() - let request = appleIDProvider.createRequest() - request.requestedScopes = [.fullName, .email] - request.nonce = sha256(nonce) - - let authorizationController = ASAuthorizationController(authorizationRequests: [request]) - authorizationController.delegate = self - authorizationController.presentationContextProvider = self - authorizationController.performRequests() - } - - // [START random_nonce] - private func randomNonceString(length: Int = 32) -> String { - precondition(length > 0) - var randomBytes = [UInt8](repeating: 0, count: length) - let errorCode = SecRandomCopyBytes(kSecRandomDefault, randomBytes.count, &randomBytes) - if errorCode != errSecSuccess { - fatalError( - "Unable to generate nonce. SecRandomCopyBytes failed with OSStatus \(errorCode)" - ) - } - - let charset: [Character] = - Array("0123456789ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvwxyz-._") - - let nonce = randomBytes.map { byte in - // Pick a random character from the set, wrapping around if needed. - charset[Int(byte) % charset.count] - } - - return String(nonce) - } - - // [END random_nonce] - - // [START sha_256] - @available(iOS 13, *) - private func sha256(_ input: String) -> String { - let inputData = Data(input.utf8) - let hashedData = SHA256.hash(data: inputData) - let hashString = hashedData.compactMap { - String(format: "%02x", $0) - }.joined() - - return hashString - } - - // [END sha_256] -} - -@available(iOS 13.0, *) -extension MainViewController: ASAuthorizationControllerDelegate { - func authorizationController(controller: ASAuthorizationController, - didCompleteWithAuthorization authorization: ASAuthorization) { - if let appleIDCredential = authorization.credential as? ASAuthorizationAppleIDCredential { - guard let nonce = currentNonce else { - fatalError("Invalid state: A login callback was received, but no login request was sent.") - } - - guard let appleIDToken = appleIDCredential.identityToken else { - print("Unable to fetch identity token") - return - } - guard let idTokenString = String(data: appleIDToken, encoding: .utf8) else { - print("Unable to serialize token string from data: \(appleIDToken.debugDescription)") - return - } - // Initialize a Firebase credential. - let credential = OAuthProvider.credential(withProviderID: "apple.com", - idToken: idTokenString, - rawNonce: nonce) - // Sign in with Firebase. - firebaseLogin(credential) - } - } - - func authorizationController(controller: ASAuthorizationController, - didCompleteWithError error: Error) { - // Handle error. - print("Sign in with Apple errored: \(error)") - } -} - -@available(iOS 13.0, *) -extension MainViewController: ASAuthorizationControllerPresentationContextProviding { - func presentationAnchor(for controller: ASAuthorizationController) -> ASPresentationAnchor { - return view.window! - } -} diff --git a/authentication/LegacyAuthQuickstart/AuthenticationExampleSwift/PasswordlessViewController.swift b/authentication/LegacyAuthQuickstart/AuthenticationExampleSwift/PasswordlessViewController.swift deleted file mode 100644 index b20fa588e..000000000 --- a/authentication/LegacyAuthQuickstart/AuthenticationExampleSwift/PasswordlessViewController.swift +++ /dev/null @@ -1,98 +0,0 @@ -// -// Copyright (c) 2018 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import FirebaseAuth -import UIKit - -@objc(PasswordlessViewController) -class PasswordlessViewController: UIViewController { - @IBOutlet var emailField: UITextField! - @IBOutlet var signInButton: UIButton! - var link: String! - - override func viewDidLoad() { - super.viewDidLoad() - emailField.text = UserDefaults.standard.value(forKey: "Email") as? String - if let link = UserDefaults.standard.value(forKey: "Link") as? String { - self.link = link - signInButton.isEnabled = true - } - } - - override func touchesBegan(_ touches: Set, with event: UIEvent?) { - view.endEditing(true) - } - - @IBAction func didTapSignInWithEmailLink(_ sender: AnyObject) { - if let email = emailField.text { - showSpinner { - // [START signin_emaillink] - Auth.auth().signIn(withEmail: email, link: self.link) { user, error in - // [START_EXCLUDE] - self.hideSpinner { - if let error = error { - self.showMessagePrompt(error.localizedDescription) - return - } - self.navigationController!.popViewController(animated: true) - } - // [END_EXCLUDE] - } - // [END signin_emaillink] - } - } else { - showMessagePrompt("Email can't be empty") - } - } - - @IBAction func didTapSendSignInLink(_ sender: AnyObject) { - if let email = emailField.text { - showSpinner { - // [START action_code_settings] - let actionCodeSettings = ActionCodeSettings() - actionCodeSettings.url = URL(string: "https://www.example.com") - // The sign-in operation has to always be completed in the app. - actionCodeSettings.handleCodeInApp = true - actionCodeSettings.setIOSBundleID(Bundle.main.bundleIdentifier!) - actionCodeSettings.setAndroidPackageName("com.example.android", - installIfNotAvailable: false, minimumVersion: "12") - // [END action_code_settings] - // [START send_signin_link] - Auth.auth().sendSignInLink(toEmail: email, - actionCodeSettings: actionCodeSettings) { error in - // [START_EXCLUDE] - self.hideSpinner { - // [END_EXCLUDE] - if let error = error { - self.showMessagePrompt(error.localizedDescription) - return - } - // The link was successfully sent. Inform the user. - // Save the email locally so you don't need to ask the user for it again - // if they open the link on the same device. - UserDefaults.standard.set(email, forKey: "Email") - self.showMessagePrompt("Check your email for link") - // [START_EXCLUDE] - } - // [END_EXCLUDE] - } - // [END send_signin_link] - } - } else { - showMessagePrompt("Email can't be empty") - } - } -} diff --git a/authentication/LegacyAuthQuickstart/AuthenticationExampleSwift/UIViewController.swift b/authentication/LegacyAuthQuickstart/AuthenticationExampleSwift/UIViewController.swift deleted file mode 100644 index fff377868..000000000 --- a/authentication/LegacyAuthQuickstart/AuthenticationExampleSwift/UIViewController.swift +++ /dev/null @@ -1,98 +0,0 @@ -// -// Copyright (c) 2020 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import UIKit - -private class SaveAlertHandle { - static var alertHandle: UIAlertController? - - class func set(_ handle: UIAlertController) { - alertHandle = handle - } - - class func clear() { - alertHandle = nil - } - - class func get() -> UIAlertController? { - return alertHandle - } -} - -extension UIViewController { - /*! @fn showMessagePrompt - @brief Displays an alert with an 'OK' button and a message. - @param message The message to display. - */ - func showMessagePrompt(_ message: String) { - let alert = UIAlertController(title: nil, message: message, preferredStyle: .alert) - let okAction = UIAlertAction(title: "OK", style: .default, handler: nil) - alert.addAction(okAction) - present(alert, animated: false, completion: nil) - } - - /*! @fn showTextInputPromptWithMessage - @brief Shows a prompt with a text field and 'OK'/'Cancel' buttons. - @param message The message to display. - @param completion A block to call when the user taps 'OK' or 'Cancel'. - */ - func showTextInputPrompt(withMessage message: String, - completionBlock: @escaping ((Bool, String?) -> Void)) { - let prompt = UIAlertController(title: nil, message: message, preferredStyle: .alert) - let cancelAction = UIAlertAction(title: "Cancel", style: .cancel) { _ in - completionBlock(false, nil) - } - weak var weakPrompt = prompt - let okAction = UIAlertAction(title: "OK", style: .default) { _ in - guard let text = weakPrompt?.textFields?.first?.text else { return } - completionBlock(true, text) - } - prompt.addTextField(configurationHandler: nil) - prompt.addAction(cancelAction) - prompt.addAction(okAction) - present(prompt, animated: true, completion: nil) - } - - /*! @fn showSpinner - @brief Shows the please wait spinner. - @param completion Called after the spinner has been hidden. - */ - func showSpinner(_ completion: (() -> Void)?) { - let alertController = UIAlertController(title: nil, message: "Please Wait...\n\n\n\n", - preferredStyle: .alert) - SaveAlertHandle.set(alertController) - let spinner = UIActivityIndicatorView(style: .whiteLarge) - spinner.color = UIColor(ciColor: .black) - spinner.center = CGPoint(x: alertController.view.frame.midX, - y: alertController.view.frame.midY) - spinner.autoresizingMask = [.flexibleBottomMargin, .flexibleTopMargin, - .flexibleLeftMargin, .flexibleRightMargin] - spinner.startAnimating() - alertController.view.addSubview(spinner) - present(alertController, animated: true, completion: completion) - } - - /*! @fn hideSpinner - @brief Hides the please wait spinner. - @param completion Called after the spinner has been hidden. - */ - func hideSpinner(_ completion: (() -> Void)?) { - if let controller = SaveAlertHandle.get() { - SaveAlertHandle.clear() - controller.dismiss(animated: true, completion: completion) - } - } -} diff --git a/authentication/LegacyAuthQuickstart/AuthenticationExampleSwiftUITests/AuthenticationExampleSwiftUITests.swift b/authentication/LegacyAuthQuickstart/AuthenticationExampleSwiftUITests/AuthenticationExampleSwiftUITests.swift deleted file mode 100644 index 040d4c31e..000000000 --- a/authentication/LegacyAuthQuickstart/AuthenticationExampleSwiftUITests/AuthenticationExampleSwiftUITests.swift +++ /dev/null @@ -1,34 +0,0 @@ -// -// AuthenticationExampleSwiftUITests.swift -// AuthenticationExampleSwiftUITests -// -// Created by Ibrahim Ulukaya on 2/12/18. -// Copyright © 2018 Google Inc. All rights reserved. -// - -import XCTest - -class AuthenticationExampleSwiftUITests: XCTestCase { - override func setUp() { - super.setUp() - - // Put setup code here. This method is called before the invocation of each test method in the class. - - // In UI tests it is usually best to stop immediately when a failure occurs. - continueAfterFailure = false - // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. - XCUIApplication().launch() - - // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. - } - - override func tearDown() { - // Put teardown code here. This method is called after the invocation of each test method in the class. - super.tearDown() - } - - func testExample() { - // Use recording to get started writing UI tests. - // Use XCTAssert and related functions to verify your tests produce the correct results. - } -} diff --git a/authentication/LegacyAuthQuickstart/AuthenticationExampleSwiftUITests/Info.plist b/authentication/LegacyAuthQuickstart/AuthenticationExampleSwiftUITests/Info.plist deleted file mode 100644 index 6c40a6cd0..000000000 --- a/authentication/LegacyAuthQuickstart/AuthenticationExampleSwiftUITests/Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - - diff --git a/authentication/LegacyAuthQuickstart/AuthenticationExampleTests/AuthenticationExampleTests.m b/authentication/LegacyAuthQuickstart/AuthenticationExampleTests/AuthenticationExampleTests.m deleted file mode 100644 index fb1abd026..000000000 --- a/authentication/LegacyAuthQuickstart/AuthenticationExampleTests/AuthenticationExampleTests.m +++ /dev/null @@ -1,47 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -@interface AuthenticationExampleTests : XCTestCase - -@end - -@implementation AuthenticationExampleTests - -- (void)setUp { - [super setUp]; - // Put setup code here. This method is called before the invocation of each test method in the class. -} - -- (void)tearDown { - // Put teardown code here. This method is called after the invocation of each test method in the class. - [super tearDown]; -} - -- (void)testExample { - // This is an example of a functional test case. - // Use XCTAssert and related functions to verify your tests produce the correct results. -} - -- (void)testPerformanceExample { - // This is an example of a performance test case. - [self measureBlock:^{ - // Put the code you want to measure the time of here. - }]; -} - -@end diff --git a/authentication/LegacyAuthQuickstart/AuthenticationExampleUITests/AuthenticationExampleUITests.m b/authentication/LegacyAuthQuickstart/AuthenticationExampleUITests/AuthenticationExampleUITests.m deleted file mode 100644 index 8cf832395..000000000 --- a/authentication/LegacyAuthQuickstart/AuthenticationExampleUITests/AuthenticationExampleUITests.m +++ /dev/null @@ -1,321 +0,0 @@ -// -// Copyright (c) 2019 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import -#import "FIREGHelper.h" -#import "FIREGSignInHelper.h" - -typedef BOOL (^SystemAlertHandler)(XCUIElement *); -static SystemAlertHandler const alertHandler = ^(XCUIElement *element) { - if (element.buttons[@"Continue"].exists) { - [element.buttons[@"Continue"] tap]; - } - - if (element.buttons[@"WLAN Only"].exists) { - [element.buttons[@"WLAN Only"] tap]; - } - return YES; -}; - -static NSString *const header = @"Authentication Example"; -static NSString *const signInButton = @"Sign In"; -static NSString *const createButton = @"Create"; -static NSString *const signOutButton = @"Sign Out"; -static NSString *const linkButton = @"Link"; -static NSString *const optionsHeader = @"Select Provider"; -static NSString *const emailPlaceholder = @"Email"; -static NSString *const passwordPlaceholder = @"Password"; -static NSString *const okButton = @"OK"; -static NSString *const backButton = @"Back"; -static NSString *const googleProvider = @"Google"; -static NSString *const tokenRefreshButton = @"Token Refresh"; -static NSString *const requestVerifyEmail = @"Request Verify Email"; -static NSString *const cancelButton = @"Cancel"; -static NSString *const errorMessage = - @"Wrong password. Try again or click Forgot password to reset it."; -static NSString *const alertMessage = @"The user canceled the sign-in flow."; - -// Test account credentials. -static NSString *const testEmail = @"test@test.com"; -static NSString *const testPassword = @"test12"; - -@interface AuthenticationExampleUITests : XCTestCase -@property NSArray *signInOptions; -@end - -@implementation AuthenticationExampleUITests { - XCUIApplication *_app; - id signInPermissionMonitor; -} - -- (void)setUp { - [super setUp]; - self.continueAfterFailure = NO; - _app = [[XCUIApplication alloc] init]; - signInPermissionMonitor = - [self addUIInterruptionMonitorWithDescription:@"Allow Google Sign-In" handler:alertHandler]; - _signInOptions = @[ @"Email", @"Anonymous", @"Google", @"Facebook" ]; - [_app launch]; - - if ([self signedIn]) { - [self signOut]; - } - FIRWaitForVisible(_app.buttons[signInButton]); -} - -- (void)tearDown { - [self removeUIInterruptionMonitor:signInPermissionMonitor]; - [super tearDown]; -} - -- (void)testAuth { - // Verify that Auth Example app launched successfully and its title is visible. - XCTAssertTrue(_app.navigationBars[header].exists); -} - -- (void)testAuthOptions { - [_app.buttons[signInButton] tap]; - FIRWaitForVisible(_app.alerts[optionsHeader]); - - // Make sure various authentication options are present. - for (NSString *option in _signInOptions) { - XCTAssertTrue(_app.buttons[option].exists); - } -} - -- (void)testAuthAnonymously { - // Verify that user is able to authenticate anonymously. - [self signInWith:@"Anonymous"]; - - FIRWaitForVisible(_app.buttons[signOutButton]); - XCTAssertTrue(_app.buttons[linkButton].exists); - [self signOut]; -} - -- (void)testAuthExistingAccount { - [self signInWith:@"Email"]; - FIRWaitForVisible(_app.buttons[createButton]); - - XCUIElement *inputText = [[_app textFields] elementBoundByIndex:0]; - FIRWaitForVisible(inputText); - [inputText tap]; - [inputText typeText:testEmail]; - - XCUIElement *password = [[_app secureTextFields] elementBoundByIndex:0]; - FIRWaitForVisible(password); - [password tap]; - [password typeText:testPassword]; - - [[_app buttons][signInButton] tap]; - FIRWaitForVisible(_app.buttons[signOutButton]); - XCTAssertTrue([self signedIn], @"User should be able to sign-in with existing credentials"); - [self signOut]; -} - -- (void)testAuthExistingAccountWrongPassword { - [self signInWith:@"Email"]; - FIRWaitForVisible(_app.buttons[createButton]); - - XCUIElement *inputText = [[_app textFields] elementBoundByIndex:0]; - FIRWaitForVisible(inputText); - [inputText tap]; - [inputText typeText:testEmail]; - - XCUIElement *password = [[_app secureTextFields] elementBoundByIndex:0]; - FIRWaitForVisible(password); - [password tap]; - [password typeText:@"wrong password"]; - - [[_app buttons][signInButton] tap]; - XCUIElement *error = - _app.alerts.staticTexts[@"The password is invalid or the user does not have a password."]; - FIRWaitForVisible(error); - XCTAssertTrue(error.exists); - - [self dismissAlertIfOpen]; - [self goBack]; - - XCTAssertFalse([self signedIn], @"User shouldn't be able to sign-in with wrong credentials"); -} - -- (void)testCreateAccountBadPassword { - [self signInWith:@"Email"]; - FIRWaitForVisible(_app.buttons[createButton]); - - // 5 characters is not long enough, user should see an error. - [self createLogin:testEmail withPassword:randomString(5)]; - - XCUIElement *error = _app.alerts.staticTexts[@"The password must be 6 characters long or more."]; - FIRWaitForVisible(error); - XCTAssertTrue(error.exists); - - [self dismissAlertIfOpen]; - [self goBack]; - XCTAssertFalse([self signedIn], @"User shouldn't be signed in with a weak password"); -} - -- (void)testCreateAlreadyExistingAccount { - [self signInWith:@"Email"]; - FIRWaitForVisible(_app.buttons[createButton]); - - // This account is already created. - [self createLogin:testEmail withPassword:testPassword]; - - XCUIElement *error = - _app.alerts.staticTexts[@"The email address is already in use by another account."]; - FIRWaitForVisible(error); - XCTAssertTrue(error.exists); - - [self dismissAlertIfOpen]; - [self goBack]; - XCTAssertFalse([self signedIn], @"User shouldn't be able to create an already existing account"); -} - -- (void)testCreateAccountCorrectPassword { - [self signInWith:@"Email"]; - FIRWaitForVisible(_app.buttons[createButton]); - - // These are valid credentials. - NSString *newEmail = [timestamp() stringByAppendingString:@"_test@test.com"]; - NSString *newPassword = randomString(10); - [self createLogin:newEmail withPassword:newPassword]; - - FIRWaitForVisible(_app.buttons[signOutButton]); - XCTAssertTrue([self signedIn], @"User should be signed in with newly created credentials"); - [self signOut]; -} - -// TODO(b/140411106): Fix the GoogleSignIn breakage. -- (void)FAILING_testGoogleSignInAndLinkAccount { - [self signInWith:@"Google"]; - - // User can be signed in right away, without following Google Sign-In flow. - if (![self signedIn]) { - doGoogleSignIn(_app, YES, YES); - // Wait till all alerts and spinners are gone. - FIRWaitForVisible(_app.buttons[signOutButton]); - } - // Make sure user is signed in. - XCTAssertTrue([self signedIn], @"User should be able to sign-in with existing credentials"); - - // Make sure all the required UI elements are present. - XCTAssertTrue(_app.buttons[tokenRefreshButton].exists); - XCTAssertTrue(_app.buttons[requestVerifyEmail].exists); - XCTAssertTrue(_app.buttons[linkButton].exists); - - // Sign out from this Google account. - [self signOut]; - XCTAssertFalse([self signedIn], @"User should be signed out"); - - // Sign in anonymously. - [self signInWith:@"Anonymous"]; - XCTAssertTrue([self signedIn], @"User should be able to sign-in anonymously"); - - // Try to link anonymous accout with exisiting Google account. - FIRWaitForVisible(_app.buttons[linkButton]); - [_app.buttons[linkButton] tap]; - FIRWaitForVisible(_app.buttons[@"Google"]); - [_app.buttons[@"Google"] tap]; - - XCUIElement *error = - _app.alerts - .staticTexts[@"This credential is already associated with a different user account."]; - FIRWaitForVisible(error); - XCTAssertTrue(error.exists); - - // Dismiss the alert. - [self dismissAlertIfOpen]; - - [self signOut]; -} - -// TODO(b/140411106): Fix the GoogleSignIn breakage. -- (void)FAILING_testGoogleSignInWrongPasswordAndCancelFlow { - [self signInWith:@"Google"]; - if (![self signedIn]) { - // Try to sign in with invalid credentials. - doGoogleSignIn(_app, NO, YES); - - XCUIElement *error = _app.staticTexts[errorMessage]; - XCTAssertTrue([error exists], @"Error message should be present."); - - // Close Safari ViewController. - [_app.buttons[cancelButton] tap]; - - // Make sure the correct alert message appears. - FIRWaitForVisible(_app.alerts.staticTexts[alertMessage]); - - // Dismiss the alert. - [self dismissAlertIfOpen]; - } -} - -#pragma mark - Helpers - -- (void)signInWith:(NSString *)provider { - FIRWaitForVisible(_app.buttons[signInButton]); - [_app.buttons[signInButton] tap]; - FIRWaitForVisible(_app.buttons[provider]); - [_app.buttons[provider] tap]; -} - -- (void)signOut { - FIRWaitForVisible(_app.buttons[signOutButton]); - [_app.buttons[signOutButton] tap]; - XCTAssertTrue(_app.buttons[signInButton].exists); -} - -- (BOOL)signedIn { - FIRWaitForVisible(_app.buttons[signOutButton]); - return _app.buttons[signOutButton].exists; -} - -// Navigate back using Navigation Controller (back button could different on different OS, -// so both options are checked). -- (void)goBack { - FIRWaitForVisible(_app.buttons[backButton]); - if (_app.buttons[backButton].exists) { - [_app.buttons[backButton] tap]; - } else { - [[_app.navigationBars.buttons firstMatch] tap]; - } -} - -// Dismiss alert by tapping "OK" button. -- (void)dismissAlertIfOpen { - XCUIElement *button = _app.buttons[okButton]; - FIRWaitForVisible(button); - if (button.exists) { - [button tap]; - } -} - -- (void)createLogin:(NSString *)login withPassword:(NSString *)password { - FIRWaitForVisible(_app.buttons[createButton]); - [_app.buttons[createButton] tap]; - - XCUIElement *inputText = [[[_app alerts] textFields] elementBoundByIndex:0]; - FIRWaitForVisible(inputText); - [inputText typeText:login]; - [[_app buttons][okButton] tap]; - - XCUIElement *passwordField = [[[_app alerts] textFields] elementBoundByIndex:0]; - FIRWaitForVisible(passwordField); - [passwordField typeText:password]; - [[_app buttons][okButton] tap]; -} - -@end diff --git a/authentication/LegacyAuthQuickstart/AuthenticationExampleUITests/Info.plist b/authentication/LegacyAuthQuickstart/AuthenticationExampleUITests/Info.plist deleted file mode 100644 index 6c40a6cd0..000000000 --- a/authentication/LegacyAuthQuickstart/AuthenticationExampleUITests/Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - - diff --git a/authentication/LegacyAuthQuickstart/Podfile b/authentication/LegacyAuthQuickstart/Podfile deleted file mode 100644 index e842b1c87..000000000 --- a/authentication/LegacyAuthQuickstart/Podfile +++ /dev/null @@ -1,21 +0,0 @@ -# AuthenticationExample - -use_frameworks! -platform :ios, '15.0' -pod 'FirebaseAnalytics' -# [START auth_pod] -pod 'FirebaseAuth' -# [END auth_pod] - -# These are pods used for the auth providers. -pod 'FBSDKLoginKit' -# [START google_pod] -pod 'GoogleSignIn' -# [END google_pod] - -target 'AuthenticationExample' do -end -target 'AuthenticationExampleSwift' do -end -target 'AuthenticationExampleTests' do -end diff --git a/authentication/LegacyAuthQuickstart/Podfile.lock b/authentication/LegacyAuthQuickstart/Podfile.lock deleted file mode 100644 index 81aa85566..000000000 --- a/authentication/LegacyAuthQuickstart/Podfile.lock +++ /dev/null @@ -1,191 +0,0 @@ -PODS: - - AppAuth (2.0.0): - - AppAuth/Core (= 2.0.0) - - AppAuth/ExternalUserAgent (= 2.0.0) - - AppAuth/Core (2.0.0) - - AppAuth/ExternalUserAgent (2.0.0): - - AppAuth/Core - - AppCheckCore (11.2.0): - - GoogleUtilities/Environment (~> 8.0) - - GoogleUtilities/UserDefaults (~> 8.0) - - PromisesObjC (~> 2.4) - - FBAEMKit (18.0.0): - - FBSDKCoreKit_Basics (= 18.0.0) - - FBSDKCoreKit (18.0.0): - - FBAEMKit (= 18.0.0) - - FBSDKCoreKit_Basics (= 18.0.0) - - FBSDKCoreKit_Basics (18.0.0) - - FBSDKLoginKit (18.0.0): - - FBSDKCoreKit (= 18.0.0) - - FirebaseAnalytics (12.1.0): - - FirebaseAnalytics/Default (= 12.1.0) - - FirebaseCore (~> 12.1.0) - - FirebaseInstallations (~> 12.1.0) - - GoogleUtilities/AppDelegateSwizzler (~> 8.1) - - GoogleUtilities/MethodSwizzler (~> 8.1) - - GoogleUtilities/Network (~> 8.1) - - "GoogleUtilities/NSData+zlib (~> 8.1)" - - nanopb (~> 3.30910.0) - - FirebaseAnalytics/Default (12.1.0): - - FirebaseCore (~> 12.1.0) - - FirebaseInstallations (~> 12.1.0) - - GoogleAppMeasurement/Default (= 12.1.0) - - GoogleUtilities/AppDelegateSwizzler (~> 8.1) - - GoogleUtilities/MethodSwizzler (~> 8.1) - - GoogleUtilities/Network (~> 8.1) - - "GoogleUtilities/NSData+zlib (~> 8.1)" - - nanopb (~> 3.30910.0) - - FirebaseAppCheckInterop (12.1.0) - - FirebaseAuth (12.1.0): - - FirebaseAppCheckInterop (~> 12.1.0) - - FirebaseAuthInterop (~> 12.1.0) - - FirebaseCore (~> 12.1.0) - - FirebaseCoreExtension (~> 12.1.0) - - GoogleUtilities/AppDelegateSwizzler (~> 8.1) - - GoogleUtilities/Environment (~> 8.1) - - GTMSessionFetcher/Core (< 6.0, >= 3.4) - - RecaptchaInterop (~> 101.0) - - FirebaseAuthInterop (12.1.0) - - FirebaseCore (12.1.0): - - FirebaseCoreInternal (~> 12.1.0) - - GoogleUtilities/Environment (~> 8.1) - - GoogleUtilities/Logger (~> 8.1) - - FirebaseCoreExtension (12.1.0): - - FirebaseCore (~> 12.1.0) - - FirebaseCoreInternal (12.1.0): - - "GoogleUtilities/NSData+zlib (~> 8.1)" - - FirebaseInstallations (12.1.0): - - FirebaseCore (~> 12.1.0) - - GoogleUtilities/Environment (~> 8.1) - - GoogleUtilities/UserDefaults (~> 8.1) - - PromisesObjC (~> 2.4) - - GoogleAdsOnDeviceConversion (2.2.0): - - GoogleUtilities/Logger (~> 8.1) - - GoogleUtilities/Network (~> 8.1) - - nanopb (~> 3.30910.0) - - GoogleAppMeasurement/Core (12.1.0): - - GoogleUtilities/AppDelegateSwizzler (~> 8.1) - - GoogleUtilities/MethodSwizzler (~> 8.1) - - GoogleUtilities/Network (~> 8.1) - - "GoogleUtilities/NSData+zlib (~> 8.1)" - - nanopb (~> 3.30910.0) - - GoogleAppMeasurement/Default (12.1.0): - - GoogleAdsOnDeviceConversion (= 2.2.0) - - GoogleAppMeasurement/Core (= 12.1.0) - - GoogleAppMeasurement/IdentitySupport (= 12.1.0) - - GoogleUtilities/AppDelegateSwizzler (~> 8.1) - - GoogleUtilities/MethodSwizzler (~> 8.1) - - GoogleUtilities/Network (~> 8.1) - - "GoogleUtilities/NSData+zlib (~> 8.1)" - - nanopb (~> 3.30910.0) - - GoogleAppMeasurement/IdentitySupport (12.1.0): - - GoogleAppMeasurement/Core (= 12.1.0) - - GoogleUtilities/AppDelegateSwizzler (~> 8.1) - - GoogleUtilities/MethodSwizzler (~> 8.1) - - GoogleUtilities/Network (~> 8.1) - - "GoogleUtilities/NSData+zlib (~> 8.1)" - - nanopb (~> 3.30910.0) - - GoogleSignIn (9.0.0): - - AppAuth (~> 2.0) - - AppCheckCore (~> 11.0) - - GTMAppAuth (~> 5.0) - - GTMSessionFetcher/Core (~> 3.3) - - GoogleUtilities/AppDelegateSwizzler (8.1.0): - - GoogleUtilities/Environment - - GoogleUtilities/Logger - - GoogleUtilities/Network - - GoogleUtilities/Privacy - - GoogleUtilities/Environment (8.1.0): - - GoogleUtilities/Privacy - - GoogleUtilities/Logger (8.1.0): - - GoogleUtilities/Environment - - GoogleUtilities/Privacy - - GoogleUtilities/MethodSwizzler (8.1.0): - - GoogleUtilities/Logger - - GoogleUtilities/Privacy - - GoogleUtilities/Network (8.1.0): - - GoogleUtilities/Logger - - "GoogleUtilities/NSData+zlib" - - GoogleUtilities/Privacy - - GoogleUtilities/Reachability - - "GoogleUtilities/NSData+zlib (8.1.0)": - - GoogleUtilities/Privacy - - GoogleUtilities/Privacy (8.1.0) - - GoogleUtilities/Reachability (8.1.0): - - GoogleUtilities/Logger - - GoogleUtilities/Privacy - - GoogleUtilities/UserDefaults (8.1.0): - - GoogleUtilities/Logger - - GoogleUtilities/Privacy - - GTMAppAuth (5.0.0): - - AppAuth/Core (~> 2.0) - - GTMSessionFetcher/Core (< 4.0, >= 3.3) - - GTMSessionFetcher/Core (3.5.0) - - nanopb (3.30910.0): - - nanopb/decode (= 3.30910.0) - - nanopb/encode (= 3.30910.0) - - nanopb/decode (3.30910.0) - - nanopb/encode (3.30910.0) - - PromisesObjC (2.4.0) - - RecaptchaInterop (101.0.0) - -DEPENDENCIES: - - FBSDKLoginKit - - FirebaseAnalytics - - FirebaseAuth - - GoogleSignIn - -SPEC REPOS: - trunk: - - AppAuth - - AppCheckCore - - FBAEMKit - - FBSDKCoreKit - - FBSDKCoreKit_Basics - - FBSDKLoginKit - - FirebaseAnalytics - - FirebaseAppCheckInterop - - FirebaseAuth - - FirebaseAuthInterop - - FirebaseCore - - FirebaseCoreExtension - - FirebaseCoreInternal - - FirebaseInstallations - - GoogleAdsOnDeviceConversion - - GoogleAppMeasurement - - GoogleSignIn - - GoogleUtilities - - GTMAppAuth - - GTMSessionFetcher - - nanopb - - PromisesObjC - - RecaptchaInterop - -SPEC CHECKSUMS: - AppAuth: 1c1a8afa7e12f2ec3a294d9882dfa5ab7d3cb063 - AppCheckCore: cc8fd0a3a230ddd401f326489c99990b013f0c4f - FBAEMKit: e34530df538b8eb8aeb53c35867715ba6c63ef0c - FBSDKCoreKit: d3f479a69127acebb1c6aad91c1a33907bcf6c2f - FBSDKCoreKit_Basics: 017b6dc2a1862024815a8229e75661e627ac1e29 - FBSDKLoginKit: 5875762d1fe09ddcb05d03365d4f5dc34413843d - FirebaseAnalytics: e89a37004bce8789cb53f4cb3e80160d925e6624 - FirebaseAppCheckInterop: de890554a81967f16a0eb8d3def541c2bb42dece - FirebaseAuth: 6d0f2d449195c401e6d6ef1a891fff22bc60356d - FirebaseAuthInterop: ede927b03baf02453e6e9de2df513cc28d3eb742 - FirebaseCore: 5a452ffa66f37c8e281076996837626c5d08c090 - FirebaseCoreExtension: dd89d73548ee9be5d8dc60e5c76bc421b965853b - FirebaseCoreInternal: ff526c22671bb564d1b34a47615e29ba99389dee - FirebaseInstallations: 6836550c466a6c3f753a777bec6f4e58ea228779 - GoogleAdsOnDeviceConversion: b225b50f2ee6bbf856fd51a26684929b32657215 - GoogleAppMeasurement: 61605c4152a142d797383a713ecfa5df98fe46ca - GoogleSignIn: c7f09cfbc85a1abf69187be091997c317cc33b77 - GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1 - GTMAppAuth: 217a876b249c3c585a54fd6f73e6b58c4f5c4238 - GTMSessionFetcher: 5aea5ba6bd522a239e236100971f10cb71b96ab6 - nanopb: fad817b59e0457d11a5dfbde799381cd727c1275 - PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 - RecaptchaInterop: 11e0b637842dfb48308d242afc3f448062325aba - -PODFILE CHECKSUM: 49d8a9dbfae5766ae10c73fa8acdf33de4335530 - -COCOAPODS: 1.16.2 diff --git a/authentication/LegacyAuthQuickstart/README.md b/authentication/LegacyAuthQuickstart/README.md deleted file mode 100644 index a3c2a22c9..000000000 --- a/authentication/LegacyAuthQuickstart/README.md +++ /dev/null @@ -1,130 +0,0 @@ -Firebase Authentication Quickstart -============================= - -Introduction ------------- - -- [Read more about Firebase Authentication](https://firebase.google.com/docs/auth/) - -Getting Started ---------------- - -- [Add Firebase to your iOS Project](https://firebase.google.com/docs/ios/setup). - - -### Google Sign In Setup -- Go to the [Firebase Console](https://console.firebase.google.com) and navigate to your project: - - Select the **Auth** panel and then click the **Sign In Method** tab. - - Click **Google** and turn on the **Enable** switch, then click **Save**. -- In Xcode, [add a custom URL scheme for your reversed client ID](https://developers.google.com/identity/sign-in/ios/start-integrating). - - You can find this in the `GoogleService-Info.plist` -- Run the app on your device or simulator. - - Select **Sign In** and select Google to begin. - -### Sign in with Apple Setup -- Go to the [Firebase Console](https://console.firebase.google.com) and navigate to your project: - - Select the **Auth** panel and then click the **Sign In Method** tab. - - Click **Apple** and turn on the **Enable** switch, then click **Save**. -- Run the app on your device or simulator. - - Select **Sign In** and select Apple to begin. -- See the [Getting Started guide](https://firebase.google.com/docs/auth/ios/apple) for more details. - -### Microsoft Sign In Setup -- Go to the [Firebase Console](https://console.firebase.google.com) and navigate to your project: - - Select the **Auth** panel and then click the **Sign In Method** tab. - - Click **Microsoft** and turn on the **Enable** switch, then click **Save**. -- In Xcode, [add a custom URL scheme for your reversed client ID](https://developers.google.com/identity/sign-in/ios/start-integrating). - - You can find this in the `GoogleService-Info.plist` -- Run the app on your device or simulator. - - Select **Sign In** and select Microsoft to begin. - -### Facebook Login Setup -- Go to the [Facebook Developers Site](https://developers.facebook.com) and follow all - instructions to set up a new iOS app. When asked for a bundle ID, use - `com.google.firebase.quickstart.AuthenticationExample`. -- Go to the [Firebase Console](https://console.firebase.google.com) and navigate to your project: - - Select the **Auth** panel and then click the **Sign In Method** tab. - - Click **Facebook** and turn on the **Enable** switch, then click **Save**. - - Enter your Facebook **App Id** and **App Secret** and click **Save**. -- Open your regular `Info.plist` and replace the value of the `FacebookAppID` with the ID of the - Facebook app you just created, e.g 124567. Save that file. -- In the *Info* tab of your target settings add a *URL Type* with a *URL Scheme* of 'fb' + the ID - of your Facebook app, e.g. fb1234567. -- Run the app on your device or simulator. - - Select **Sign In** and select Facebook to begin. - -### Email/Password Setup -- Go to the [Firebase Console](https://console.firebase.google.com) and navigate to your project: - - Select the **Auth** panel and then click the **Sign In Method** tab. - - Click **Email/Password** and turn on the **Enable** switch, then click **Save**. -- Run the app on your device or simulator. - - Select **Sign In** and select Email to begin. - -### Multi Factor Authentication -**Note**: Multi Factor authentication only works for apps using [Google Cloud Identity Platform](https://cloud.google.com/identity-platform/docs/ios/mfa), -a paid service. If you are only using Firebase Authentication this sample will not work for you. - -- Run the app on your device - - Select **Email (with MFA)** from the main screen. - - Sign in (if necessary). - - Verify your email (if necessary). - - Hit **Enroll MFA** to begin enrolling an SMS second factor. - -### Twitter Login Setup -- [Register your app](https://apps.twitter.com) as a developer application on Twitter and get your - app's OAuth API key and API secret. -- Go to the [Firebase Console](https://console.firebase.google.com) and navigate to your project: - - Select the **Auth** panel and then click the **Sign In Method** tab. - - Click **Twitter** and turn on the **Enable** switch, then click **Save**. - - Enter your Twitter **API Key** and **App Secret** and click **Save**. - - Make sure your Firebase OAuth redirect URI (e.g. my-app-12345.firebaseapp.com/__/auth/handler) is set as your - Authorization callback URL in your app's settings page on your [Twitter app's config](https://apps.twitter.com). -- Run the app on your device or simulator. - - Select **Sign In** and select Twitter to begin. - -### Custom Authentication Setup -- In the [Firebase Console](https://console.firebase.google.com/), navigate to **Project settings**: - - Navigate to the **Service accounts** tab. - - Locate the section **All service account**, and click on the `X service accounts` link. This will take you to the Google Cloud Console. -- In the [Google Cloud Console](https://console.cloud.google.com): - - Make sure the right Firebase project is selected. - - From the left "hamburger" menu navigate to the **API Manager** tab. - - Click on the **Credentials** item in the left column. - - Click **New credentials** and select **Service account key**. Select **New service account**, - pick any name, and select **JSON** as the key type. Then click **Create**. - - You should now have a new JSON file for your service account in your Downloads directory. -- In the `quickstart-ios/authentication/LegacyAuthQuickstart/web` directory: - - Open the file `auth.html` in your computer's web browser. - - Click **Choose File** and upload the JSON file you just downloaded. - - Enter any User ID and click **Generate**. - - Copy the token link displayed. -- Run the app on the simulator. - - Select **Sign In** and select Custom to begin. - - Paste in the token you generated earlier. - - When you return to the main screen, you should see the User ID you entered when generating the - token. - -Support -------- - -- [Firebase Support](https://firebase.google.com/support/) - -License -------- - -Copyright 2016 Google, Inc. - -Licensed to the Apache Software Foundation (ASF) under one or more contributor -license agreements. See the NOTICE file distributed with this work for -additional information regarding copyright ownership. The ASF licenses this -file to you under the Apache License, Version 2.0 (the "License"); you may not -use this file except in compliance with the License. You may obtain a copy of -the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -License for the specific language governing permissions and limitations under -the License. diff --git a/authentication/LegacyAuthQuickstart/web/auth.html b/authentication/LegacyAuthQuickstart/web/auth.html deleted file mode 100644 index 7328fbc64..000000000 --- a/authentication/LegacyAuthQuickstart/web/auth.html +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - Custom Token Generator Example - - - - - - - -
-
-

Token Generator

-
-
-
-
-
-

In order to generate a token you'll need to use a service account JSON file provided - by the Google Developers Console view - of your Firebase project. We recommend that once you're done testing with this tool you - delete the service account you made, and create a fresh one for the integration with your - actual authentication system. -

-

- To get started, select your JSON file below. -

- -
-
-
-
-
- -
-
-
-
- - - diff --git a/config/LegacyConfigQuickstart/ConfigExample.xcodeproj/project.pbxproj b/config/LegacyConfigQuickstart/ConfigExample.xcodeproj/project.pbxproj deleted file mode 100644 index 4c866e24a..000000000 --- a/config/LegacyConfigQuickstart/ConfigExample.xcodeproj/project.pbxproj +++ /dev/null @@ -1,875 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 107347112031593F004A66D1 /* ConfigExampleSwiftUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 107347102031593F004A66D1 /* ConfigExampleSwiftUITests.swift */; }; - 1073481B20333B45004A66D1 /* ConfigExampleUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = 1073481A20333B45004A66D1 /* ConfigExampleUITests.m */; }; - 32C355031CBC57CF009B576C /* RemoteConfigDefaults.plist in Resources */ = {isa = PBXBuildFile; fileRef = 32C355021CBC57CF009B576C /* RemoteConfigDefaults.plist */; }; - 32C355041CBC57CF009B576C /* RemoteConfigDefaults.plist in Resources */ = {isa = PBXBuildFile; fileRef = 32C355021CBC57CF009B576C /* RemoteConfigDefaults.plist */; }; - 44DBF868EE4B59A3A3A01384 /* GoogleService-Info.plist in Sources */ = {isa = PBXBuildFile; fileRef = 3F1BE71E3A0003CC3082E839 /* GoogleService-Info.plist */; }; - 5091BAB3FED376BC2777F05C /* GoogleService-Info.plist in Sources */ = {isa = PBXBuildFile; fileRef = 3F1BE71E3A0003CC3082E839 /* GoogleService-Info.plist */; }; - 5F5A53521ADE670C00F81DF0 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F5A53511ADE670C00F81DF0 /* main.m */; }; - 5F5A53551ADE670C00F81DF0 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F5A53541ADE670C00F81DF0 /* AppDelegate.m */; }; - 5F5A53581ADE670C00F81DF0 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F5A53571ADE670C00F81DF0 /* ViewController.m */; }; - 5F5A535B1ADE670C00F81DF0 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5F5A53591ADE670C00F81DF0 /* Main.storyboard */; }; - 5F5A537E1ADE67D500F81DF0 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F5A537D1ADE67D500F81DF0 /* AppDelegate.swift */; }; - 5F5A53801ADE67D500F81DF0 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F5A537F1ADE67D500F81DF0 /* ViewController.swift */; }; - 5F5A539C1ADE69AA00F81DF0 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5F5A53591ADE670C00F81DF0 /* Main.storyboard */; }; - 5F99610A1AE0CF4F0034F503 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5F9961061AE0CF4F0034F503 /* Images.xcassets */; }; - 5F99610B1AE0CF4F0034F503 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5F9961061AE0CF4F0034F503 /* Images.xcassets */; }; - 5F99610C1AE0CF4F0034F503 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5F9961071AE0CF4F0034F503 /* LaunchScreen.xib */; }; - 5F99610D1AE0CF4F0034F503 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5F9961071AE0CF4F0034F503 /* LaunchScreen.xib */; }; - 5FDE055D1B0DAA090037B82F /* AppTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FDE055C1B0DAA090037B82F /* AppTests.m */; }; - BA16017E3251E0846083D3B7 /* GoogleService-Info.plist in Sources */ = {isa = PBXBuildFile; fileRef = 3F1BE71E3A0003CC3082E839 /* GoogleService-Info.plist */; }; - BABE2147292F87FCA7DCA396 /* GoogleService-Info.plist in Sources */ = {isa = PBXBuildFile; fileRef = 3F1BE71E3A0003CC3082E839 /* GoogleService-Info.plist */; }; - C5B8A32837551063A185BE1A /* GoogleService-Info.plist in Sources */ = {isa = PBXBuildFile; fileRef = 3F1BE71E3A0003CC3082E839 /* GoogleService-Info.plist */; }; - DEC82E3B23AAEA35000EA7B1 /* FIREGSignInHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = DEC82E3423AAEA0F000EA7B1 /* FIREGSignInHelper.m */; }; - DEC82E3C23AAEA3E000EA7B1 /* FIREGHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = DEC82E3523AAEA0F000EA7B1 /* FIREGHelper.m */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 107347132031593F004A66D1 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5F5A53441ADE670C00F81DF0 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5F5A53781ADE67D500F81DF0; - remoteInfo = ConfigExampleSwift; - }; - 1073481D20333B45004A66D1 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5F5A53441ADE670C00F81DF0 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5F5A534B1ADE670C00F81DF0; - remoteInfo = ConfigExample; - }; - 5FDE055E1B0DAA090037B82F /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5F5A53441ADE670C00F81DF0 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5F5A534B1ADE670C00F81DF0; - remoteInfo = Config; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 1073470E2031593F004A66D1 /* ConfigExampleSwiftUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ConfigExampleSwiftUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 107347102031593F004A66D1 /* ConfigExampleSwiftUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConfigExampleSwiftUITests.swift; sourceTree = ""; }; - 107347122031593F004A66D1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 1073481820333B45004A66D1 /* ConfigExampleUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ConfigExampleUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 1073481A20333B45004A66D1 /* ConfigExampleUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ConfigExampleUITests.m; sourceTree = ""; }; - 1073481C20333B45004A66D1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 32C355021CBC57CF009B576C /* RemoteConfigDefaults.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = RemoteConfigDefaults.plist; sourceTree = ""; }; - 3F1BE71E3A0003CC3082E839 /* GoogleService-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "../GoogleService-Info.plist"; sourceTree = ""; }; - 5F5A534C1ADE670C00F81DF0 /* ConfigExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ConfigExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 5F5A53501ADE670C00F81DF0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 5F5A53511ADE670C00F81DF0 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - 5F5A53531ADE670C00F81DF0 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; - 5F5A53541ADE670C00F81DF0 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; - 5F5A53561ADE670C00F81DF0 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; - 5F5A53571ADE670C00F81DF0 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; - 5F5A535A1ADE670C00F81DF0 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 5F5A53791ADE67D500F81DF0 /* ConfigExampleSwift.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ConfigExampleSwift.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 5F5A537D1ADE67D500F81DF0 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 5F5A537F1ADE67D500F81DF0 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; - 5F9961061AE0CF4F0034F503 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; - 5F9961071AE0CF4F0034F503 /* LaunchScreen.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = LaunchScreen.xib; sourceTree = ""; }; - 5FDE05581B0DAA090037B82F /* ConfigExampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ConfigExampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 5FDE055C1B0DAA090037B82F /* AppTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppTests.m; sourceTree = ""; }; - DEC82E3323AAEA0F000EA7B1 /* FIREGHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FIREGHelper.h; sourceTree = ""; }; - DEC82E3423AAEA0F000EA7B1 /* FIREGSignInHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FIREGSignInHelper.m; sourceTree = ""; }; - DEC82E3523AAEA0F000EA7B1 /* FIREGHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FIREGHelper.m; sourceTree = ""; }; - DEC82E3623AAEA0F000EA7B1 /* FIREGSignInHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FIREGSignInHelper.h; sourceTree = ""; }; - DED65CF723E9DE6400461312 /* FIREGSignInInfo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FIREGSignInInfo.h; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 1073470B2031593F004A66D1 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1073481520333B45004A66D1 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5F5A53491ADE670C00F81DF0 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5F5A53761ADE67D500F81DF0 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5FDE05551B0DAA090037B82F /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 1073470F2031593F004A66D1 /* ConfigExampleSwiftUITests */ = { - isa = PBXGroup; - children = ( - 107347102031593F004A66D1 /* ConfigExampleSwiftUITests.swift */, - 107347122031593F004A66D1 /* Info.plist */, - ); - path = ConfigExampleSwiftUITests; - sourceTree = ""; - }; - 1073481920333B45004A66D1 /* ConfigExampleUITests */ = { - isa = PBXGroup; - children = ( - 1073481A20333B45004A66D1 /* ConfigExampleUITests.m */, - 1073481C20333B45004A66D1 /* Info.plist */, - ); - path = ConfigExampleUITests; - sourceTree = ""; - }; - 5F5A53431ADE670C00F81DF0 = { - isa = PBXGroup; - children = ( - 5F5A534E1ADE670C00F81DF0 /* ConfigExample */, - 5F5A537A1ADE67D500F81DF0 /* ConfigExampleSwift */, - 5FDE05591B0DAA090037B82F /* ConfigExamleTests */, - 1073470F2031593F004A66D1 /* ConfigExampleSwiftUITests */, - 1073481920333B45004A66D1 /* ConfigExampleUITests */, - DEC82E3223AAEA0F000EA7B1 /* TestUtils */, - 5F5A534D1ADE670C00F81DF0 /* Products */, - 5F9961041AE0CF4F0034F503 /* Shared */, - 3F1BE71E3A0003CC3082E839 /* GoogleService-Info.plist */, - ); - sourceTree = ""; - wrapsLines = 0; - }; - 5F5A534D1ADE670C00F81DF0 /* Products */ = { - isa = PBXGroup; - children = ( - 5F5A534C1ADE670C00F81DF0 /* ConfigExample.app */, - 5F5A53791ADE67D500F81DF0 /* ConfigExampleSwift.app */, - 5FDE05581B0DAA090037B82F /* ConfigExampleTests.xctest */, - 1073470E2031593F004A66D1 /* ConfigExampleSwiftUITests.xctest */, - 1073481820333B45004A66D1 /* ConfigExampleUITests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - 5F5A534E1ADE670C00F81DF0 /* ConfigExample */ = { - isa = PBXGroup; - children = ( - 5F5A53531ADE670C00F81DF0 /* AppDelegate.h */, - 5F5A53541ADE670C00F81DF0 /* AppDelegate.m */, - 5F5A53561ADE670C00F81DF0 /* ViewController.h */, - 5F5A53571ADE670C00F81DF0 /* ViewController.m */, - 5F5A534F1ADE670C00F81DF0 /* Supporting Files */, - ); - path = ConfigExample; - sourceTree = ""; - }; - 5F5A534F1ADE670C00F81DF0 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - 5F5A53591ADE670C00F81DF0 /* Main.storyboard */, - 5F5A53501ADE670C00F81DF0 /* Info.plist */, - 5F5A53511ADE670C00F81DF0 /* main.m */, - 32C355021CBC57CF009B576C /* RemoteConfigDefaults.plist */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - 5F5A537A1ADE67D500F81DF0 /* ConfigExampleSwift */ = { - isa = PBXGroup; - children = ( - 5F5A537D1ADE67D500F81DF0 /* AppDelegate.swift */, - 5F5A537F1ADE67D500F81DF0 /* ViewController.swift */, - ); - path = ConfigExampleSwift; - sourceTree = ""; - }; - 5F9961041AE0CF4F0034F503 /* Shared */ = { - isa = PBXGroup; - children = ( - 5F9961061AE0CF4F0034F503 /* Images.xcassets */, - 5F9961071AE0CF4F0034F503 /* LaunchScreen.xib */, - ); - name = Shared; - path = ../../shared; - sourceTree = ""; - }; - 5FDE05591B0DAA090037B82F /* ConfigExamleTests */ = { - isa = PBXGroup; - children = ( - 5FDE055C1B0DAA090037B82F /* AppTests.m */, - ); - name = ConfigExamleTests; - path = ConfigExampleTests; - sourceTree = ""; - }; - DEC82E3223AAEA0F000EA7B1 /* TestUtils */ = { - isa = PBXGroup; - children = ( - DEC82E3323AAEA0F000EA7B1 /* FIREGHelper.h */, - DEC82E3423AAEA0F000EA7B1 /* FIREGSignInHelper.m */, - DEC82E3523AAEA0F000EA7B1 /* FIREGHelper.m */, - DEC82E3623AAEA0F000EA7B1 /* FIREGSignInHelper.h */, - DED65CF723E9DE6400461312 /* FIREGSignInInfo.h */, - ); - name = TestUtils; - path = ../TestUtils; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 1073470D2031593F004A66D1 /* ConfigExampleSwiftUITests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 107347152031593F004A66D1 /* Build configuration list for PBXNativeTarget "ConfigExampleSwiftUITests" */; - buildPhases = ( - 1073470A2031593F004A66D1 /* Sources */, - 1073470B2031593F004A66D1 /* Frameworks */, - 1073470C2031593F004A66D1 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 107347142031593F004A66D1 /* PBXTargetDependency */, - ); - name = ConfigExampleSwiftUITests; - productName = ConfigExampleSwiftUITests; - productReference = 1073470E2031593F004A66D1 /* ConfigExampleSwiftUITests.xctest */; - productType = "com.apple.product-type.bundle.ui-testing"; - }; - 1073481720333B45004A66D1 /* ConfigExampleUITests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 1073481F20333B45004A66D1 /* Build configuration list for PBXNativeTarget "ConfigExampleUITests" */; - buildPhases = ( - 1073481420333B45004A66D1 /* Sources */, - 1073481520333B45004A66D1 /* Frameworks */, - 1073481620333B45004A66D1 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 1073481E20333B45004A66D1 /* PBXTargetDependency */, - ); - name = ConfigExampleUITests; - productName = ConfigExampleUITests; - productReference = 1073481820333B45004A66D1 /* ConfigExampleUITests.xctest */; - productType = "com.apple.product-type.bundle.ui-testing"; - }; - 5F5A534B1ADE670C00F81DF0 /* ConfigExample */ = { - isa = PBXNativeTarget; - buildConfigurationList = 5F5A536F1ADE670C00F81DF0 /* Build configuration list for PBXNativeTarget "ConfigExample" */; - buildPhases = ( - 5F5A53481ADE670C00F81DF0 /* Sources */, - 5F5A53491ADE670C00F81DF0 /* Frameworks */, - 5F5A534A1ADE670C00F81DF0 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = ConfigExample; - productName = Config; - productReference = 5F5A534C1ADE670C00F81DF0 /* ConfigExample.app */; - productType = "com.apple.product-type.application"; - }; - 5F5A53781ADE67D500F81DF0 /* ConfigExampleSwift */ = { - isa = PBXNativeTarget; - buildConfigurationList = 5F5A53991ADE67D500F81DF0 /* Build configuration list for PBXNativeTarget "ConfigExampleSwift" */; - buildPhases = ( - 5F5A53751ADE67D500F81DF0 /* Sources */, - 5F5A53761ADE67D500F81DF0 /* Frameworks */, - 5F5A53771ADE67D500F81DF0 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = ConfigExampleSwift; - productName = ConfigSwift; - productReference = 5F5A53791ADE67D500F81DF0 /* ConfigExampleSwift.app */; - productType = "com.apple.product-type.application"; - }; - 5FDE05571B0DAA090037B82F /* ConfigExampleTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 5FDE05621B0DAA090037B82F /* Build configuration list for PBXNativeTarget "ConfigExampleTests" */; - buildPhases = ( - 5FDE05541B0DAA090037B82F /* Sources */, - 5FDE05551B0DAA090037B82F /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - 5FDE055F1B0DAA090037B82F /* PBXTargetDependency */, - ); - name = ConfigExampleTests; - productName = ConfigTests; - productReference = 5FDE05581B0DAA090037B82F /* ConfigExampleTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 5F5A53441ADE670C00F81DF0 /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftUpdateCheck = 0920; - LastUpgradeCheck = 1020; - ORGANIZATIONNAME = "Google Inc."; - TargetAttributes = { - 1073470D2031593F004A66D1 = { - CreatedOnToolsVersion = 9.2; - LastSwiftMigration = 1110; - ProvisioningStyle = Automatic; - TestTargetID = 5F5A53781ADE67D500F81DF0; - }; - 1073481720333B45004A66D1 = { - CreatedOnToolsVersion = 9.2; - ProvisioningStyle = Automatic; - TestTargetID = 5F5A534B1ADE670C00F81DF0; - }; - 5F5A534B1ADE670C00F81DF0 = { - CreatedOnToolsVersion = 6.3; - ProvisioningStyle = Automatic; - }; - 5F5A53781ADE67D500F81DF0 = { - CreatedOnToolsVersion = 6.3; - LastSwiftMigration = 1110; - }; - 5FDE05571B0DAA090037B82F = { - CreatedOnToolsVersion = 6.3.2; - TestTargetID = 5F5A534B1ADE670C00F81DF0; - }; - }; - }; - buildConfigurationList = 5F5A53471ADE670C00F81DF0 /* Build configuration list for PBXProject "ConfigExample" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 5F5A53431ADE670C00F81DF0; - productRefGroup = 5F5A534D1ADE670C00F81DF0 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 5F5A534B1ADE670C00F81DF0 /* ConfigExample */, - 5F5A53781ADE67D500F81DF0 /* ConfigExampleSwift */, - 5FDE05571B0DAA090037B82F /* ConfigExampleTests */, - 1073470D2031593F004A66D1 /* ConfigExampleSwiftUITests */, - 1073481720333B45004A66D1 /* ConfigExampleUITests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 1073470C2031593F004A66D1 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1073481620333B45004A66D1 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5F5A534A1ADE670C00F81DF0 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 32C355031CBC57CF009B576C /* RemoteConfigDefaults.plist in Resources */, - 5F99610C1AE0CF4F0034F503 /* LaunchScreen.xib in Resources */, - 5F99610A1AE0CF4F0034F503 /* Images.xcassets in Resources */, - 5F5A535B1ADE670C00F81DF0 /* Main.storyboard in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5F5A53771ADE67D500F81DF0 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 32C355041CBC57CF009B576C /* RemoteConfigDefaults.plist in Resources */, - 5F99610D1AE0CF4F0034F503 /* LaunchScreen.xib in Resources */, - 5F5A539C1ADE69AA00F81DF0 /* Main.storyboard in Resources */, - 5F99610B1AE0CF4F0034F503 /* Images.xcassets in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 1073470A2031593F004A66D1 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 107347112031593F004A66D1 /* ConfigExampleSwiftUITests.swift in Sources */, - BABE2147292F87FCA7DCA396 /* GoogleService-Info.plist in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1073481420333B45004A66D1 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 1073481B20333B45004A66D1 /* ConfigExampleUITests.m in Sources */, - DEC82E3B23AAEA35000EA7B1 /* FIREGSignInHelper.m in Sources */, - DEC82E3C23AAEA3E000EA7B1 /* FIREGHelper.m in Sources */, - BA16017E3251E0846083D3B7 /* GoogleService-Info.plist in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5F5A53481ADE670C00F81DF0 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5F5A53581ADE670C00F81DF0 /* ViewController.m in Sources */, - 5F5A53551ADE670C00F81DF0 /* AppDelegate.m in Sources */, - 5F5A53521ADE670C00F81DF0 /* main.m in Sources */, - 5091BAB3FED376BC2777F05C /* GoogleService-Info.plist in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5F5A53751ADE67D500F81DF0 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5F5A53801ADE67D500F81DF0 /* ViewController.swift in Sources */, - 5F5A537E1ADE67D500F81DF0 /* AppDelegate.swift in Sources */, - 44DBF868EE4B59A3A3A01384 /* GoogleService-Info.plist in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5FDE05541B0DAA090037B82F /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5FDE055D1B0DAA090037B82F /* AppTests.m in Sources */, - C5B8A32837551063A185BE1A /* GoogleService-Info.plist in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 107347142031593F004A66D1 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5F5A53781ADE67D500F81DF0 /* ConfigExampleSwift */; - targetProxy = 107347132031593F004A66D1 /* PBXContainerItemProxy */; - }; - 1073481E20333B45004A66D1 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5F5A534B1ADE670C00F81DF0 /* ConfigExample */; - targetProxy = 1073481D20333B45004A66D1 /* PBXContainerItemProxy */; - }; - 5FDE055F1B0DAA090037B82F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5F5A534B1ADE670C00F81DF0 /* ConfigExample */; - targetProxy = 5FDE055E1B0DAA090037B82F /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - 5F5A53591ADE670C00F81DF0 /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 5F5A535A1ADE670C00F81DF0 /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 107347162031593F004A66D1 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - DEBUG_INFORMATION_FORMAT = dwarf; - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = ConfigExampleSwiftUITests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.quickstart.ConfigExampleSwiftUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = ConfigExampleSwift; - }; - name = Debug; - }; - 107347172031593F004A66D1 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = ConfigExampleSwiftUITests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.quickstart.ConfigExampleSwiftUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = ConfigExampleSwift; - }; - name = Release; - }; - 1073482020333B45004A66D1 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - DEBUG_INFORMATION_FORMAT = dwarf; - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = ConfigExampleUITests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.quickstart.ConfigExampleUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = ConfigExample; - }; - name = Debug; - }; - 1073482120333B45004A66D1 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = ConfigExampleUITests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.quickstart.ConfigExampleUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = ConfigExample; - }; - name = Release; - }; - 5F5A536D1ADE670C00F81DF0 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - ENABLE_BITCODE = NO; - 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_SYMBOLS_PRIVATE_EXTERN = NO; - 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 = 15.0; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 5F5A536E1ADE670C00F81DF0 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = YES; - ENABLE_BITCODE = NO; - 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 = 15.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 5F5A53701ADE670C00F81DF0 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - DEVELOPMENT_TEAM = ""; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = "$(SRCROOT)/ConfigExample/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.quickstart.ConfigExample; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Debug; - }; - 5F5A53711ADE670C00F81DF0 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - DEVELOPMENT_TEAM = ""; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = "$(SRCROOT)/ConfigExample/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.quickstart.ConfigExample; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Release; - }; - 5F5A53951ADE67D500F81DF0 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; - DEVELOPMENT_TEAM = ""; - INFOPLIST_FILE = "$(SRCROOT)/ConfigExample/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.quickstart.ConfigExample; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - }; - name = Debug; - }; - 5F5A53961ADE67D500F81DF0 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; - DEVELOPMENT_TEAM = ""; - INFOPLIST_FILE = "$(SRCROOT)/ConfigExample/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.quickstart.ConfigExample; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 5.0; - }; - name = Release; - }; - 5FDE05601B0DAA090037B82F /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - HEADER_SEARCH_PATHS = ( - "$(inherited)", - /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, - Config, - ); - INFOPLIST_FILE = ConfigExample/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/ConfigExample.app/ConfigExample"; - }; - name = Debug; - }; - 5FDE05611B0DAA090037B82F /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - HEADER_SEARCH_PATHS = ( - "$(inherited)", - /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, - Config, - ); - INFOPLIST_FILE = ConfigExample/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/ConfigExample.app/ConfigExample"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 107347152031593F004A66D1 /* Build configuration list for PBXNativeTarget "ConfigExampleSwiftUITests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 107347162031593F004A66D1 /* Debug */, - 107347172031593F004A66D1 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 1073481F20333B45004A66D1 /* Build configuration list for PBXNativeTarget "ConfigExampleUITests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1073482020333B45004A66D1 /* Debug */, - 1073482120333B45004A66D1 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 5F5A53471ADE670C00F81DF0 /* Build configuration list for PBXProject "ConfigExample" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 5F5A536D1ADE670C00F81DF0 /* Debug */, - 5F5A536E1ADE670C00F81DF0 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 5F5A536F1ADE670C00F81DF0 /* Build configuration list for PBXNativeTarget "ConfigExample" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 5F5A53701ADE670C00F81DF0 /* Debug */, - 5F5A53711ADE670C00F81DF0 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 5F5A53991ADE67D500F81DF0 /* Build configuration list for PBXNativeTarget "ConfigExampleSwift" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 5F5A53951ADE67D500F81DF0 /* Debug */, - 5F5A53961ADE67D500F81DF0 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 5FDE05621B0DAA090037B82F /* Build configuration list for PBXNativeTarget "ConfigExampleTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 5FDE05601B0DAA090037B82F /* Debug */, - 5FDE05611B0DAA090037B82F /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 5F5A53441ADE670C00F81DF0 /* Project object */; -} diff --git a/config/LegacyConfigQuickstart/ConfigExample.xcodeproj/xcshareddata/xcschemes/ConfigExample.xcscheme b/config/LegacyConfigQuickstart/ConfigExample.xcodeproj/xcshareddata/xcschemes/ConfigExample.xcscheme deleted file mode 100644 index 3776b32c0..000000000 --- a/config/LegacyConfigQuickstart/ConfigExample.xcodeproj/xcshareddata/xcschemes/ConfigExample.xcscheme +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/config/LegacyConfigQuickstart/ConfigExample.xcodeproj/xcshareddata/xcschemes/ConfigExampleSwift.xcscheme b/config/LegacyConfigQuickstart/ConfigExample.xcodeproj/xcshareddata/xcschemes/ConfigExampleSwift.xcscheme deleted file mode 100644 index ea65442d0..000000000 --- a/config/LegacyConfigQuickstart/ConfigExample.xcodeproj/xcshareddata/xcschemes/ConfigExampleSwift.xcscheme +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/config/LegacyConfigQuickstart/ConfigExample/.clang-format b/config/LegacyConfigQuickstart/ConfigExample/.clang-format deleted file mode 100644 index 1f09ce0f2..000000000 --- a/config/LegacyConfigQuickstart/ConfigExample/.clang-format +++ /dev/null @@ -1,4 +0,0 @@ -BasedOnStyle: Google -ColumnLimit: 100 -BinPackParameters: false -AllowAllParametersOfDeclarationOnNextLine: true diff --git a/config/LegacyConfigQuickstart/ConfigExample/AppDelegate.h b/config/LegacyConfigQuickstart/ConfigExample/AppDelegate.h deleted file mode 100644 index 66dc0c1c6..000000000 --- a/config/LegacyConfigQuickstart/ConfigExample/AppDelegate.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -@import UIKit; - -@interface AppDelegate : UIResponder - -@property(nonatomic, strong) UIWindow *window; - -@end diff --git a/config/LegacyConfigQuickstart/ConfigExample/AppDelegate.m b/config/LegacyConfigQuickstart/ConfigExample/AppDelegate.m deleted file mode 100644 index c825f95a0..000000000 --- a/config/LegacyConfigQuickstart/ConfigExample/AppDelegate.m +++ /dev/null @@ -1,30 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "AppDelegate.h" -@import FirebaseCore; - -@implementation AppDelegate - -- (BOOL)application:(UIApplication *)application - didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - // [START configure_firebase] - [FIRApp configure]; - // [END configure_firebase] - return YES; -} - -@end diff --git a/config/LegacyConfigQuickstart/ConfigExample/Base.lproj/Main.storyboard b/config/LegacyConfigQuickstart/ConfigExample/Base.lproj/Main.storyboard deleted file mode 100644 index 422802646..000000000 --- a/config/LegacyConfigQuickstart/ConfigExample/Base.lproj/Main.storyboard +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/config/LegacyConfigQuickstart/ConfigExample/Info.plist b/config/LegacyConfigQuickstart/ConfigExample/Info.plist deleted file mode 100644 index 35e706904..000000000 --- a/config/LegacyConfigQuickstart/ConfigExample/Info.plist +++ /dev/null @@ -1,51 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIcons - - CFBundleIcons~ipad - - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UILaunchStoryboardName - Main - UIMainStoryboardFile - Main - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/config/LegacyConfigQuickstart/ConfigExample/RemoteConfigDefaults.plist b/config/LegacyConfigQuickstart/ConfigExample/RemoteConfigDefaults.plist deleted file mode 100644 index dd1561393..000000000 --- a/config/LegacyConfigQuickstart/ConfigExample/RemoteConfigDefaults.plist +++ /dev/null @@ -1,12 +0,0 @@ - - - - - loading_phrase - Fetching config... - welcome_message_caps - - welcome_message - Welcome to my awesome app! - - diff --git a/config/LegacyConfigQuickstart/ConfigExample/ViewController.h b/config/LegacyConfigQuickstart/ConfigExample/ViewController.h deleted file mode 100644 index 5f0f60a93..000000000 --- a/config/LegacyConfigQuickstart/ConfigExample/ViewController.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -@import UIKit; -@import FirebaseRemoteConfig; - -@interface ViewController : UIViewController -@property (weak, nonatomic) IBOutlet UILabel *welcomeLabel; -@property (weak, nonatomic) IBOutlet UIButton *fetchButton; -@property (nonatomic, strong) FIRRemoteConfig *remoteConfig; -@end diff --git a/config/LegacyConfigQuickstart/ConfigExample/ViewController.m b/config/LegacyConfigQuickstart/ConfigExample/ViewController.m deleted file mode 100644 index 75e84bfa2..000000000 --- a/config/LegacyConfigQuickstart/ConfigExample/ViewController.m +++ /dev/null @@ -1,113 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "ViewController.h" -@import FirebaseRemoteConfig; - -@implementation ViewController - -NSString *const kWelcomeMessageConfigKey = @"welcome_message"; -NSString *const kWelcomeMessageCapsConfigKey = @"welcome_message_caps"; -NSString *const kLoadingPhraseConfigKey = @"loading_phrase"; - -- (void)viewDidLoad { - [super viewDidLoad]; - // [START get_remote_config_instance] - self.remoteConfig = [FIRRemoteConfig remoteConfig]; - // [END get_remote_config_instance] - - // Create a Remote Config Setting to enable developer mode, which you can use to increase - // the number of fetches available per hour during development. See Best Practices in the - // README for more information. - // [START enable_dev_mode] - FIRRemoteConfigSettings *remoteConfigSettings = [[FIRRemoteConfigSettings alloc] init]; - remoteConfigSettings.minimumFetchInterval = 0; - self.remoteConfig.configSettings = remoteConfigSettings; - // [END enable_dev_mode] - - // Set default Remote Config parameter values. An app uses the in-app default values until you - // update any values that you want to change in the Firebase console. See Best Practices in the - // README for more information. - // [START set_default_values] - [self.remoteConfig setDefaultsFromPlistFileName:@"RemoteConfigDefaults"]; - // [END set_default_values] - - // [START add_config_update_listener] - __weak __typeof__(self) weakSelf = self; - [self.remoteConfig addOnConfigUpdateListener:^(FIRRemoteConfigUpdate * _Nonnull configUpdate, NSError * _Nullable error) { - if (error != nil) { - NSLog(@"Error listening for config updates %@", error.localizedDescription); - } else { - NSLog(@"Updated keys: %@", configUpdate.updatedKeys); - __typeof__(self) strongSelf = weakSelf; - [strongSelf.remoteConfig activateWithCompletion:^(BOOL changed, NSError * _Nullable error) { - if (error != nil) { - NSLog(@"Activate error %@", error.localizedDescription); - } - - dispatch_async(dispatch_get_main_queue(), ^{ - [strongSelf displayWelcome]; - }); - }]; - } - }]; - // [END add_config_update_listener] - - [self fetchConfig]; - [super viewDidLoad]; -} - -- (void)fetchConfig { - self.welcomeLabel.text = self.remoteConfig[kLoadingPhraseConfigKey].stringValue; - - // [START fetch_config_with_callback] - [self.remoteConfig fetchWithCompletionHandler:^(FIRRemoteConfigFetchStatus status, NSError *error) { - if (status == FIRRemoteConfigFetchStatusSuccess) { - NSLog(@"Config fetched!"); - [self.remoteConfig activateWithCompletion:^(BOOL changed, NSError * _Nullable error) { - if (error != nil) { - NSLog(@"Activate error: %@", error.localizedDescription); - } else { - dispatch_async(dispatch_get_main_queue(), ^{ - [self displayWelcome]; - }); - } - }]; - } else { - NSLog(@"Config not fetched"); - NSLog(@"Error %@", error.localizedDescription); - } - }]; - // [END fetch_config_with_callback] -} - -// Display welcome message in all caps if welcome_message_caps is set to true. Otherwise -// display welcome message as fetched from welcome_message. -- (void)displayWelcome { - // [START get_config_value] - NSString *welcomeMessage = self.remoteConfig[kWelcomeMessageConfigKey].stringValue; - // [END get_config_value] - if (self.remoteConfig[kWelcomeMessageCapsConfigKey].boolValue) { - welcomeMessage = [welcomeMessage uppercaseString]; - } - self.welcomeLabel.text = welcomeMessage; -} - -- (IBAction)handleFetchTouch:(id)sender { - [self fetchConfig]; -} - -@end diff --git a/config/LegacyConfigQuickstart/ConfigExample/main.m b/config/LegacyConfigQuickstart/ConfigExample/main.m deleted file mode 100644 index bc10c3ac6..000000000 --- a/config/LegacyConfigQuickstart/ConfigExample/main.m +++ /dev/null @@ -1,24 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import -#import "AppDelegate.h" - -int main(int argc, char* argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/config/LegacyConfigQuickstart/ConfigExampleSwift/AppDelegate.swift b/config/LegacyConfigQuickstart/ConfigExampleSwift/AppDelegate.swift deleted file mode 100644 index ec466c6fa..000000000 --- a/config/LegacyConfigQuickstart/ConfigExampleSwift/AppDelegate.swift +++ /dev/null @@ -1,32 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import UIKit -import FirebaseCore - -@UIApplicationMain -class AppDelegate: UIResponder, UIApplicationDelegate { - var window: UIWindow? - - func application(_ application: UIApplication, - didFinishLaunchingWithOptions launchOptions: [UIApplication - .LaunchOptionsKey: Any]?) -> Bool { - // [START configure_firebase] - FirebaseApp.configure() - // [END configure_firebase] - return true - } -} diff --git a/config/LegacyConfigQuickstart/ConfigExampleSwift/ViewController.swift b/config/LegacyConfigQuickstart/ConfigExampleSwift/ViewController.swift deleted file mode 100644 index 94fe190ec..000000000 --- a/config/LegacyConfigQuickstart/ConfigExampleSwift/ViewController.swift +++ /dev/null @@ -1,91 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import UIKit -import FirebaseRemoteConfig - -@objc(ViewController) -class ViewController: UIViewController { - let welcomeMessageConfigKey = "welcome_message" - let welcomeMessageCapsConfigKey = "welcome_message_caps" - let loadingPhraseConfigKey = "loading_phrase" - - var remoteConfig: RemoteConfig! - @IBOutlet var welcomeLabel: UILabel! - @IBOutlet var fetchButton: UIButton! - - override func viewDidLoad() { - super.viewDidLoad() - // [START get_remote_config_instance] - remoteConfig = RemoteConfig.remoteConfig() - // [END get_remote_config_instance] - - // Create a Remote Config Setting to enable developer mode, which you can use to increase - // the number of fetches available per hour during development. See Best Practices in the - // README for more information. - // [START enable_dev_mode] - let settings = RemoteConfigSettings() - settings.minimumFetchInterval = 0 - remoteConfig.configSettings = settings - // [END enable_dev_mode] - - // Set default Remote Config parameter values. An app uses the in-app default values, and - // when you need to adjust those defaults, you set an updated value for only the values you - // want to change in the Firebase console. See Best Practices in the README for more - // information. - // [START set_default_values] - remoteConfig.setDefaults(fromPlist: "RemoteConfigDefaults") - // [END set_default_values] - - fetchConfig() - } - - func fetchConfig() { - welcomeLabel.text = remoteConfig[loadingPhraseConfigKey].stringValue - - // [START fetch_config_with_callback] - remoteConfig.fetch { (status, error) -> Void in - if status == .success { - print("Config fetched!") - self.remoteConfig.activate { changed, error in - // ... - } - } else { - print("Config not fetched") - print("Error: \(error?.localizedDescription ?? "No error available.")") - } - self.displayWelcome() - } - // [END fetch_config_with_callback] - } - - func displayWelcome() { - // [START get_config_value] - var welcomeMessage = remoteConfig[welcomeMessageConfigKey].stringValue - // [END get_config_value] - - if remoteConfig[welcomeMessageCapsConfigKey].boolValue { - welcomeMessage = welcomeMessage?.uppercased() - } - welcomeLabel.text = welcomeMessage - } - - // Display welcome message in all caps if welcome_message_caps is set to true. Otherwise - // display welcome message as fetched from welcome_message. - @IBAction func handleFetchTouch(_ sender: AnyObject) { - fetchConfig() - } -} diff --git a/config/LegacyConfigQuickstart/ConfigExampleSwiftUITests/ConfigExampleSwiftUITests.swift b/config/LegacyConfigQuickstart/ConfigExampleSwiftUITests/ConfigExampleSwiftUITests.swift deleted file mode 100644 index 9a4e6d93b..000000000 --- a/config/LegacyConfigQuickstart/ConfigExampleSwiftUITests/ConfigExampleSwiftUITests.swift +++ /dev/null @@ -1,42 +0,0 @@ -// -// Copyright (c) 2019 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import XCTest - -class ConfigExampleSwiftUITests: XCTestCase { - override func setUp() { - super.setUp() - - // Put setup code here. This method is called before the invocation of each test method in the class. - - // In UI tests it is usually best to stop immediately when a failure occurs. - continueAfterFailure = false - // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. - XCUIApplication().launch() - - // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. - } - - override func tearDown() { - // Put teardown code here. This method is called after the invocation of each test method in the class. - super.tearDown() - } - - func testExample() { - // Use recording to get started writing UI tests. - // Use XCTAssert and related functions to verify your tests produce the correct results. - } -} diff --git a/config/LegacyConfigQuickstart/ConfigExampleSwiftUITests/Info.plist b/config/LegacyConfigQuickstart/ConfigExampleSwiftUITests/Info.plist deleted file mode 100644 index 6c40a6cd0..000000000 --- a/config/LegacyConfigQuickstart/ConfigExampleSwiftUITests/Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - - diff --git a/config/LegacyConfigQuickstart/ConfigExampleTests/AppTests.m b/config/LegacyConfigQuickstart/ConfigExampleTests/AppTests.m deleted file mode 100644 index e60dafc80..000000000 --- a/config/LegacyConfigQuickstart/ConfigExampleTests/AppTests.m +++ /dev/null @@ -1,40 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import -#import - -#import -#import - -@interface AppTests : XCTestCase -@end - -@implementation AppTests - -- (void)setUp { - [super setUp]; - if ([FIRApp defaultApp] == nil) { - [FIRApp configure]; - } -} - -- (void)testRemoteConfig { - FIRRemoteConfig *remoteConfig = [FIRRemoteConfig remoteConfig]; - XCTAssert([remoteConfig isKindOfClass:[FIRRemoteConfig class]]); -} - -@end diff --git a/config/LegacyConfigQuickstart/ConfigExampleUITests/ConfigExampleUITests.m b/config/LegacyConfigQuickstart/ConfigExampleUITests/ConfigExampleUITests.m deleted file mode 100644 index fd3ce2a20..000000000 --- a/config/LegacyConfigQuickstart/ConfigExampleUITests/ConfigExampleUITests.m +++ /dev/null @@ -1,46 +0,0 @@ -// -// Copyright (c) 2019 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import -#import "FIREGHelper.h" - -@interface ConfigUITest : XCTestCase -@end - -@implementation ConfigUITest { - XCUIApplication *_app; -} - -- (void)setUp { - [super setUp]; - _app = [[XCUIApplication alloc] init]; - [_app launch]; -} - -- (void)testRemoteConfig { - // Verify that Remote Config Example app is launched successfully and its title is visible. - XCTAssertTrue([_app navigationBars][@"Remote Config Example"].exists); - - // Tap on 'Fetch Remote Config' button. - [_app.buttons[@"Fetch Remote Config"] tap]; - - // Verify that the Remote Config value is visible. - XCUIElement* config = [_app staticTexts][@"WELCOME TO MY AWESOME APP!"]; - FIRWaitForVisibleWithTimeout(config, 20); - XCTAssertTrue(config.exists); -} - -@end diff --git a/config/LegacyConfigQuickstart/ConfigExampleUITests/Info.plist b/config/LegacyConfigQuickstart/ConfigExampleUITests/Info.plist deleted file mode 100644 index 6c40a6cd0..000000000 --- a/config/LegacyConfigQuickstart/ConfigExampleUITests/Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - - diff --git a/config/LegacyConfigQuickstart/Podfile b/config/LegacyConfigQuickstart/Podfile deleted file mode 100644 index 0b1eee652..000000000 --- a/config/LegacyConfigQuickstart/Podfile +++ /dev/null @@ -1,12 +0,0 @@ -# ConfigExample -use_frameworks! -platform :ios, '15.0' - -pod 'FirebaseRemoteConfig' - -target 'ConfigExample' do -end -target 'ConfigExampleSwift' do -end -target 'ConfigExampleTests' do -end diff --git a/config/LegacyConfigQuickstart/Podfile.lock b/config/LegacyConfigQuickstart/Podfile.lock deleted file mode 100644 index 67d0d4d82..000000000 --- a/config/LegacyConfigQuickstart/Podfile.lock +++ /dev/null @@ -1,66 +0,0 @@ -PODS: - - FirebaseABTesting (12.1.0): - - FirebaseCore (~> 12.1.0) - - FirebaseCore (12.1.0): - - FirebaseCoreInternal (~> 12.1.0) - - GoogleUtilities/Environment (~> 8.1) - - GoogleUtilities/Logger (~> 8.1) - - FirebaseCoreInternal (12.1.0): - - "GoogleUtilities/NSData+zlib (~> 8.1)" - - FirebaseInstallations (12.1.0): - - FirebaseCore (~> 12.1.0) - - GoogleUtilities/Environment (~> 8.1) - - GoogleUtilities/UserDefaults (~> 8.1) - - PromisesObjC (~> 2.4) - - FirebaseRemoteConfig (12.1.0): - - FirebaseABTesting (~> 12.1.0) - - FirebaseCore (~> 12.1.0) - - FirebaseInstallations (~> 12.1.0) - - FirebaseRemoteConfigInterop (~> 12.1.0) - - FirebaseSharedSwift (~> 12.1.0) - - GoogleUtilities/Environment (~> 8.1) - - "GoogleUtilities/NSData+zlib (~> 8.1)" - - FirebaseRemoteConfigInterop (12.1.0) - - FirebaseSharedSwift (12.1.0) - - GoogleUtilities/Environment (8.1.0): - - GoogleUtilities/Privacy - - GoogleUtilities/Logger (8.1.0): - - GoogleUtilities/Environment - - GoogleUtilities/Privacy - - "GoogleUtilities/NSData+zlib (8.1.0)": - - GoogleUtilities/Privacy - - GoogleUtilities/Privacy (8.1.0) - - GoogleUtilities/UserDefaults (8.1.0): - - GoogleUtilities/Logger - - GoogleUtilities/Privacy - - PromisesObjC (2.4.0) - -DEPENDENCIES: - - FirebaseRemoteConfig - -SPEC REPOS: - trunk: - - FirebaseABTesting - - FirebaseCore - - FirebaseCoreInternal - - FirebaseInstallations - - FirebaseRemoteConfig - - FirebaseRemoteConfigInterop - - FirebaseSharedSwift - - GoogleUtilities - - PromisesObjC - -SPEC CHECKSUMS: - FirebaseABTesting: dfac26fef831cb16c35aa2df8bf5990ddada81d9 - FirebaseCore: 5a452ffa66f37c8e281076996837626c5d08c090 - FirebaseCoreInternal: ff526c22671bb564d1b34a47615e29ba99389dee - FirebaseInstallations: 6836550c466a6c3f753a777bec6f4e58ea228779 - FirebaseRemoteConfig: d4b28137ecdf1d92ddeb886066074eb3936736a7 - FirebaseRemoteConfigInterop: a30ffe29b80e3aec9580a44ec9deb7e19e08e6e8 - FirebaseSharedSwift: ee4344de8a4d5b5290de3600667307a44f85fd40 - GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1 - PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 - -PODFILE CHECKSUM: 71083e79bdc3ce5e9a6678499506ae36d0b7449a - -COCOAPODS: 1.16.2 diff --git a/config/LegacyConfigQuickstart/README.md b/config/LegacyConfigQuickstart/README.md deleted file mode 100644 index 174ee2f82..000000000 --- a/config/LegacyConfigQuickstart/README.md +++ /dev/null @@ -1,102 +0,0 @@ -Firebase Remote Config Quickstart -============================= - -The Firebase Remote Config iOS quickstart app demonstrates using Remote -Config to define user-facing text in an iOS app. - -Introduction ------------- - -This is a simple example of using Remote Config to override in-app default -values by defining service-side parameter values in the Firebase console. This -example demonstrates a small subset of the capabilities of Firebase Remote -Config. To learn more about how you can use Firebase Remote Config in your app, -see -[Firebase Remote Config Introduction](https://firebase.google.com/docs/remote-config/). - -Getting started ---------------- - -1. [Add Firebase to your iOS Project](https://firebase.google.com/docs/ios/setup). -2. [Create a Remote Config project for the quickstart sample](https://firebase.google.com/docs/remote-config/ios#create_a_product_name_project_for_the_quickstart_sample), - defining the parameter values and parameter keys used by the sample. -3. Run the sample on an iOS device or emulator. -4. Change one or more parameter values in the Firebase Console (the value of - `welcome_message`, `welcome_message_caps`, or both). -5. Tap **Fetch Remote Config** in the app to fetch new parameter values and see - the resulting change in the app. - -Best practices --------------- -This section provides some additional information about how the quickstart -example sets in-app default parameter values and fetches values from the Remote -Config service. - -### In-app default parameter values ### - -In-app default values are set using a plist file with the -`setDefaultsFromPlistFileName` method in this example, but you can also set -in-app default values inline using the other `setDefaults` methods of the -[`FIRRemoteConfig` class](https://firebase.google.com/docs/reference/ios/firebaseremoteconfig/api/reference/Classes/FIRRemoteConfig). - -Then, you can override only those values that you need to change from the -Firebase console. This lets you use Remote Config for any default value that you -might want to override in the future, without the need to set all of those -values in the Firebase console. - -### Fetch values from the Remote Config service ### - -When an app calls `fetchWithExpirationDuration:completionHandler`, updated -parameter values are fetched from the Remote Config service if either - -* the last successful fetch occurred more than 12 hours ago, or -* a value less than 43200 (the number of seconds in 12 hours) is specified for - `TimeInterval`. - -Otherwise, cached parameter values are used. - -Fetched values are cached locally, but not immediately activated. To activate -fetched values so that they take effect, call the `activateFetched` method. In -the quickstart sample app, you call this method from the UI by tapping -**Fetch Remote Config**. - -You can also create a Remote Config Setting to enable developer mode, but you -must remove this setting before distributing your app. Fetching Remote Config -data from the service is normally limited to a few requests per hour. By -enabling developer mode, you can make many more requests per hour, so you can -test your app with different Remote Config parameter values during development. - -- To learn more about fetching data from Remote Config, see the Remote Config - Frequently Asked Question (FAQ) on - [fetching and activating parameter values](https://firebase.google.com/support/faq#remote-config-values). -- To learn about parameters and conditions that you can use to change the - behavior and appearance of your app for segments of your userbase, see - [Remote Config Parameters and Conditions](https://firebase.google.com/docs/remote-config/parameters). -- To learn more about the Remote Config API, see - [Remote Config API Overview](https://firebase.google.com/docs/remote-config/api-overview). - -Support -------- - -- [Stack Overflow](https://stackoverflow.com/questions/tagged/firebase-remote-config) -- [Firebase Support](https://firebase.google.com/support/) - -License -------- - -Copyright 2015 Google, Inc. - -Licensed to the Apache Software Foundation (ASF) under one or more contributor -license agreements. See the NOTICE file distributed with this work for -additional information regarding copyright ownership. The ASF licenses this -file to you under the Apache License, Version 2.0 (the "License"); you may not -use this file except in compliance with the License. You may obtain a copy of -the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -License for the specific language governing permissions and limitations under -the License. diff --git a/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExample.xcodeproj/project.pbxproj b/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExample.xcodeproj/project.pbxproj deleted file mode 100644 index d8e38e95f..000000000 --- a/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExample.xcodeproj/project.pbxproj +++ /dev/null @@ -1,954 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 52; - objects = { - -/* Begin PBXBuildFile section */ - 0DDAE1A41098B006303515E2 /* GoogleService-Info.plist in Sources */ = {isa = PBXBuildFile; fileRef = A635694C8BE79DC67214731F /* GoogleService-Info.plist */; }; - 1073472D20315969004A66D1 /* CrashReportingExampleSwiftUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1073472C20315969004A66D1 /* CrashReportingExampleSwiftUITests.swift */; }; - 1073482920333B71004A66D1 /* CrashReportingExampleUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = 1073482820333B71004A66D1 /* CrashReportingExampleUITests.m */; }; - 5F5A53521ADE670C00F81DF0 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F5A53511ADE670C00F81DF0 /* main.m */; }; - 5F5A53551ADE670C00F81DF0 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F5A53541ADE670C00F81DF0 /* AppDelegate.m */; }; - 5F5A53581ADE670C00F81DF0 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F5A53571ADE670C00F81DF0 /* ViewController.m */; }; - 5F5A535B1ADE670C00F81DF0 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5F5A53591ADE670C00F81DF0 /* Main.storyboard */; }; - 5F5A537E1ADE67D500F81DF0 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F5A537D1ADE67D500F81DF0 /* AppDelegate.swift */; }; - 5F5A53801ADE67D500F81DF0 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F5A537F1ADE67D500F81DF0 /* ViewController.swift */; }; - 5F5A539C1ADE69AA00F81DF0 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5F5A53591ADE670C00F81DF0 /* Main.storyboard */; }; - 5FDE055D1B0DAA090037B82F /* AppTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FDE055C1B0DAA090037B82F /* AppTests.m */; }; - 7FD4CBFA51EAB8A25764BF8B /* GoogleService-Info.plist in Sources */ = {isa = PBXBuildFile; fileRef = A635694C8BE79DC67214731F /* GoogleService-Info.plist */; }; - 85F2A78F84665B33B5E340A6 /* GoogleService-Info.plist in Sources */ = {isa = PBXBuildFile; fileRef = A635694C8BE79DC67214731F /* GoogleService-Info.plist */; }; - 8D07E3D5268BF7210002C432 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 8D07E3D3268BF7210002C432 /* Images.xcassets */; }; - 8D07E3D6268BF7210002C432 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8D07E3D4268BF7210002C432 /* LaunchScreen.xib */; }; - 8D07E3D7268BF7250002C432 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 8D07E3D3268BF7210002C432 /* Images.xcassets */; }; - 8D07E3D8268BF7280002C432 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8D07E3D4268BF7210002C432 /* LaunchScreen.xib */; }; - A65DFC68874CB909A594C72A /* GoogleService-Info.plist in Sources */ = {isa = PBXBuildFile; fileRef = A635694C8BE79DC67214731F /* GoogleService-Info.plist */; }; - FAC4F6426F15EB440B635B88 /* GoogleService-Info.plist in Sources */ = {isa = PBXBuildFile; fileRef = A635694C8BE79DC67214731F /* GoogleService-Info.plist */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 1073472F20315969004A66D1 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5F5A53441ADE670C00F81DF0 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5F5A53781ADE67D500F81DF0; - remoteInfo = CrashReportingExampleSwift; - }; - 1073482B20333B71004A66D1 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5F5A53441ADE670C00F81DF0 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5F5A534B1ADE670C00F81DF0; - remoteInfo = CrashReportingExample; - }; - 5FDE055E1B0DAA090037B82F /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5F5A53441ADE670C00F81DF0 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5F5A534B1ADE670C00F81DF0; - remoteInfo = CrashReporter; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 1073472A20315969004A66D1 /* CrashlyticsExampleSwiftUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CrashlyticsExampleSwiftUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 1073472C20315969004A66D1 /* CrashReportingExampleSwiftUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CrashReportingExampleSwiftUITests.swift; sourceTree = ""; }; - 1073472E20315969004A66D1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 1073482620333B71004A66D1 /* CrashlyticsExampleUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CrashlyticsExampleUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 1073482820333B71004A66D1 /* CrashReportingExampleUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CrashReportingExampleUITests.m; sourceTree = ""; }; - 1073482A20333B71004A66D1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 5F5A534C1ADE670C00F81DF0 /* CrashlyticsExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = CrashlyticsExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 5F5A53501ADE670C00F81DF0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 5F5A53511ADE670C00F81DF0 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - 5F5A53531ADE670C00F81DF0 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; - 5F5A53541ADE670C00F81DF0 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; - 5F5A53561ADE670C00F81DF0 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; - 5F5A53571ADE670C00F81DF0 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; - 5F5A535A1ADE670C00F81DF0 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 5F5A53791ADE67D500F81DF0 /* CrashlyticsExampleSwift.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = CrashlyticsExampleSwift.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 5F5A537D1ADE67D500F81DF0 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 5F5A537F1ADE67D500F81DF0 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; - 5FDE05581B0DAA090037B82F /* CrashlyticsExampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CrashlyticsExampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 5FDE055C1B0DAA090037B82F /* AppTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppTests.m; sourceTree = ""; }; - 8D07E3D3268BF7210002C432 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = ../../shared/Images.xcassets; sourceTree = ""; }; - 8D07E3D4268BF7210002C432 /* LaunchScreen.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = LaunchScreen.xib; path = ../../shared/LaunchScreen.xib; sourceTree = ""; }; - A635694C8BE79DC67214731F /* GoogleService-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "../GoogleService-Info.plist"; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 1073472720315969004A66D1 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1073482320333B71004A66D1 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5F5A53491ADE670C00F81DF0 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5F5A53761ADE67D500F81DF0 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5FDE05551B0DAA090037B82F /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 1073472B20315969004A66D1 /* CrashlyticsExampleSwiftUITests */ = { - isa = PBXGroup; - children = ( - 1073472C20315969004A66D1 /* CrashReportingExampleSwiftUITests.swift */, - 1073472E20315969004A66D1 /* Info.plist */, - ); - path = CrashlyticsExampleSwiftUITests; - sourceTree = ""; - }; - 1073482720333B71004A66D1 /* CrashlyticsExampleUITests */ = { - isa = PBXGroup; - children = ( - 1073482820333B71004A66D1 /* CrashReportingExampleUITests.m */, - 1073482A20333B71004A66D1 /* Info.plist */, - ); - path = CrashlyticsExampleUITests; - sourceTree = ""; - }; - 5F5A53431ADE670C00F81DF0 = { - isa = PBXGroup; - children = ( - 5F5A534E1ADE670C00F81DF0 /* CrashlyticsExample */, - 5F5A537A1ADE67D500F81DF0 /* CrashlyticsExampleSwift */, - 5FDE05591B0DAA090037B82F /* CrashlyticsExampleTests */, - 1073472B20315969004A66D1 /* CrashlyticsExampleSwiftUITests */, - 1073482720333B71004A66D1 /* CrashlyticsExampleUITests */, - 5F5A534D1ADE670C00F81DF0 /* Products */, - 5F9961041AE0CF4F0034F503 /* Shared */, - 71EF67FCA020EBD17372A579 /* Pods */, - A635694C8BE79DC67214731F /* GoogleService-Info.plist */, - ); - sourceTree = ""; - wrapsLines = 0; - }; - 5F5A534D1ADE670C00F81DF0 /* Products */ = { - isa = PBXGroup; - children = ( - 5F5A534C1ADE670C00F81DF0 /* CrashlyticsExample.app */, - 5F5A53791ADE67D500F81DF0 /* CrashlyticsExampleSwift.app */, - 5FDE05581B0DAA090037B82F /* CrashlyticsExampleTests.xctest */, - 1073472A20315969004A66D1 /* CrashlyticsExampleSwiftUITests.xctest */, - 1073482620333B71004A66D1 /* CrashlyticsExampleUITests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - 5F5A534E1ADE670C00F81DF0 /* CrashlyticsExample */ = { - isa = PBXGroup; - children = ( - 5F5A53531ADE670C00F81DF0 /* AppDelegate.h */, - 5F5A53541ADE670C00F81DF0 /* AppDelegate.m */, - 5F5A53561ADE670C00F81DF0 /* ViewController.h */, - 5F5A53571ADE670C00F81DF0 /* ViewController.m */, - 5F5A534F1ADE670C00F81DF0 /* Supporting Files */, - ); - path = CrashlyticsExample; - sourceTree = ""; - }; - 5F5A534F1ADE670C00F81DF0 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - 5F5A53591ADE670C00F81DF0 /* Main.storyboard */, - 5F5A53501ADE670C00F81DF0 /* Info.plist */, - 5F5A53511ADE670C00F81DF0 /* main.m */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - 5F5A537A1ADE67D500F81DF0 /* CrashlyticsExampleSwift */ = { - isa = PBXGroup; - children = ( - 5F5A537D1ADE67D500F81DF0 /* AppDelegate.swift */, - 5F5A537F1ADE67D500F81DF0 /* ViewController.swift */, - ); - path = CrashlyticsExampleSwift; - sourceTree = ""; - }; - 5F9961041AE0CF4F0034F503 /* Shared */ = { - isa = PBXGroup; - children = ( - 8D07E3D3268BF7210002C432 /* Images.xcassets */, - 8D07E3D4268BF7210002C432 /* LaunchScreen.xib */, - ); - name = Shared; - path = ../shared; - sourceTree = ""; - }; - 5FDE05591B0DAA090037B82F /* CrashlyticsExampleTests */ = { - isa = PBXGroup; - children = ( - 5FDE055C1B0DAA090037B82F /* AppTests.m */, - ); - path = CrashlyticsExampleTests; - sourceTree = ""; - }; - 71EF67FCA020EBD17372A579 /* Pods */ = { - isa = PBXGroup; - children = ( - ); - path = Pods; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 1073472920315969004A66D1 /* CrashlyticsExampleSwiftUITests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 1073473120315969004A66D1 /* Build configuration list for PBXNativeTarget "CrashlyticsExampleSwiftUITests" */; - buildPhases = ( - 1073472620315969004A66D1 /* Sources */, - 1073472720315969004A66D1 /* Frameworks */, - 1073472820315969004A66D1 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 1073473020315969004A66D1 /* PBXTargetDependency */, - ); - name = CrashlyticsExampleSwiftUITests; - productName = CrashReportingExampleSwiftUITests; - productReference = 1073472A20315969004A66D1 /* CrashlyticsExampleSwiftUITests.xctest */; - productType = "com.apple.product-type.bundle.ui-testing"; - }; - 1073482520333B71004A66D1 /* CrashlyticsExampleUITests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 1073482D20333B71004A66D1 /* Build configuration list for PBXNativeTarget "CrashlyticsExampleUITests" */; - buildPhases = ( - 1073482220333B71004A66D1 /* Sources */, - 1073482320333B71004A66D1 /* Frameworks */, - 1073482420333B71004A66D1 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 1073482C20333B71004A66D1 /* PBXTargetDependency */, - ); - name = CrashlyticsExampleUITests; - productName = CrashReportingExampleUITests; - productReference = 1073482620333B71004A66D1 /* CrashlyticsExampleUITests.xctest */; - productType = "com.apple.product-type.bundle.ui-testing"; - }; - 5F5A534B1ADE670C00F81DF0 /* CrashlyticsExample */ = { - isa = PBXNativeTarget; - buildConfigurationList = 5F5A536F1ADE670C00F81DF0 /* Build configuration list for PBXNativeTarget "CrashlyticsExample" */; - buildPhases = ( - 5F5A53481ADE670C00F81DF0 /* Sources */, - 5F5A53491ADE670C00F81DF0 /* Frameworks */, - 5F5A534A1ADE670C00F81DF0 /* Resources */, - 10E114DA20E3DDE20013E4A4 /* ShellScript */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = CrashlyticsExample; - productName = CrashReporter; - productReference = 5F5A534C1ADE670C00F81DF0 /* CrashlyticsExample.app */; - productType = "com.apple.product-type.application"; - }; - 5F5A53781ADE67D500F81DF0 /* CrashlyticsExampleSwift */ = { - isa = PBXNativeTarget; - buildConfigurationList = 5F5A53991ADE67D500F81DF0 /* Build configuration list for PBXNativeTarget "CrashlyticsExampleSwift" */; - buildPhases = ( - 5F5A53751ADE67D500F81DF0 /* Sources */, - 5F5A53761ADE67D500F81DF0 /* Frameworks */, - 5F5A53771ADE67D500F81DF0 /* Resources */, - 10E114DB20E3DDF00013E4A4 /* ShellScript */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = CrashlyticsExampleSwift; - productName = CrashReporterSwift; - productReference = 5F5A53791ADE67D500F81DF0 /* CrashlyticsExampleSwift.app */; - productType = "com.apple.product-type.application"; - }; - 5FDE05571B0DAA090037B82F /* CrashlyticsExampleTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 5FDE05621B0DAA090037B82F /* Build configuration list for PBXNativeTarget "CrashlyticsExampleTests" */; - buildPhases = ( - 5FDE05541B0DAA090037B82F /* Sources */, - 5FDE05551B0DAA090037B82F /* Frameworks */, - 5FDE05561B0DAA090037B82F /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 5FDE055F1B0DAA090037B82F /* PBXTargetDependency */, - ); - name = CrashlyticsExampleTests; - productName = CrashReporterTests; - productReference = 5FDE05581B0DAA090037B82F /* CrashlyticsExampleTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 5F5A53441ADE670C00F81DF0 /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftUpdateCheck = 1250; - LastUpgradeCheck = 1110; - ORGANIZATIONNAME = "Google Inc."; - TargetAttributes = { - 1073472920315969004A66D1 = { - CreatedOnToolsVersion = 9.2; - LastSwiftMigration = 1110; - ProvisioningStyle = Automatic; - TestTargetID = 5F5A53781ADE67D500F81DF0; - }; - 1073482520333B71004A66D1 = { - CreatedOnToolsVersion = 9.2; - ProvisioningStyle = Automatic; - TestTargetID = 5F5A534B1ADE670C00F81DF0; - }; - 5F5A534B1ADE670C00F81DF0 = { - CreatedOnToolsVersion = 6.3; - LastSwiftMigration = 0800; - ProvisioningStyle = Automatic; - }; - 5F5A53781ADE67D500F81DF0 = { - CreatedOnToolsVersion = 6.3; - LastSwiftMigration = 1110; - ProvisioningStyle = Automatic; - }; - 5FDE05571B0DAA090037B82F = { - CreatedOnToolsVersion = 6.3.2; - LastSwiftMigration = 0800; - ProvisioningStyle = Automatic; - TestTargetID = 5F5A534B1ADE670C00F81DF0; - }; - }; - }; - buildConfigurationList = 5F5A53471ADE670C00F81DF0 /* Build configuration list for PBXProject "CrashlyticsExample" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - English, - en, - Base, - ); - mainGroup = 5F5A53431ADE670C00F81DF0; - productRefGroup = 5F5A534D1ADE670C00F81DF0 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 5F5A534B1ADE670C00F81DF0 /* CrashlyticsExample */, - 5F5A53781ADE67D500F81DF0 /* CrashlyticsExampleSwift */, - 5FDE05571B0DAA090037B82F /* CrashlyticsExampleTests */, - 1073472920315969004A66D1 /* CrashlyticsExampleSwiftUITests */, - 1073482520333B71004A66D1 /* CrashlyticsExampleUITests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 1073472820315969004A66D1 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1073482420333B71004A66D1 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5F5A534A1ADE670C00F81DF0 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5F5A535B1ADE670C00F81DF0 /* Main.storyboard in Resources */, - 8D07E3D6268BF7210002C432 /* LaunchScreen.xib in Resources */, - 8D07E3D5268BF7210002C432 /* Images.xcassets in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5F5A53771ADE67D500F81DF0 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5F5A539C1ADE69AA00F81DF0 /* Main.storyboard in Resources */, - 8D07E3D8268BF7280002C432 /* LaunchScreen.xib in Resources */, - 8D07E3D7268BF7250002C432 /* Images.xcassets in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5FDE05561B0DAA090037B82F /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 10E114DA20E3DDE20013E4A4 /* ShellScript */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\n# If installed via CocoaPods, then the \"run\" script will exist there\nif test -f \"${PODS_ROOT}/FirebaseCrashlytics/run\"; then\n \"${PODS_ROOT}/FirebaseCrashlytics/run\"\n\n# If just the contents of the \"FirebaseCrashlytics\" folder from the\n# zip download was dragged into the Xcode project, check the project root\nelif test -f \"${PROJECT_DIR}/run\"; then\n \"${PROJECT_DIR}/run\"\n \n# If the whole \"FirebaseCrashlytics\" folder was dragged in from the\n# zip download, check for it in the root of the project \nelif test -f \"${PROJECT_DIR}/FirebaseCrashlytics/run\"; then\n \"${PROJECT_DIR}/FirebaseCrashlytics/run\"\n \n# If we can't find the run script, fail the build so that we\n# know to fix the issue\nelse\n echo 'error: Could not find path to Crashlytics \"run\" script. Please ensure you have included the Crashlytics \"run\" script in the Xcode project directory, or update the path to the script in the Xcode project \"Build Phases\" > \"Run Script\"'\n exit 1\nfi\n"; - }; - 10E114DB20E3DDF00013E4A4 /* ShellScript */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\n# If installed via CocoaPods, then the \"run\" script will exist there\nif test -f \"${PODS_ROOT}/FirebaseCrashlytics/run\"; then\n \"${PODS_ROOT}/FirebaseCrashlytics/run\"\n\n# If just the contents of the \"FirebaseCrashlytics\" folder from the\n# zip download was dragged into the Xcode project, check the project root\nelif test -f \"${PROJECT_DIR}/run\"; then\n \"${PROJECT_DIR}/run\"\n \n# If the whole \"FirebaseCrashlytics\" folder was dragged in from the\n# zip download, check for it in the root of the project \nelif test -f \"${PROJECT_DIR}/FirebaseCrashlytics/run\"; then\n \"${PROJECT_DIR}/FirebaseCrashlytics/run\"\n \n# If we can't find the run script, fail the build so that we\n# know to fix the issue\nelse\n echo 'error: Could not find path to Crashlytics \"run\" script. Please ensure you have included the Crashlytics \"run\" script in the Xcode project directory, or update the path to the script in the Xcode project \"Build Phases\" > \"Run Script\"'\n exit 1\nfi\n"; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 1073472620315969004A66D1 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 1073472D20315969004A66D1 /* CrashReportingExampleSwiftUITests.swift in Sources */, - FAC4F6426F15EB440B635B88 /* GoogleService-Info.plist in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1073482220333B71004A66D1 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 1073482920333B71004A66D1 /* CrashReportingExampleUITests.m in Sources */, - 85F2A78F84665B33B5E340A6 /* GoogleService-Info.plist in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5F5A53481ADE670C00F81DF0 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5F5A53581ADE670C00F81DF0 /* ViewController.m in Sources */, - 5F5A53551ADE670C00F81DF0 /* AppDelegate.m in Sources */, - 5F5A53521ADE670C00F81DF0 /* main.m in Sources */, - A65DFC68874CB909A594C72A /* GoogleService-Info.plist in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5F5A53751ADE67D500F81DF0 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5F5A53801ADE67D500F81DF0 /* ViewController.swift in Sources */, - 5F5A537E1ADE67D500F81DF0 /* AppDelegate.swift in Sources */, - 0DDAE1A41098B006303515E2 /* GoogleService-Info.plist in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5FDE05541B0DAA090037B82F /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5FDE055D1B0DAA090037B82F /* AppTests.m in Sources */, - 7FD4CBFA51EAB8A25764BF8B /* GoogleService-Info.plist in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 1073473020315969004A66D1 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5F5A53781ADE67D500F81DF0 /* CrashlyticsExampleSwift */; - targetProxy = 1073472F20315969004A66D1 /* PBXContainerItemProxy */; - }; - 1073482C20333B71004A66D1 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5F5A534B1ADE670C00F81DF0 /* CrashlyticsExample */; - targetProxy = 1073482B20333B71004A66D1 /* PBXContainerItemProxy */; - }; - 5FDE055F1B0DAA090037B82F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5F5A534B1ADE670C00F81DF0 /* CrashlyticsExample */; - targetProxy = 5FDE055E1B0DAA090037B82F /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - 5F5A53591ADE670C00F81DF0 /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 5F5A535A1ADE670C00F81DF0 /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 1073473220315969004A66D1 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - DEBUG_INFORMATION_FORMAT = dwarf; - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = CrashlyticsExampleSwiftUITests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.quickstart.CrashReportingExampleSwiftUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_SWIFT3_OBJC_INFERENCE = Default; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = CrashlyticsExampleSwift; - }; - name = Debug; - }; - 1073473320315969004A66D1 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = CrashlyticsExampleSwiftUITests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.quickstart.CrashReportingExampleSwiftUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_SWIFT3_OBJC_INFERENCE = Default; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = CrashlyticsExampleSwift; - }; - name = Release; - }; - 1073482E20333B71004A66D1 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - DEBUG_INFORMATION_FORMAT = dwarf; - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = CrashlyticsExampleUITests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.quickstart.CrashReportingExampleUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = CrashlyticsExample; - }; - name = Debug; - }; - 1073482F20333B71004A66D1 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = CrashlyticsExampleUITests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.quickstart.CrashReportingExampleUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = CrashlyticsExample; - }; - name = Release; - }; - 5F5A536D1ADE670C00F81DF0 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - ENABLE_BITCODE = NO; - 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_SYMBOLS_PRIVATE_EXTERN = NO; - 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 = 15.0; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 5F5A536E1ADE670C00F81DF0 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = YES; - ENABLE_BITCODE = NO; - 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 = 15.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 5F5A53701ADE670C00F81DF0 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; - CODE_SIGN_IDENTITY = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - DEVELOPMENT_TEAM = ""; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = "$(SRCROOT)/CrashlyticsExample/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.quickstart.CrashReportingExample; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE = ""; - PROVISIONING_PROFILE_SPECIFIER = ""; - }; - name = Debug; - }; - 5F5A53711ADE670C00F81DF0 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; - CODE_SIGN_IDENTITY = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - DEVELOPMENT_TEAM = ""; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = "$(SRCROOT)/CrashlyticsExample/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.quickstart.CrashReportingExample; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE = ""; - PROVISIONING_PROFILE_SPECIFIER = ""; - }; - name = Release; - }; - 5F5A53951ADE67D500F81DF0 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - DEVELOPMENT_TEAM = ""; - INFOPLIST_FILE = "$(SRCROOT)/CrashlyticsExample/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.quickstart.CrashReportingExample; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SWIFT_SWIFT3_OBJC_INFERENCE = Default; - SWIFT_VERSION = 5.0; - }; - name = Debug; - }; - 5F5A53961ADE67D500F81DF0 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - DEVELOPMENT_TEAM = ""; - INFOPLIST_FILE = "$(SRCROOT)/CrashlyticsExample/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.quickstart.CrashReportingExample; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - SWIFT_SWIFT3_OBJC_INFERENCE = Default; - SWIFT_VERSION = 5.0; - }; - name = Release; - }; - 5FDE05601B0DAA090037B82F /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = ""; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - HEADER_SEARCH_PATHS = ( - "$(inherited)", - /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, - CrashReporter, - ); - INFOPLIST_FILE = CrashlyticsExample/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/CrashlyticsExample.app/CrashlyticsExample"; - }; - name = Debug; - }; - 5FDE05611B0DAA090037B82F /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = ""; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - HEADER_SEARCH_PATHS = ( - "$(inherited)", - /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, - CrashReporter, - ); - INFOPLIST_FILE = CrashlyticsExample/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/CrashlyticsExample.app/CrashlyticsExample"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 1073473120315969004A66D1 /* Build configuration list for PBXNativeTarget "CrashlyticsExampleSwiftUITests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1073473220315969004A66D1 /* Debug */, - 1073473320315969004A66D1 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 1073482D20333B71004A66D1 /* Build configuration list for PBXNativeTarget "CrashlyticsExampleUITests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1073482E20333B71004A66D1 /* Debug */, - 1073482F20333B71004A66D1 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 5F5A53471ADE670C00F81DF0 /* Build configuration list for PBXProject "CrashlyticsExample" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 5F5A536D1ADE670C00F81DF0 /* Debug */, - 5F5A536E1ADE670C00F81DF0 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 5F5A536F1ADE670C00F81DF0 /* Build configuration list for PBXNativeTarget "CrashlyticsExample" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 5F5A53701ADE670C00F81DF0 /* Debug */, - 5F5A53711ADE670C00F81DF0 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 5F5A53991ADE67D500F81DF0 /* Build configuration list for PBXNativeTarget "CrashlyticsExampleSwift" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 5F5A53951ADE67D500F81DF0 /* Debug */, - 5F5A53961ADE67D500F81DF0 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 5FDE05621B0DAA090037B82F /* Build configuration list for PBXNativeTarget "CrashlyticsExampleTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 5FDE05601B0DAA090037B82F /* Debug */, - 5FDE05611B0DAA090037B82F /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 5F5A53441ADE670C00F81DF0 /* Project object */; -} diff --git a/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExample.xcodeproj/xcshareddata/xcschemes/CrashlyticsExample.xcscheme b/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExample.xcodeproj/xcshareddata/xcschemes/CrashlyticsExample.xcscheme deleted file mode 100644 index 372fc9be5..000000000 --- a/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExample.xcodeproj/xcshareddata/xcschemes/CrashlyticsExample.xcscheme +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExample.xcodeproj/xcshareddata/xcschemes/CrashlyticsExampleSwift.xcscheme b/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExample.xcodeproj/xcshareddata/xcschemes/CrashlyticsExampleSwift.xcscheme deleted file mode 100644 index 2820fa348..000000000 --- a/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExample.xcodeproj/xcshareddata/xcschemes/CrashlyticsExampleSwift.xcscheme +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExample/.clang-format b/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExample/.clang-format deleted file mode 100644 index 1f09ce0f2..000000000 --- a/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExample/.clang-format +++ /dev/null @@ -1,4 +0,0 @@ -BasedOnStyle: Google -ColumnLimit: 100 -BinPackParameters: false -AllowAllParametersOfDeclarationOnNextLine: true diff --git a/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExample/AppDelegate.h b/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExample/AppDelegate.h deleted file mode 100644 index f284483f9..000000000 --- a/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExample/AppDelegate.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// Copyright (c) 2018 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -@import UIKit; - -@interface AppDelegate : UIResponder - -@property(nonatomic, strong) UIWindow *window; - -@end diff --git a/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExample/AppDelegate.m b/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExample/AppDelegate.m deleted file mode 100644 index 14c6d2892..000000000 --- a/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExample/AppDelegate.m +++ /dev/null @@ -1,31 +0,0 @@ -// -// Copyright (c) 2018 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "AppDelegate.h" - -@import FirebaseCore; - -@implementation AppDelegate - -- (BOOL)application:(UIApplication *)application - didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - - // Initialize Firebase service. - [FIRApp configure]; - return YES; -} - -@end diff --git a/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExample/Base.lproj/Main.storyboard b/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExample/Base.lproj/Main.storyboard deleted file mode 100644 index 6741c96d6..000000000 --- a/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExample/Base.lproj/Main.storyboard +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExample/Info.plist b/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExample/Info.plist deleted file mode 100644 index 30d7c4861..000000000 --- a/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExample/Info.plist +++ /dev/null @@ -1,51 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIcons - - CFBundleIcons~ipad - - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UILaunchStoryboardName - LaunchScreen - UIMainStoryboardFile - Main - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExample/ViewController.h b/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExample/ViewController.h deleted file mode 100644 index 6f7955919..000000000 --- a/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExample/ViewController.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// Copyright (c) 2018 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -@import UIKit; - -@interface ViewController : UIViewController -@end diff --git a/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExample/ViewController.m b/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExample/ViewController.m deleted file mode 100644 index 8ce0a2bbd..000000000 --- a/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExample/ViewController.m +++ /dev/null @@ -1,57 +0,0 @@ -// -// Copyright (c) 2018 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "ViewController.h" -@import FirebaseCrashlytics; - -@implementation ViewController - - -- (void)viewDidLoad { - [super viewDidLoad]; - - // Log that the view did load, CLSNSLog is used here so the log message will be - // shown in the console output. If CLSLog is used the message is not shown in - // the console output. - [[FIRCrashlytics crashlytics] log:@"View loaded"]; - - [[FIRCrashlytics crashlytics] setCustomValue:@3 forKey:@"current_level"]; - [[FIRCrashlytics crashlytics] setCustomValue:@"logged_in" forKey:@"last_UI_action"]; - [[FIRCrashlytics crashlytics] setUserID:@"123456789"]; - - NSDictionary *userInfo = @{ - NSLocalizedDescriptionKey: NSLocalizedString(@"The request failed.", nil), - NSLocalizedFailureReasonErrorKey: NSLocalizedString(@"The response returned a 404.", nil), - NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"Does this page exist?", nil), - @"ProductID": @"123456", - @"UserID": @"Jane Smith" - }; - NSError *error = [NSError errorWithDomain:NSURLErrorDomain - code:-1001 - userInfo:userInfo]; - [[FIRCrashlytics crashlytics] recordError:error]; -} - -- (IBAction)initiateCrash:(id)sender { - // [START log_and_crash] - [[FIRCrashlytics crashlytics] log:@"Cause Crash button clicked"]; - // crash - int *x = NULL; - *x = 10; - // [END log_and_crash] -} - -@end diff --git a/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExample/main.m b/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExample/main.m deleted file mode 100644 index d4878306b..000000000 --- a/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExample/main.m +++ /dev/null @@ -1,24 +0,0 @@ -// -// Copyright (c) 2015 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import -#import "AppDelegate.h" - -int main(int argc, char* argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExampleSwift/AppDelegate.swift b/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExampleSwift/AppDelegate.swift deleted file mode 100644 index e94de8f73..000000000 --- a/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExampleSwift/AppDelegate.swift +++ /dev/null @@ -1,31 +0,0 @@ -// -// Copyright (c) 2018 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import UIKit -import FirebaseCore - -@UIApplicationMain -class AppDelegate: UIResponder, UIApplicationDelegate { - var window: UIWindow? - - func application(_ application: UIApplication, - didFinishLaunchingWithOptions launchOptions: [UIApplication - .LaunchOptionsKey: Any]?) -> Bool { - // Initialize Firebase service. - FirebaseApp.configure() - return true - } -} diff --git a/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExampleSwift/ViewController.swift b/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExampleSwift/ViewController.swift deleted file mode 100644 index 95d5c28d8..000000000 --- a/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExampleSwift/ViewController.swift +++ /dev/null @@ -1,116 +0,0 @@ -// -// Copyright (c) 2018 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import UIKit -import FirebaseCrashlytics -import Reachability - -@objc(ViewController) -class ViewController: UIViewController { - lazy var crashlytics = Crashlytics.crashlytics() - - override func viewDidLoad() { - super.viewDidLoad() - - // Log that the view did load, CLSNSLogv is used here so the log message will be - // shown in the console output. If CLSLogv is used the message is not shown in - // the console output. - Crashlytics.crashlytics().log("View loaded") - - Crashlytics.crashlytics().setCustomValue(42, forKey: "MeaningOfLife") - Crashlytics.crashlytics().setCustomValue("Test value", forKey: "last_UI_action") - - let customKeysObject = [ - "locale": getLocale(), - "network_connection": getNetworkStatus(), - ] as [String: Any] - Crashlytics.crashlytics().setCustomKeysAndValues(customKeysObject) - - updateAndTrackNetworkStatus() - - Crashlytics.crashlytics().setUserID("123456789") - - let userInfo = [ - NSLocalizedDescriptionKey: NSLocalizedString("The request failed.", comment: ""), - NSLocalizedFailureReasonErrorKey: NSLocalizedString( - "The response returned a 404.", - comment: "" - ), - NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString( - "Does this page exist?", - comment: "" - ), - "ProductID": "123456", - "UserID": "Jane Smith", - ] - let error = NSError(domain: NSURLErrorDomain, code: -1001, userInfo: userInfo) - Crashlytics.crashlytics().record(error: error) - } - - @IBAction func initiateCrash(_ sender: AnyObject) { - // [START log_and_crash_swift] - Crashlytics.crashlytics().log("Cause Crash button clicked") - fatalError() - // [END log_and_crash_swift] - } - - /** - * Retrieve the locale information for the app. - */ - func getLocale() -> String { - return Locale.preferredLanguages[0] - } - - /** - * Retrieve the network status for the app. - */ - func getNetworkStatus() -> String { - guard let reachability = try? Reachability() else { - return "unknown" - } - switch reachability.connection { - case .wifi: - return "wifi" - case .cellular: - return "cellular" - case .unavailable: - return "unavailable" - case .none: - // Duplicate of unavailable. - return "unavailable" - } - } - - /** - * Add a hook to update network status going forward. - */ - func updateAndTrackNetworkStatus() { - NotificationCenter.default.addObserver(self, - selector: #selector(reachabilityChanged(note:)), - name: .reachabilityChanged, - object: nil) - do { - let reachability = try Reachability() - try reachability.startNotifier() - } catch { - print("Could not start reachability notifier: \(error)") - } - } - - @objc func reachabilityChanged(note: Notification) { - Crashlytics.crashlytics().setCustomValue(getNetworkStatus(), forKey: "network_connection") - } -} diff --git a/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExampleSwiftUITests/CrashReportingExampleSwiftUITests.swift b/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExampleSwiftUITests/CrashReportingExampleSwiftUITests.swift deleted file mode 100644 index 4ebc5f8b5..000000000 --- a/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExampleSwiftUITests/CrashReportingExampleSwiftUITests.swift +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -import XCTest - -class CrashReportingExampleSwiftUITests: XCTestCase { - override func setUp() { - super.setUp() - XCUIApplication().launch() - } - - func testVerifyAppLaunched() { - XCTAssertTrue(XCUIApplication().navigationBars["Crashlytics Example"].exists, - "Crashlytics is missing from the navigation bar") - XCTAssertTrue(XCUIApplication().buttons["Cause Crash"].exists, - "Cause Crash button is missing") - } -} diff --git a/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExampleSwiftUITests/Info.plist b/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExampleSwiftUITests/Info.plist deleted file mode 100644 index 6c40a6cd0..000000000 --- a/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExampleSwiftUITests/Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - - diff --git a/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExampleTests/AppTests.m b/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExampleTests/AppTests.m deleted file mode 100644 index e5f892a30..000000000 --- a/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExampleTests/AppTests.m +++ /dev/null @@ -1,40 +0,0 @@ -// -// Copyright (c) 2015 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import -#import - -@interface AppTests : XCTestCase -@end - -@implementation AppTests - -- (void)setUp { - [super setUp]; - // Put setup code here. This method is called before the invocation of each test method in the class. -} - -- (void)tearDown { - // Put teardown code here. This method is called after the invocation of each test method in the class. - [super tearDown]; -} - -- (void)testExample { - // This is an example of a functional test case. - XCTAssert(YES, @"Pass"); -} - -@end diff --git a/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExampleUITests/CrashReportingExampleUITests.m b/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExampleUITests/CrashReportingExampleUITests.m deleted file mode 100644 index 4e4193307..000000000 --- a/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExampleUITests/CrashReportingExampleUITests.m +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2019 Google -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#import - -@interface CrashReportingExampleUITests : XCTestCase - -@end - -@implementation CrashReportingExampleUITests { - XCUIApplication *_app; -} - -- (void)setUp { - [super setUp]; - _app = [[XCUIApplication alloc] init]; - [_app launch]; -} - -- (void)testVerifyAppLaunched { - // Verify that Crashlytics app launched successfully and its title is visible. - XCTAssertTrue([_app navigationBars][@"Crashlytics Example"].exists); -} - -@end diff --git a/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExampleUITests/Info.plist b/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExampleUITests/Info.plist deleted file mode 100644 index 6c40a6cd0..000000000 --- a/crashlytics/LegacyCrashlyticsQuickstart/CrashlyticsExampleUITests/Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - - diff --git a/crashlytics/LegacyCrashlyticsQuickstart/Podfile b/crashlytics/LegacyCrashlyticsQuickstart/Podfile deleted file mode 100644 index 3abd8288b..000000000 --- a/crashlytics/LegacyCrashlyticsQuickstart/Podfile +++ /dev/null @@ -1,13 +0,0 @@ -# CrashlyticsExample -use_frameworks! -platform :ios, '15.0' - -target 'CrashlyticsExample' do - pod 'FirebaseCrashlytics' - pod 'ReachabilitySwift' -end - -target 'CrashlyticsExampleSwift' do - pod 'FirebaseCrashlytics' - pod 'ReachabilitySwift' -end diff --git a/crashlytics/LegacyCrashlyticsQuickstart/Podfile.lock b/crashlytics/LegacyCrashlyticsQuickstart/Podfile.lock deleted file mode 100644 index 8f484c6be..000000000 --- a/crashlytics/LegacyCrashlyticsQuickstart/Podfile.lock +++ /dev/null @@ -1,95 +0,0 @@ -PODS: - - FirebaseCore (12.1.0): - - FirebaseCoreInternal (~> 12.1.0) - - GoogleUtilities/Environment (~> 8.1) - - GoogleUtilities/Logger (~> 8.1) - - FirebaseCoreExtension (12.1.0): - - FirebaseCore (~> 12.1.0) - - FirebaseCoreInternal (12.1.0): - - "GoogleUtilities/NSData+zlib (~> 8.1)" - - FirebaseCrashlytics (12.1.0): - - FirebaseCore (~> 12.1.0) - - FirebaseInstallations (~> 12.1.0) - - FirebaseRemoteConfigInterop (~> 12.1.0) - - FirebaseSessions (~> 12.1.0) - - GoogleDataTransport (~> 10.1) - - GoogleUtilities/Environment (~> 8.1) - - nanopb (~> 3.30910.0) - - PromisesObjC (~> 2.4) - - FirebaseInstallations (12.1.0): - - FirebaseCore (~> 12.1.0) - - GoogleUtilities/Environment (~> 8.1) - - GoogleUtilities/UserDefaults (~> 8.1) - - PromisesObjC (~> 2.4) - - FirebaseRemoteConfigInterop (12.1.0) - - FirebaseSessions (12.1.0): - - FirebaseCore (~> 12.1.0) - - FirebaseCoreExtension (~> 12.1.0) - - FirebaseInstallations (~> 12.1.0) - - GoogleDataTransport (~> 10.1) - - GoogleUtilities/Environment (~> 8.1) - - GoogleUtilities/UserDefaults (~> 8.1) - - nanopb (~> 3.30910.0) - - PromisesSwift (~> 2.1) - - GoogleDataTransport (10.1.0): - - nanopb (~> 3.30910.0) - - PromisesObjC (~> 2.4) - - GoogleUtilities/Environment (8.1.0): - - GoogleUtilities/Privacy - - GoogleUtilities/Logger (8.1.0): - - GoogleUtilities/Environment - - GoogleUtilities/Privacy - - "GoogleUtilities/NSData+zlib (8.1.0)": - - GoogleUtilities/Privacy - - GoogleUtilities/Privacy (8.1.0) - - GoogleUtilities/UserDefaults (8.1.0): - - 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) - - PromisesObjC (2.4.0) - - PromisesSwift (2.4.0): - - PromisesObjC (= 2.4.0) - - ReachabilitySwift (5.2.4) - -DEPENDENCIES: - - FirebaseCrashlytics - - ReachabilitySwift - -SPEC REPOS: - trunk: - - FirebaseCore - - FirebaseCoreExtension - - FirebaseCoreInternal - - FirebaseCrashlytics - - FirebaseInstallations - - FirebaseRemoteConfigInterop - - FirebaseSessions - - GoogleDataTransport - - GoogleUtilities - - nanopb - - PromisesObjC - - PromisesSwift - - ReachabilitySwift - -SPEC CHECKSUMS: - FirebaseCore: 5a452ffa66f37c8e281076996837626c5d08c090 - FirebaseCoreExtension: dd89d73548ee9be5d8dc60e5c76bc421b965853b - FirebaseCoreInternal: ff526c22671bb564d1b34a47615e29ba99389dee - FirebaseCrashlytics: 5834becad22032e1075ff945dcac2d66500d7f1f - FirebaseInstallations: 6836550c466a6c3f753a777bec6f4e58ea228779 - FirebaseRemoteConfigInterop: a30ffe29b80e3aec9580a44ec9deb7e19e08e6e8 - FirebaseSessions: 778459b8339fcd8201361f552db4d7223f74eb72 - GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7 - GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1 - nanopb: fad817b59e0457d11a5dfbde799381cd727c1275 - PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 - PromisesSwift: 9d77319bbe72ebf6d872900551f7eeba9bce2851 - ReachabilitySwift: 32793e867593cfc1177f5d16491e3a197d2fccda - -PODFILE CHECKSUM: dac9610386043d3b4b02c811f970d8a76a5b86b0 - -COCOAPODS: 1.16.2 diff --git a/functions/LegacyFunctionsQuickstart/FunctionsExample.xcodeproj/project.pbxproj b/functions/LegacyFunctionsQuickstart/FunctionsExample.xcodeproj/project.pbxproj deleted file mode 100644 index 723b40b0c..000000000 --- a/functions/LegacyFunctionsQuickstart/FunctionsExample.xcodeproj/project.pbxproj +++ /dev/null @@ -1,986 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 47; - objects = { - -/* Begin PBXBuildFile section */ - 0B38EF10647EB2DA5A5D56D1 /* GoogleService-Info.plist in Sources */ = {isa = PBXBuildFile; fileRef = 43ED466C2F109A2272796CB6 /* GoogleService-Info.plist */; }; - 1036DA002087CA10003253C9 /* FunctionsExampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 1036D9FF2087CA10003253C9 /* FunctionsExampleTests.m */; }; - 1036DA0E2087CA25003253C9 /* FunctionsExampleUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = 1036DA0D2087CA25003253C9 /* FunctionsExampleUITests.m */; }; - 1036DA1C2087CA66003253C9 /* FunctionsExampleSwiftUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1036DA1B2087CA66003253C9 /* FunctionsExampleSwiftUITests.swift */; }; - 10757BD52059CFC7007623FD /* CloudAddCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 10757BD42059CFC7007623FD /* CloudAddCell.m */; }; - 10A181852060458C00133918 /* FAuthPickerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 10A181842060458C00133918 /* FAuthPickerViewController.m */; }; - 10B054031C6A3C630061077D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 10B054011C6A3C630061077D /* Main.storyboard */; }; - 10B1CCB7205C4CA70067EDB4 /* FAuthPickerViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 10B1CCB6205C4CA70067EDB4 /* FAuthPickerViewController.xib */; }; - 10B1CCB8205C4CA70067EDB4 /* FAuthPickerViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 10B1CCB6205C4CA70067EDB4 /* FAuthPickerViewController.xib */; }; - 10B1CCBB205C4D520067EDB4 /* FAuthPickerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10B1CCB9205C4D520067EDB4 /* FAuthPickerViewController.swift */; }; - 10B1CCBF205C51F90067EDB4 /* SignInViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10B1CCBE205C51F90067EDB4 /* SignInViewController.swift */; }; - 10B1CCC1205C60890067EDB4 /* CloudAddCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10B1CCC0205C60890067EDB4 /* CloudAddCell.swift */; }; - 10B1CCC3205C63370067EDB4 /* CommentCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10B1CCC2205C63370067EDB4 /* CommentCell.swift */; }; - 46D64964EDAD308E5F394D61 /* GoogleService-Info.plist in Sources */ = {isa = PBXBuildFile; fileRef = 43ED466C2F109A2272796CB6 /* GoogleService-Info.plist */; }; - 5F5A53521ADE670C00F81DF0 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F5A53511ADE670C00F81DF0 /* main.m */; }; - 5F5A53551ADE670C00F81DF0 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F5A53541ADE670C00F81DF0 /* AppDelegate.m */; }; - 5F5A537E1ADE67D500F81DF0 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F5A537D1ADE67D500F81DF0 /* AppDelegate.swift */; }; - 5F99610A1AE0CF4F0034F503 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5F9961061AE0CF4F0034F503 /* Images.xcassets */; }; - 5F99610B1AE0CF4F0034F503 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5F9961061AE0CF4F0034F503 /* Images.xcassets */; }; - 5F99610C1AE0CF4F0034F503 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5F9961071AE0CF4F0034F503 /* LaunchScreen.xib */; }; - 5F99610D1AE0CF4F0034F503 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5F9961071AE0CF4F0034F503 /* LaunchScreen.xib */; }; - 945A2E9F85C854B9E5D77ADF /* GoogleService-Info.plist in Sources */ = {isa = PBXBuildFile; fileRef = 43ED466C2F109A2272796CB6 /* GoogleService-Info.plist */; }; - C8CC5DB90E433A1628474CAE /* GoogleService-Info.plist in Sources */ = {isa = PBXBuildFile; fileRef = 43ED466C2F109A2272796CB6 /* GoogleService-Info.plist */; }; - D295393A72DB35CE1616AA79 /* GoogleService-Info.plist in Sources */ = {isa = PBXBuildFile; fileRef = 43ED466C2F109A2272796CB6 /* GoogleService-Info.plist */; }; - DE43B5D023AEC6980056B15F /* FIREGSignInHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = DE43B5CD23AEC6980056B15F /* FIREGSignInHelper.m */; }; - DE43B5D123AEC6980056B15F /* FIREGHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = DE43B5CE23AEC6980056B15F /* FIREGHelper.m */; }; - EF4857041C752B7700649485 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 10B054011C6A3C630061077D /* Main.storyboard */; }; - EF6DB4CD1CDD60F700319C08 /* MainViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF6DB4CA1CDD60F700319C08 /* MainViewController.swift */; }; - EF6DB4D41CDD610200319C08 /* CommentCell.m in Sources */ = {isa = PBXBuildFile; fileRef = EF6DB4CE1CDD610200319C08 /* CommentCell.m */; }; - EF6DB4D51CDD610200319C08 /* SignInViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EF6DB4CF1CDD610200319C08 /* SignInViewController.m */; }; - EF6DB4D61CDD610200319C08 /* MainViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EF6DB4D01CDD610200319C08 /* MainViewController.m */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 1036DA022087CA10003253C9 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5F5A53441ADE670C00F81DF0 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5F5A534B1ADE670C00F81DF0; - remoteInfo = FunctionsExample; - }; - 1036DA102087CA25003253C9 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5F5A53441ADE670C00F81DF0 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5F5A534B1ADE670C00F81DF0; - remoteInfo = FunctionsExample; - }; - 1036DA1E2087CA66003253C9 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5F5A53441ADE670C00F81DF0 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5F5A53781ADE67D500F81DF0; - remoteInfo = FunctionsExampleSwift; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 1036D9FD2087CA10003253C9 /* FunctionsExampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FunctionsExampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 1036D9FF2087CA10003253C9 /* FunctionsExampleTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FunctionsExampleTests.m; sourceTree = ""; }; - 1036DA012087CA10003253C9 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 1036DA0B2087CA25003253C9 /* FunctionsExampleUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FunctionsExampleUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 1036DA0D2087CA25003253C9 /* FunctionsExampleUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FunctionsExampleUITests.m; sourceTree = ""; }; - 1036DA0F2087CA25003253C9 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 1036DA192087CA66003253C9 /* FunctionsExampleSwiftUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FunctionsExampleSwiftUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 1036DA1B2087CA66003253C9 /* FunctionsExampleSwiftUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FunctionsExampleSwiftUITests.swift; sourceTree = ""; }; - 1036DA1D2087CA66003253C9 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 10757BD32059CFC7007623FD /* CloudAddCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CloudAddCell.h; sourceTree = ""; }; - 10757BD42059CFC7007623FD /* CloudAddCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CloudAddCell.m; sourceTree = ""; }; - 10A181842060458C00133918 /* FAuthPickerViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FAuthPickerViewController.m; sourceTree = ""; }; - 10B054021C6A3C630061077D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 10B1CCB6205C4CA70067EDB4 /* FAuthPickerViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = FAuthPickerViewController.xib; sourceTree = ""; }; - 10B1CCB9205C4D520067EDB4 /* FAuthPickerViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FAuthPickerViewController.swift; sourceTree = ""; }; - 10B1CCBC205C4D9B0067EDB4 /* FAuthPickerViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FAuthPickerViewController.h; sourceTree = ""; }; - 10B1CCBE205C51F90067EDB4 /* SignInViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SignInViewController.swift; sourceTree = ""; }; - 10B1CCC0205C60890067EDB4 /* CloudAddCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CloudAddCell.swift; sourceTree = ""; }; - 10B1CCC2205C63370067EDB4 /* CommentCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommentCell.swift; sourceTree = ""; }; - 43ED466C2F109A2272796CB6 /* GoogleService-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "../GoogleService-Info.plist"; sourceTree = ""; }; - 5F5A534C1ADE670C00F81DF0 /* FunctionsExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FunctionsExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 5F5A53501ADE670C00F81DF0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 5F5A53511ADE670C00F81DF0 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - 5F5A53531ADE670C00F81DF0 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; - 5F5A53541ADE670C00F81DF0 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; - 5F5A53791ADE67D500F81DF0 /* FunctionsExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FunctionsExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 5F5A537D1ADE67D500F81DF0 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 5F9961061AE0CF4F0034F503 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; - 5F9961071AE0CF4F0034F503 /* LaunchScreen.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = LaunchScreen.xib; sourceTree = ""; }; - DE43B5CC23AEC6980056B15F /* FIREGHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FIREGHelper.h; sourceTree = ""; }; - DE43B5CD23AEC6980056B15F /* FIREGSignInHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FIREGSignInHelper.m; sourceTree = ""; }; - DE43B5CE23AEC6980056B15F /* FIREGHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FIREGHelper.m; sourceTree = ""; }; - DE43B5CF23AEC6980056B15F /* FIREGSignInHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FIREGSignInHelper.h; sourceTree = ""; }; - DED65CF723E9DE6400461312 /* FIREGSignInInfo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FIREGSignInInfo.h; sourceTree = ""; }; - EF6DB4CA1CDD60F700319C08 /* MainViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MainViewController.swift; sourceTree = ""; }; - EF6DB4CE1CDD610200319C08 /* CommentCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CommentCell.m; sourceTree = ""; }; - EF6DB4CF1CDD610200319C08 /* SignInViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SignInViewController.m; sourceTree = ""; }; - EF6DB4D01CDD610200319C08 /* MainViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MainViewController.m; sourceTree = ""; }; - EF6DB4D11CDD610200319C08 /* CommentCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CommentCell.h; sourceTree = ""; }; - EF6DB4D21CDD610200319C08 /* SignInViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SignInViewController.h; sourceTree = ""; }; - EF6DB4D31CDD610200319C08 /* MainViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MainViewController.h; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 1036D9FA2087CA10003253C9 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1036DA082087CA25003253C9 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1036DA162087CA66003253C9 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5F5A53491ADE670C00F81DF0 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5F5A53761ADE67D500F81DF0 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 1036D9FE2087CA10003253C9 /* FunctionsExampleTests */ = { - isa = PBXGroup; - children = ( - 1036D9FF2087CA10003253C9 /* FunctionsExampleTests.m */, - 1036DA012087CA10003253C9 /* Info.plist */, - ); - path = FunctionsExampleTests; - sourceTree = ""; - }; - 1036DA0C2087CA25003253C9 /* FunctionsExampleUITests */ = { - isa = PBXGroup; - children = ( - 1036DA0D2087CA25003253C9 /* FunctionsExampleUITests.m */, - 1036DA0F2087CA25003253C9 /* Info.plist */, - ); - path = FunctionsExampleUITests; - sourceTree = ""; - }; - 1036DA1A2087CA66003253C9 /* FunctionsExampleSwiftUITests */ = { - isa = PBXGroup; - children = ( - 1036DA1B2087CA66003253C9 /* FunctionsExampleSwiftUITests.swift */, - 1036DA1D2087CA66003253C9 /* Info.plist */, - ); - path = FunctionsExampleSwiftUITests; - sourceTree = ""; - }; - 5F5A53431ADE670C00F81DF0 = { - isa = PBXGroup; - children = ( - 5F5A534E1ADE670C00F81DF0 /* FunctionsExample */, - 5F5A537A1ADE67D500F81DF0 /* FunctionsExampleSwift */, - 1036D9FE2087CA10003253C9 /* FunctionsExampleTests */, - 1036DA0C2087CA25003253C9 /* FunctionsExampleUITests */, - 1036DA1A2087CA66003253C9 /* FunctionsExampleSwiftUITests */, - DE43B5CB23AEC6980056B15F /* TestUtils */, - 5F5A534D1ADE670C00F81DF0 /* Products */, - 5F9961041AE0CF4F0034F503 /* Shared */, - 43ED466C2F109A2272796CB6 /* GoogleService-Info.plist */, - ); - sourceTree = ""; - wrapsLines = 0; - }; - 5F5A534D1ADE670C00F81DF0 /* Products */ = { - isa = PBXGroup; - children = ( - 5F5A534C1ADE670C00F81DF0 /* FunctionsExample.app */, - 5F5A53791ADE67D500F81DF0 /* FunctionsExample.app */, - 1036D9FD2087CA10003253C9 /* FunctionsExampleTests.xctest */, - 1036DA0B2087CA25003253C9 /* FunctionsExampleUITests.xctest */, - 1036DA192087CA66003253C9 /* FunctionsExampleSwiftUITests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - 5F5A534E1ADE670C00F81DF0 /* FunctionsExample */ = { - isa = PBXGroup; - children = ( - 10757BD32059CFC7007623FD /* CloudAddCell.h */, - 10757BD42059CFC7007623FD /* CloudAddCell.m */, - EF6DB4D11CDD610200319C08 /* CommentCell.h */, - EF6DB4CE1CDD610200319C08 /* CommentCell.m */, - EF6DB4D21CDD610200319C08 /* SignInViewController.h */, - EF6DB4CF1CDD610200319C08 /* SignInViewController.m */, - EF6DB4D31CDD610200319C08 /* MainViewController.h */, - EF6DB4D01CDD610200319C08 /* MainViewController.m */, - 5F5A53531ADE670C00F81DF0 /* AppDelegate.h */, - 5F5A53541ADE670C00F81DF0 /* AppDelegate.m */, - 10B1CCBC205C4D9B0067EDB4 /* FAuthPickerViewController.h */, - 10A181842060458C00133918 /* FAuthPickerViewController.m */, - 5F5A534F1ADE670C00F81DF0 /* Supporting Files */, - ); - path = FunctionsExample; - sourceTree = ""; - }; - 5F5A534F1ADE670C00F81DF0 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - 10B054011C6A3C630061077D /* Main.storyboard */, - 5F5A53501ADE670C00F81DF0 /* Info.plist */, - 5F5A53511ADE670C00F81DF0 /* main.m */, - 10B1CCB6205C4CA70067EDB4 /* FAuthPickerViewController.xib */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - 5F5A537A1ADE67D500F81DF0 /* FunctionsExampleSwift */ = { - isa = PBXGroup; - children = ( - 10B1CCBE205C51F90067EDB4 /* SignInViewController.swift */, - 10B1CCB9205C4D520067EDB4 /* FAuthPickerViewController.swift */, - EF6DB4CA1CDD60F700319C08 /* MainViewController.swift */, - 5F5A537D1ADE67D500F81DF0 /* AppDelegate.swift */, - 10B1CCC0205C60890067EDB4 /* CloudAddCell.swift */, - 10B1CCC2205C63370067EDB4 /* CommentCell.swift */, - ); - path = FunctionsExampleSwift; - sourceTree = ""; - }; - 5F9961041AE0CF4F0034F503 /* Shared */ = { - isa = PBXGroup; - children = ( - 5F9961061AE0CF4F0034F503 /* Images.xcassets */, - 5F9961071AE0CF4F0034F503 /* LaunchScreen.xib */, - ); - name = Shared; - path = ../../shared; - sourceTree = ""; - }; - DE43B5CB23AEC6980056B15F /* TestUtils */ = { - isa = PBXGroup; - children = ( - DE43B5CC23AEC6980056B15F /* FIREGHelper.h */, - DE43B5CD23AEC6980056B15F /* FIREGSignInHelper.m */, - DE43B5CE23AEC6980056B15F /* FIREGHelper.m */, - DE43B5CF23AEC6980056B15F /* FIREGSignInHelper.h */, - DED65CF723E9DE6400461312 /* FIREGSignInInfo.h */, - ); - name = TestUtils; - path = ../../TestUtils; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 1036D9FC2087CA10003253C9 /* FunctionsExampleTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 1036DA062087CA10003253C9 /* Build configuration list for PBXNativeTarget "FunctionsExampleTests" */; - buildPhases = ( - 1036D9F92087CA10003253C9 /* Sources */, - 1036D9FA2087CA10003253C9 /* Frameworks */, - 1036D9FB2087CA10003253C9 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 1036DA032087CA10003253C9 /* PBXTargetDependency */, - ); - name = FunctionsExampleTests; - productName = FunctionsExampleTests; - productReference = 1036D9FD2087CA10003253C9 /* FunctionsExampleTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; - 1036DA0A2087CA25003253C9 /* FunctionsExampleUITests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 1036DA122087CA25003253C9 /* Build configuration list for PBXNativeTarget "FunctionsExampleUITests" */; - buildPhases = ( - 1036DA072087CA25003253C9 /* Sources */, - 1036DA082087CA25003253C9 /* Frameworks */, - 1036DA092087CA25003253C9 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 1036DA112087CA25003253C9 /* PBXTargetDependency */, - ); - name = FunctionsExampleUITests; - productName = FunctionsExampleUITests; - productReference = 1036DA0B2087CA25003253C9 /* FunctionsExampleUITests.xctest */; - productType = "com.apple.product-type.bundle.ui-testing"; - }; - 1036DA182087CA66003253C9 /* FunctionsExampleSwiftUITests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 1036DA202087CA66003253C9 /* Build configuration list for PBXNativeTarget "FunctionsExampleSwiftUITests" */; - buildPhases = ( - 1036DA152087CA66003253C9 /* Sources */, - 1036DA162087CA66003253C9 /* Frameworks */, - 1036DA172087CA66003253C9 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 1036DA1F2087CA66003253C9 /* PBXTargetDependency */, - ); - name = FunctionsExampleSwiftUITests; - productName = FunctionsExampleSwiftUITests; - productReference = 1036DA192087CA66003253C9 /* FunctionsExampleSwiftUITests.xctest */; - productType = "com.apple.product-type.bundle.ui-testing"; - }; - 5F5A534B1ADE670C00F81DF0 /* FunctionsExample */ = { - isa = PBXNativeTarget; - buildConfigurationList = 5F5A536F1ADE670C00F81DF0 /* Build configuration list for PBXNativeTarget "FunctionsExample" */; - buildPhases = ( - 5F5A53481ADE670C00F81DF0 /* Sources */, - 5F5A53491ADE670C00F81DF0 /* Frameworks */, - 5F5A534A1ADE670C00F81DF0 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = FunctionsExample; - productName = UserManagementExample; - productReference = 5F5A534C1ADE670C00F81DF0 /* FunctionsExample.app */; - productType = "com.apple.product-type.application"; - }; - 5F5A53781ADE67D500F81DF0 /* FunctionsExampleSwift */ = { - isa = PBXNativeTarget; - buildConfigurationList = 5F5A53991ADE67D500F81DF0 /* Build configuration list for PBXNativeTarget "FunctionsExampleSwift" */; - buildPhases = ( - 5F5A53751ADE67D500F81DF0 /* Sources */, - 5F5A53761ADE67D500F81DF0 /* Frameworks */, - 5F5A53771ADE67D500F81DF0 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = FunctionsExampleSwift; - productName = UserManagementExampleSwift; - productReference = 5F5A53791ADE67D500F81DF0 /* FunctionsExample.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 5F5A53441ADE670C00F81DF0 /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftUpdateCheck = 0930; - LastUpgradeCheck = 1110; - ORGANIZATIONNAME = "Google Inc."; - TargetAttributes = { - 1036D9FC2087CA10003253C9 = { - CreatedOnToolsVersion = 9.3; - ProvisioningStyle = Automatic; - TestTargetID = 5F5A534B1ADE670C00F81DF0; - }; - 1036DA0A2087CA25003253C9 = { - CreatedOnToolsVersion = 9.3; - ProvisioningStyle = Automatic; - TestTargetID = 5F5A534B1ADE670C00F81DF0; - }; - 1036DA182087CA66003253C9 = { - CreatedOnToolsVersion = 9.3; - LastSwiftMigration = 1110; - ProvisioningStyle = Automatic; - TestTargetID = 5F5A53781ADE67D500F81DF0; - }; - 5F5A534B1ADE670C00F81DF0 = { - CreatedOnToolsVersion = 6.3; - DevelopmentTeam = 4G4F7RJDV8; - LastSwiftMigration = 0920; - ProvisioningStyle = Automatic; - SystemCapabilities = { - com.apple.Keychain = { - enabled = 1; - }; - com.apple.SafariKeychain = { - enabled = 0; - }; - }; - }; - 5F5A53781ADE67D500F81DF0 = { - CreatedOnToolsVersion = 6.3; - DevelopmentTeam = 4G4F7RJDV8; - LastSwiftMigration = 1110; - ProvisioningStyle = Automatic; - SystemCapabilities = { - com.apple.Keychain = { - enabled = 0; - }; - com.apple.SafariKeychain = { - enabled = 1; - }; - }; - }; - }; - }; - buildConfigurationList = 5F5A53471ADE670C00F81DF0 /* Build configuration list for PBXProject "FunctionsExample" */; - compatibilityVersion = "Xcode 6.3"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 5F5A53431ADE670C00F81DF0; - productRefGroup = 5F5A534D1ADE670C00F81DF0 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 5F5A534B1ADE670C00F81DF0 /* FunctionsExample */, - 5F5A53781ADE67D500F81DF0 /* FunctionsExampleSwift */, - 1036D9FC2087CA10003253C9 /* FunctionsExampleTests */, - 1036DA0A2087CA25003253C9 /* FunctionsExampleUITests */, - 1036DA182087CA66003253C9 /* FunctionsExampleSwiftUITests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 1036D9FB2087CA10003253C9 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1036DA092087CA25003253C9 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1036DA172087CA66003253C9 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5F5A534A1ADE670C00F81DF0 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 10B1CCB7205C4CA70067EDB4 /* FAuthPickerViewController.xib in Resources */, - 5F99610C1AE0CF4F0034F503 /* LaunchScreen.xib in Resources */, - 10B054031C6A3C630061077D /* Main.storyboard in Resources */, - 5F99610A1AE0CF4F0034F503 /* Images.xcassets in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5F5A53771ADE67D500F81DF0 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 10B1CCB8205C4CA70067EDB4 /* FAuthPickerViewController.xib in Resources */, - EF4857041C752B7700649485 /* Main.storyboard in Resources */, - 5F99610D1AE0CF4F0034F503 /* LaunchScreen.xib in Resources */, - 5F99610B1AE0CF4F0034F503 /* Images.xcassets in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 1036D9F92087CA10003253C9 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 1036DA002087CA10003253C9 /* FunctionsExampleTests.m in Sources */, - C8CC5DB90E433A1628474CAE /* GoogleService-Info.plist in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1036DA072087CA25003253C9 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 1036DA0E2087CA25003253C9 /* FunctionsExampleUITests.m in Sources */, - DE43B5D023AEC6980056B15F /* FIREGSignInHelper.m in Sources */, - DE43B5D123AEC6980056B15F /* FIREGHelper.m in Sources */, - 945A2E9F85C854B9E5D77ADF /* GoogleService-Info.plist in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1036DA152087CA66003253C9 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 1036DA1C2087CA66003253C9 /* FunctionsExampleSwiftUITests.swift in Sources */, - 46D64964EDAD308E5F394D61 /* GoogleService-Info.plist in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5F5A53481ADE670C00F81DF0 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 10A181852060458C00133918 /* FAuthPickerViewController.m in Sources */, - 10757BD52059CFC7007623FD /* CloudAddCell.m in Sources */, - EF6DB4D51CDD610200319C08 /* SignInViewController.m in Sources */, - EF6DB4D61CDD610200319C08 /* MainViewController.m in Sources */, - EF6DB4D41CDD610200319C08 /* CommentCell.m in Sources */, - 5F5A53551ADE670C00F81DF0 /* AppDelegate.m in Sources */, - 5F5A53521ADE670C00F81DF0 /* main.m in Sources */, - D295393A72DB35CE1616AA79 /* GoogleService-Info.plist in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5F5A53751ADE67D500F81DF0 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5F5A537E1ADE67D500F81DF0 /* AppDelegate.swift in Sources */, - 10B1CCBF205C51F90067EDB4 /* SignInViewController.swift in Sources */, - 10B1CCC3205C63370067EDB4 /* CommentCell.swift in Sources */, - 10B1CCBB205C4D520067EDB4 /* FAuthPickerViewController.swift in Sources */, - 10B1CCC1205C60890067EDB4 /* CloudAddCell.swift in Sources */, - EF6DB4CD1CDD60F700319C08 /* MainViewController.swift in Sources */, - 0B38EF10647EB2DA5A5D56D1 /* GoogleService-Info.plist in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 1036DA032087CA10003253C9 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5F5A534B1ADE670C00F81DF0 /* FunctionsExample */; - targetProxy = 1036DA022087CA10003253C9 /* PBXContainerItemProxy */; - }; - 1036DA112087CA25003253C9 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5F5A534B1ADE670C00F81DF0 /* FunctionsExample */; - targetProxy = 1036DA102087CA25003253C9 /* PBXContainerItemProxy */; - }; - 1036DA1F2087CA66003253C9 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5F5A53781ADE67D500F81DF0 /* FunctionsExampleSwift */; - targetProxy = 1036DA1E2087CA66003253C9 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - 10B054011C6A3C630061077D /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 10B054021C6A3C630061077D /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 1036DA042087CA10003253C9 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - DEBUG_INFORMATION_FORMAT = dwarf; - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = FunctionsExampleTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 11.3; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.google.friendlypix.FunctionsExampleTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/FunctionsExample.app/FunctionsExample"; - }; - name = Debug; - }; - 1036DA052087CA10003253C9 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = FunctionsExampleTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 11.3; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.google.friendlypix.FunctionsExampleTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/FunctionsExample.app/FunctionsExample"; - }; - name = Release; - }; - 1036DA132087CA25003253C9 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - DEBUG_INFORMATION_FORMAT = dwarf; - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = FunctionsExampleUITests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 11.3; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.google.friendlypix.FunctionsExampleUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = FunctionsExample; - }; - name = Debug; - }; - 1036DA142087CA25003253C9 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = FunctionsExampleUITests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 11.3; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.google.friendlypix.FunctionsExampleUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = FunctionsExample; - }; - name = Release; - }; - 1036DA212087CA66003253C9 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - DEBUG_INFORMATION_FORMAT = dwarf; - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = FunctionsExampleSwiftUITests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 11.3; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.google.friendlypix.FunctionsExampleSwiftUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_SWIFT3_OBJC_INFERENCE = Default; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = FunctionsExampleSwift; - }; - name = Debug; - }; - 1036DA222087CA66003253C9 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = FunctionsExampleSwiftUITests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 11.3; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.google.friendlypix.FunctionsExampleSwiftUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_SWIFT3_OBJC_INFERENCE = Default; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = FunctionsExampleSwift; - }; - name = Release; - }; - 5F5A536D1ADE670C00F81DF0 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - ENABLE_BITCODE = NO; - 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_SYMBOLS_PRIVATE_EXTERN = NO; - 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 = 15.0; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 5F5A536E1ADE670C00F81DF0 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = YES; - ENABLE_BITCODE = NO; - 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 = 15.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 5F5A53701ADE670C00F81DF0 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; - CLANG_ENABLE_MODULES = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = 4G4F7RJDV8; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = "$(SRCROOT)/FunctionsExample/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.quickstart.FunctionsExample; - PRODUCT_NAME = FunctionsExample; - PROVISIONING_PROFILE = ""; - PROVISIONING_PROFILE_SPECIFIER = ""; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 3.0; - }; - name = Debug; - }; - 5F5A53711ADE670C00F81DF0 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; - CLANG_ENABLE_MODULES = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = 4G4F7RJDV8; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = "$(SRCROOT)/FunctionsExample/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.quickstart.FunctionsExample; - PRODUCT_NAME = FunctionsExample; - PROVISIONING_PROFILE = ""; - PROVISIONING_PROFILE_SPECIFIER = ""; - SWIFT_VERSION = 3.0; - }; - name = Release; - }; - 5F5A53951ADE67D500F81DF0 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = 4G4F7RJDV8; - INFOPLIST_FILE = "$(SRCROOT)/FunctionsExample/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.quickstart.FunctionsExample; - PRODUCT_NAME = FunctionsExample; - PROVISIONING_PROFILE = ""; - PROVISIONING_PROFILE_SPECIFIER = ""; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_SWIFT3_OBJC_INFERENCE = Off; - SWIFT_VERSION = 5.0; - }; - name = Debug; - }; - 5F5A53961ADE67D500F81DF0 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = 4G4F7RJDV8; - INFOPLIST_FILE = "$(SRCROOT)/FunctionsExample/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.quickstart.FunctionsExample; - PRODUCT_NAME = FunctionsExample; - PROVISIONING_PROFILE = ""; - PROVISIONING_PROFILE_SPECIFIER = ""; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_SWIFT3_OBJC_INFERENCE = Off; - SWIFT_VERSION = 5.0; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 1036DA062087CA10003253C9 /* Build configuration list for PBXNativeTarget "FunctionsExampleTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1036DA042087CA10003253C9 /* Debug */, - 1036DA052087CA10003253C9 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 1036DA122087CA25003253C9 /* Build configuration list for PBXNativeTarget "FunctionsExampleUITests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1036DA132087CA25003253C9 /* Debug */, - 1036DA142087CA25003253C9 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 1036DA202087CA66003253C9 /* Build configuration list for PBXNativeTarget "FunctionsExampleSwiftUITests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1036DA212087CA66003253C9 /* Debug */, - 1036DA222087CA66003253C9 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 5F5A53471ADE670C00F81DF0 /* Build configuration list for PBXProject "FunctionsExample" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 5F5A536D1ADE670C00F81DF0 /* Debug */, - 5F5A536E1ADE670C00F81DF0 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 5F5A536F1ADE670C00F81DF0 /* Build configuration list for PBXNativeTarget "FunctionsExample" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 5F5A53701ADE670C00F81DF0 /* Debug */, - 5F5A53711ADE670C00F81DF0 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 5F5A53991ADE67D500F81DF0 /* Build configuration list for PBXNativeTarget "FunctionsExampleSwift" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 5F5A53951ADE67D500F81DF0 /* Debug */, - 5F5A53961ADE67D500F81DF0 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 5F5A53441ADE670C00F81DF0 /* Project object */; -} diff --git a/functions/LegacyFunctionsQuickstart/FunctionsExample.xcodeproj/xcshareddata/xcschemes/FunctionsExample.xcscheme b/functions/LegacyFunctionsQuickstart/FunctionsExample.xcodeproj/xcshareddata/xcschemes/FunctionsExample.xcscheme deleted file mode 100644 index 6e1b76923..000000000 --- a/functions/LegacyFunctionsQuickstart/FunctionsExample.xcodeproj/xcshareddata/xcschemes/FunctionsExample.xcscheme +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/functions/LegacyFunctionsQuickstart/FunctionsExample.xcodeproj/xcshareddata/xcschemes/FunctionsExampleSwift.xcscheme b/functions/LegacyFunctionsQuickstart/FunctionsExample.xcodeproj/xcshareddata/xcschemes/FunctionsExampleSwift.xcscheme deleted file mode 100644 index 9f978cac4..000000000 --- a/functions/LegacyFunctionsQuickstart/FunctionsExample.xcodeproj/xcshareddata/xcschemes/FunctionsExampleSwift.xcscheme +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/functions/LegacyFunctionsQuickstart/FunctionsExample/.clang-format b/functions/LegacyFunctionsQuickstart/FunctionsExample/.clang-format deleted file mode 100644 index 1f09ce0f2..000000000 --- a/functions/LegacyFunctionsQuickstart/FunctionsExample/.clang-format +++ /dev/null @@ -1,4 +0,0 @@ -BasedOnStyle: Google -ColumnLimit: 100 -BinPackParameters: false -AllowAllParametersOfDeclarationOnNextLine: true diff --git a/functions/LegacyFunctionsQuickstart/FunctionsExample/AppDelegate.h b/functions/LegacyFunctionsQuickstart/FunctionsExample/AppDelegate.h deleted file mode 100644 index f284483f9..000000000 --- a/functions/LegacyFunctionsQuickstart/FunctionsExample/AppDelegate.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// Copyright (c) 2018 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -@import UIKit; - -@interface AppDelegate : UIResponder - -@property(nonatomic, strong) UIWindow *window; - -@end diff --git a/functions/LegacyFunctionsQuickstart/FunctionsExample/AppDelegate.m b/functions/LegacyFunctionsQuickstart/FunctionsExample/AppDelegate.m deleted file mode 100644 index ff0082686..000000000 --- a/functions/LegacyFunctionsQuickstart/FunctionsExample/AppDelegate.m +++ /dev/null @@ -1,43 +0,0 @@ -// -// Copyright (c) 2018 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "AppDelegate.h" -#import "SignInViewController.h" - -@import FirebaseCore; -@import FirebaseAuth; -@import FirebaseAuthUI; - - -@implementation AppDelegate - -- (BOOL)application:(UIApplication *)application - didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - // [START firebase_configure] - // Use Firebase library to configure APIs - [FIRApp configure]; - // [END firebase_configure] - if ([FIRAuth auth].currentUser == nil) { - _window.rootViewController = [[SignInViewController alloc] init]; - } - return YES; -} - -- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options { - return [[FUIAuth defaultAuthUI] handleOpenURL:url sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]]; -} - -@end diff --git a/functions/LegacyFunctionsQuickstart/FunctionsExample/Base.lproj/Main.storyboard b/functions/LegacyFunctionsQuickstart/FunctionsExample/Base.lproj/Main.storyboard deleted file mode 100644 index 2cb287d6f..000000000 --- a/functions/LegacyFunctionsQuickstart/FunctionsExample/Base.lproj/Main.storyboard +++ /dev/null @@ -1,220 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/functions/LegacyFunctionsQuickstart/FunctionsExample/CloudAddCell.h b/functions/LegacyFunctionsQuickstart/FunctionsExample/CloudAddCell.h deleted file mode 100644 index 6ce2548be..000000000 --- a/functions/LegacyFunctionsQuickstart/FunctionsExample/CloudAddCell.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// Copyright (c) 2018 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -@import MaterialComponents; - -@interface CloudAddCell : MDCCollectionViewCell -@property (weak, nonatomic) IBOutlet MDCTextField *number1Field; -@property (weak, nonatomic) IBOutlet MDCTextField *number2Field; -@property (weak, nonatomic) IBOutlet MDCButton *button; -@end - diff --git a/functions/LegacyFunctionsQuickstart/FunctionsExample/CloudAddCell.m b/functions/LegacyFunctionsQuickstart/FunctionsExample/CloudAddCell.m deleted file mode 100644 index 1a58c6d8f..000000000 --- a/functions/LegacyFunctionsQuickstart/FunctionsExample/CloudAddCell.m +++ /dev/null @@ -1,69 +0,0 @@ -// -// Copyright (c) 2018 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "CloudAddCell.h" - -@import FirebaseFunctions; - -@interface CloudAddCell () -@property (weak, nonatomic) IBOutlet UITextField *resultField; -// [START define_functions_instance] -@property(strong, nonatomic) FIRFunctions *functions; -// [END define_functions_instance] -@end - -@implementation CloudAddCell - -- (instancetype)initWithCoder:(NSCoder *)coder -{ - self = [super initWithCoder:coder]; - if (self) { - // [START initialize_functions_instance] - self.functions = [FIRFunctions functions]; - // [END initialize_functions_instance] - } - return self; -} - -- (IBAction)didTapAdd:(id)sender { - // [START function_add_numbers] - NSDictionary *data = @{@"firstNumber": [NSNumber numberWithInt:_number1Field.text.intValue], - @"secondNumber": [NSNumber numberWithInt:_number2Field.text.intValue]}; - [[_functions HTTPSCallableWithName:@"addNumbers"] callWithObject:data - completion:^(FIRHTTPSCallableResult * _Nullable result, NSError * _Nullable error) { - - // [START function_error] - if (error) { - if ([error.domain isEqual:@"com.firebase.functions"]) { - FIRFunctionsErrorCode code = error.code; - NSString *message = error.localizedDescription; - NSObject *details = error.userInfo[@"details"]; - } - // [START_EXCLUDE] - NSLog(@"%@", error); - return; - // [END_EXCLUDE] - } - // [END function_error] - - - NSNumber *operationResult = result.data[@"operationResult"]; - self->_resultField.text = operationResult.stringValue; - }]; - // [END function_add_numbers] -} - -@end diff --git a/functions/LegacyFunctionsQuickstart/FunctionsExample/CommentCell.h b/functions/LegacyFunctionsQuickstart/FunctionsExample/CommentCell.h deleted file mode 100644 index c8cffaa4a..000000000 --- a/functions/LegacyFunctionsQuickstart/FunctionsExample/CommentCell.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// Copyright (c) 2018 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -@import MaterialComponents; - -@interface CommentCell : MDCCollectionViewCell -@property(weak, nonatomic) IBOutlet MDCTextField *inputField; -@property(weak, nonatomic) IBOutlet MDCButton *button; -@end diff --git a/functions/LegacyFunctionsQuickstart/FunctionsExample/CommentCell.m b/functions/LegacyFunctionsQuickstart/FunctionsExample/CommentCell.m deleted file mode 100644 index 3bfe77a83..000000000 --- a/functions/LegacyFunctionsQuickstart/FunctionsExample/CommentCell.m +++ /dev/null @@ -1,63 +0,0 @@ -// -// Copyright (c) 2018 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "CommentCell.h" - -@import FirebaseFunctions; - -@interface CommentCell () -@property(weak, nonatomic) IBOutlet MDCTextField *resultField; -// [START define_functions_instance] -@property(strong, nonatomic) FIRFunctions *functions; -// [END define_functions_instance] -@end - -@implementation CommentCell - -- (instancetype)initWithCoder:(NSCoder *)coder -{ - self = [super initWithCoder:coder]; - if (self) { - // [START initialize_functions_instance] - self.functions = [FIRFunctions functions]; - // [END initialize_functions_instance] - } - return self; -} - -- (IBAction)didTapAddMessage:(id)sender { - // [START function_add_message] - [[_functions HTTPSCallableWithName:@"addMessage"] callWithObject:@{@"text": _inputField.text} - completion:^(FIRHTTPSCallableResult * _Nullable result, NSError * _Nullable error) { - // [START function_error] - if (error) { - if ([error.domain isEqual:@"com.firebase.functions"]) { - FIRFunctionsErrorCode code = error.code; - NSString *message = error.localizedDescription; - NSObject *details = error.userInfo[@"details"]; - } - // [START_EXCLUDE] - NSLog(@"%@", error); - return; - // [END_EXCLUDE] - } - // [END function_error] - self->_resultField.text = result.data[@"text"]; - }]; - // [END function_add_message] -} - -@end diff --git a/functions/LegacyFunctionsQuickstart/FunctionsExample/FAuthPickerViewController.h b/functions/LegacyFunctionsQuickstart/FunctionsExample/FAuthPickerViewController.h deleted file mode 100644 index 3aa95509a..000000000 --- a/functions/LegacyFunctionsQuickstart/FunctionsExample/FAuthPickerViewController.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// Copyright (c) 2018 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -@import FirebaseAuthUI; - -@interface FAuthPickerViewController : FUIAuthPickerViewController -@end diff --git a/functions/LegacyFunctionsQuickstart/FunctionsExample/FAuthPickerViewController.m b/functions/LegacyFunctionsQuickstart/FunctionsExample/FAuthPickerViewController.m deleted file mode 100644 index 15c84d88d..000000000 --- a/functions/LegacyFunctionsQuickstart/FunctionsExample/FAuthPickerViewController.m +++ /dev/null @@ -1,20 +0,0 @@ -// -// Copyright (c) 2018 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "FAuthPickerViewController.h" - -@implementation FAuthPickerViewController -@end diff --git a/functions/LegacyFunctionsQuickstart/FunctionsExample/FAuthPickerViewController.xib b/functions/LegacyFunctionsQuickstart/FunctionsExample/FAuthPickerViewController.xib deleted file mode 100644 index 0f346148b..000000000 --- a/functions/LegacyFunctionsQuickstart/FunctionsExample/FAuthPickerViewController.xib +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/functions/LegacyFunctionsQuickstart/FunctionsExample/Info.plist b/functions/LegacyFunctionsQuickstart/FunctionsExample/Info.plist deleted file mode 100644 index 095fbf948..000000000 --- a/functions/LegacyFunctionsQuickstart/FunctionsExample/Info.plist +++ /dev/null @@ -1,64 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIcons - - CFBundleIcons~ipad - - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleURLTypes - - - CFBundleTypeRole - Editor - CFBundleURLName - Client - CFBundleURLSchemes - - REVERSED_CLIENT_ID - - - - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UILaunchStoryboardName - LaunchScreen - UIMainStoryboardFile - Main - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/functions/LegacyFunctionsQuickstart/FunctionsExample/MainViewController.h b/functions/LegacyFunctionsQuickstart/FunctionsExample/MainViewController.h deleted file mode 100644 index 24df78677..000000000 --- a/functions/LegacyFunctionsQuickstart/FunctionsExample/MainViewController.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// Copyright (c) 2018 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import -@import MaterialComponents; - -// [START signin_controller] -@interface MainViewController : MDCCollectionViewController -@end diff --git a/functions/LegacyFunctionsQuickstart/FunctionsExample/MainViewController.m b/functions/LegacyFunctionsQuickstart/FunctionsExample/MainViewController.m deleted file mode 100644 index a8cd2d7c6..000000000 --- a/functions/LegacyFunctionsQuickstart/FunctionsExample/MainViewController.m +++ /dev/null @@ -1,73 +0,0 @@ -// -// Copyright (c) 2018 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "MainViewController.h" -#import "CloudAddCell.h" -#import "CommentCell.h" -@import MaterialComponents; - -@interface MainViewController () -@property(strong, nonatomic) MDCTextInputControllerUnderline *controller1; -@property(strong, nonatomic) MDCTextInputControllerUnderline *controller2; -@property(strong, nonatomic) MDCTextInputControllerUnderline *controller3; -@end - -@implementation MainViewController -- (void)viewDidLoad { - [super viewDidLoad]; - self.styler.cellStyle = MDCCollectionViewCellStyleCard; - self.styler.cellLayoutType = MDCCollectionViewCellLayoutTypeList; -} - -- (CGFloat)collectionView:(UICollectionView *)collectionView cellHeightAtIndexPath:(NSIndexPath *)indexPath { - if (indexPath.section == 0) { - return 181; - } - return 230; -} - -- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView { - return 2; -} - -- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { - return 1; -} - -- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { - if (indexPath.section == 0) { - CloudAddCell *addCell = [collectionView dequeueReusableCellWithReuseIdentifier:@"add" forIndexPath:indexPath]; - addCell.number1Field.delegate = self; - _controller1 = [[MDCTextInputControllerUnderline alloc] initWithTextInput:addCell.number1Field]; - addCell.number2Field.delegate = self; - _controller2 = [[MDCTextInputControllerUnderline alloc] initWithTextInput:addCell.number2Field]; - - - [addCell.button setElevation:MDCShadowElevationRaisedButtonResting forState:UIControlStateNormal]; - [addCell.button setElevation:MDCShadowElevationRaisedButtonPressed forState:UIControlStateHighlighted]; - return addCell; - } else { - CommentCell *commentCell = [collectionView dequeueReusableCellWithReuseIdentifier:@"message" forIndexPath:indexPath]; - commentCell.inputField.delegate = self; - _controller3 = [[MDCTextInputControllerUnderline alloc] initWithTextInput:commentCell.inputField]; - - [commentCell.button setElevation:MDCShadowElevationRaisedButtonResting forState:UIControlStateNormal]; - [commentCell.button setElevation:MDCShadowElevationRaisedButtonPressed forState:UIControlStateHighlighted]; - return commentCell; - } -} - -@end diff --git a/functions/LegacyFunctionsQuickstart/FunctionsExample/SignInViewController.h b/functions/LegacyFunctionsQuickstart/FunctionsExample/SignInViewController.h deleted file mode 100644 index 7608eb887..000000000 --- a/functions/LegacyFunctionsQuickstart/FunctionsExample/SignInViewController.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// Copyright (c) 2018 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -@import FirebaseAuthUI; - -@interface SignInViewController : UIViewController -@end diff --git a/functions/LegacyFunctionsQuickstart/FunctionsExample/SignInViewController.m b/functions/LegacyFunctionsQuickstart/FunctionsExample/SignInViewController.m deleted file mode 100644 index 7412a9995..000000000 --- a/functions/LegacyFunctionsQuickstart/FunctionsExample/SignInViewController.m +++ /dev/null @@ -1,78 +0,0 @@ -// -// Copyright (c) 2018 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "SignInViewController.h" -#import "AppDelegate.h" -#import "FAuthPickerViewController.h" - -@import FirebaseAuth; -@import FirebaseAuthUI; -@import FirebaseGoogleAuthUI; - -@interface SignInViewController () - -@end - -@implementation SignInViewController - -- (void)viewDidAppear:(BOOL)animated { - [super viewDidAppear:animated]; - if ([FIRAuth auth].currentUser) { - AppDelegate *appDelegate = (AppDelegate *)UIApplication.sharedApplication.delegate; - appDelegate.window.rootViewController = [[UIStoryboard storyboardWithName:@"Main" - bundle:[NSBundle mainBundle]] instantiateInitialViewController]; - [self dismissViewControllerAnimated:YES completion:nil]; - return; - } - FUIAuth *authUI = [FUIAuth defaultAuthUI]; - authUI.delegate = self; - authUI.TOSURL = [NSURL URLWithString:@"https://firebase.google.com/terms/"]; - authUI.providers = @[[[FUIGoogleAuth alloc] init]]; - UINavigationController *authViewController = authUI.authViewController; - authViewController.navigationBar.hidden = true; - [self presentViewController:authViewController animated:true completion:nil]; -} - -- (void)authUI:(FUIAuth *)authUI didSignInWithAuthDataResult:(FIRAuthDataResult *)authDataResult error:(NSError *)error { - if (error) { - if (error.code == FUIAuthErrorCodeUserCancelledSignIn) { - NSLog(@"User cancelled sign-in"); - } else { - NSError *detailedError = error.userInfo[NSUnderlyingErrorKey]; - if (!detailedError) { - detailedError = error; - } - NSLog(@"Login error: %@", detailedError.localizedDescription); - } - return; - } - [self signedIn:authDataResult.user]; -} - -- (FUIAuthPickerViewController *)authPickerViewControllerForAuthUI:(FUIAuth *)authUI { - return [[FAuthPickerViewController alloc] initWithNibName:@"FAuthPickerViewController" - bundle:[NSBundle mainBundle] - authUI:authUI]; -} - -- (void)signedIn:(FIRUser *)user { - AppDelegate *appDelegate = (AppDelegate *)UIApplication.sharedApplication.delegate; - appDelegate.window.rootViewController = [[UIStoryboard storyboardWithName:@"Main" - bundle:[NSBundle mainBundle]] instantiateInitialViewController]; - [self dismissViewControllerAnimated:YES completion:nil]; -} - -@end diff --git a/functions/LegacyFunctionsQuickstart/FunctionsExample/main.m b/functions/LegacyFunctionsQuickstart/FunctionsExample/main.m deleted file mode 100644 index d4878306b..000000000 --- a/functions/LegacyFunctionsQuickstart/FunctionsExample/main.m +++ /dev/null @@ -1,24 +0,0 @@ -// -// Copyright (c) 2015 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import -#import "AppDelegate.h" - -int main(int argc, char* argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/functions/LegacyFunctionsQuickstart/FunctionsExampleSwift/AppDelegate.swift b/functions/LegacyFunctionsQuickstart/FunctionsExampleSwift/AppDelegate.swift deleted file mode 100644 index 7aaa95c4e..000000000 --- a/functions/LegacyFunctionsQuickstart/FunctionsExampleSwift/AppDelegate.swift +++ /dev/null @@ -1,63 +0,0 @@ -// -// Copyright (c) 2018 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import UIKit - -import FirebaseCore -import FirebaseAuth -import FirebaseAuthUI - -@UIApplicationMain -// [START signin_delegate] -class AppDelegate: UIResponder, UIApplicationDelegate { - // [END signin_delegate] - - var window: UIWindow? - - func application(_ application: UIApplication, - didFinishLaunchingWithOptions launchOptions: [ - UIApplication.LaunchOptionsKey: Any - ]?) -> Bool { - // [START firebase_configure] - // Use Firebase library to configure APIs - FirebaseApp.configure() - // [END firebase_configure] - if Auth.auth().currentUser == nil { - window?.rootViewController = SignInViewController() - } - return true - } - - @available(iOS 9.0, *) - func application(_ app: UIApplication, open url: URL, - options: [UIApplication.OpenURLOptionsKey: Any]) -> Bool { - guard let sourceApplication = - options[UIApplication.OpenURLOptionsKey.sourceApplication] as? String else { - return false - } - return handleOpenUrl(url, sourceApplication: sourceApplication) - } - - @available(iOS 8.0, *) - func application(_ application: UIApplication, open url: URL, sourceApplication: String?, - annotation: Any) -> Bool { - return handleOpenUrl(url, sourceApplication: sourceApplication) - } - - func handleOpenUrl(_ url: URL, sourceApplication: String?) -> Bool { - return FUIAuth.defaultAuthUI()?.handleOpen(url, sourceApplication: sourceApplication) ?? false - } -} diff --git a/functions/LegacyFunctionsQuickstart/FunctionsExampleSwift/CloudAddCell.swift b/functions/LegacyFunctionsQuickstart/FunctionsExampleSwift/CloudAddCell.swift deleted file mode 100644 index 983639212..000000000 --- a/functions/LegacyFunctionsQuickstart/FunctionsExampleSwift/CloudAddCell.swift +++ /dev/null @@ -1,54 +0,0 @@ -// -// Copyright (c) 2018 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import MaterialComponents -import FirebaseFunctions - -@objc(CloudAddCell) -class CloudAddCell: MDCCollectionViewCell { - @IBOutlet var number1Field: MDCTextField! - @IBOutlet var number2Field: MDCTextField! - @IBOutlet var button: MDCButton! - @IBOutlet private var resultField: UITextField! - // [START functions_instance] - lazy var functions = Functions.functions() - // [END functions_instance] - - @IBAction func didTapAdd(_ sender: Any) { - // [START function_add_numbers] - let data = ["firstNumber": Int(number1Field.text!), - "secondNumber": Int(number2Field.text!)] - functions.httpsCallable("addNumbers").call(data) { result, error in - // [START function_error] - if let error = error as NSError? { - if error.domain == FunctionsErrorDomain { - let code = FunctionsErrorCode(rawValue: error.code) - let message = error.localizedDescription - let details = error.userInfo[FunctionsErrorDetailsKey] - } - // [START_EXCLUDE] - print(error) - return - // [END_EXCLUDE] - } - // [END function_error] - if let operationResult = (result?.data as? [String: Any])?["operationResult"] as? Int { - self.resultField.text = "\(operationResult)" - } - } - // [END function_add_numbers] - } -} diff --git a/functions/LegacyFunctionsQuickstart/FunctionsExampleSwift/CommentCell.swift b/functions/LegacyFunctionsQuickstart/FunctionsExampleSwift/CommentCell.swift deleted file mode 100644 index 40d1ab447..000000000 --- a/functions/LegacyFunctionsQuickstart/FunctionsExampleSwift/CommentCell.swift +++ /dev/null @@ -1,51 +0,0 @@ -// -// Copyright (c) 2018 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import MaterialComponents -import FirebaseFunctions - -@objc(CommentCell) -class CommentCell: MDCCollectionViewCell { - @IBOutlet var inputField: MDCTextField! - @IBOutlet var resultField: UITextField! - @IBOutlet var button: MDCButton! - // [START functions_instance] - lazy var functions = Functions.functions() - // [END functions_instance] - - @IBAction func didTapAddMessage(_ sender: Any) { - // [START function_add_message] - functions.httpsCallable("addMessage").call(["text": inputField.text]) { result, error in - // [START function_error] - if let error = error as NSError? { - if error.domain == FunctionsErrorDomain { - let code = FunctionsErrorCode(rawValue: error.code) - let message = error.localizedDescription - let details = error.userInfo[FunctionsErrorDetailsKey] - } - // [START_EXCLUDE] - print(error) - return - // [END_EXCLUDE] - } - // [END function_error] - if let data = result?.data as? [String: Any], let text = data["text"] as? String { - self.resultField.text = text - } - } - // [END function_add_message] - } -} diff --git a/functions/LegacyFunctionsQuickstart/FunctionsExampleSwift/FAuthPickerViewController.swift b/functions/LegacyFunctionsQuickstart/FunctionsExampleSwift/FAuthPickerViewController.swift deleted file mode 100644 index 7e1ff10a9..000000000 --- a/functions/LegacyFunctionsQuickstart/FunctionsExampleSwift/FAuthPickerViewController.swift +++ /dev/null @@ -1,20 +0,0 @@ -// -// Copyright (c) 2018 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import FirebaseAuthUI - -@objc(FAuthPickerViewController) -class FAuthPickerViewController: FUIAuthPickerViewController {} diff --git a/functions/LegacyFunctionsQuickstart/FunctionsExampleSwift/MainViewController.swift b/functions/LegacyFunctionsQuickstart/FunctionsExampleSwift/MainViewController.swift deleted file mode 100644 index 3af290113..000000000 --- a/functions/LegacyFunctionsQuickstart/FunctionsExampleSwift/MainViewController.swift +++ /dev/null @@ -1,76 +0,0 @@ -// -// Copyright (c) 2018 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import MaterialComponents - -@objc(MainViewController) -class MainViewController: MDCCollectionViewController, UITextFieldDelegate { - var controller1: MDCTextInputControllerUnderline! - var controller2: MDCTextInputControllerUnderline! - var controller3: MDCTextInputControllerUnderline! - - override func viewDidLoad() { - super.viewDidLoad() - styler.cellStyle = .card - styler.cellLayoutType = .list - } - - override func collectionView(_ collectionView: UICollectionView, - cellHeightAt indexPath: IndexPath) -> CGFloat { - if indexPath.section == 0 { - return 181 - } - return 230 - } - - override func numberOfSections(in collectionView: UICollectionView) -> Int { - return 2 - } - - override func collectionView(_ collectionView: UICollectionView, - numberOfItemsInSection section: Int) -> Int { - return 1 - } - - override func collectionView(_ collectionView: UICollectionView, - cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { - if indexPath.section == 0 { - let addCell = collectionView.dequeueReusableCell( - withReuseIdentifier: "add", - for: indexPath - ) as! CloudAddCell - addCell.number1Field.delegate = self - controller1 = MDCTextInputControllerUnderline(textInput: addCell.number1Field) - addCell.number2Field.delegate = self - controller2 = MDCTextInputControllerUnderline(textInput: addCell.number2Field) - - addCell.button.setElevation(ShadowElevation.raisedButtonResting, for: .normal) - addCell.button.setElevation(ShadowElevation.raisedButtonPressed, for: .highlighted) - return addCell - } else { - let commentCell = collectionView.dequeueReusableCell( - withReuseIdentifier: "message", - for: indexPath - ) as! CommentCell - commentCell.inputField.delegate = self - controller3 = MDCTextInputControllerUnderline(textInput: commentCell.inputField) - - commentCell.button.setElevation(ShadowElevation.raisedButtonResting, for: .normal) - commentCell.button.setElevation(ShadowElevation.raisedButtonPressed, for: .highlighted) - return commentCell - } - } -} diff --git a/functions/LegacyFunctionsQuickstart/FunctionsExampleSwift/SignInViewController.swift b/functions/LegacyFunctionsQuickstart/FunctionsExampleSwift/SignInViewController.swift deleted file mode 100644 index af2b48e57..000000000 --- a/functions/LegacyFunctionsQuickstart/FunctionsExampleSwift/SignInViewController.swift +++ /dev/null @@ -1,73 +0,0 @@ -// -// Copyright (c) 2018 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import FirebaseAuth -import FirebaseAuthUI -import FirebaseGoogleAuthUI - -private let kFirebaseTermsOfService = URL(string: "https://firebase.google.com/terms/")! - -@objc(SignInViewController) -class SignInViewController: UIViewController, FUIAuthDelegate { - override func viewDidAppear(_ animated: Bool) { - super.viewDidAppear(animated) - if Auth.auth().currentUser != nil { - let appDelegate = UIApplication.shared.delegate as? AppDelegate - appDelegate?.window?.rootViewController = UIStoryboard(name: "Main", bundle: Bundle.main) - .instantiateInitialViewController() - dismiss(animated: true, completion: nil) - return - } - let authUI = FUIAuth.defaultAuthUI() - authUI?.delegate = self - authUI?.tosurl = kFirebaseTermsOfService - authUI?.providers = [FUIGoogleAuth()] - let authViewController: UINavigationController? = authUI?.authViewController() - authViewController?.navigationBar.isHidden = true - present(authViewController!, animated: true, completion: nil) - } - - func authUI(_ authUI: FUIAuth, didSignInWith authDataResult: AuthDataResult?, error: Error?) { - switch error { - case let .some(error as NSError) - where UInt(error.code) == FUIAuthErrorCode.userCancelledSignIn.rawValue: - print("User cancelled sign-in") - case let .some(error as NSError) where error.userInfo[NSUnderlyingErrorKey] != nil: - print("Login error: \(error.userInfo[NSUnderlyingErrorKey]!)") - case let .some(error): - print("Login error: \(error.localizedDescription)") - case .none: - if let user = authDataResult?.user { - signed(in: user) - } - } - } - - func authPickerViewController(forAuthUI authUI: FUIAuth) -> FUIAuthPickerViewController { - return FAuthPickerViewController( - nibName: "FAuthPickerViewController", - bundle: Bundle.main, - authUI: authUI - ) - } - - func signed(in user: User) { - let appDelegate = UIApplication.shared.delegate as? AppDelegate - appDelegate?.window?.rootViewController = UIStoryboard(name: "Main", bundle: Bundle.main) - .instantiateInitialViewController() - dismiss(animated: true, completion: nil) - } -} diff --git a/functions/LegacyFunctionsQuickstart/FunctionsExampleSwiftUITests/FunctionsExampleSwiftUITests.swift b/functions/LegacyFunctionsQuickstart/FunctionsExampleSwiftUITests/FunctionsExampleSwiftUITests.swift deleted file mode 100644 index 0eb8bb77c..000000000 --- a/functions/LegacyFunctionsQuickstart/FunctionsExampleSwiftUITests/FunctionsExampleSwiftUITests.swift +++ /dev/null @@ -1,34 +0,0 @@ -// -// FunctionsExampleSwiftUITests.swift -// FunctionsExampleSwiftUITests -// -// Created by Ibrahim Ulukaya on 4/18/18. -// Copyright © 2018 Google Inc. All rights reserved. -// - -import XCTest - -class FunctionsExampleSwiftUITests: XCTestCase { - override func setUp() { - super.setUp() - - // Put setup code here. This method is called before the invocation of each test method in the class. - - // In UI tests it is usually best to stop immediately when a failure occurs. - continueAfterFailure = false - // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. - XCUIApplication().launch() - - // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. - } - - override func tearDown() { - // Put teardown code here. This method is called after the invocation of each test method in the class. - super.tearDown() - } - - func testExample() { - // Use recording to get started writing UI tests. - // Use XCTAssert and related functions to verify your tests produce the correct results. - } -} diff --git a/functions/LegacyFunctionsQuickstart/FunctionsExampleSwiftUITests/Info.plist b/functions/LegacyFunctionsQuickstart/FunctionsExampleSwiftUITests/Info.plist deleted file mode 100644 index 6c40a6cd0..000000000 --- a/functions/LegacyFunctionsQuickstart/FunctionsExampleSwiftUITests/Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - - diff --git a/functions/LegacyFunctionsQuickstart/FunctionsExampleTests/FunctionsExampleTests.m b/functions/LegacyFunctionsQuickstart/FunctionsExampleTests/FunctionsExampleTests.m deleted file mode 100644 index 4be49cbe9..000000000 --- a/functions/LegacyFunctionsQuickstart/FunctionsExampleTests/FunctionsExampleTests.m +++ /dev/null @@ -1,47 +0,0 @@ -// -// Copyright (c) 2019 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -@interface FunctionsExampleTests : XCTestCase - -@end - -@implementation FunctionsExampleTests - -- (void)setUp { - [super setUp]; - // Put setup code here. This method is called before the invocation of each test method in the class. -} - -- (void)tearDown { - // Put teardown code here. This method is called after the invocation of each test method in the class. - [super tearDown]; -} - -- (void)testExample { - // This is an example of a functional test case. - // Use XCTAssert and related functions to verify your tests produce the correct results. -} - -- (void)testPerformanceExample { - // This is an example of a performance test case. - [self measureBlock:^{ - // Put the code you want to measure the time of here. - }]; -} - -@end diff --git a/functions/LegacyFunctionsQuickstart/FunctionsExampleTests/Info.plist b/functions/LegacyFunctionsQuickstart/FunctionsExampleTests/Info.plist deleted file mode 100644 index 6c40a6cd0..000000000 --- a/functions/LegacyFunctionsQuickstart/FunctionsExampleTests/Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - - diff --git a/functions/LegacyFunctionsQuickstart/FunctionsExampleUITests/FunctionsExampleUITests.m b/functions/LegacyFunctionsQuickstart/FunctionsExampleUITests/FunctionsExampleUITests.m deleted file mode 100644 index cd168a0b9..000000000 --- a/functions/LegacyFunctionsQuickstart/FunctionsExampleUITests/FunctionsExampleUITests.m +++ /dev/null @@ -1,104 +0,0 @@ -// -// Copyright (c) 2019 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -#import "FIREGHelper.h" -#import "FIREGSignInHelper.h" - -typedef BOOL (^SystemAlertHandler)(XCUIElement*); -static SystemAlertHandler const alertHandler = ^(XCUIElement* element) { - if (element.buttons[@"Continue"].exists) { - [element.buttons[@"Continue"] tap]; - } - return YES; -}; - -static NSString *const signInButton = @"Sign in with Google"; -static NSString *const welcomeMessage = @"HTTPS Callable functions Quickstart"; - -@interface FunctionsExampleUITests : XCTestCase -@end - -@implementation FunctionsExampleUITests { - XCUIApplication *_app; - id signInPermissionMonitor; -} - -- (void)setUp { - [super setUp]; - _app = [[XCUIApplication alloc] init]; - signInPermissionMonitor = - [self addUIInterruptionMonitorWithDescription:@"Allow Google Sign-In" handler:alertHandler]; - [_app launch]; - if (![self signedIn]) { - [[_app buttons][signInButton] tap]; - doGoogleSignIn(_app, YES, YES); - // Make sure main app screen is loaded. - FIRWaitForVisible([[_app collectionViews] firstMatch]); - } -} - -- (void)tearDown { - [self removeUIInterruptionMonitor:signInPermissionMonitor]; - [super tearDown]; -} - -- (void)SKIPtestVerifyAppLaunched { - // Check that main UI elements are present on the screen. - XCTAssertTrue([[_app staticTexts][@"Add two numbers"] exists]); - XCTAssertTrue([[_app staticTexts][@"Sanitize a message"] exists]); -} - -- (void)SKIPtestAddTwoNumbers { - XCUIElement* number1 = [_app textFields][@"Num 1"]; - FIRWaitForVisible(number1); - [number1 tap]; - [number1 typeText:@"14"]; - - XCUIElement* number2 = [_app textFields][@"Num 2"]; - FIRWaitForVisible(number2); - [number2 doubleTap]; - [number2 typeText:@"51"]; - - [[_app buttons][@"Calculate"] tap]; - XCUIElement* result = [_app textFields][@"65"]; - - // Wait till network call is completed. - FIRWaitForVisible(result); - XCTAssert(result.exists); -} - -- (void)SKIPtestChangeMessage { - NSString* testText = @"hello from cloud functions!"; - XCUIElement* input = [_app textFields][@"Add your message"]; - [input tap]; - [input typeText:testText]; - - [[_app buttons][@"Add message"] tap]; - XCUIElement* result = [_app textFields][[testText uppercaseString]]; - - // Wait till network call is completed. - FIRWaitForVisible(result); - XCTAssert(result.exists); -} - -- (BOOL)signedIn { - FIRWaitForVisible(_app.buttons[signInButton]); - return !_app.buttons[signInButton].exists; -} - -@end diff --git a/functions/LegacyFunctionsQuickstart/FunctionsExampleUITests/Info.plist b/functions/LegacyFunctionsQuickstart/FunctionsExampleUITests/Info.plist deleted file mode 100644 index 6c40a6cd0..000000000 --- a/functions/LegacyFunctionsQuickstart/FunctionsExampleUITests/Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - - diff --git a/functions/LegacyFunctionsQuickstart/Podfile b/functions/LegacyFunctionsQuickstart/Podfile deleted file mode 100644 index 7d9497ef1..000000000 --- a/functions/LegacyFunctionsQuickstart/Podfile +++ /dev/null @@ -1,21 +0,0 @@ -# FunctionsExample - -use_frameworks! -platform :ios, '15.0' - -pod 'FirebaseAnalytics' -pod 'FirebaseAuth' -pod 'FirebaseUI/Auth', '~> 15.0' -pod 'FirebaseUI/Google', '~> 15.0' -# [START functions_pod] -pod 'FirebaseFunctions' -# [END functions_pod] - -pod 'MaterialComponents/Buttons' -pod 'MaterialComponents/Collections' -pod 'MaterialComponents/TextFields' - -target 'FunctionsExample' do -end -target 'FunctionsExampleSwift' do -end diff --git a/functions/LegacyFunctionsQuickstart/Podfile.lock b/functions/LegacyFunctionsQuickstart/Podfile.lock deleted file mode 100644 index 953ab70b3..000000000 --- a/functions/LegacyFunctionsQuickstart/Podfile.lock +++ /dev/null @@ -1,316 +0,0 @@ -PODS: - - AppAuth (1.7.6): - - AppAuth/Core (= 1.7.6) - - AppAuth/ExternalUserAgent (= 1.7.6) - - AppAuth/Core (1.7.6) - - AppAuth/ExternalUserAgent (1.7.6): - - AppAuth/Core - - AppCheckCore (11.2.0): - - GoogleUtilities/Environment (~> 8.0) - - GoogleUtilities/UserDefaults (~> 8.0) - - PromisesObjC (~> 2.4) - - FirebaseAnalytics (12.1.0): - - FirebaseAnalytics/Default (= 12.1.0) - - FirebaseCore (~> 12.1.0) - - FirebaseInstallations (~> 12.1.0) - - GoogleUtilities/AppDelegateSwizzler (~> 8.1) - - GoogleUtilities/MethodSwizzler (~> 8.1) - - GoogleUtilities/Network (~> 8.1) - - "GoogleUtilities/NSData+zlib (~> 8.1)" - - nanopb (~> 3.30910.0) - - FirebaseAnalytics/Default (12.1.0): - - FirebaseCore (~> 12.1.0) - - FirebaseInstallations (~> 12.1.0) - - GoogleAppMeasurement/Default (= 12.1.0) - - GoogleUtilities/AppDelegateSwizzler (~> 8.1) - - GoogleUtilities/MethodSwizzler (~> 8.1) - - GoogleUtilities/Network (~> 8.1) - - "GoogleUtilities/NSData+zlib (~> 8.1)" - - nanopb (~> 3.30910.0) - - FirebaseAppCheckInterop (12.1.0) - - FirebaseAuth (12.1.0): - - FirebaseAppCheckInterop (~> 12.1.0) - - FirebaseAuthInterop (~> 12.1.0) - - FirebaseCore (~> 12.1.0) - - FirebaseCoreExtension (~> 12.1.0) - - GoogleUtilities/AppDelegateSwizzler (~> 8.1) - - GoogleUtilities/Environment (~> 8.1) - - GTMSessionFetcher/Core (< 6.0, >= 3.4) - - RecaptchaInterop (~> 101.0) - - FirebaseAuthInterop (12.1.0) - - FirebaseAuthUI (15.1.0): - - FirebaseAuth (< 13.0, >= 11.0) - - FirebaseCore - - FirebaseCore (12.1.0): - - FirebaseCoreInternal (~> 12.1.0) - - GoogleUtilities/Environment (~> 8.1) - - GoogleUtilities/Logger (~> 8.1) - - FirebaseCoreExtension (12.1.0): - - FirebaseCore (~> 12.1.0) - - FirebaseCoreInternal (12.1.0): - - "GoogleUtilities/NSData+zlib (~> 8.1)" - - FirebaseFunctions (12.1.0): - - FirebaseAppCheckInterop (~> 12.1.0) - - FirebaseAuthInterop (~> 12.1.0) - - FirebaseCore (~> 12.1.0) - - FirebaseCoreExtension (~> 12.1.0) - - FirebaseMessagingInterop (~> 12.1.0) - - FirebaseSharedSwift (~> 12.1.0) - - GTMSessionFetcher/Core (< 6.0, >= 3.4) - - FirebaseGoogleAuthUI (15.1.0): - - FirebaseAuth - - FirebaseAuthUI (~> 15.0) - - FirebaseCore - - GoogleSignIn (~> 8.0) - - FirebaseInstallations (12.1.0): - - FirebaseCore (~> 12.1.0) - - GoogleUtilities/Environment (~> 8.1) - - GoogleUtilities/UserDefaults (~> 8.1) - - PromisesObjC (~> 2.4) - - FirebaseMessagingInterop (12.1.0) - - FirebaseSharedSwift (12.1.0) - - FirebaseUI/Auth (15.1.0): - - FirebaseAuthUI (~> 15.0) - - FirebaseUI/Google (15.1.0): - - FirebaseGoogleAuthUI (~> 15.0) - - GoogleAdsOnDeviceConversion (2.2.0): - - GoogleUtilities/Logger (~> 8.1) - - GoogleUtilities/Network (~> 8.1) - - nanopb (~> 3.30910.0) - - GoogleAppMeasurement/Core (12.1.0): - - GoogleUtilities/AppDelegateSwizzler (~> 8.1) - - GoogleUtilities/MethodSwizzler (~> 8.1) - - GoogleUtilities/Network (~> 8.1) - - "GoogleUtilities/NSData+zlib (~> 8.1)" - - nanopb (~> 3.30910.0) - - GoogleAppMeasurement/Default (12.1.0): - - GoogleAdsOnDeviceConversion (= 2.2.0) - - GoogleAppMeasurement/Core (= 12.1.0) - - GoogleAppMeasurement/IdentitySupport (= 12.1.0) - - GoogleUtilities/AppDelegateSwizzler (~> 8.1) - - GoogleUtilities/MethodSwizzler (~> 8.1) - - GoogleUtilities/Network (~> 8.1) - - "GoogleUtilities/NSData+zlib (~> 8.1)" - - nanopb (~> 3.30910.0) - - GoogleAppMeasurement/IdentitySupport (12.1.0): - - GoogleAppMeasurement/Core (= 12.1.0) - - GoogleUtilities/AppDelegateSwizzler (~> 8.1) - - GoogleUtilities/MethodSwizzler (~> 8.1) - - GoogleUtilities/Network (~> 8.1) - - "GoogleUtilities/NSData+zlib (~> 8.1)" - - nanopb (~> 3.30910.0) - - GoogleSignIn (8.0.0): - - AppAuth (< 2.0, >= 1.7.3) - - AppCheckCore (~> 11.0) - - GTMAppAuth (< 5.0, >= 4.1.1) - - GTMSessionFetcher/Core (~> 3.3) - - GoogleUtilities/AppDelegateSwizzler (8.1.0): - - GoogleUtilities/Environment - - GoogleUtilities/Logger - - GoogleUtilities/Network - - GoogleUtilities/Privacy - - GoogleUtilities/Environment (8.1.0): - - GoogleUtilities/Privacy - - GoogleUtilities/Logger (8.1.0): - - GoogleUtilities/Environment - - GoogleUtilities/Privacy - - GoogleUtilities/MethodSwizzler (8.1.0): - - GoogleUtilities/Logger - - GoogleUtilities/Privacy - - GoogleUtilities/Network (8.1.0): - - GoogleUtilities/Logger - - "GoogleUtilities/NSData+zlib" - - GoogleUtilities/Privacy - - GoogleUtilities/Reachability - - "GoogleUtilities/NSData+zlib (8.1.0)": - - GoogleUtilities/Privacy - - GoogleUtilities/Privacy (8.1.0) - - GoogleUtilities/Reachability (8.1.0): - - GoogleUtilities/Logger - - GoogleUtilities/Privacy - - GoogleUtilities/UserDefaults (8.1.0): - - GoogleUtilities/Logger - - GoogleUtilities/Privacy - - GTMAppAuth (4.1.1): - - AppAuth/Core (~> 1.7) - - GTMSessionFetcher/Core (< 4.0, >= 3.3) - - GTMSessionFetcher/Core (3.5.0) - - MaterialComponents/AnimationTiming (124.2.0) - - MaterialComponents/Availability (124.2.0) - - MaterialComponents/Buttons (124.2.0): - - MaterialComponents/Elevation - - MaterialComponents/Ink - - MaterialComponents/private/Math - - MaterialComponents/Ripple - - MaterialComponents/Shadow - - MaterialComponents/ShadowElevations - - MaterialComponents/ShadowLayer - - MaterialComponents/ShapeLibrary - - MaterialComponents/Shapes - - MaterialComponents/Typography - - MDFInternationalization - - MDFTextAccessibility - - MaterialComponents/CollectionCells (124.2.0): - - MaterialComponents/CollectionLayoutAttributes - - MaterialComponents/Ink - - MaterialComponents/Palettes - - MaterialComponents/private/Icons/ic_check - - MaterialComponents/private/Icons/ic_check_circle - - MaterialComponents/private/Icons/ic_chevron_right - - MaterialComponents/private/Icons/ic_info - - MaterialComponents/private/Icons/ic_radio_button_unchecked - - MaterialComponents/private/Icons/ic_reorder - - MaterialComponents/private/Math - - MaterialComponents/Ripple - - MaterialComponents/Typography - - MDFInternationalization - - MaterialComponents/CollectionLayoutAttributes (124.2.0) - - MaterialComponents/Collections (124.2.0): - - MaterialComponents/Availability - - MaterialComponents/CollectionCells - - MaterialComponents/CollectionLayoutAttributes - - MaterialComponents/Ink - - MaterialComponents/Palettes - - MaterialComponents/Ripple - - MaterialComponents/ShadowElevations - - MaterialComponents/ShadowLayer - - MaterialComponents/Typography - - MaterialComponents/Elevation (124.2.0): - - MaterialComponents/Availability - - MaterialComponents/private/Color - - MaterialComponents/private/Math - - MaterialComponents/Ink (124.2.0): - - MaterialComponents/Availability - - MaterialComponents/private/Color - - MaterialComponents/private/Math - - MaterialComponents/Palettes (124.2.0) - - MaterialComponents/private/Application (124.2.0) - - MaterialComponents/private/Color (124.2.0): - - MaterialComponents/Availability - - MaterialComponents/private/Icons/Base (124.2.0) - - MaterialComponents/private/Icons/ic_check (124.2.0): - - MaterialComponents/private/Icons/Base - - MaterialComponents/private/Icons/ic_check_circle (124.2.0): - - MaterialComponents/private/Icons/Base - - MaterialComponents/private/Icons/ic_chevron_right (124.2.0): - - MaterialComponents/private/Icons/Base - - MaterialComponents/private/Icons/ic_info (124.2.0): - - MaterialComponents/private/Icons/Base - - MaterialComponents/private/Icons/ic_radio_button_unchecked (124.2.0): - - MaterialComponents/private/Icons/Base - - MaterialComponents/private/Icons/ic_reorder (124.2.0): - - MaterialComponents/private/Icons/Base - - MaterialComponents/private/Math (124.2.0) - - MaterialComponents/Ripple (124.2.0): - - MaterialComponents/AnimationTiming - - MaterialComponents/Availability - - MaterialComponents/private/Color - - MaterialComponents/private/Math - - MaterialComponents/Shadow (124.2.0): - - MaterialComponents/Availability - - MaterialComponents/ShadowElevations (124.2.0) - - MaterialComponents/ShadowLayer (124.2.0): - - MaterialComponents/ShadowElevations - - MaterialComponents/ShapeLibrary (124.2.0): - - MaterialComponents/private/Math - - MaterialComponents/Shapes - - MaterialComponents/Shapes (124.2.0): - - MaterialComponents/private/Color - - MaterialComponents/private/Math - - MaterialComponents/ShadowLayer - - MaterialComponents/TextFields (124.2.0): - - MaterialComponents/AnimationTiming - - MaterialComponents/Buttons - - MaterialComponents/Elevation - - MaterialComponents/Palettes - - MaterialComponents/private/Math - - MaterialComponents/Typography - - MDFInternationalization - - MaterialComponents/Typography (124.2.0): - - MaterialComponents/private/Application - - MaterialComponents/private/Math - - MDFTextAccessibility - - MDFInternationalization (3.0.0) - - MDFTextAccessibility (2.0.1) - - nanopb (3.30910.0): - - nanopb/decode (= 3.30910.0) - - nanopb/encode (= 3.30910.0) - - nanopb/decode (3.30910.0) - - nanopb/encode (3.30910.0) - - PromisesObjC (2.4.0) - - RecaptchaInterop (101.0.0) - -DEPENDENCIES: - - FirebaseAnalytics - - FirebaseAuth - - FirebaseFunctions - - FirebaseUI/Auth (~> 15.0) - - FirebaseUI/Google (~> 15.0) - - MaterialComponents/Buttons - - MaterialComponents/Collections - - MaterialComponents/TextFields - -SPEC REPOS: - trunk: - - AppAuth - - AppCheckCore - - FirebaseAnalytics - - FirebaseAppCheckInterop - - FirebaseAuth - - FirebaseAuthInterop - - FirebaseAuthUI - - FirebaseCore - - FirebaseCoreExtension - - FirebaseCoreInternal - - FirebaseFunctions - - FirebaseGoogleAuthUI - - FirebaseInstallations - - FirebaseMessagingInterop - - FirebaseSharedSwift - - FirebaseUI - - GoogleAdsOnDeviceConversion - - GoogleAppMeasurement - - GoogleSignIn - - GoogleUtilities - - GTMAppAuth - - GTMSessionFetcher - - MaterialComponents - - MDFInternationalization - - MDFTextAccessibility - - nanopb - - PromisesObjC - - RecaptchaInterop - -SPEC CHECKSUMS: - AppAuth: d4f13a8fe0baf391b2108511793e4b479691fb73 - AppCheckCore: cc8fd0a3a230ddd401f326489c99990b013f0c4f - FirebaseAnalytics: e89a37004bce8789cb53f4cb3e80160d925e6624 - FirebaseAppCheckInterop: de890554a81967f16a0eb8d3def541c2bb42dece - FirebaseAuth: 6d0f2d449195c401e6d6ef1a891fff22bc60356d - FirebaseAuthInterop: ede927b03baf02453e6e9de2df513cc28d3eb742 - FirebaseAuthUI: c574e8904bd14503ff47e55ba2fc9ec64aacaed6 - FirebaseCore: 5a452ffa66f37c8e281076996837626c5d08c090 - FirebaseCoreExtension: dd89d73548ee9be5d8dc60e5c76bc421b965853b - FirebaseCoreInternal: ff526c22671bb564d1b34a47615e29ba99389dee - FirebaseFunctions: a3da4b0c69f1240ef51bbe39a78a1393b6c12323 - FirebaseGoogleAuthUI: 740a15519a36b4d15802c4ef1db4aaeb7f7bad0b - FirebaseInstallations: 6836550c466a6c3f753a777bec6f4e58ea228779 - FirebaseMessagingInterop: 1e9db269130b57cf791776b6c32dad1645fabca3 - FirebaseSharedSwift: ee4344de8a4d5b5290de3600667307a44f85fd40 - FirebaseUI: 1dfcf45d4bb4073380091394c9c555d697ecca11 - GoogleAdsOnDeviceConversion: b225b50f2ee6bbf856fd51a26684929b32657215 - GoogleAppMeasurement: 61605c4152a142d797383a713ecfa5df98fe46ca - GoogleSignIn: ce8c89bb9b37fb624b92e7514cc67335d1e277e4 - GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1 - GTMAppAuth: f69bd07d68cd3b766125f7e072c45d7340dea0de - GTMSessionFetcher: 5aea5ba6bd522a239e236100971f10cb71b96ab6 - MaterialComponents: 1a9b2d9d45b1601ae544de85089adc4c464306d4 - MDFInternationalization: d697c55307816222a55685c4ccb1044ffb030c12 - MDFTextAccessibility: f4bb4cc2194286651b59a215fdeaa0e05dc90ba5 - nanopb: fad817b59e0457d11a5dfbde799381cd727c1275 - PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 - RecaptchaInterop: 11e0b637842dfb48308d242afc3f448062325aba - -PODFILE CHECKSUM: 56b139ff3f9ff3b9dfe39b30951b6aad99eb689e - -COCOAPODS: 1.16.2 diff --git a/functions/LegacyFunctionsQuickstart/README.md b/functions/LegacyFunctionsQuickstart/README.md deleted file mode 100644 index b2f33f89d..000000000 --- a/functions/LegacyFunctionsQuickstart/README.md +++ /dev/null @@ -1,45 +0,0 @@ -Firebase Functions Quickstart -============================= - -Introduction ------------- - -This quickstart demonstrates **Callable Functions** which are HTTPS Cloud Functions -that can be invoked directly from your mobile application. - -- [Read more about callable functions](https://firebase.google.com/docs/functions/callable) - -Getting Started ---------------- - -- [Add Firebase to your iOS Project](https://firebase.google.com/docs/ios/setup). - -### Google Sign In Setup -- In Xcode, [add a custom URL scheme for your reversed client ID](https://developers.google.com/identity/sign-in/ios/start-integrating). -- You can find this in the `GoogleService-Info.plist` - -Support -------- - -- [Stack Overflow](https://stackoverflow.com/questions/tagged/google-cloud-functions) -- [Firebase Support](https://firebase.google.com/support/) - -License -------- - -Copyright 2018 Google, Inc. - -Licensed to the Apache Software Foundation (ASF) under one or more contributor -license agreements. See the NOTICE file distributed with this work for -additional information regarding copyright ownership. The ASF licenses this -file to you under the Apache License, Version 2.0 (the "License"); you may not -use this file except in compliance with the License. You may obtain a copy of -the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -License for the specific language governing permissions and limitations under -the License. diff --git a/storage/LegacyStorageQuickstart/Podfile b/storage/LegacyStorageQuickstart/Podfile deleted file mode 100644 index 20b5bace6..000000000 --- a/storage/LegacyStorageQuickstart/Podfile +++ /dev/null @@ -1,14 +0,0 @@ -# StorageExample - -use_frameworks! -platform :ios, '15.0' - -pod 'FirebaseAuth' -pod 'FirebaseStorage' - -target 'StorageExample' do -end -target 'StorageExampleSwift' do -end -target 'StorageExampleTests' do -end diff --git a/storage/LegacyStorageQuickstart/Podfile.lock b/storage/LegacyStorageQuickstart/Podfile.lock deleted file mode 100644 index a438ed2f7..000000000 --- a/storage/LegacyStorageQuickstart/Podfile.lock +++ /dev/null @@ -1,83 +0,0 @@ -PODS: - - FirebaseAppCheckInterop (12.1.0) - - FirebaseAuth (12.1.0): - - FirebaseAppCheckInterop (~> 12.1.0) - - FirebaseAuthInterop (~> 12.1.0) - - FirebaseCore (~> 12.1.0) - - FirebaseCoreExtension (~> 12.1.0) - - GoogleUtilities/AppDelegateSwizzler (~> 8.1) - - GoogleUtilities/Environment (~> 8.1) - - GTMSessionFetcher/Core (< 6.0, >= 3.4) - - RecaptchaInterop (~> 101.0) - - FirebaseAuthInterop (12.1.0) - - FirebaseCore (12.1.0): - - FirebaseCoreInternal (~> 12.1.0) - - GoogleUtilities/Environment (~> 8.1) - - GoogleUtilities/Logger (~> 8.1) - - FirebaseCoreExtension (12.1.0): - - FirebaseCore (~> 12.1.0) - - FirebaseCoreInternal (12.1.0): - - "GoogleUtilities/NSData+zlib (~> 8.1)" - - FirebaseStorage (12.1.0): - - FirebaseAppCheckInterop (~> 12.1.0) - - FirebaseAuthInterop (~> 12.1.0) - - FirebaseCore (~> 12.1.0) - - FirebaseCoreExtension (~> 12.1.0) - - GoogleUtilities/Environment (~> 8.1) - - GTMSessionFetcher/Core (< 6.0, >= 3.4) - - GoogleUtilities/AppDelegateSwizzler (8.1.0): - - GoogleUtilities/Environment - - GoogleUtilities/Logger - - GoogleUtilities/Network - - GoogleUtilities/Privacy - - GoogleUtilities/Environment (8.1.0): - - GoogleUtilities/Privacy - - GoogleUtilities/Logger (8.1.0): - - GoogleUtilities/Environment - - GoogleUtilities/Privacy - - GoogleUtilities/Network (8.1.0): - - GoogleUtilities/Logger - - "GoogleUtilities/NSData+zlib" - - GoogleUtilities/Privacy - - GoogleUtilities/Reachability - - "GoogleUtilities/NSData+zlib (8.1.0)": - - GoogleUtilities/Privacy - - GoogleUtilities/Privacy (8.1.0) - - GoogleUtilities/Reachability (8.1.0): - - GoogleUtilities/Logger - - GoogleUtilities/Privacy - - GTMSessionFetcher/Core (5.0.0) - - RecaptchaInterop (101.0.0) - -DEPENDENCIES: - - FirebaseAuth - - FirebaseStorage - -SPEC REPOS: - trunk: - - FirebaseAppCheckInterop - - FirebaseAuth - - FirebaseAuthInterop - - FirebaseCore - - FirebaseCoreExtension - - FirebaseCoreInternal - - FirebaseStorage - - GoogleUtilities - - GTMSessionFetcher - - RecaptchaInterop - -SPEC CHECKSUMS: - FirebaseAppCheckInterop: de890554a81967f16a0eb8d3def541c2bb42dece - FirebaseAuth: 6d0f2d449195c401e6d6ef1a891fff22bc60356d - FirebaseAuthInterop: ede927b03baf02453e6e9de2df513cc28d3eb742 - FirebaseCore: 5a452ffa66f37c8e281076996837626c5d08c090 - FirebaseCoreExtension: dd89d73548ee9be5d8dc60e5c76bc421b965853b - FirebaseCoreInternal: ff526c22671bb564d1b34a47615e29ba99389dee - FirebaseStorage: 91432ddfb31e83de1e9fa5833b4399b39bc722f7 - GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1 - GTMSessionFetcher: 02d6e866e90bc236f48a703a041dfe43e6221a29 - RecaptchaInterop: 11e0b637842dfb48308d242afc3f448062325aba - -PODFILE CHECKSUM: ab7e96bd254ded22f9c3af22b218999e9c2c4919 - -COCOAPODS: 1.16.2 diff --git a/storage/LegacyStorageQuickstart/README.md b/storage/LegacyStorageQuickstart/README.md deleted file mode 100644 index c20b96c92..000000000 --- a/storage/LegacyStorageQuickstart/README.md +++ /dev/null @@ -1,44 +0,0 @@ -Cloud Storage for Firebase Quickstart -============================= - -The Cloud Storage for Firebase iOS quickstart demonstrates how to upload data to a Cloud Storage bucket, and retrieve a download URL. - -Introduction ------------- - -- [Read more about Cloud Storage for Firebase](https://firebase.google.com/docs/storage) -- The APIs involving the Swift Result type are in beta and may change in future releases. - -Getting Started ---------------- - -- [Add Firebase to your iOS Project](https://firebase.google.com/docs/ios/setup). The package name you'll use is `com.google.firebase.quickstart.StorageExample`. -- Enable Anonymous auth in the **Auth > SIGN IN METHOD** tab. -![Alt text](https://github.com/firebase/quickstart-js/blob/main/storage/pics/enable.png?raw=true "Enable auth") -- Run the sample on your iOS device or simulator. - - -Support -------- - -- [Firebase Support](https://firebase.google.com/support/) - -License -------- - -Copyright 2016 Google, Inc. - -Licensed to the Apache Software Foundation (ASF) under one or more contributor -license agreements. See the NOTICE file distributed with this work for -additional information regarding copyright ownership. The ASF licenses this -file to you under the Apache License, Version 2.0 (the "License"); you may not -use this file except in compliance with the License. You may obtain a copy of -the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -License for the specific language governing permissions and limitations under -the License. diff --git a/storage/LegacyStorageQuickstart/StorageExample.xcodeproj/project.pbxproj b/storage/LegacyStorageQuickstart/StorageExample.xcodeproj/project.pbxproj deleted file mode 100644 index c5a25a469..000000000 --- a/storage/LegacyStorageQuickstart/StorageExample.xcodeproj/project.pbxproj +++ /dev/null @@ -1,926 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 107347E320315A84004A66D1 /* StorageExampleSwiftUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 107347E220315A84004A66D1 /* StorageExampleSwiftUITests.swift */; }; - 1073487D20333C27004A66D1 /* StorageExampleUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = 1073487C20333C27004A66D1 /* StorageExampleUITests.m */; }; - 10D187C31C8640E300D0DC91 /* DownloadViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 10D187C21C8640E300D0DC91 /* DownloadViewController.m */; }; - 10D187C51C87608900D0DC91 /* DownloadViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10D187C41C87608900D0DC91 /* DownloadViewController.swift */; }; - 5F5A53521ADE670C00F81DF0 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F5A53511ADE670C00F81DF0 /* main.m */; }; - 5F5A53551ADE670C00F81DF0 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F5A53541ADE670C00F81DF0 /* AppDelegate.m */; }; - 5F5A53581ADE670C00F81DF0 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F5A53571ADE670C00F81DF0 /* ViewController.m */; }; - 5F5A535B1ADE670C00F81DF0 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5F5A53591ADE670C00F81DF0 /* Main.storyboard */; }; - 5F5A537E1ADE67D500F81DF0 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F5A537D1ADE67D500F81DF0 /* AppDelegate.swift */; }; - 5F5A53801ADE67D500F81DF0 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F5A537F1ADE67D500F81DF0 /* ViewController.swift */; }; - 5F5A539C1ADE69AA00F81DF0 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5F5A53591ADE670C00F81DF0 /* Main.storyboard */; }; - 5F99610A1AE0CF4F0034F503 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5F9961061AE0CF4F0034F503 /* Images.xcassets */; }; - 5F99610B1AE0CF4F0034F503 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5F9961061AE0CF4F0034F503 /* Images.xcassets */; }; - 5F99610C1AE0CF4F0034F503 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5F9961071AE0CF4F0034F503 /* LaunchScreen.xib */; }; - 5F99610D1AE0CF4F0034F503 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5F9961071AE0CF4F0034F503 /* LaunchScreen.xib */; }; - 5FDE055D1B0DAA090037B82F /* AppTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FDE055C1B0DAA090037B82F /* AppTests.m */; }; - B9A598CC27E3D940003BCFD0 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = B9A598CB27E3D940003BCFD0 /* GoogleService-Info.plist */; }; - B9A598CD27E3D940003BCFD0 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = B9A598CB27E3D940003BCFD0 /* GoogleService-Info.plist */; }; - DE8564A823AECBB800611383 /* FIREGSignInHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = DE8564A523AECBB700611383 /* FIREGSignInHelper.m */; }; - DE8564A923AECBB800611383 /* FIREGHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = DE8564A623AECBB700611383 /* FIREGHelper.m */; }; - DEFC92E62B7D8E0F004F7638 /* Placeholder.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEFC92E52B7D8E0E004F7638 /* Placeholder.swift */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 107347E520315A84004A66D1 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5F5A53441ADE670C00F81DF0 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5F5A53781ADE67D500F81DF0; - remoteInfo = StorageExampleSwift; - }; - 1073487F20333C27004A66D1 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5F5A53441ADE670C00F81DF0 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5F5A534B1ADE670C00F81DF0; - remoteInfo = StorageExample; - }; - 5FDE055E1B0DAA090037B82F /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5F5A53441ADE670C00F81DF0 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5F5A534B1ADE670C00F81DF0; - remoteInfo = StorageExample; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 107347E020315A84004A66D1 /* StorageExampleSwiftUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = StorageExampleSwiftUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 107347E220315A84004A66D1 /* StorageExampleSwiftUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StorageExampleSwiftUITests.swift; sourceTree = ""; }; - 107347E420315A84004A66D1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 1073487A20333C27004A66D1 /* StorageExampleUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = StorageExampleUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 1073487C20333C27004A66D1 /* StorageExampleUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = StorageExampleUITests.m; sourceTree = ""; }; - 1073487E20333C27004A66D1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 10D187C11C8640E300D0DC91 /* DownloadViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DownloadViewController.h; sourceTree = ""; }; - 10D187C21C8640E300D0DC91 /* DownloadViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DownloadViewController.m; sourceTree = ""; }; - 10D187C41C87608900D0DC91 /* DownloadViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DownloadViewController.swift; sourceTree = ""; }; - 5F5A534C1ADE670C00F81DF0 /* StorageExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = StorageExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 5F5A53501ADE670C00F81DF0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 5F5A53511ADE670C00F81DF0 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - 5F5A53531ADE670C00F81DF0 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; - 5F5A53541ADE670C00F81DF0 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; - 5F5A53561ADE670C00F81DF0 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; - 5F5A53571ADE670C00F81DF0 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; - 5F5A535A1ADE670C00F81DF0 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - 5F5A53791ADE67D500F81DF0 /* StorageExampleSwift.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = StorageExampleSwift.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 5F5A537D1ADE67D500F81DF0 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 5F5A537F1ADE67D500F81DF0 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; - 5F9961061AE0CF4F0034F503 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; - 5F9961071AE0CF4F0034F503 /* LaunchScreen.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = LaunchScreen.xib; sourceTree = ""; }; - 5FDE05581B0DAA090037B82F /* StorageExampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = StorageExampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 5FDE055C1B0DAA090037B82F /* AppTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppTests.m; sourceTree = ""; }; - B9A598CB27E3D940003BCFD0 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "../GoogleService-Info.plist"; sourceTree = ""; }; - DE8564A423AECBB700611383 /* FIREGHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FIREGHelper.h; sourceTree = ""; }; - DE8564A523AECBB700611383 /* FIREGSignInHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FIREGSignInHelper.m; sourceTree = ""; }; - DE8564A623AECBB700611383 /* FIREGHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FIREGHelper.m; sourceTree = ""; }; - DE8564A723AECBB700611383 /* FIREGSignInHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FIREGSignInHelper.h; sourceTree = ""; }; - DEFC92E52B7D8E0E004F7638 /* Placeholder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Placeholder.swift; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 107347DD20315A84004A66D1 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1073487720333C27004A66D1 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5F5A53491ADE670C00F81DF0 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5F5A53761ADE67D500F81DF0 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5FDE05551B0DAA090037B82F /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 107347E120315A84004A66D1 /* StorageExampleSwiftUITests */ = { - isa = PBXGroup; - children = ( - 107347E220315A84004A66D1 /* StorageExampleSwiftUITests.swift */, - 107347E420315A84004A66D1 /* Info.plist */, - ); - path = StorageExampleSwiftUITests; - sourceTree = ""; - }; - 1073487B20333C27004A66D1 /* StorageExampleUITests */ = { - isa = PBXGroup; - children = ( - 1073487C20333C27004A66D1 /* StorageExampleUITests.m */, - 1073487E20333C27004A66D1 /* Info.plist */, - ); - path = StorageExampleUITests; - sourceTree = ""; - }; - 5F5A53431ADE670C00F81DF0 = { - isa = PBXGroup; - children = ( - B9A598CB27E3D940003BCFD0 /* GoogleService-Info.plist */, - 5F5A534E1ADE670C00F81DF0 /* StorageExample */, - 5F5A537A1ADE67D500F81DF0 /* StorageExampleSwift */, - 5FDE05591B0DAA090037B82F /* StorageExampleTests */, - 107347E120315A84004A66D1 /* StorageExampleSwiftUITests */, - 1073487B20333C27004A66D1 /* StorageExampleUITests */, - DE8564A323AECBB700611383 /* TestUtils */, - 5F5A534D1ADE670C00F81DF0 /* Products */, - 5F9961041AE0CF4F0034F503 /* Shared */, - 9044C0653BC73B0667DE6CE1 /* Pods */, - ); - sourceTree = ""; - wrapsLines = 0; - }; - 5F5A534D1ADE670C00F81DF0 /* Products */ = { - isa = PBXGroup; - children = ( - 5F5A534C1ADE670C00F81DF0 /* StorageExample.app */, - 5F5A53791ADE67D500F81DF0 /* StorageExampleSwift.app */, - 5FDE05581B0DAA090037B82F /* StorageExampleTests.xctest */, - 107347E020315A84004A66D1 /* StorageExampleSwiftUITests.xctest */, - 1073487A20333C27004A66D1 /* StorageExampleUITests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - 5F5A534E1ADE670C00F81DF0 /* StorageExample */ = { - isa = PBXGroup; - children = ( - 5F5A53531ADE670C00F81DF0 /* AppDelegate.h */, - 5F5A53541ADE670C00F81DF0 /* AppDelegate.m */, - 10D187C11C8640E300D0DC91 /* DownloadViewController.h */, - 10D187C21C8640E300D0DC91 /* DownloadViewController.m */, - 5F5A53561ADE670C00F81DF0 /* ViewController.h */, - 5F5A53571ADE670C00F81DF0 /* ViewController.m */, - 5F5A534F1ADE670C00F81DF0 /* Supporting Files */, - DEFC92E52B7D8E0E004F7638 /* Placeholder.swift */, - ); - path = StorageExample; - sourceTree = ""; - }; - 5F5A534F1ADE670C00F81DF0 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - 5F5A53591ADE670C00F81DF0 /* Main.storyboard */, - 5F5A53501ADE670C00F81DF0 /* Info.plist */, - 5F5A53511ADE670C00F81DF0 /* main.m */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - 5F5A537A1ADE67D500F81DF0 /* StorageExampleSwift */ = { - isa = PBXGroup; - children = ( - 5F5A537D1ADE67D500F81DF0 /* AppDelegate.swift */, - 10D187C41C87608900D0DC91 /* DownloadViewController.swift */, - 5F5A537F1ADE67D500F81DF0 /* ViewController.swift */, - ); - path = StorageExampleSwift; - sourceTree = ""; - }; - 5F9961041AE0CF4F0034F503 /* Shared */ = { - isa = PBXGroup; - children = ( - 5F9961061AE0CF4F0034F503 /* Images.xcassets */, - 5F9961071AE0CF4F0034F503 /* LaunchScreen.xib */, - ); - name = Shared; - path = ../../shared; - sourceTree = ""; - }; - 5FDE05591B0DAA090037B82F /* StorageExampleTests */ = { - isa = PBXGroup; - children = ( - 5FDE055C1B0DAA090037B82F /* AppTests.m */, - ); - path = StorageExampleTests; - sourceTree = ""; - }; - 9044C0653BC73B0667DE6CE1 /* Pods */ = { - isa = PBXGroup; - children = ( - ); - path = Pods; - sourceTree = ""; - }; - DE8564A323AECBB700611383 /* TestUtils */ = { - isa = PBXGroup; - children = ( - DE8564A423AECBB700611383 /* FIREGHelper.h */, - DE8564A523AECBB700611383 /* FIREGSignInHelper.m */, - DE8564A623AECBB700611383 /* FIREGHelper.m */, - DE8564A723AECBB700611383 /* FIREGSignInHelper.h */, - ); - name = TestUtils; - path = ../../TestUtils; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 107347DF20315A84004A66D1 /* StorageExampleSwiftUITests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 107347E720315A84004A66D1 /* Build configuration list for PBXNativeTarget "StorageExampleSwiftUITests" */; - buildPhases = ( - 107347DC20315A84004A66D1 /* Sources */, - 107347DD20315A84004A66D1 /* Frameworks */, - 107347DE20315A84004A66D1 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 107347E620315A84004A66D1 /* PBXTargetDependency */, - ); - name = StorageExampleSwiftUITests; - productName = StorageExampleSwiftUITests; - productReference = 107347E020315A84004A66D1 /* StorageExampleSwiftUITests.xctest */; - productType = "com.apple.product-type.bundle.ui-testing"; - }; - 1073487920333C27004A66D1 /* StorageExampleUITests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 1073488120333C27004A66D1 /* Build configuration list for PBXNativeTarget "StorageExampleUITests" */; - buildPhases = ( - 1073487620333C27004A66D1 /* Sources */, - 1073487720333C27004A66D1 /* Frameworks */, - 1073487820333C27004A66D1 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 1073488020333C27004A66D1 /* PBXTargetDependency */, - ); - name = StorageExampleUITests; - productName = StorageExampleUITests; - productReference = 1073487A20333C27004A66D1 /* StorageExampleUITests.xctest */; - productType = "com.apple.product-type.bundle.ui-testing"; - }; - 5F5A534B1ADE670C00F81DF0 /* StorageExample */ = { - isa = PBXNativeTarget; - buildConfigurationList = 5F5A536F1ADE670C00F81DF0 /* Build configuration list for PBXNativeTarget "StorageExample" */; - buildPhases = ( - 5F5A53481ADE670C00F81DF0 /* Sources */, - 5F5A53491ADE670C00F81DF0 /* Frameworks */, - 5F5A534A1ADE670C00F81DF0 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = StorageExample; - productName = StorageExample; - productReference = 5F5A534C1ADE670C00F81DF0 /* StorageExample.app */; - productType = "com.apple.product-type.application"; - }; - 5F5A53781ADE67D500F81DF0 /* StorageExampleSwift */ = { - isa = PBXNativeTarget; - buildConfigurationList = 5F5A53991ADE67D500F81DF0 /* Build configuration list for PBXNativeTarget "StorageExampleSwift" */; - buildPhases = ( - 5F5A53751ADE67D500F81DF0 /* Sources */, - 5F5A53761ADE67D500F81DF0 /* Frameworks */, - 5F5A53771ADE67D500F81DF0 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = StorageExampleSwift; - productName = StorageExampleSwift; - productReference = 5F5A53791ADE67D500F81DF0 /* StorageExampleSwift.app */; - productType = "com.apple.product-type.application"; - }; - 5FDE05571B0DAA090037B82F /* StorageExampleTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 5FDE05621B0DAA090037B82F /* Build configuration list for PBXNativeTarget "StorageExampleTests" */; - buildPhases = ( - 5FDE05541B0DAA090037B82F /* Sources */, - 5FDE05551B0DAA090037B82F /* Frameworks */, - 5FDE05561B0DAA090037B82F /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 5FDE055F1B0DAA090037B82F /* PBXTargetDependency */, - ); - name = StorageExampleTests; - productName = StorageExampleTests; - productReference = 5FDE05581B0DAA090037B82F /* StorageExampleTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 5F5A53441ADE670C00F81DF0 /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftUpdateCheck = 0920; - LastUpgradeCheck = 1110; - ORGANIZATIONNAME = "Google Inc."; - TargetAttributes = { - 107347DF20315A84004A66D1 = { - CreatedOnToolsVersion = 9.2; - LastSwiftMigration = 1110; - ProvisioningStyle = Automatic; - TestTargetID = 5F5A53781ADE67D500F81DF0; - }; - 1073487920333C27004A66D1 = { - CreatedOnToolsVersion = 9.2; - ProvisioningStyle = Automatic; - TestTargetID = 5F5A534B1ADE670C00F81DF0; - }; - 5F5A534B1ADE670C00F81DF0 = { - CreatedOnToolsVersion = 6.3; - LastSwiftMigration = 1530; - ProvisioningStyle = Automatic; - }; - 5F5A53781ADE67D500F81DF0 = { - CreatedOnToolsVersion = 6.3; - LastSwiftMigration = 1110; - ProvisioningStyle = Automatic; - }; - 5FDE05571B0DAA090037B82F = { - CreatedOnToolsVersion = 6.3.2; - LastSwiftMigration = 0800; - ProvisioningStyle = Automatic; - TestTargetID = 5F5A534B1ADE670C00F81DF0; - }; - }; - }; - buildConfigurationList = 5F5A53471ADE670C00F81DF0 /* Build configuration list for PBXProject "StorageExample" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 5F5A53431ADE670C00F81DF0; - productRefGroup = 5F5A534D1ADE670C00F81DF0 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 5F5A534B1ADE670C00F81DF0 /* StorageExample */, - 5F5A53781ADE67D500F81DF0 /* StorageExampleSwift */, - 5FDE05571B0DAA090037B82F /* StorageExampleTests */, - 107347DF20315A84004A66D1 /* StorageExampleSwiftUITests */, - 1073487920333C27004A66D1 /* StorageExampleUITests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 107347DE20315A84004A66D1 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1073487820333C27004A66D1 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5F5A534A1ADE670C00F81DF0 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5F99610C1AE0CF4F0034F503 /* LaunchScreen.xib in Resources */, - B9A598CC27E3D940003BCFD0 /* GoogleService-Info.plist in Resources */, - 5F99610A1AE0CF4F0034F503 /* Images.xcassets in Resources */, - 5F5A535B1ADE670C00F81DF0 /* Main.storyboard in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5F5A53771ADE67D500F81DF0 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5F99610D1AE0CF4F0034F503 /* LaunchScreen.xib in Resources */, - B9A598CD27E3D940003BCFD0 /* GoogleService-Info.plist in Resources */, - 5F5A539C1ADE69AA00F81DF0 /* Main.storyboard in Resources */, - 5F99610B1AE0CF4F0034F503 /* Images.xcassets in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5FDE05561B0DAA090037B82F /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 107347DC20315A84004A66D1 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 107347E320315A84004A66D1 /* StorageExampleSwiftUITests.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1073487620333C27004A66D1 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 1073487D20333C27004A66D1 /* StorageExampleUITests.m in Sources */, - DE8564A823AECBB800611383 /* FIREGSignInHelper.m in Sources */, - DE8564A923AECBB800611383 /* FIREGHelper.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5F5A53481ADE670C00F81DF0 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5F5A53581ADE670C00F81DF0 /* ViewController.m in Sources */, - DEFC92E62B7D8E0F004F7638 /* Placeholder.swift in Sources */, - 5F5A53551ADE670C00F81DF0 /* AppDelegate.m in Sources */, - 10D187C31C8640E300D0DC91 /* DownloadViewController.m in Sources */, - 5F5A53521ADE670C00F81DF0 /* main.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5F5A53751ADE67D500F81DF0 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5F5A53801ADE67D500F81DF0 /* ViewController.swift in Sources */, - 10D187C51C87608900D0DC91 /* DownloadViewController.swift in Sources */, - 5F5A537E1ADE67D500F81DF0 /* AppDelegate.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5FDE05541B0DAA090037B82F /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5FDE055D1B0DAA090037B82F /* AppTests.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 107347E620315A84004A66D1 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5F5A53781ADE67D500F81DF0 /* StorageExampleSwift */; - targetProxy = 107347E520315A84004A66D1 /* PBXContainerItemProxy */; - }; - 1073488020333C27004A66D1 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5F5A534B1ADE670C00F81DF0 /* StorageExample */; - targetProxy = 1073487F20333C27004A66D1 /* PBXContainerItemProxy */; - }; - 5FDE055F1B0DAA090037B82F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5F5A534B1ADE670C00F81DF0 /* StorageExample */; - targetProxy = 5FDE055E1B0DAA090037B82F /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - 5F5A53591ADE670C00F81DF0 /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - 5F5A535A1ADE670C00F81DF0 /* Base */, - ); - name = Main.storyboard; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 107347E820315A84004A66D1 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - DEBUG_INFORMATION_FORMAT = dwarf; - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = StorageExampleSwiftUITests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.quickstart.StorageExampleSwiftUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_SWIFT3_OBJC_INFERENCE = Default; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = StorageExampleSwift; - }; - name = Debug; - }; - 107347E920315A84004A66D1 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = StorageExampleSwiftUITests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.quickstart.StorageExampleSwiftUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_SWIFT3_OBJC_INFERENCE = Default; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = StorageExampleSwift; - }; - name = Release; - }; - 1073488220333C27004A66D1 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - DEBUG_INFORMATION_FORMAT = dwarf; - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = StorageExampleUITests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.quickstart.StorageExampleUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = StorageExample; - }; - name = Debug; - }; - 1073488320333C27004A66D1 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CODE_SIGN_IDENTITY = "iPhone Developer"; - CODE_SIGN_STYLE = Automatic; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - GCC_C_LANGUAGE_STANDARD = gnu11; - INFOPLIST_FILE = StorageExampleUITests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.quickstart.StorageExampleUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = StorageExample; - }; - name = Release; - }; - 5F5A536D1ADE670C00F81DF0 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - ENABLE_BITCODE = NO; - 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_SYMBOLS_PRIVATE_EXTERN = NO; - 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 = 15.0; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 5F5A536E1ADE670C00F81DF0 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = YES; - ENABLE_BITCODE = NO; - 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 = 15.0; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 5F5A53701ADE670C00F81DF0 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; - CLANG_ENABLE_MODULES = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - DEVELOPMENT_TEAM = ""; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = StorageExample/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.quickstart.StorageExample; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - }; - name = Debug; - }; - 5F5A53711ADE670C00F81DF0 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; - CLANG_ENABLE_MODULES = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - DEVELOPMENT_TEAM = ""; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = StorageExample/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.quickstart.StorageExample; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SWIFT_VERSION = 5.0; - }; - name = Release; - }; - 5F5A53951ADE67D500F81DF0 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - DEVELOPMENT_TEAM = ""; - INFOPLIST_FILE = "$(SRCROOT)/StorageExample/Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.quickstart.StorageExample; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SWIFT_OBJC_BRIDGING_HEADER = ""; - SWIFT_SWIFT3_OBJC_INFERENCE = Default; - SWIFT_VERSION = 5.0; - }; - name = Debug; - }; - 5F5A53961ADE67D500F81DF0 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - DEVELOPMENT_TEAM = ""; - INFOPLIST_FILE = "$(SRCROOT)/StorageExample/Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.google.firebase.quickstart.StorageExample; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - SWIFT_OBJC_BRIDGING_HEADER = ""; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_SWIFT3_OBJC_INFERENCE = Default; - SWIFT_VERSION = 5.0; - }; - name = Release; - }; - 5FDE05601B0DAA090037B82F /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - BUNDLE_LOADER = "$(TEST_HOST)"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = ""; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - HEADER_SEARCH_PATHS = ( - "$(inherited)", - /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, - StorageExample, - ); - INFOPLIST_FILE = StorageExample/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/StorageExample.app/StorageExample"; - }; - name = Debug; - }; - 5FDE05611B0DAA090037B82F /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; - BUNDLE_LOADER = "$(TEST_HOST)"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = ""; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - ); - HEADER_SEARCH_PATHS = ( - "$(inherited)", - /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, - StorageExample, - ); - INFOPLIST_FILE = StorageExample/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = ""; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/StorageExample.app/StorageExample"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 107347E720315A84004A66D1 /* Build configuration list for PBXNativeTarget "StorageExampleSwiftUITests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 107347E820315A84004A66D1 /* Debug */, - 107347E920315A84004A66D1 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 1073488120333C27004A66D1 /* Build configuration list for PBXNativeTarget "StorageExampleUITests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1073488220333C27004A66D1 /* Debug */, - 1073488320333C27004A66D1 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 5F5A53471ADE670C00F81DF0 /* Build configuration list for PBXProject "StorageExample" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 5F5A536D1ADE670C00F81DF0 /* Debug */, - 5F5A536E1ADE670C00F81DF0 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 5F5A536F1ADE670C00F81DF0 /* Build configuration list for PBXNativeTarget "StorageExample" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 5F5A53701ADE670C00F81DF0 /* Debug */, - 5F5A53711ADE670C00F81DF0 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 5F5A53991ADE67D500F81DF0 /* Build configuration list for PBXNativeTarget "StorageExampleSwift" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 5F5A53951ADE67D500F81DF0 /* Debug */, - 5F5A53961ADE67D500F81DF0 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 5FDE05621B0DAA090037B82F /* Build configuration list for PBXNativeTarget "StorageExampleTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 5FDE05601B0DAA090037B82F /* Debug */, - 5FDE05611B0DAA090037B82F /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 5F5A53441ADE670C00F81DF0 /* Project object */; -} diff --git a/storage/LegacyStorageQuickstart/StorageExample.xcodeproj/xcshareddata/xcschemes/StorageExample.xcscheme b/storage/LegacyStorageQuickstart/StorageExample.xcodeproj/xcshareddata/xcschemes/StorageExample.xcscheme deleted file mode 100644 index 067a3caad..000000000 --- a/storage/LegacyStorageQuickstart/StorageExample.xcodeproj/xcshareddata/xcschemes/StorageExample.xcscheme +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/storage/LegacyStorageQuickstart/StorageExample.xcodeproj/xcshareddata/xcschemes/StorageExampleSwift.xcscheme b/storage/LegacyStorageQuickstart/StorageExample.xcodeproj/xcshareddata/xcschemes/StorageExampleSwift.xcscheme deleted file mode 100644 index 6ef2adc73..000000000 --- a/storage/LegacyStorageQuickstart/StorageExample.xcodeproj/xcshareddata/xcschemes/StorageExampleSwift.xcscheme +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/storage/LegacyStorageQuickstart/StorageExample/.clang-format b/storage/LegacyStorageQuickstart/StorageExample/.clang-format deleted file mode 100644 index 1f09ce0f2..000000000 --- a/storage/LegacyStorageQuickstart/StorageExample/.clang-format +++ /dev/null @@ -1,4 +0,0 @@ -BasedOnStyle: Google -ColumnLimit: 100 -BinPackParameters: false -AllowAllParametersOfDeclarationOnNextLine: true diff --git a/storage/LegacyStorageQuickstart/StorageExample/AppDelegate.h b/storage/LegacyStorageQuickstart/StorageExample/AppDelegate.h deleted file mode 100644 index 70b752761..000000000 --- a/storage/LegacyStorageQuickstart/StorageExample/AppDelegate.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -@import UIKit; - -@interface AppDelegate : UIResponder - -@property(nonatomic, strong) UIWindow *window; - -@end diff --git a/storage/LegacyStorageQuickstart/StorageExample/AppDelegate.m b/storage/LegacyStorageQuickstart/StorageExample/AppDelegate.m deleted file mode 100644 index d9426ff36..000000000 --- a/storage/LegacyStorageQuickstart/StorageExample/AppDelegate.m +++ /dev/null @@ -1,28 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "AppDelegate.h" -@import FirebaseCore; - -@implementation AppDelegate - -- (BOOL)application:(UIApplication *)application - didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - [FIRApp configure]; - return YES; -} - -@end diff --git a/storage/LegacyStorageQuickstart/StorageExample/Base.lproj/Main.storyboard b/storage/LegacyStorageQuickstart/StorageExample/Base.lproj/Main.storyboard deleted file mode 100644 index c0d1532db..000000000 --- a/storage/LegacyStorageQuickstart/StorageExample/Base.lproj/Main.storyboard +++ /dev/null @@ -1,151 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/storage/LegacyStorageQuickstart/StorageExample/DownloadViewController.h b/storage/LegacyStorageQuickstart/StorageExample/DownloadViewController.h deleted file mode 100644 index 56c19e146..000000000 --- a/storage/LegacyStorageQuickstart/StorageExample/DownloadViewController.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -@import UIKit; - -@interface DownloadViewController : UIViewController -@end diff --git a/storage/LegacyStorageQuickstart/StorageExample/DownloadViewController.m b/storage/LegacyStorageQuickstart/StorageExample/DownloadViewController.m deleted file mode 100644 index ba9fdd36e..000000000 --- a/storage/LegacyStorageQuickstart/StorageExample/DownloadViewController.m +++ /dev/null @@ -1,53 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import "DownloadViewController.h" -@import FirebaseStorage; - -@interface DownloadViewController () -@property (weak, nonatomic) IBOutlet UIImageView *imageView; -@property (weak, nonatomic) IBOutlet UITextView *statusTextView; -@property (strong, nonatomic) FIRStorageReference *storageRef; -@end - -@implementation DownloadViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - self.storageRef = [[FIRStorage storage] reference]; - - NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); - NSString *documentsDirectory = paths[0]; - NSString *filePath = [NSString stringWithFormat:@"file:%@/myimage.jpg", documentsDirectory]; - NSURL *fileURL = [NSURL URLWithString:filePath]; - NSString *storagePath = [[NSUserDefaults standardUserDefaults] objectForKey:@"storagePath"]; - - // [START downloadimage] - [[_storageRef child:storagePath] - writeToFile:fileURL - completion:^(NSURL * _Nullable URL, NSError * _Nullable error) { - if (error) { - NSLog(@"Error downloading: %@", error); - self->_statusTextView.text = @"Download Failed"; - return; - } else if (URL) { - self->_statusTextView.text = @"Download Succeeded!"; - self->_imageView.image = [UIImage imageWithContentsOfFile:URL.path]; - } - }]; - // [END downloadimage] -} -@end diff --git a/storage/LegacyStorageQuickstart/StorageExample/Info.plist b/storage/LegacyStorageQuickstart/StorageExample/Info.plist deleted file mode 100644 index 6444796fa..000000000 --- a/storage/LegacyStorageQuickstart/StorageExample/Info.plist +++ /dev/null @@ -1,55 +0,0 @@ - - - - - NSCameraUsageDescription - Take and upload photos to Cloud Storage - NSPhotoLibraryUsageDescription - Upload photo to Cloud Storage - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIcons - - CFBundleIcons~ipad - - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSRequiresIPhoneOS - - UILaunchStoryboardName - LaunchScreen - UIMainStoryboardFile - Main - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - - diff --git a/storage/LegacyStorageQuickstart/StorageExample/Placeholder.swift b/storage/LegacyStorageQuickstart/StorageExample/Placeholder.swift deleted file mode 100644 index 63a135a85..000000000 --- a/storage/LegacyStorageQuickstart/StorageExample/Placeholder.swift +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2023 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Intentionally empty. Force the linker to link Swift libraries. diff --git a/storage/LegacyStorageQuickstart/StorageExample/ViewController.h b/storage/LegacyStorageQuickstart/StorageExample/ViewController.h deleted file mode 100644 index 2c7d24b3c..000000000 --- a/storage/LegacyStorageQuickstart/StorageExample/ViewController.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -@import UIKit; - -@interface ViewController : UIViewController -@end diff --git a/storage/LegacyStorageQuickstart/StorageExample/ViewController.m b/storage/LegacyStorageQuickstart/StorageExample/ViewController.m deleted file mode 100644 index 4edf3e95d..000000000 --- a/storage/LegacyStorageQuickstart/StorageExample/ViewController.m +++ /dev/null @@ -1,152 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -@import Photos; -#import "ViewController.h" -#import "DownloadViewController.h" - -@import FirebaseAuth; -@import FirebaseStorage; - -@interface ViewController () - -@property (weak, nonatomic) IBOutlet UIButton *takePicButton; -@property (weak, nonatomic) IBOutlet UIButton *downloadPicButton; -@property (weak, nonatomic) IBOutlet UITextView *urlTextView; - -@property (strong, nonatomic) FIRStorage *storage; - -@end - -@implementation ViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - - // [START configurestorage] - self.storage = [FIRStorage storage]; - // [END configurestorage] - - // [START storageauth] - // Using Cloud Storage for Firebase requires the user be authenticated. Here we are using - // anonymous authentication. - if (![FIRAuth auth].currentUser) { - [[FIRAuth auth] signInAnonymouslyWithCompletion:^(FIRAuthDataResult * _Nullable authResult, - NSError * _Nullable error) { - if (error) { - self->_urlTextView.text = error.description; - self->_takePicButton.enabled = NO; - } else { - self->_takePicButton.enabled = YES; - self->_urlTextView.text = @""; - } - }]; - } - // [END storageauth] -} - -# pragma mark - Image Picker - -- (IBAction)didTapTakePicture:(id)sender { - UIImagePickerController * picker = [[UIImagePickerController alloc] init]; - picker.delegate = self; - if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { - picker.sourceType = UIImagePickerControllerSourceTypeCamera; - } else { - picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; - } - - [self presentViewController:picker animated:YES completion:NULL]; -} - -- (void)imagePickerController:(UIImagePickerController *)picker - didFinishPickingMediaWithInfo:(NSDictionary *)info { - [picker dismissViewControllerAnimated:YES completion:NULL]; - - _urlTextView.text = @"Beginning Upload"; - NSURL *referenceUrl = info[UIImagePickerControllerReferenceURL]; - // if it's a photo from the library, not an image from the camera - if (referenceUrl) { - PHFetchResult* assets = [PHAsset fetchAssetsWithALAssetURLs:@[referenceUrl] options:nil]; - PHAsset *asset = assets.firstObject; - [asset requestContentEditingInputWithOptions:nil - completionHandler:^(PHContentEditingInput *contentEditingInput, - NSDictionary *info) { - NSURL *imageFile = contentEditingInput.fullSizeImageURL; - NSString *filePath = - [NSString stringWithFormat:@"%@/%lld/%@", - [FIRAuth auth].currentUser.uid, - (long long)([NSDate date].timeIntervalSince1970 * 1000.0), - imageFile.lastPathComponent]; - FIRStorageReference *storageRef = [self->_storage referenceWithPath:filePath]; - // [START uploadimage] - [storageRef putFile:imageFile - metadata:nil - completion:^(FIRStorageMetadata *metadata, NSError *error) { - if (error) { - NSLog(@"Error uploading: %@", error); - self->_urlTextView.text = @"Upload Failed"; - return; - } - [self uploadSuccess:storageRef storagePath:filePath]; - }]; - // [END uploadimage] - }]; - - } else { - UIImage *image = info[UIImagePickerControllerOriginalImage]; - NSData *imageData = UIImageJPEGRepresentation(image, 0.8); - NSString *imagePath = - [NSString stringWithFormat:@"%@/%lld.jpg", - [FIRAuth auth].currentUser.uid, - (long long)([NSDate date].timeIntervalSince1970 * 1000.0)]; - FIRStorageMetadata *metadata = [FIRStorageMetadata new]; - metadata.contentType = @"image/jpeg"; - FIRStorageReference *storageRef = [_storage referenceWithPath:imagePath]; - [storageRef putData:imageData - metadata:metadata - completion:^(FIRStorageMetadata * _Nullable metadata, NSError * _Nullable error) { - if (error) { - NSLog(@"Error uploading: %@", error); - self->_urlTextView.text = @"Upload Failed"; - return; - } - [self uploadSuccess:storageRef storagePath:imagePath]; - }]; - } -} - -- (void)uploadSuccess:(FIRStorageReference *) storageRef storagePath: (NSString *) storagePath { - NSLog(@"Upload Succeeded!"); - [storageRef downloadURLWithCompletion:^(NSURL * _Nullable URL, NSError * _Nullable error) { - if (error) { - NSLog(@"Error getting download URL: %@", error); - self->_urlTextView.text = @"Can't get download URL"; - return; - } - self->_urlTextView.text = URL.absoluteString; - [[NSUserDefaults standardUserDefaults] setObject:storagePath forKey:@"storagePath"]; - [[NSUserDefaults standardUserDefaults] synchronize]; - self->_downloadPicButton.enabled = YES; - }]; -} - -- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker { - [picker dismissViewControllerAnimated:YES completion:NULL]; -} - - -@end diff --git a/storage/LegacyStorageQuickstart/StorageExample/main.m b/storage/LegacyStorageQuickstart/StorageExample/main.m deleted file mode 100644 index bc10c3ac6..000000000 --- a/storage/LegacyStorageQuickstart/StorageExample/main.m +++ /dev/null @@ -1,24 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import -#import "AppDelegate.h" - -int main(int argc, char* argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/storage/LegacyStorageQuickstart/StorageExampleSwift/AppDelegate.swift b/storage/LegacyStorageQuickstart/StorageExampleSwift/AppDelegate.swift deleted file mode 100644 index 0e127cd11..000000000 --- a/storage/LegacyStorageQuickstart/StorageExampleSwift/AppDelegate.swift +++ /dev/null @@ -1,34 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import UIKit -import FirebaseCore - -@UIApplicationMain -class AppDelegate: UIResponder, UIApplicationDelegate { - var window: UIWindow? - - func application(_ application: UIApplication, - didFinishLaunchingWithOptions launchOptions: [ - UIApplication.LaunchOptionsKey: Any - ]?) -> Bool { - // [START firebase_configure] - // Use Firebase library to configure APIs - FirebaseApp.configure() - // [END firebase_configure] - return true - } -} diff --git a/storage/LegacyStorageQuickstart/StorageExampleSwift/DownloadViewController.swift b/storage/LegacyStorageQuickstart/StorageExampleSwift/DownloadViewController.swift deleted file mode 100644 index 8b7707065..000000000 --- a/storage/LegacyStorageQuickstart/StorageExampleSwift/DownloadViewController.swift +++ /dev/null @@ -1,51 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import UIKit -import FirebaseStorage - -@objc(DownloadViewController) -class DownloadViewController: UIViewController { - @IBOutlet var imageView: UIImageView! - @IBOutlet var statusTextView: UITextView! - var storageRef: StorageReference! - - override func viewDidLoad() { - super.viewDidLoad() - storageRef = Storage.storage().reference() - - let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) - let documentsDirectory = paths[0] - let filePath = "file:\(documentsDirectory)/myimage.jpg" - guard let fileURL = URL(string: filePath) else { return } - guard let storagePath = UserDefaults.standard.object(forKey: "storagePath") as? String else { - return - } - - // [START downloadimage] - storageRef.child(storagePath).write(toFile: fileURL) { result in - switch result { - case let .success(url): - self.statusTextView.text = "Download Succeeded!" - self.imageView.image = UIImage(contentsOfFile: url.path) - case let .failure(error): - print("Error downloading:\(error)") - self.statusTextView.text = "Download Failed" - } - } - // [END downloadimage] - } -} diff --git a/storage/LegacyStorageQuickstart/StorageExampleSwift/ViewController.swift b/storage/LegacyStorageQuickstart/StorageExampleSwift/ViewController.swift deleted file mode 100644 index 810c36c13..000000000 --- a/storage/LegacyStorageQuickstart/StorageExampleSwift/ViewController.swift +++ /dev/null @@ -1,153 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import UIKit -import Photos -import FirebaseAuth -import FirebaseStorage - -@objc(ViewController) -class ViewController: UIViewController, - UIImagePickerControllerDelegate, UINavigationControllerDelegate { - @IBOutlet var takePicButton: UIButton! - @IBOutlet var downloadPicButton: UIButton! - @IBOutlet var urlTextView: UITextField! - - // [START configurestorage] - lazy var storage = Storage.storage() - // [END configurestorage] - - override func viewDidLoad() { - super.viewDidLoad() - - // [START storageauth] - // Using Cloud Storage for Firebase requires the user be authenticated. Here we are using - // anonymous authentication. - if Auth.auth().currentUser == nil { - Auth.auth().signInAnonymously(completion: { authResult, error in - if let error = error { - self.urlTextView.text = error.localizedDescription - self.takePicButton.isEnabled = false - } else { - self.urlTextView.text = "" - self.takePicButton.isEnabled = true - } - }) - } - // [END storageauth] - } - - // MARK: - Image Picker - - @IBAction func didTapTakePicture(_: AnyObject) { - let picker = UIImagePickerController() - picker.delegate = self - if UIImagePickerController.isSourceTypeAvailable(.camera) { - picker.sourceType = .camera - } else { - picker.sourceType = .photoLibrary - } - - present(picker, animated: true, completion: nil) - } - - func imagePickerController(_ picker: UIImagePickerController, - didFinishPickingMediaWithInfo info: [ - UIImagePickerController.InfoKey: Any - ]) { - // Local variable inserted by Swift 4.2 migrator. - let info = convertFromUIImagePickerControllerInfoKeyDictionary(info) - - picker.dismiss(animated: true, completion: nil) - - urlTextView.text = "Beginning Upload" - // if it's a photo from the library, not an image from the camera - if let referenceUrl = - info[convertFromUIImagePickerControllerInfoKey(UIImagePickerController.InfoKey - .referenceURL)] as? URL { - let assets = PHAsset.fetchAssets(withALAssetURLs: [referenceUrl], options: nil) - let asset = assets.firstObject - asset?.requestContentEditingInput(with: nil, completionHandler: { contentEditingInput, info in - let imageFile = contentEditingInput?.fullSizeImageURL - let filePath = Auth.auth().currentUser!.uid + - "/\(Int(Date.timeIntervalSinceReferenceDate * 1000))/\(imageFile!.lastPathComponent)" - // [START uploadimage] - let storageRef = self.storage.reference(withPath: filePath) - storageRef.putFile(from: imageFile!) { result in - switch result { - case .success: - self.uploadSuccess(storageRef, storagePath: filePath) - case let .failure(error): - print("Error uploading: \(error)") - self.urlTextView.text = "Upload Failed" - } - } - // [END uploadimage] - }) - } else { - guard let image = - info[convertFromUIImagePickerControllerInfoKey(UIImagePickerController.InfoKey - .originalImage)] as? UIImage else { return } - guard let imageData = image.jpegData(compressionQuality: 0.8) else { return } - let imagePath = Auth.auth().currentUser!.uid + - "/\(Int(Date.timeIntervalSinceReferenceDate * 1000)).jpg" - let metadata = StorageMetadata() - metadata.contentType = "image/jpeg" - let storageRef = storage.reference(withPath: imagePath) - storageRef.putData(imageData, metadata: metadata) { result in - switch result { - case .success: - self.uploadSuccess(storageRef, storagePath: imagePath) - case let .failure(error): - print("Error uploading: \(error)") - self.urlTextView.text = "Upload Failed" - } - } - } - } - - func uploadSuccess(_ storageRef: StorageReference, storagePath: String) { - print("Upload Succeeded!") - storageRef.downloadURL { result in - switch result { - case let .success(url): - self.urlTextView.text = url.absoluteString - UserDefaults.standard.set(storagePath, forKey: "storagePath") - UserDefaults.standard.synchronize() - self.downloadPicButton.isEnabled = true - case let .failure(error): - print("Error getting download URL: \(error)") - self.urlTextView.text = "Can't get download URL" - } - } - } - - func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { - picker.dismiss(animated: true, completion: nil) - } -} - -// Helper function inserted by Swift 4.2 migrator. -private func convertFromUIImagePickerControllerInfoKeyDictionary(_ input: [UIImagePickerController - .InfoKey: Any]) -> [String: Any] { - return Dictionary(uniqueKeysWithValues: input.map { key, value in (key.rawValue, value) }) -} - -// Helper function inserted by Swift 4.2 migrator. -private func convertFromUIImagePickerControllerInfoKey(_ input: UIImagePickerController - .InfoKey) -> String { - return input.rawValue -} diff --git a/storage/LegacyStorageQuickstart/StorageExampleSwiftUITests/Info.plist b/storage/LegacyStorageQuickstart/StorageExampleSwiftUITests/Info.plist deleted file mode 100644 index 6c40a6cd0..000000000 --- a/storage/LegacyStorageQuickstart/StorageExampleSwiftUITests/Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - - diff --git a/storage/LegacyStorageQuickstart/StorageExampleSwiftUITests/StorageExampleSwiftUITests.swift b/storage/LegacyStorageQuickstart/StorageExampleSwiftUITests/StorageExampleSwiftUITests.swift deleted file mode 100644 index bba6ec411..000000000 --- a/storage/LegacyStorageQuickstart/StorageExampleSwiftUITests/StorageExampleSwiftUITests.swift +++ /dev/null @@ -1,42 +0,0 @@ -// -// Copyright (c) 2019 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import XCTest - -class StorageExampleSwiftUITests: XCTestCase { - override func setUp() { - super.setUp() - - // Put setup code here. This method is called before the invocation of each test method in the class. - - // In UI tests it is usually best to stop immediately when a failure occurs. - continueAfterFailure = false - // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. - XCUIApplication().launch() - - // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. - } - - override func tearDown() { - // Put teardown code here. This method is called after the invocation of each test method in the class. - super.tearDown() - } - - func testExample() { - // Use recording to get started writing UI tests. - // Use XCTAssert and related functions to verify your tests produce the correct results. - } -} diff --git a/storage/LegacyStorageQuickstart/StorageExampleTests/AppTests.m b/storage/LegacyStorageQuickstart/StorageExampleTests/AppTests.m deleted file mode 100644 index 4ee604cc6..000000000 --- a/storage/LegacyStorageQuickstart/StorageExampleTests/AppTests.m +++ /dev/null @@ -1,40 +0,0 @@ -// -// Copyright (c) 2016 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import -#import - -@interface AppTests : XCTestCase -@end - -@implementation AppTests - -- (void)setUp { - [super setUp]; - // Put setup code here. This method is called before the invocation of each test method in the class. -} - -- (void)tearDown { - // Put teardown code here. This method is called after the invocation of each test method in the class. - [super tearDown]; -} - -- (void)testExample { - // This is an example of a functional test case. - XCTAssert(YES, @"Pass"); -} - -@end diff --git a/storage/LegacyStorageQuickstart/StorageExampleUITests/Info.plist b/storage/LegacyStorageQuickstart/StorageExampleUITests/Info.plist deleted file mode 100644 index 6c40a6cd0..000000000 --- a/storage/LegacyStorageQuickstart/StorageExampleUITests/Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleVersion - 1 - - diff --git a/storage/LegacyStorageQuickstart/StorageExampleUITests/StorageExampleUITests.m b/storage/LegacyStorageQuickstart/StorageExampleUITests/StorageExampleUITests.m deleted file mode 100644 index decb20b0a..000000000 --- a/storage/LegacyStorageQuickstart/StorageExampleUITests/StorageExampleUITests.m +++ /dev/null @@ -1,136 +0,0 @@ -// -// Copyright (c) 2019 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#import - -#import "FIREGHelper.h" - -typedef BOOL (^SystemAlertHandler)(XCUIElement *); -static SystemAlertHandler const alertHandler = ^(XCUIElement *element) { - if (element.buttons[@"OK"].exists) { - [element.buttons[@"OK"] tap]; - } - if (element.buttons[@"Allow"].exists) { - [element.buttons[@"Allow"] tap]; - } - return YES; -}; -static NSString *const header = @"Cloud Storage for Firebase Example"; -static NSString *const downloadHeader = @"Photos"; -static NSString *const takePictureButton = @"Take Picture"; -static NSString *const downloadPictureButton = @"Download Picture"; -static NSString *const cancelButton = @"Cancel"; -static NSString *const momentsHeader = @"Moments"; -static NSString *const uploadStartedTrait = @"Beginning upload"; - -@interface StorageExampleUITests : XCTestCase -@end - -@implementation StorageExampleUITests { - XCUIApplication *_app; - id cameraPermissionMonitor; -} - -- (void)setUp { - [super setUp]; - self.continueAfterFailure = NO; - _app = [[XCUIApplication alloc] init]; - cameraPermissionMonitor = - [self addUIInterruptionMonitorWithDescription:@"Allow camera or photos" handler:alertHandler]; - [_app launch]; -} - -- (void)tearDown { - [self removeUIInterruptionMonitor:cameraPermissionMonitor]; - [super tearDown]; -} - -- (void)SKIP_testNavigateToDownloadViewAndBack_simulator { - // Verify that Storage Example app launched successfully and its title is visible. - [self checkHeaderIsPresent:header]; - - // Verify that user can open and then dismiss DownloadViewController. - [_app.buttons[takePictureButton] tap]; - - FIRWaitForVisible(_app.navigationBars[downloadHeader]); - XCTAssertTrue(_app.navigationBars[downloadHeader].exists); - - // Navigate back. - [_app.navigationBars.buttons[cancelButton] tap]; - - // Make sure user is taken back. - [self checkHeaderIsPresent:header]; -} - -// The Photos UI changed in Xcode 12 and this function needs to be updated. -- (void)SKIP_testUploadFromPhotoLibraryAndDownload_simulator { - // Try to select an existing image. - [self selectImageFromLibrary]; - - // Request for permission could appear here. - FIRWaitTillAlertPresent(10); - - // If permission request appears - we need to remove it and select image once again. - if (FIRSystemAlertShown()) { - // Required for triggering SystemAlertHandler logic. - [_app tap]; - // Select the image one more time, see b/74081132 - [self selectImageFromLibrary]; - } - // Make sure main screen is present. - [self checkHeaderIsPresent:header]; - - // Wait till upload is finished. - XCUIElement *downloadButton = _app.buttons[downloadPictureButton]; - NSPredicate *hittable = [NSPredicate predicateWithFormat:@"hittable == true"]; - FIRWaitForPredicateWithTimeout(hittable, downloadButton, 20); - - // Navigate to image screen. - [_app.buttons[downloadPictureButton] tap]; - - // Check that image downloaded. - FIRWaitForVisibleWithTimeout(_app.textViews[@"Download Succeeded!"], 30); - XCTAssertTrue(_app.textViews[@"Download Succeeded!"].exists); -} - -#pragma mark - Helpers - -// Common way to detect what screen is displayed now. -- (void)checkHeaderIsPresent:(NSString *)header { - FIRWaitForVisible(_app.navigationBars[header]); - XCTAssertTrue(_app.navigationBars[header].exists); -} - -// Select an image from existing photo library. -- (void)selectImageFromLibrary { - FIRWaitForVisible(_app.buttons[takePictureButton]); - [_app.buttons[takePictureButton] tap]; - - // Select the "Moments" folder. - XCUIElement *momentsLink = [[[[_app tables] cells] matchingIdentifier:momentsHeader] element]; - FIRWaitForVisible(momentsLink); - [momentsLink tap]; - - // Wait till UIImagePickerController has loaded photo library. - XCUIElement *momentsTitle = [_app navigationBars][momentsHeader]; - FIRWaitForVisible(momentsTitle); - - // Select some image from the list of images. - XCUIElement *image = [[_app cells] elementBoundByIndex:1]; - [image tap]; -} - -@end From 0546e3af8f02b31b86634210c57cc5bb15125361 Mon Sep 17 00:00:00 2001 From: Nick Cooke Date: Fri, 12 Sep 2025 11:57:14 -0400 Subject: [PATCH 02/18] README.md revisions --- abtesting/README.md | 3 --- analytics/README.md | 7 +------ authentication/README.md | 2 -- crashlytics/README.md | 6 +----- 4 files changed, 2 insertions(+), 16 deletions(-) diff --git a/abtesting/README.md b/abtesting/README.md index b71399756..647d6488b 100644 --- a/abtesting/README.md +++ b/abtesting/README.md @@ -9,9 +9,6 @@ multiple color schemes within an app. See [OUTLINE.md](OUTLINE.md) for information on the design of the app, screenshots, and symbol references. -To view the older Objective-C and Swift quickstarts, view the -[LegacyABTestingQuickstart](LegacyABTestingQuickstart) directory. - ## Getting Started - [Add Firebase to your iOS Project](https://firebase.google.com/docs/ios/setup) diff --git a/analytics/README.md b/analytics/README.md index d1a8ee820..882c54c39 100644 --- a/analytics/README.md +++ b/analytics/README.md @@ -5,12 +5,7 @@ Analytics can provide insight on app usage and user engagement. You can read mor about Google Analytics for Firebase [here](https://firebase.google.com/docs/analytics)! The iOS, iPadOS, and Catalyst versions are powered by UIKit. The tvOS and macOS -versions are powered by SwiftUI. Note that Catalyst, macOS, and tvOS support for Google -Analytics for Firebase are in beta as of version 8.9.0. - -To view the older Objective-C and Swift quickstarts, view the -[`LegacyAnalyticsQuickstart`](https://github.com/firebase/quickstart-ios/blob/main/analytics/LegacyAnalyticsQuickstart) -directory. +versions are powered by SwiftUI. ## Getting Started diff --git a/authentication/README.md b/authentication/README.md index 40a9df48e..eac6ffbae 100644 --- a/authentication/README.md +++ b/authentication/README.md @@ -5,8 +5,6 @@ This Firebase quickstart is written in Swift and aims to showcase how Firebase Auth can help manage user authentication. You can read more about Firebase Auth [here](https://firebase.google.com/docs/auth)! -To view the older Objective-C and Swift quickstarts, view the [`LegacyAuthQuickstart`](https://github.com/firebase/quickstart-ios/blob/main/authentication/LegacyAuthQuickstart) directory. - ## Getting Started Firebase Auth offers multiple ways to authenticate users. In this quickstart, we demonstrate how you can use Firebase Auth to authenticate users by providing implementations for the various authentication flows. Since each Firebase Auth flow is different, each may require a few extra steps to set everything up. Feel free to follow along and configure as many authentication flows as you would like to demo! diff --git a/crashlytics/README.md b/crashlytics/README.md index 20d8ac3c1..d773bb720 100644 --- a/crashlytics/README.md +++ b/crashlytics/README.md @@ -3,11 +3,7 @@ Firebase Crashlytics Quickstart The Firebase Crashlytics iOS quickstart demonstrates how to report crashes and log events leading up to those crashes. You can read more about Firebase Crashlytics -[here](https://firebase.google.com/docs/crashlytics/)! - -To view the older Objective-C and Swift quickstarts, view the -[`LegacyCrashlyticsQuickstart`](https://github.com/firebase/quickstart-ios/tree/main/crashlytics/LegacyCrashlyticsQuickstart) -directory. +[here](https://firebase.google.com/docs/crashlytics/)! Getting Started --------------- From a8a3cc5acd4499dc5e91bb9768fbb39f67e42adf Mon Sep 17 00:00:00 2001 From: Nick Cooke Date: Fri, 12 Sep 2025 11:59:05 -0400 Subject: [PATCH 03/18] partial revert --- .../LegacyAuthQuickstart/web/auth.html | 127 ++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 authentication/LegacyAuthQuickstart/web/auth.html diff --git a/authentication/LegacyAuthQuickstart/web/auth.html b/authentication/LegacyAuthQuickstart/web/auth.html new file mode 100644 index 000000000..7328fbc64 --- /dev/null +++ b/authentication/LegacyAuthQuickstart/web/auth.html @@ -0,0 +1,127 @@ + + + + + + Custom Token Generator Example + + + + + + + +
+
+

Token Generator

+
+
+
+
+
+

In order to generate a token you'll need to use a service account JSON file provided + by the Google Developers Console view + of your Firebase project. We recommend that once you're done testing with this tool you + delete the service account you made, and create a fresh one for the integration with your + actual authentication system. +

+

+ To get started, select your JSON file below. +

+ +
+
+
+
+
+ +
+
+
+
+ + + From 9f2effd4d9036c0cdb8f41d9e4d69a4c7d2c45d8 Mon Sep 17 00:00:00 2001 From: Nick Cooke Date: Fri, 12 Sep 2025 11:59:41 -0400 Subject: [PATCH 04/18] rename --- authentication/{LegacyAuthQuickstart => }/web/auth.html | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename authentication/{LegacyAuthQuickstart => }/web/auth.html (100%) diff --git a/authentication/LegacyAuthQuickstart/web/auth.html b/authentication/web/auth.html similarity index 100% rename from authentication/LegacyAuthQuickstart/web/auth.html rename to authentication/web/auth.html From 4c8da37d31ce9fa9f3ce11696b7dc1db5a7d1b83 Mon Sep 17 00:00:00 2001 From: Nick Cooke Date: Fri, 12 Sep 2025 12:00:04 -0400 Subject: [PATCH 05/18] more README.md revisions --- authentication/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/authentication/README.md b/authentication/README.md index eac6ffbae..8da6949af 100644 --- a/authentication/README.md +++ b/authentication/README.md @@ -296,7 +296,7 @@ If you wish to setup a custom auth system. The below steps can help in its confi - Click **New credentials** and select **Service account key**. Select **New service account**, pick any name, and select **JSON** as the key type. Then click **Create**. - You should now have a new JSON file for your service account in your Downloads directory. -- Open the file `web/auth.html` in your computer's web browser. The `auth.html` file can now be found in the current directory's `LegacyAuthQuickstart` subdirectory. +- Open the file `web/auth.html` in your computer's web browser. The `auth.html` file can now be found in the current directory's `web` subdirectory. - Click **Choose File** and upload the JSON file you just downloaded. - Enter any User ID and click **Generate**. - Copy the token link displayed. From 185ce785ec3db80166ffd35912063ab4d10c08a0 Mon Sep 17 00:00:00 2001 From: Nick Cooke Date: Fri, 12 Sep 2025 12:02:37 -0400 Subject: [PATCH 06/18] remove legacy specific logic --- scripts/info_script.rb | 4 ---- 1 file changed, 4 deletions(-) diff --git a/scripts/info_script.rb b/scripts/info_script.rb index 23ef9d942..58fc27c83 100755 --- a/scripts/info_script.rb +++ b/scripts/info_script.rb @@ -19,10 +19,6 @@ legacy = ARGV[1] project_path = "#{sample}Example.xcodeproj" file_name = 'GoogleService-Info.plist' -unless legacy.nil? || legacy.empty? - project_path = "Legacy#{sample}Quickstart/" + project_path - file_name = "../" + file_name -end project = Xcodeproj::Project.open(project_path) # Add a file to the project in the main group From 5a491124d4ec317b33d709dc2d521c3583ffe985 Mon Sep 17 00:00:00 2001 From: Nick Cooke Date: Fri, 12 Sep 2025 12:06:49 -0400 Subject: [PATCH 07/18] remove more legacy references --- scripts/test.sh | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/scripts/test.sh b/scripts/test.sh index c34186941..52a53b60b 100755 --- a/scripts/test.sh +++ b/scripts/test.sh @@ -32,10 +32,6 @@ fi if [[ -z "${SPM:-}" ]]; then SPM=false echo "Defaulting to SPM=$SPM" - if [[ -z "${LEGACY:-}" ]]; then - LEGACY=false - echo "Defaulting to LEGACY=$LEGACY" - fi fi if [[ -z "${OS:-}" ]]; then OS=iOS @@ -58,11 +54,7 @@ flags=() if [[ "$SPM" == true ]];then flags+=( -project "${DIR}/${SAMPLE}Example.xcodeproj" ) else - if [[ "$LEGACY" == true ]]; then - WORKSPACE="${SAMPLE}/Legacy${SAMPLE}Quickstart/${SAMPLE}Example.xcworkspace" - else - WORKSPACE="${SAMPLE}/${SAMPLE}Example.xcworkspace" - fi + WORKSPACE="${SAMPLE}/${SAMPLE}Example.xcworkspace" flags+=( -workspace "$WORKSPACE" ) fi From 2895c6631a414b72402e0b283bbbebde7deccdff Mon Sep 17 00:00:00 2001 From: Nick Cooke Date: Fri, 12 Sep 2025 12:09:58 -0400 Subject: [PATCH 08/18] functions script update --- scripts/install_prereqs/functions.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/install_prereqs/functions.sh b/scripts/install_prereqs/functions.sh index ced5e903b..4336a2098 100755 --- a/scripts/install_prereqs/functions.sh +++ b/scripts/install_prereqs/functions.sh @@ -16,4 +16,4 @@ DIRECTORY=functions \ PROJECT=Functions \ . ../scripts/prereq_core.sh -sed -i '' 's/REVERSED_CLIENT_ID/com.googleusercontent.apps.1025801074639-6p6ebi8amuklcjrto20gvpe295smm8u6/' LegacyFunctionsQuickstart/FunctionsExample/Info.plist +sed -i '' 's/REVERSED_CLIENT_ID/com.googleusercontent.apps.1025801074639-6p6ebi8amuklcjrto20gvpe295smm8u6/' FunctionsExample/Info.plist From 72808f341e79d57e573423b951fe94e371fef41b Mon Sep 17 00:00:00 2001 From: Nick Cooke Date: Fri, 12 Sep 2025 12:10:24 -0400 Subject: [PATCH 09/18] legacy removal --- scripts/framework_test.sh | 4 ---- 1 file changed, 4 deletions(-) diff --git a/scripts/framework_test.sh b/scripts/framework_test.sh index e155504fc..bf9b1f858 100755 --- a/scripts/framework_test.sh +++ b/scripts/framework_test.sh @@ -29,10 +29,6 @@ EXIT_STATUS=0 cd "${SAMPLE}" -if [[ ! -z "$LEGACY" ]]; then - cd "Legacy${SAMPLE}Quickstart" -fi - if [[ "$have_secrets" == true ]]; then ( xcodebuild \ From b7f00a41261acd0ff542c5b8c6fb21ace50d90a1 Mon Sep 17 00:00:00 2001 From: Nick Cooke Date: Fri, 12 Sep 2025 12:12:06 -0400 Subject: [PATCH 10/18] legacy --- scripts/build-for-testing.sh | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/scripts/build-for-testing.sh b/scripts/build-for-testing.sh index b36acbac8..d5fdf0978 100755 --- a/scripts/build-for-testing.sh +++ b/scripts/build-for-testing.sh @@ -26,10 +26,6 @@ set -euo pipefail if [[ -z "${SPM:-}" ]]; then SPM=false echo "Defaulting to SPM=$SPM" - if [[ -z "${LEGACY:-}" ]]; then - LEGACY=false - echo "Defaulting to LEGACY=$LEGACY" - fi fi # Set have_secrets to true or false. @@ -42,11 +38,7 @@ flags=() if [[ "$SPM" == true ]];then flags+=( -project "${DIR}/${SAMPLE}Example.xcodeproj" ) else - if [[ "$LEGACY" == true ]]; then - WORKSPACE="${SAMPLE}/Legacy${SAMPLE}Quickstart/${SAMPLE}Example.xcworkspace" - else - WORKSPACE="${SAMPLE}/${SAMPLE}Example.xcworkspace" - fi + WORKSPACE="${SAMPLE}/${SAMPLE}Example.xcworkspace" flags+=( -workspace "$WORKSPACE" ) fi From 74bbd659b2ca5d50316aa216537423ff178fe50f Mon Sep 17 00:00:00 2001 From: Nick Cooke Date: Fri, 12 Sep 2025 12:15:06 -0400 Subject: [PATCH 11/18] workflows --- .github/workflows/abtesting.yml | 51 ++++++++++++++++--------------- .github/workflows/crashlytics.yml | 51 ++++++++++++++++--------------- .github/workflows/storage.yml | 51 ++++++++++++++++--------------- 3 files changed, 78 insertions(+), 75 deletions(-) diff --git a/.github/workflows/abtesting.yml b/.github/workflows/abtesting.yml index 7fc91ff89..ddee5ce76 100644 --- a/.github/workflows/abtesting.yml +++ b/.github/workflows/abtesting.yml @@ -31,31 +31,32 @@ env: SAMPLE: ABTesting jobs: - cocoapods: - name: cocoapods - runs-on: macOS-15 - env: - SPM: false - TEST: true - steps: - - name: Checkout - uses: actions/checkout@master - - name: Setup - run: | - cd abtesting/LegacyABTestingQuickstart - gem install bundler - bundle install - gem install xcpretty - bundle exec pod install --repo-update - cd .. - ../scripts/install_prereqs/abtesting.sh - - name: Build Swift - run: ./scripts/test.sh - env: - LEGACY: true - SWIFT_SUFFIX: "" - OS: iOS - DEVICE: iPhone 16 + # TODO(ncooke3): Consider synthesizing Podfile for CocoaPods based test. + # cocoapods: + # name: cocoapods + # runs-on: macOS-15 + # env: + # SPM: false + # TEST: true + # steps: + # - name: Checkout + # uses: actions/checkout@master + # - name: Setup + # run: | + # cd abtesting/LegacyABTestingQuickstart + # gem install bundler + # bundle install + # gem install xcpretty + # bundle exec pod install --repo-update + # cd .. + # ../scripts/install_prereqs/abtesting.sh + # - name: Build Swift + # run: ./scripts/test.sh + # env: + # LEGACY: true + # SWIFT_SUFFIX: "" + # OS: iOS + # DEVICE: iPhone 16 spm: name: spm (Xcode ${{ matrix.xcode }} - ${{ matrix.os }}) runs-on: macOS-15 diff --git a/.github/workflows/crashlytics.yml b/.github/workflows/crashlytics.yml index e4b788785..634d613d4 100644 --- a/.github/workflows/crashlytics.yml +++ b/.github/workflows/crashlytics.yml @@ -27,31 +27,32 @@ env: secrets_passphrase: ${{ secrets.GHASECRETSGPGPASSPHRASE1 }} jobs: - cocoapods: - name: cocoapods - runs-on: macOS-15 - env: - SPM: false - LEGACY: true - OS: iOS - DEVICE: iPhone 16 - TEST: true - steps: - - name: Checkout - uses: actions/checkout@master - - name: Setup - run: | - cd crashlytics/LegacyCrashlyticsQuickstart - gem install bundler - bundle install - gem install xcpretty - bundle exec pod install --repo-update - cd .. - ../scripts/install_prereqs/crashlytics.sh - - name: Build Swift - run: ./scripts/test.sh - env: - SWIFT_SUFFIX: Swift + # TODO(ncooke3): Consider synthesizing Podfile for CocoaPods based test. + # cocoapods: + # name: cocoapods + # runs-on: macOS-15 + # env: + # SPM: false + # LEGACY: true + # OS: iOS + # DEVICE: iPhone 16 + # TEST: true + # steps: + # - name: Checkout + # uses: actions/checkout@master + # - name: Setup + # run: | + # cd crashlytics/LegacyCrashlyticsQuickstart + # gem install bundler + # bundle install + # gem install xcpretty + # bundle exec pod install --repo-update + # cd .. + # ../scripts/install_prereqs/crashlytics.sh + # - name: Build Swift + # run: ./scripts/test.sh + # env: + # SWIFT_SUFFIX: Swift spm: name: spm (Xcode ${{ matrix.xcode }} - ${{ matrix.os }}) runs-on: macOS-15 diff --git a/.github/workflows/storage.yml b/.github/workflows/storage.yml index 2cefc3bcb..43788b5fb 100644 --- a/.github/workflows/storage.yml +++ b/.github/workflows/storage.yml @@ -27,31 +27,32 @@ env: secrets_passphrase: ${{ secrets.GHASECRETSGPGPASSPHRASE1 }} jobs: - cocoapods: - name: cocoapods - runs-on: macOS-15 - env: - SPM: false - LEGACY: true - OS: iOS - DEVICE: iPhone 16 - TEST: true - steps: - - name: Checkout - uses: actions/checkout@master - - name: Setup - run: | - cd storage/LegacyStorageQuickstart - gem install bundler - bundle install - gem install xcpretty - bundle exec pod install --repo-update - cd .. - ../scripts/install_prereqs/storage.sh - - name: Build Swift - run: ./scripts/test.sh - env: - SWIFT_SUFFIX: Swift + # TODO(ncooke3): Consider synthesizing Podfile for CocoaPods based test. + # cocoapods: + # name: cocoapods + # runs-on: macOS-15 + # env: + # SPM: false + # LEGACY: true + # OS: iOS + # DEVICE: iPhone 16 + # TEST: true + # steps: + # - name: Checkout + # uses: actions/checkout@master + # - name: Setup + # run: | + # cd storage/LegacyStorageQuickstart + # gem install bundler + # bundle install + # gem install xcpretty + # bundle exec pod install --repo-update + # cd .. + # ../scripts/install_prereqs/storage.sh + # - name: Build Swift + # run: ./scripts/test.sh + # env: + # SWIFT_SUFFIX: Swift spm: name: spm (Xcode ${{ matrix.xcode }} - ${{ matrix.os }}) From f2ee725d396c0ea68ea3f4b7654e9d95e0732618 Mon Sep 17 00:00:00 2001 From: Nick Cooke Date: Mon, 22 Sep 2025 11:18:31 -0400 Subject: [PATCH 12/18] Remove trailing space --- .github/workflows/storage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/storage.yml b/.github/workflows/storage.yml index 4583ee062..65ca01bb5 100644 --- a/.github/workflows/storage.yml +++ b/.github/workflows/storage.yml @@ -41,7 +41,7 @@ jobs: steps: - name: Checkout uses: actions/checkout@master - - name: Xcode + - name: Xcode run: sudo xcode-select -s /Applications/Xcode_16.4.app/Contents/Developer - name: Setup run: | From e0b570a59badcbe94debcc0c93b49893566c3d30 Mon Sep 17 00:00:00 2001 From: Nick Cooke Date: Mon, 22 Sep 2025 11:21:23 -0400 Subject: [PATCH 13/18] Remove cocoapods job in storage.yml --- .github/workflows/storage.yml | 27 --------------------------- 1 file changed, 27 deletions(-) diff --git a/.github/workflows/storage.yml b/.github/workflows/storage.yml index 65ca01bb5..a15217d78 100644 --- a/.github/workflows/storage.yml +++ b/.github/workflows/storage.yml @@ -30,33 +30,6 @@ env: secrets_passphrase: ${{ secrets.GHASECRETSGPGPASSPHRASE1 }} jobs: - cocoapods: - runs-on: macOS-15 - env: - SPM: false - LEGACY: true - OS: iOS - DEVICE: iPhone 16 - TEST: true - steps: - - name: Checkout - uses: actions/checkout@master - - name: Xcode - run: sudo xcode-select -s /Applications/Xcode_16.4.app/Contents/Developer - - name: Setup - run: | - cd storage/LegacyStorageQuickstart - gem install bundler - bundle install - gem install xcpretty - bundle exec pod install --repo-update - cd .. - ../scripts/install_prereqs/storage.sh - - name: Build Swift - run: ./scripts/test.sh - env: - SWIFT_SUFFIX: Swift - spm: name: spm (Xcode ${{ matrix.xcode }} - ${{ matrix.os }}) runs-on: macOS-15 From 5ebba9b9f8054350691751eeedcab7f2fdc8919c Mon Sep 17 00:00:00 2001 From: Nick Cooke Date: Mon, 22 Sep 2025 11:42:38 -0400 Subject: [PATCH 14/18] Remove LEGACY env var --- .github/workflows/analytics.yml | 1 - .github/workflows/authentication.yml | 1 - .github/workflows/config.yml | 1 - .github/workflows/database.yml | 1 - .github/workflows/firestore.yml | 1 - .github/workflows/inappmessaging.yml | 1 - .github/workflows/installations.yml | 1 - .github/workflows/messaging.yml | 1 - .github/workflows/performance.yml | 1 - 9 files changed, 9 deletions(-) diff --git a/.github/workflows/analytics.yml b/.github/workflows/analytics.yml index 8021eef4d..13cd58278 100644 --- a/.github/workflows/analytics.yml +++ b/.github/workflows/analytics.yml @@ -58,7 +58,6 @@ jobs: env: SPM: true - LEGACY: false OS: ${{ matrix.os }} DEVICE: ${{ matrix.device }} SCHEME: ${{ matrix.scheme || 'AnalyticsExample' }} diff --git a/.github/workflows/authentication.yml b/.github/workflows/authentication.yml index 81d9da0c7..884ff76d0 100644 --- a/.github/workflows/authentication.yml +++ b/.github/workflows/authentication.yml @@ -36,7 +36,6 @@ jobs: OS: iOS SETUP: authentication SPM: true - LEGACY: false DIR: authentication DEVICE: iPhone 16 TEST: false diff --git a/.github/workflows/config.yml b/.github/workflows/config.yml index 1699b1a4d..74e769fa8 100644 --- a/.github/workflows/config.yml +++ b/.github/workflows/config.yml @@ -37,7 +37,6 @@ jobs: DEVICE: iPhone 16 DIR: config SPM: true - LEGACY: false SCHEME: ConfigExample TEST: true steps: diff --git a/.github/workflows/database.yml b/.github/workflows/database.yml index 6b50705cd..d900dd95e 100644 --- a/.github/workflows/database.yml +++ b/.github/workflows/database.yml @@ -36,7 +36,6 @@ jobs: env: OS: iOS SPM: true - LEGACY: false DIR: database DEVICE: iPhone 16 TEST: false diff --git a/.github/workflows/firestore.yml b/.github/workflows/firestore.yml index 5cad010f3..3fe2865c6 100644 --- a/.github/workflows/firestore.yml +++ b/.github/workflows/firestore.yml @@ -34,7 +34,6 @@ jobs: runs-on: macOS-15 env: SPM: true - LEGACY: false OS: iOS DIR: firestore DEVICE: iPhone 16 diff --git a/.github/workflows/inappmessaging.yml b/.github/workflows/inappmessaging.yml index 175b41e37..378e7d0b1 100644 --- a/.github/workflows/inappmessaging.yml +++ b/.github/workflows/inappmessaging.yml @@ -34,7 +34,6 @@ jobs: runs-on: macOS-15 env: SPM: true - LEGACY: false DIR: inappmessaging OS: iOS DEVICE: iPhone 16 diff --git a/.github/workflows/installations.yml b/.github/workflows/installations.yml index 6db55e68f..cf21ab96b 100644 --- a/.github/workflows/installations.yml +++ b/.github/workflows/installations.yml @@ -34,7 +34,6 @@ jobs: runs-on: macOS-15 env: SPM: true - LEGACY: false OS: iOS DEVICE: iPhone 16 TEST: true diff --git a/.github/workflows/messaging.yml b/.github/workflows/messaging.yml index 3de213404..4adc3d264 100644 --- a/.github/workflows/messaging.yml +++ b/.github/workflows/messaging.yml @@ -34,7 +34,6 @@ jobs: runs-on: macOS-15 env: SPM: true - LEGACY: false OS: iOS DEVICE: iPhone 16 TEST: false diff --git a/.github/workflows/performance.yml b/.github/workflows/performance.yml index a64ec11b5..a1fb1fbb1 100644 --- a/.github/workflows/performance.yml +++ b/.github/workflows/performance.yml @@ -39,7 +39,6 @@ jobs: runs-on: macOS-15 env: SPM: true - LEGACY: false OS: iOS DEVICE: iPhone 16 TEST: true From 7b6381e159339e99bb783f69fd2580d902c60299 Mon Sep 17 00:00:00 2001 From: Nick Cooke Date: Mon, 22 Sep 2025 12:22:12 -0400 Subject: [PATCH 15/18] Temp branch trigger --- .github/workflows/abtesting.yml | 4 ++-- .github/workflows/analytics.yml | 4 ++-- .github/workflows/authentication.yml | 4 ++-- .github/workflows/check.yml | 2 +- .github/workflows/config.yml | 4 ++-- .github/workflows/crashlytics.yml | 4 ++-- .github/workflows/database.yml | 4 ++-- .github/workflows/firestore.yml | 4 ++-- .github/workflows/functions.yml | 4 ++-- .github/workflows/inappmessaging.yml | 4 ++-- .github/workflows/installations.yml | 4 ++-- .github/workflows/messaging.yml | 4 ++-- .github/workflows/performance.yml | 4 ++-- .github/workflows/storage.yml | 4 ++-- 14 files changed, 27 insertions(+), 27 deletions(-) diff --git a/.github/workflows/abtesting.yml b/.github/workflows/abtesting.yml index dbd92e12b..f8594162b 100644 --- a/.github/workflows/abtesting.yml +++ b/.github/workflows/abtesting.yml @@ -5,7 +5,7 @@ permissions: on: push: - branches: [ main ] + branches: [ main, nc/quickstarts ] paths: - '.github/workflows/abtesting.yml' - 'abtesting/**' @@ -14,7 +14,7 @@ on: - '!abtesting/*.md' - '!abtesting/Design/**' pull_request: - branches: [ main ] + branches: [ main, nc/quickstarts ] paths: - '.github/workflows/abtesting.yml' - 'abtesting/**' diff --git a/.github/workflows/analytics.yml b/.github/workflows/analytics.yml index 13cd58278..32ab51d65 100644 --- a/.github/workflows/analytics.yml +++ b/.github/workflows/analytics.yml @@ -5,14 +5,14 @@ permissions: on: push: - branches: [ main ] + branches: [ main, nc/quickstarts ] paths: - '.github/workflows/analytics.yml' - 'analytics/**' - 'scripts/*' - 'scripts/analytics.sh' pull_request: - branches: [ main ] + branches: [ main, nc/quickstarts ] paths: - '.github/workflows/analytics.yml' - 'analytics/**' diff --git a/.github/workflows/authentication.yml b/.github/workflows/authentication.yml index 884ff76d0..66eb8be7c 100644 --- a/.github/workflows/authentication.yml +++ b/.github/workflows/authentication.yml @@ -5,14 +5,14 @@ permissions: on: push: - branches: [ main ] + branches: [ main, nc/quickstarts ] paths: - '.github/workflows/authentication.yml' - 'authentication/**' - 'scripts/*' - 'scripts/authentication.sh' pull_request: - branches: [ main ] + branches: [ main, nc/quickstarts ] paths: - '.github/workflows/authentication.yml' - 'authentication/**' diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index d6d92e2a8..48dbb5b29 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -6,7 +6,7 @@ permissions: on: pull_request: push: - branches: main + branches: main, nc/quickstarts concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.ref }} diff --git a/.github/workflows/config.yml b/.github/workflows/config.yml index 74e769fa8..1114ed612 100644 --- a/.github/workflows/config.yml +++ b/.github/workflows/config.yml @@ -5,14 +5,14 @@ permissions: on: push: - branches: [ main ] + branches: [ main, nc/quickstarts ] paths: - '.github/workflows/config.yml' - 'config/**' - 'scripts/*' - 'scripts/config.sh' pull_request: - branches: [ main ] + branches: [ main, nc/quickstarts ] paths: - '.github/workflows/config.yml' - 'config/**' diff --git a/.github/workflows/crashlytics.yml b/.github/workflows/crashlytics.yml index 905d27fcf..8ca96c31a 100644 --- a/.github/workflows/crashlytics.yml +++ b/.github/workflows/crashlytics.yml @@ -5,14 +5,14 @@ permissions: on: push: - branches: [ main ] + branches: [ main, nc/quickstarts ] paths: - '.github/workflows/crashlytics.yml' - 'crashlytics/**' - 'scripts/*' - 'scripts/crashlytics.sh' pull_request: - branches: [ main ] + branches: [ main, nc/quickstarts ] paths: - '.github/workflows/crashlytics.yml' - 'crashlytics/**' diff --git a/.github/workflows/database.yml b/.github/workflows/database.yml index d900dd95e..536ccccf8 100644 --- a/.github/workflows/database.yml +++ b/.github/workflows/database.yml @@ -5,14 +5,14 @@ permissions: on: push: - branches: [ main ] + branches: [ main, nc/quickstarts ] paths: - '.github/workflows/database.yml' - 'database/**' - 'scripts/*' - 'scripts/database.sh' pull_request: - branches: [ main ] + branches: [ main, nc/quickstarts ] paths: - '.github/workflows/database.yml' - 'database/**' diff --git a/.github/workflows/firestore.yml b/.github/workflows/firestore.yml index 3fe2865c6..4260ac0fc 100644 --- a/.github/workflows/firestore.yml +++ b/.github/workflows/firestore.yml @@ -5,14 +5,14 @@ permissions: on: push: - branches: [ main ] + branches: [ main, nc/quickstarts ] paths: - '.github/workflows/firestore.yml' - 'firestore/**' - 'scripts/*' - 'scripts/firestore.sh' pull_request: - branches: [ main ] + branches: [ main, nc/quickstarts ] paths: - '.github/workflows/firestore.yml' - 'firestore/**' diff --git a/.github/workflows/functions.yml b/.github/workflows/functions.yml index e8b3a626e..5914a165a 100644 --- a/.github/workflows/functions.yml +++ b/.github/workflows/functions.yml @@ -5,14 +5,14 @@ permissions: on: push: - branches: [ main ] + branches: [ main, nc/quickstarts ] paths: - '.github/workflows/functions.yml' - 'functions/**' - 'scripts/*' - 'scripts/functions.sh' pull_request: - branches: [ main ] + branches: [ main, nc/quickstarts ] paths: - '.github/workflows/functions.yml' - 'functions/**' diff --git a/.github/workflows/inappmessaging.yml b/.github/workflows/inappmessaging.yml index 378e7d0b1..399039eb3 100644 --- a/.github/workflows/inappmessaging.yml +++ b/.github/workflows/inappmessaging.yml @@ -5,14 +5,14 @@ permissions: on: push: - branches: [ main ] + branches: [ main, nc/quickstarts ] paths: - '.github/workflows/inappmessaging.yml' - 'inappmessaging/**' - 'scripts/*' - 'scripts/inappmessaging.sh' pull_request: - branches: [ main ] + branches: [ main, nc/quickstarts ] paths: - '.github/workflows/inappmessaging.yml' - 'inappmessaging/**' diff --git a/.github/workflows/installations.yml b/.github/workflows/installations.yml index cf21ab96b..afcedf956 100644 --- a/.github/workflows/installations.yml +++ b/.github/workflows/installations.yml @@ -5,14 +5,14 @@ permissions: on: push: - branches: [ main ] + branches: [ main, nc/quickstarts ] paths: - '.github/workflows/installations.yml' - 'installations/**' - 'scripts/*' - 'scripts/installations.sh' pull_request: - branches: [ main ] + branches: [ main, nc/quickstarts ] paths: - '.github/workflows/installations.yml' - 'installations/**' diff --git a/.github/workflows/messaging.yml b/.github/workflows/messaging.yml index 4adc3d264..008ba6aa8 100644 --- a/.github/workflows/messaging.yml +++ b/.github/workflows/messaging.yml @@ -5,14 +5,14 @@ permissions: on: push: - branches: [ main ] + branches: [ main, nc/quickstarts ] paths: - '.github/workflows/messaging.yml' - 'messaging/**' - 'scripts/*' - 'scripts/messaging.sh' pull_request: - branches: [ main ] + branches: [ main, nc/quickstarts ] paths: - '.github/workflows/messaging.yml' - 'messaging/**' diff --git a/.github/workflows/performance.yml b/.github/workflows/performance.yml index a1fb1fbb1..e37171bbd 100644 --- a/.github/workflows/performance.yml +++ b/.github/workflows/performance.yml @@ -5,7 +5,7 @@ permissions: on: push: - branches: [ main ] + branches: [ main, nc/quickstarts ] paths: - '.github/workflows/performance.yml' - 'performance/**' @@ -14,7 +14,7 @@ on: - '!performance/SwiftUIPerformanceQuickstart/PerformanceExample/*.md' - '!performance/SwiftUIPerformanceQuickstart/PerformanceExample/Design/**' pull_request: - branches: [ main ] + branches: [ main, nc/quickstarts ] paths: - '.github/workflows/performance.yml' - 'performance/**' diff --git a/.github/workflows/storage.yml b/.github/workflows/storage.yml index a15217d78..7b05cd557 100644 --- a/.github/workflows/storage.yml +++ b/.github/workflows/storage.yml @@ -5,14 +5,14 @@ permissions: on: push: - branches: [ main ] + branches: [ main, nc/quickstarts ] paths: - '.github/workflows/storage.yml' - 'storage/**' - 'scripts/*' - 'scripts/storage.sh' pull_request: - branches: [ main ] + branches: [ main, nc/quickstarts ] paths: - '.github/workflows/storage.yml' - 'storage/**' From 869b1e53d3eb0aa444cf2b83defe2c366e2350cf Mon Sep 17 00:00:00 2001 From: Nick Cooke Date: Mon, 22 Sep 2025 15:58:55 -0400 Subject: [PATCH 16/18] disable --- scripts/install_prereqs/functions.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/install_prereqs/functions.sh b/scripts/install_prereqs/functions.sh index 4336a2098..f39a0b231 100755 --- a/scripts/install_prereqs/functions.sh +++ b/scripts/install_prereqs/functions.sh @@ -16,4 +16,5 @@ DIRECTORY=functions \ PROJECT=Functions \ . ../scripts/prereq_core.sh -sed -i '' 's/REVERSED_CLIENT_ID/com.googleusercontent.apps.1025801074639-6p6ebi8amuklcjrto20gvpe295smm8u6/' FunctionsExample/Info.plist +# TODO(ncooke3): FunctionsExample/Info.plist path DNE. +# sed -i '' 's/REVERSED_CLIENT_ID/com.googleusercontent.apps.1025801074639-6p6ebi8amuklcjrto20gvpe295smm8u6/' FunctionsExample/Info.plist From 3583cc6483ccc3a02c0cef497340344d2a3e14cf Mon Sep 17 00:00:00 2001 From: Nick Cooke Date: Mon, 22 Sep 2025 16:02:12 -0400 Subject: [PATCH 17/18] remove legacy --- scripts/info_script.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/info_script.rb b/scripts/info_script.rb index 58fc27c83..31c877d21 100755 --- a/scripts/info_script.rb +++ b/scripts/info_script.rb @@ -16,7 +16,6 @@ require 'xcodeproj' sample = ARGV[0] -legacy = ARGV[1] project_path = "#{sample}Example.xcodeproj" file_name = 'GoogleService-Info.plist' project = Xcodeproj::Project.open(project_path) From 046712587e1dc4a2c1115cbcc325b98e52ee2866 Mon Sep 17 00:00:00 2001 From: Nick Cooke <36927374+ncooke3@users.noreply.github.com> Date: Tue, 23 Sep 2025 12:54:58 -0400 Subject: [PATCH 18/18] Update .github/workflows/abtesting.yml --- .github/workflows/abtesting.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/abtesting.yml b/.github/workflows/abtesting.yml index f8594162b..37d083ec7 100644 --- a/.github/workflows/abtesting.yml +++ b/.github/workflows/abtesting.yml @@ -5,6 +5,7 @@ permissions: on: push: + # TODO: Before merging into main, remove nc/quickstarts from all workflows. branches: [ main, nc/quickstarts ] paths: - '.github/workflows/abtesting.yml'