Browse Source

Sign up, PDF, Withdrawal updates

Hector Carrion 4 years ago
parent
commit
633864320e
51 changed files with 3356 additions and 2618 deletions
  1. 105
    8
      EncuestaMarle/OnboardingViewController.swift
  2. 4
    0
      EncuestaMarle/ResearchContainerViewController.swift
  3. 7
    6
      EncuestaMarle/WithdrawViewController.swift
  4. 77
    55
      Podfile.lock
  5. 14
    0
      Pods/Firebase/CoreOnly/Sources/Firebase.h
  6. BIN
      Pods/FirebaseAnalytics/Frameworks/FIRAnalyticsConnector.framework/FIRAnalyticsConnector
  7. BIN
      Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/FirebaseAnalytics
  8. 3
    0
      Pods/FirebaseAuth/Firebase/Auth/CHANGELOG.md
  9. 8
    0
      Pods/FirebaseAuth/Firebase/Auth/Source/Public/FIRAuthErrors.h
  10. 33
    0
      Pods/FirebaseAuth/Firebase/Auth/Source/Public/FIRUser.h
  11. 14
    5
      Pods/FirebaseAuth/README.md
  12. 4
    0
      Pods/FirebaseCore/Firebase/Core/FIRApp.m
  13. 49
    42
      Pods/FirebaseCore/Firebase/Core/FIRComponentContainer.m
  14. 5
    2
      Pods/FirebaseCore/Firebase/Core/Private/FIRComponentContainerInternal.h
  15. 3
    2
      Pods/FirebaseCore/README.md
  16. 1
    1
      Pods/FirebaseInstanceID/Firebase/InstanceID/FIRIMessageCode.h
  17. 29
    57
      Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceID.m
  18. 10
    95
      Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDBackupExcludedPlist.m
  19. 2
    1
      Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDTokenManager.h
  20. 3
    3
      Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDTokenManager.m
  21. 14
    5
      Pods/FirebaseInstanceID/README.md
  22. 26
    0
      Pods/GTMSessionFetcher/Source/GTMSessionFetcher.h
  23. 110
    28
      Pods/GTMSessionFetcher/Source/GTMSessionFetcher.m
  24. 9
    0
      Pods/GTMSessionFetcher/Source/GTMSessionUploadFetcher.h
  25. 42
    8
      Pods/GTMSessionFetcher/Source/GTMSessionUploadFetcher.m
  26. BIN
      Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.framework/GoogleAppMeasurement
  27. 6
    1
      Pods/GoogleUtilities/GoogleUtilities/Logger/GULLogger.m
  28. 10
    6
      Pods/GoogleUtilities/GoogleUtilities/Network/GULMutableDictionary.m
  29. 21
    2
      Pods/GoogleUtilities/GoogleUtilities/Network/GULNetworkURLSession.m
  30. 77
    55
      Pods/Manifest.lock
  31. 2254
    2224
      Pods/Pods.xcodeproj/project.pbxproj
  32. 1
    1
      Pods/Target Support Files/FirebaseAuth/FirebaseAuth-Info.plist
  33. 1
    1
      Pods/Target Support Files/FirebaseAuth/FirebaseAuth.xcconfig
  34. 1
    1
      Pods/Target Support Files/FirebaseCore/FirebaseCore-Info.plist
  35. 1
    1
      Pods/Target Support Files/FirebaseCore/FirebaseCore.xcconfig
  36. 1
    1
      Pods/Target Support Files/FirebaseInstanceID/FirebaseInstanceID-Info.plist
  37. 1
    1
      Pods/Target Support Files/FirebaseInstanceID/FirebaseInstanceID.xcconfig
  38. 1
    1
      Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher-Info.plist
  39. 1
    1
      Pods/Target Support Files/GoogleUtilities/GoogleUtilities-Info.plist
  40. 203
    1
      Pods/Target Support Files/Pods-EncuestaMarle/Pods-EncuestaMarle-acknowledgements.markdown
  41. 204
    2
      Pods/Target Support Files/Pods-EncuestaMarle/Pods-EncuestaMarle-acknowledgements.plist
  42. 1
    1
      Pods/Target Support Files/nanopb/nanopb-Info.plist
  43. 0
    0
      Pods/nanopb/LICENSE.txt
  44. 0
    0
      Pods/nanopb/README.md
  45. 0
    0
      Pods/nanopb/pb.h
  46. 0
    0
      Pods/nanopb/pb_common.c
  47. 0
    0
      Pods/nanopb/pb_common.h
  48. 0
    0
      Pods/nanopb/pb_decode.c
  49. 0
    0
      Pods/nanopb/pb_decode.h
  50. 0
    0
      Pods/nanopb/pb_encode.c
  51. 0
    0
      Pods/nanopb/pb_encode.h

+ 105
- 8
EncuestaMarle/OnboardingViewController.swift View File

38
 var tokenPDF = String()
38
 var tokenPDF = String()
39
 
39
 
40
 var resetPassword: Bool = false
40
 var resetPassword: Bool = false
41
+var jsonString_reset = String()
42
+var jsonDict_reset = [String: Any]()
43
+var n_jsonDict_reset = [String: Any]()
44
+var response_reset = String()
41
 
45
 
42
 func getConsent_task(task: ORKTaskViewController) -> ORKTaskViewController{
46
 func getConsent_task(task: ORKTaskViewController) -> ORKTaskViewController{
43
     return task
47
     return task
71
     }
75
     }
72
 }
76
 }
73
 
77
 
78
+//func limpiarJson_reset(){
79
+//    let resultados_encuestas = jsonDict_reset["results"] as! [[String:Any]]
80
+//    if let resultado_pregunta = resultados_encuestas[0]["results"] as? [[String:Any]]{
81
+//        n_jsonDict_reset["email"]=resultado_pregunta[0]["textAnswer"]
82
+//    }
83
+//}
84
+
85
+func sendEmail(email: String) {
86
+    
87
+    //impiarJson_reset()
88
+    
89
+    let jsonObject: NSMutableDictionary = NSMutableDictionary()
90
+    
91
+    jsonObject.setValue(email, forKey: "email")
92
+    
93
+    let request = NSMutableURLRequest(url: NSURL(string: "http://tania.uprrp.edu/askForEmail.php")! as URL)
94
+    request.httpMethod = "POST"
95
+    
96
+    let jsonData: NSData
97
+            
98
+    do {
99
+        jsonData = try JSONSerialization.data(withJSONObject: jsonObject, options: JSONSerialization.WritingOptions()) as NSData
100
+        let jsonEmail = NSString(data: jsonData as Data, encoding: String.Encoding.utf8.rawValue) as! String
101
+        print("✅ Email recieved, sending request...")
102
+        
103
+        let postString = "data=\(jsonEmail)"
104
+        request.httpBody = postString.data(using: String.Encoding.utf8)
105
+        
106
+        let task = URLSession.shared.dataTask(with: request as URLRequest) {
107
+            data, response, error in
108
+            if error != nil {
109
+                print("error=\(String(describing: error))")
110
+                return
111
+            }
112
+            
113
+            print("response solito Email = \(String(describing: response))") //Error: 1062
114
+            
115
+            let responseString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)
116
+            print("responseString Email = \(String(describing: responseString))")
117
+            
118
+            response_reset = responseString as! String
119
+        }
120
+        
121
+        task.resume()
122
+        
123
+    } catch {
124
+        print ("❌ JSON Failure")
125
+    }
126
+}
127
+
74
 func sendJson_reg() {
128
 func sendJson_reg() {
75
     
129
     
76
     let request = NSMutableURLRequest(url: NSURL(string: "http://tania.uprrp.edu/registration.php")! as URL)
130
     let request = NSMutableURLRequest(url: NSURL(string: "http://tania.uprrp.edu/registration.php")! as URL)
110
     
164
     
111
     let request = NSMutableURLRequest(url: NSURL(string: "http://tania.uprrp.edu/recoverAccount.php")! as URL)
165
     let request = NSMutableURLRequest(url: NSURL(string: "http://tania.uprrp.edu/recoverAccount.php")! as URL)
112
     request.httpMethod = "POST"
166
     request.httpMethod = "POST"
113
-    print("Json Log-In ✅ 👀")
114
-    print(jsonString_r)
115
     let postString = "data=\(jsonString_r)"
167
     let postString = "data=\(jsonString_r)"
116
     request.httpBody = postString.data(using: String.Encoding.utf8)
168
     request.httpBody = postString.data(using: String.Encoding.utf8)
117
     
169
     
153
         jsonObject.setValue(date.description, forKey: "signatureDate")
205
         jsonObject.setValue(date.description, forKey: "signatureDate")
154
         jsonObject.setValue(tokenPDF, forKey: "token")
206
         jsonObject.setValue(tokenPDF, forKey: "token")
155
         
207
         
208
+        print("Date is formatted as: 📆")
209
+        print(date.description)
210
+        
156
         let jsonData: NSData
211
         let jsonData: NSData
157
         
212
         
158
         do {
213
         do {
261
     @IBAction func recover_account(_ sender: UIButton) {
316
     @IBAction func recover_account(_ sender: UIButton) {
262
         class LoginViewController : ORKLoginStepViewController {
317
         class LoginViewController : ORKLoginStepViewController {
263
             override func forgotPasswordButtonTapped() {
318
             override func forgotPasswordButtonTapped() {
264
-                let alertTitle = NSLocalizedString("Enter your email and click submit", comment: "")
265
-                let alertMessage = NSLocalizedString("You will recieve an email to reset your password.", comment: "")
319
+                var email: String = ""
320
+                let alertTitle = NSLocalizedString("Enter your email", comment: "")
321
+                let alertMessage = NSLocalizedString("You will recieve instructions to reset your password.", comment: "")
266
                 let alert = UIAlertController(title: alertTitle, message: alertMessage, preferredStyle: UIAlertController.Style.alert)
322
                 let alert = UIAlertController(title: alertTitle, message: alertMessage, preferredStyle: UIAlertController.Style.alert)
267
-                alert.addAction(UIAlertAction(title: "OK", style: UIAlertAction.Style.default, handler: nil))
323
+                alert.addTextField { (textField) in
324
+                    textField.placeholder = "Email"
325
+                }
326
+                alert.addAction(UIAlertAction(title: "Submit", style: UIAlertAction.Style.default, handler: { [weak alert] (_) in
327
+                    let textField = alert!.textFields![0] // Force unwrapping because we know it exists.
328
+                    print("Text field email: \(String(describing: textField.text))")
329
+                    email = textField.text!
330
+                    sendEmail(email: email)
331
+                    let alertTitle2 = NSLocalizedString("If the email is registered we will send you an email", comment: "")
332
+                    let alertMessage2 = NSLocalizedString("Check \(email) for instructions to reset your password", comment: "")
333
+                    let alert2 = UIAlertController(title: alertTitle2, message: alertMessage2, preferredStyle: UIAlertController.Style.alert)
334
+                    alert2.addAction(UIAlertAction(title: "OK", style: UIAlertAction.Style.default, handler: nil))
335
+                    self.present(alert2, animated: true, completion: nil)
336
+                }))
337
+                alert.addAction(UIAlertAction(title: "Cancel", style: UIAlertAction.Style.cancel , handler: nil))
338
+                
268
                 self.present(alert, animated: true, completion: nil)
339
                 self.present(alert, animated: true, completion: nil)
269
-                resetPassword = true
270
             }
340
             }
271
         }
341
         }
272
         
342
         
277
         let taskViewController = ORKTaskViewController(task: orderedTask, taskRun: nil)
347
         let taskViewController = ORKTaskViewController(task: orderedTask, taskRun: nil)
278
         taskViewController.delegate = self
348
         taskViewController.delegate = self
279
         
349
         
280
-        task_def = "recover"
350
+        if (resetPassword) {
351
+            task_def = "reset"
352
+            resetPassword = false
353
+            let alertTitle2 = NSLocalizedString("Email will arrive soon", comment: "")
354
+            let alertMessage2 = NSLocalizedString("Check your inbox for instructions to reset your password", comment: "")
355
+            let alert2 = UIAlertController(title: alertTitle2, message: alertMessage2, preferredStyle: UIAlertController.Style.alert)
356
+            alert2.addAction(UIAlertAction(title: "OK", style: UIAlertAction.Style.default, handler: nil))
357
+            self.present(alert2, animated: true, completion: nil)
358
+        }
359
+        else {
360
+            task_def = "recover"
361
+        }
281
         present(taskViewController, animated: true, completion: nil)
362
         present(taskViewController, animated: true, completion: nil)
282
 
363
 
283
     }
364
     }
289
     public func taskViewController(_ taskViewController: ORKTaskViewController, didFinishWith reason: ORKTaskViewControllerFinishReason, error: Error?) {
370
     public func taskViewController(_ taskViewController: ORKTaskViewController, didFinishWith reason: ORKTaskViewControllerFinishReason, error: Error?) {
290
         switch reason {
371
         switch reason {
291
         case .completed:
372
         case .completed:
292
-            if task_def == "recover"{
373
+            if task_def == "reset" {
374
+                let taskResult_reset = taskViewController.result
375
+                let jsonData_reset = try! ORKESerializer.jsonData(for: taskResult_reset)
376
+                jsonString_reset = NSString(data: jsonData_reset, encoding: String.Encoding.utf8.rawValue)! as String
377
+                jsonDict_reset = convertToDictionary(text: jsonString_r as String) as! [String: Any]
378
+                do {
379
+                    let jsonData_reset = try JSONSerialization.data(withJSONObject: jsonDict_reset, options: .prettyPrinted)
380
+                    jsonString_reset = NSString(data: jsonData_reset, encoding: String.Encoding.utf8.rawValue)! as String
381
+                }
382
+                catch {
383
+                    print(error.localizedDescription)
384
+                }
385
+                //sendEmail()
386
+                
387
+                
388
+            }
389
+            else if task_def == "recover"{
293
                 let taskResult_r = taskViewController.result
390
                 let taskResult_r = taskViewController.result
294
                 let jsonData_r = try! ORKESerializer.jsonData(for: taskResult_r)
391
                 let jsonData_r = try! ORKESerializer.jsonData(for: taskResult_r)
295
                 jsonString_r = NSString(data: jsonData_r, encoding: String.Encoding.utf8.rawValue)! as String
392
                 jsonString_r = NSString(data: jsonData_r, encoding: String.Encoding.utf8.rawValue)! as String

+ 4
- 0
EncuestaMarle/ResearchContainerViewController.swift View File

115
         if taskViewController is WithdrawViewController {
115
         if taskViewController is WithdrawViewController {
116
             if reason == .completed {
116
             if reason == .completed {
117
                 performSegue(withIdentifier: "toOnboarding", sender: self)
117
                 performSegue(withIdentifier: "toOnboarding", sender: self)
118
+                // on completion of withdrawl
119
+                print("❌ User is withdrawing with string: ")
120
+                print(jsonString_withdraw)
121
+                sendJson_withdraw()
118
             }
122
             }
119
             dismiss(animated: true, completion: nil)
123
             dismiss(animated: true, completion: nil)
120
         }
124
         }

+ 7
- 6
EncuestaMarle/WithdrawViewController.swift View File

14
 
14
 
15
 func sendJson_withdraw(){
15
 func sendJson_withdraw(){
16
     
16
     
17
-    let request = NSMutableURLRequest(url: NSURL(string: "http://tania.uprrp.edu/withdraw.php")! as URL)
17
+    let request = NSMutableURLRequest(url: NSURL(string: "http://tania.uprrp.edu/withdrawl.php")! as URL)
18
     request.httpMethod = "POST"
18
     request.httpMethod = "POST"
19
     let postString = "data=\(jsonString_withdraw)"
19
     let postString = "data=\(jsonString_withdraw)"
20
     request.httpBody = postString.data(using: String.Encoding.utf8)
20
     request.httpBody = postString.data(using: String.Encoding.utf8)
28
         }
28
         }
29
         
29
         
30
         let responseString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)
30
         let responseString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)
31
-        print("responseString = \(String(describing: responseString))")
31
+        print("responseString Withdrawl ❌ = \(String(describing: responseString))")
32
     } 
32
     } 
33
     task.resume()
33
     task.resume()
34
 }
34
 }
38
     init() {
38
     init() {
39
         let instructionStep = ORKInstructionStep(identifier: "WithdrawlInstruction")
39
         let instructionStep = ORKInstructionStep(identifier: "WithdrawlInstruction")
40
         instructionStep.title = NSLocalizedString("Are you sure you want to withdraw?", comment: "")
40
         instructionStep.title = NSLocalizedString("Are you sure you want to withdraw?", comment: "")
41
-        instructionStep.text = NSLocalizedString("Withdrawing from the study will reset the app to the state it was in prior to you originally joining the study.", comment: "")
41
+        instructionStep.text = NSLocalizedString("Withdrawing from the study will delete all your information and reset the app.", comment: "")
42
         
42
         
43
         let completionStep = ORKCompletionStep(identifier: "Withdraw")
43
         let completionStep = ORKCompletionStep(identifier: "Withdraw")
44
         completionStep.title = NSLocalizedString("We appreciate your time.", comment: "")
44
         completionStep.title = NSLocalizedString("We appreciate your time.", comment: "")
47
         let withdrawTask = ORKOrderedTask(identifier: "Withdraw", steps: [instructionStep, completionStep])
47
         let withdrawTask = ORKOrderedTask(identifier: "Withdraw", steps: [instructionStep, completionStep])
48
         
48
         
49
         withdrawDict["token"]=token
49
         withdrawDict["token"]=token
50
-        withdrawDict["withdraw"]="yes"
51
         do {
50
         do {
52
             let jsonData_w = try JSONSerialization.data(withJSONObject: withdrawDict, options: .prettyPrinted)
51
             let jsonData_w = try JSONSerialization.data(withJSONObject: withdrawDict, options: .prettyPrinted)
53
             jsonString_withdraw = NSString(data: jsonData_w, encoding: String.Encoding.utf8.rawValue)! as String
52
             jsonString_withdraw = NSString(data: jsonData_w, encoding: String.Encoding.utf8.rawValue)! as String
55
         catch {
54
         catch {
56
             print(error.localizedDescription)
55
             print(error.localizedDescription)
57
         }
56
         }
58
-        print(jsonString_withdraw)
59
-        sendJson_withdraw()
57
+        // TODO: Move this to confirmation step
58
+//        print("❌ User is withdrawing with string: ")
59
+//        print(jsonString_withdraw)
60
+//        sendJson_withdraw()
60
         
61
         
61
         super.init(task: withdrawTask, taskRun: nil)
62
         super.init(task: withdrawTask, taskRun: nil)
62
     }
63
     }

+ 77
- 55
Podfile.lock View File

6
   - AWSCore (2.8.4)
6
   - AWSCore (2.8.4)
7
   - AWSSNS (2.8.4):
7
   - AWSSNS (2.8.4):
8
     - AWSCore (= 2.8.4)
8
     - AWSCore (= 2.8.4)
9
-  - Firebase/Auth (5.19.0):
9
+  - Firebase/Auth (6.11.0):
10
     - Firebase/CoreOnly
10
     - Firebase/CoreOnly
11
-    - FirebaseAuth (= 5.4.1)
12
-  - Firebase/Core (5.19.0):
11
+    - FirebaseAuth (~> 6.3.1)
12
+  - Firebase/Core (6.11.0):
13
     - Firebase/CoreOnly
13
     - Firebase/CoreOnly
14
-    - FirebaseAnalytics (= 5.8.0)
15
-  - Firebase/CoreOnly (5.19.0):
16
-    - FirebaseCore (= 5.4.0)
17
-  - FirebaseAnalytics (5.8.0):
18
-    - FirebaseCore (~> 5.4)
19
-    - FirebaseInstanceID (~> 3.8)
20
-    - GoogleAppMeasurement (= 5.8.0)
21
-    - GoogleUtilities/AppDelegateSwizzler (~> 5.2)
22
-    - GoogleUtilities/MethodSwizzler (~> 5.2)
23
-    - GoogleUtilities/Network (~> 5.2)
24
-    - "GoogleUtilities/NSData+zlib (~> 5.2)"
25
-    - nanopb (~> 0.3)
26
-  - FirebaseAuth (5.4.1):
14
+    - FirebaseAnalytics (= 6.1.3)
15
+  - Firebase/CoreOnly (6.11.0):
16
+    - FirebaseCore (= 6.3.2)
17
+  - FirebaseAnalytics (6.1.3):
18
+    - FirebaseCore (~> 6.3)
19
+    - FirebaseInstanceID (~> 4.2)
20
+    - GoogleAppMeasurement (= 6.1.3)
21
+    - GoogleUtilities/AppDelegateSwizzler (~> 6.0)
22
+    - GoogleUtilities/MethodSwizzler (~> 6.0)
23
+    - GoogleUtilities/Network (~> 6.0)
24
+    - "GoogleUtilities/NSData+zlib (~> 6.0)"
25
+    - nanopb (~> 0.3.901)
26
+  - FirebaseAuth (6.3.1):
27
     - FirebaseAuthInterop (~> 1.0)
27
     - FirebaseAuthInterop (~> 1.0)
28
-    - FirebaseCore (~> 5.2)
29
-    - GoogleUtilities/Environment (~> 5.2)
28
+    - FirebaseCore (~> 6.2)
29
+    - GoogleUtilities/AppDelegateSwizzler (~> 6.2)
30
+    - GoogleUtilities/Environment (~> 6.2)
30
     - GTMSessionFetcher/Core (~> 1.1)
31
     - GTMSessionFetcher/Core (~> 1.1)
31
   - FirebaseAuthInterop (1.0.0)
32
   - FirebaseAuthInterop (1.0.0)
32
-  - FirebaseCore (5.4.0):
33
-    - GoogleUtilities/Environment (~> 5.2)
34
-    - GoogleUtilities/Logger (~> 5.2)
35
-  - FirebaseInstanceID (3.8.0):
36
-    - FirebaseCore (~> 5.2)
37
-    - GoogleUtilities/Environment (~> 5.2)
38
-    - GoogleUtilities/UserDefaults (~> 5.2)
39
-  - GoogleAppMeasurement (5.8.0):
40
-    - GoogleUtilities/AppDelegateSwizzler (~> 5.2)
41
-    - GoogleUtilities/MethodSwizzler (~> 5.2)
42
-    - GoogleUtilities/Network (~> 5.2)
43
-    - "GoogleUtilities/NSData+zlib (~> 5.2)"
44
-    - nanopb (~> 0.3)
45
-  - GoogleUtilities/AppDelegateSwizzler (5.5.0):
33
+  - FirebaseCore (6.3.2):
34
+    - FirebaseCoreDiagnostics (~> 1.0)
35
+    - FirebaseCoreDiagnosticsInterop (~> 1.0)
36
+    - GoogleUtilities/Environment (~> 6.2)
37
+    - GoogleUtilities/Logger (~> 6.2)
38
+  - FirebaseCoreDiagnostics (1.1.1):
39
+    - FirebaseCoreDiagnosticsInterop (~> 1.0)
40
+    - GoogleDataTransportCCTSupport (~> 1.0)
41
+    - GoogleUtilities/Environment (~> 6.2)
42
+    - GoogleUtilities/Logger (~> 6.2)
43
+    - nanopb (~> 0.3.901)
44
+  - FirebaseCoreDiagnosticsInterop (1.0.0)
45
+  - FirebaseInstanceID (4.2.6):
46
+    - FirebaseCore (~> 6.0)
47
+    - GoogleUtilities/Environment (~> 6.0)
48
+    - GoogleUtilities/UserDefaults (~> 6.0)
49
+  - GoogleAppMeasurement (6.1.3):
50
+    - GoogleUtilities/AppDelegateSwizzler (~> 6.0)
51
+    - GoogleUtilities/MethodSwizzler (~> 6.0)
52
+    - GoogleUtilities/Network (~> 6.0)
53
+    - "GoogleUtilities/NSData+zlib (~> 6.0)"
54
+    - nanopb (~> 0.3.901)
55
+  - GoogleDataTransport (3.0.1)
56
+  - GoogleDataTransportCCTSupport (1.2.1):
57
+    - GoogleDataTransport (~> 3.0)
58
+    - nanopb (~> 0.3.901)
59
+  - GoogleUtilities/AppDelegateSwizzler (6.3.1):
46
     - GoogleUtilities/Environment
60
     - GoogleUtilities/Environment
47
     - GoogleUtilities/Logger
61
     - GoogleUtilities/Logger
48
     - GoogleUtilities/Network
62
     - GoogleUtilities/Network
49
-  - GoogleUtilities/Environment (5.5.0)
50
-  - GoogleUtilities/Logger (5.5.0):
63
+  - GoogleUtilities/Environment (6.3.1)
64
+  - GoogleUtilities/Logger (6.3.1):
51
     - GoogleUtilities/Environment
65
     - GoogleUtilities/Environment
52
-  - GoogleUtilities/MethodSwizzler (5.5.0):
66
+  - GoogleUtilities/MethodSwizzler (6.3.1):
53
     - GoogleUtilities/Logger
67
     - GoogleUtilities/Logger
54
-  - GoogleUtilities/Network (5.5.0):
68
+  - GoogleUtilities/Network (6.3.1):
55
     - GoogleUtilities/Logger
69
     - GoogleUtilities/Logger
56
     - "GoogleUtilities/NSData+zlib"
70
     - "GoogleUtilities/NSData+zlib"
57
     - GoogleUtilities/Reachability
71
     - GoogleUtilities/Reachability
58
-  - "GoogleUtilities/NSData+zlib (5.5.0)"
59
-  - GoogleUtilities/Reachability (5.5.0):
72
+  - "GoogleUtilities/NSData+zlib (6.3.1)"
73
+  - GoogleUtilities/Reachability (6.3.1):
60
     - GoogleUtilities/Logger
74
     - GoogleUtilities/Logger
61
-  - GoogleUtilities/UserDefaults (5.5.0):
75
+  - GoogleUtilities/UserDefaults (6.3.1):
62
     - GoogleUtilities/Logger
76
     - GoogleUtilities/Logger
63
-  - GTMSessionFetcher/Core (1.2.1)
64
-  - nanopb (0.3.901):
65
-    - nanopb/decode (= 0.3.901)
66
-    - nanopb/encode (= 0.3.901)
67
-  - nanopb/decode (0.3.901)
68
-  - nanopb/encode (0.3.901)
77
+  - GTMSessionFetcher/Core (1.3.0)
78
+  - nanopb (0.3.9011):
79
+    - nanopb/decode (= 0.3.9011)
80
+    - nanopb/encode (= 0.3.9011)
81
+  - nanopb/decode (0.3.9011)
82
+  - nanopb/encode (0.3.9011)
69
 
83
 
70
 DEPENDENCIES:
84
 DEPENDENCIES:
71
   - AWSCognitoIdentityProvider (~> 2.8.0)
85
   - AWSCognitoIdentityProvider (~> 2.8.0)
85
     - FirebaseAuth
99
     - FirebaseAuth
86
     - FirebaseAuthInterop
100
     - FirebaseAuthInterop
87
     - FirebaseCore
101
     - FirebaseCore
102
+    - FirebaseCoreDiagnostics
103
+    - FirebaseCoreDiagnosticsInterop
88
     - FirebaseInstanceID
104
     - FirebaseInstanceID
89
     - GoogleAppMeasurement
105
     - GoogleAppMeasurement
106
+    - GoogleDataTransport
107
+    - GoogleDataTransportCCTSupport
90
     - GoogleUtilities
108
     - GoogleUtilities
91
     - GTMSessionFetcher
109
     - GTMSessionFetcher
92
     - nanopb
110
     - nanopb
96
   AWSCognitoIdentityProviderASF: f94f1a502e72ef3d0a1de93e10bf7a79c8698118
114
   AWSCognitoIdentityProviderASF: f94f1a502e72ef3d0a1de93e10bf7a79c8698118
97
   AWSCore: 734b0d67c2c77f6edae9e5520431a37310ea4193
115
   AWSCore: 734b0d67c2c77f6edae9e5520431a37310ea4193
98
   AWSSNS: 42b39d6628bfb40bf5f9e3c6e4738ce68a323235
116
   AWSSNS: 42b39d6628bfb40bf5f9e3c6e4738ce68a323235
99
-  Firebase: c60d49e9c2630875a96207d15e2affb8364996d1
100
-  FirebaseAnalytics: fd72a26bf8dac84cefba2f0864366f718555a5b0
101
-  FirebaseAuth: cbb892a66baed025efc179372598941252acf853
117
+  Firebase: bc9cfc7a96c73268656d5aaab453ff1b4b530e0e
118
+  FirebaseAnalytics: 0e3ecff2c5d86070f7d4325e21f1edabfbd558dc
119
+  FirebaseAuth: b401a012cc33b04df3b52bb308b04e8766f2693e
102
   FirebaseAuthInterop: 0ffa57668be100582bb7643d4fcb7615496c41fc
120
   FirebaseAuthInterop: 0ffa57668be100582bb7643d4fcb7615496c41fc
103
-  FirebaseCore: 22a79a961c3951ef2f77b67bfbc99e454247b319
104
-  FirebaseInstanceID: cf488df2f4b79782f0e430b04a0e17c0aa7979b2
105
-  GoogleAppMeasurement: 1624046ab1bcc5e170061a56ef5679000b079c8e
106
-  GoogleUtilities: 6481e6318c5fcabaaa8513ef8120f329055d7c10
107
-  GTMSessionFetcher: 32aeca0aa144acea523e1c8e053089dec2cb98ca
108
-  nanopb: 2901f78ea1b7b4015c860c2fdd1ea2fee1a18d48
121
+  FirebaseCore: beeff42c07c30ea94702471d99db2089b594fbbd
122
+  FirebaseCoreDiagnostics: af29e43048607588c050889d19204f4d7b758c9f
123
+  FirebaseCoreDiagnosticsInterop: 6829da2b8d1fc795ff1bd99df751d3788035d2cb
124
+  FirebaseInstanceID: d0eafcd8bdbd3447cd694594734078c3e3e77d8b
125
+  GoogleAppMeasurement: 434cc7be25e71dc04b8d0e3079125127b330e84a
126
+  GoogleDataTransport: 166f9b9f82cbf60a204e8fe2daa9db3e3ec1fb15
127
+  GoogleDataTransportCCTSupport: f6ab1962e9dc05ab1fb938b795e5b310209edeec
128
+  GoogleUtilities: f895fde57977df4e0233edda0dbeac490e3703b6
129
+  GTMSessionFetcher: 43b8b64263023d4f32caa0b40f4c8bfa3c5f36d8
130
+  nanopb: 18003b5e52dab79db540fe93fe9579f399bd1ccd
109
 
131
 
110
 PODFILE CHECKSUM: b32d1d4808cf6b66bc130db9af762de0d62a6d2f
132
 PODFILE CHECKSUM: b32d1d4808cf6b66bc130db9af762de0d62a6d2f
111
 
133
 
112
-COCOAPODS: 1.6.1
134
+COCOAPODS: 1.7.4

+ 14
- 0
Pods/Firebase/CoreOnly/Sources/Firebase.h View File

1
+// Copyright 2019 Google
2
+//
3
+// Licensed under the Apache License, Version 2.0 (the "License");
4
+// you may not use this file except in compliance with the License.
5
+// You may obtain a copy of the License at
6
+//
7
+//      http://www.apache.org/licenses/LICENSE-2.0
8
+//
9
+// Unless required by applicable law or agreed to in writing, software
10
+// distributed under the License is distributed on an "AS IS" BASIS,
11
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+// See the License for the specific language governing permissions and
13
+// limitations under the License.
14
+
1
 #import <FirebaseCore/FirebaseCore.h>
15
 #import <FirebaseCore/FirebaseCore.h>
2
 
16
 
3
 #if !defined(__has_include)
17
 #if !defined(__has_include)

BIN
Pods/FirebaseAnalytics/Frameworks/FIRAnalyticsConnector.framework/FIRAnalyticsConnector View File


BIN
Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.framework/FirebaseAnalytics View File


+ 3
- 0
Pods/FirebaseAuth/Firebase/Auth/CHANGELOG.md View File

1
+# v6.3.0
2
+- [added] Added methods allowing developers to link and reauthenticate with federated providers. (#3971)
3
+
1
 # v6.2.3
4
 # v6.2.3
2
 - [fixed] Make sure the first valid auth domain is retrieved. (#3493)
5
 - [fixed] Make sure the first valid auth domain is retrieved. (#3493)
3
 - [fixed] Add assertion for Facebook generic IDP flow. (#3208)
6
 - [fixed] Add assertion for Facebook generic IDP flow. (#3208)

+ 8
- 0
Pods/FirebaseAuth/Firebase/Auth/Source/Public/FIRAuthErrors.h View File

321
      */
321
      */
322
     FIRAuthErrorCodeNullUser = 17067,
322
     FIRAuthErrorCodeNullUser = 17067,
323
 
323
 
324
+    /** Indicates that a Firebase Dynamic Link is not activated.
325
+     */
326
+    FIRAuthErrorCodeDynamicLinkNotActivated = 17068,
327
+
324
     /**
328
     /**
325
      * Represents the error code for when the given provider id for a web operation is invalid.
329
      * Represents the error code for when the given provider id for a web operation is invalid.
326
      */
330
      */
331
      */
335
      */
332
     FIRAuthErrorCodeInvalidDynamicLinkDomain = 17074,
336
     FIRAuthErrorCodeInvalidDynamicLinkDomain = 17074,
333
 
337
 
338
+    /** Indicates that the credential is rejected because it's misformed or mismatching.
339
+     */
340
+    FIRAuthErrorCodeRejectedCredential = 17075,
341
+
334
     /** Indicates that the GameKit framework is not linked prior to attempting Game Center signin.
342
     /** Indicates that the GameKit framework is not linked prior to attempting Game Center signin.
335
      */
343
      */
336
     FIRAuthErrorCodeGameKitNotLinked = 17076,
344
     FIRAuthErrorCodeGameKitNotLinked = 17076,

+ 33
- 0
Pods/FirebaseAuth/Firebase/Auth/Source/Public/FIRUser.h View File

24
 @class FIRPhoneAuthCredential;
24
 @class FIRPhoneAuthCredential;
25
 @class FIRUserProfileChangeRequest;
25
 @class FIRUserProfileChangeRequest;
26
 @class FIRUserMetadata;
26
 @class FIRUserMetadata;
27
+@protocol FIRAuthUIDelegate;
27
 
28
 
28
 NS_ASSUME_NONNULL_BEGIN
29
 NS_ASSUME_NONNULL_BEGIN
29
 
30
 
269
                          " Objective-C or reauthenticate(withCredential:completion:)"
270
                          " Objective-C or reauthenticate(withCredential:completion:)"
270
                          " for Swift instead.");
271
                          " for Swift instead.");
271
 
272
 
273
+/** @fn reauthenticateWithProvider:UIDelegate:completion:
274
+    @brief Renews the user's authentication using the provided auth provider instance.
275
+
276
+    @param provider An instance of an auth provider used to initiate the reauthenticate flow.
277
+    @param UIDelegate Optionally an instance of a class conforming to the FIRAuthUIDelegate
278
+        protocol, this is used for presenting the web context. If nil, a default FIRAuthUIDelegate
279
+        will be used.
280
+    @param completion Optionally; a block which is invoked when the reauthenticate flow finishes, or
281
+        is canceled. Invoked asynchronously on the main thread in the future.
282
+ */
283
+- (void)reauthenticateWithProvider:(id<FIRFederatedAuthProvider>)provider
284
+                        UIDelegate:(nullable id<FIRAuthUIDelegate>)UIDelegate
285
+                        completion:(nullable FIRAuthDataResultCallback)completion
286
+                        NS_SWIFT_NAME(reauthenticate(with:uiDelegate:completion:))
287
+                        API_AVAILABLE(ios(8.0));
288
+
272
 /** @fn getIDTokenResultWithCompletion:
289
 /** @fn getIDTokenResultWithCompletion:
273
     @brief Retrieves the Firebase authentication token, possibly refreshing it if it has expired.
290
     @brief Retrieves the Firebase authentication token, possibly refreshing it if it has expired.
274
 
291
 
359
 - (void)linkWithCredential:(FIRAuthCredential *)credential
376
 - (void)linkWithCredential:(FIRAuthCredential *)credential
360
                 completion:(nullable FIRAuthDataResultCallback)completion;
377
                 completion:(nullable FIRAuthDataResultCallback)completion;
361
 
378
 
379
+/** @fn linkWithProvider:UIDelegate:completion:
380
+    @brief link the user with the provided auth provider instance.
381
+
382
+    @param provider An instance of an auth provider used to initiate the link flow.
383
+    @param UIDelegate Optionally an instance of a class conforming to the FIRAuthUIDelegate
384
+        protocol, this is used for presenting the web context. If nil, a default FIRAuthUIDelegate
385
+        will be used.
386
+    @param completion Optionally; a block which is invoked when the link flow finishes, or
387
+        is canceled. Invoked asynchronously on the main thread in the future.
388
+ */
389
+- (void)linkWithProvider:(id<FIRFederatedAuthProvider>)provider
390
+              UIDelegate:(nullable id<FIRAuthUIDelegate>)UIDelegate
391
+              completion:(nullable FIRAuthDataResultCallback)completion
392
+              NS_SWIFT_NAME(link(with:uiDelegate:completion:))
393
+              API_AVAILABLE(ios(8.0));
394
+
362
 /** @fn unlinkFromProvider:completion:
395
 /** @fn unlinkFromProvider:completion:
363
     @brief Disassociates a user account from a third-party identity provider with this user.
396
     @brief Disassociates a user account from a third-party identity provider with this user.
364
 
397
 

+ 14
- 5
Pods/FirebaseAuth/README.md View File

3
 This repository contains a subset of the Firebase iOS SDK source. It currently
3
 This repository contains a subset of the Firebase iOS SDK source. It currently
4
 includes FirebaseCore, FirebaseABTesting, FirebaseAuth, FirebaseDatabase,
4
 includes FirebaseCore, FirebaseABTesting, FirebaseAuth, FirebaseDatabase,
5
 FirebaseFirestore, FirebaseFunctions, FirebaseInstanceID, FirebaseInAppMessaging,
5
 FirebaseFirestore, FirebaseFunctions, FirebaseInstanceID, FirebaseInAppMessaging,
6
-FirebaseInAppMessagingDisplay, FirebaseMessaging and FirebaseStorage.
6
+FirebaseInAppMessagingDisplay, FirebaseMessaging, FirebaseRemoteConfig, and
7
+FirebaseStorage.
7
 
8
 
8
 The repository also includes GoogleUtilities source. The
9
 The repository also includes GoogleUtilities source. The
9
 [GoogleUtilities](GoogleUtilities/README.md) pod is
10
 [GoogleUtilities](GoogleUtilities/README.md) pod is
80
 
81
 
81
 `pod gen Firebase{name here}.podspec --local-sources=./ --auto-open`
82
 `pod gen Firebase{name here}.podspec --local-sources=./ --auto-open`
82
 
83
 
84
+Note: If the CocoaPods cache is out of date, you may need to run
85
+`pod repo update` before the `pod gen` command.
86
+
83
 Firestore has a self contained Xcode project. See
87
 Firestore has a self contained Xcode project. See
84
 [Firestore/README.md](Firestore/README.md).
88
 [Firestore/README.md](Firestore/README.md).
85
 
89
 
98
 These commands will get the right versions:
102
 These commands will get the right versions:
99
 
103
 
100
 ```
104
 ```
101
-brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/773cb75d360b58f32048f5964038d09825a507c8/Formula/clang-format.rb
102
-brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/3dfea1004e0736754bbf49673cca8aaed8a94089/Formula/swiftformat.rb
105
+brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/e3496d9/Formula/clang-format.rb
106
+brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/7963c3d/Formula/swiftformat.rb
103
 ```
107
 ```
104
 
108
 
105
 Note: if you already have a newer version of these installed you may need to
109
 Note: if you already have a newer version of these installed you may need to
106
 `brew switch` to this version.
110
 `brew switch` to this version.
107
 
111
 
112
+To update this section, find the versions of clang-format and swiftformat.rb to
113
+match the versions in the CI failure logs
114
+[here](https://github.com/Homebrew/homebrew-core/tree/master/Formula).
115
+
108
 ### Running Unit Tests
116
 ### Running Unit Tests
109
 
117
 
110
 Select a scheme and press Command-u to build a component and run its unit tests.
118
 Select a scheme and press Command-u to build a component and run its unit tests.
179
 
187
 
180
 ### macOS and tvOS
188
 ### macOS and tvOS
181
 Thanks to contributions from the community, FirebaseABTesting, FirebaseAuth, FirebaseCore,
189
 Thanks to contributions from the community, FirebaseABTesting, FirebaseAuth, FirebaseCore,
182
-FirebaseDatabase, FirebaseMessaging,
183
-FirebaseFirestore, FirebaseFunctions and FirebaseStorage now compile, run unit tests, and work on
190
+FirebaseDatabase, FirebaseMessaging, FirebaseFirestore,
191
+FirebaseFunctions, FirebaseRemoteConfig, and FirebaseStorage now compile, run unit tests, and work on
184
 macOS and tvOS.
192
 macOS and tvOS.
185
 
193
 
186
 For tvOS, checkout the [Sample](Example/tvOSSample).
194
 For tvOS, checkout the [Sample](Example/tvOSSample).
202
 pod 'FirebaseFirestore'
210
 pod 'FirebaseFirestore'
203
 pod 'FirebaseFunctions'
211
 pod 'FirebaseFunctions'
204
 pod 'FirebaseMessaging'
212
 pod 'FirebaseMessaging'
213
+pod 'FirebaseRemoteConfig'
205
 pod 'FirebaseStorage'
214
 pod 'FirebaseStorage'
206
 ```
215
 ```
207
 
216
 

+ 4
- 0
Pods/FirebaseCore/Firebase/Core/FIRApp.m View File

191
     }
191
     }
192
 
192
 
193
     [FIRApp addAppToAppDictionary:app];
193
     [FIRApp addAppToAppDictionary:app];
194
+
195
+    // The FIRApp instance is ready to go, `sDefaultApp` is assigned, other SDKs are now ready to be
196
+    // instantiated.
197
+    [app.container instantiateEagerComponents];
194
     [FIRApp sendNotificationsToSDKs:app];
198
     [FIRApp sendNotificationsToSDKs:app];
195
   }
199
   }
196
 }
200
 }

+ 49
- 42
Pods/FirebaseCore/Firebase/Core/FIRComponentContainer.m View File

23
 
23
 
24
 NS_ASSUME_NONNULL_BEGIN
24
 NS_ASSUME_NONNULL_BEGIN
25
 
25
 
26
-@interface FIRComponentContainer () {
27
-  dispatch_queue_t _containerQueue;
28
-}
26
+@interface FIRComponentContainer ()
29
 
27
 
30
-/// The dictionary of components that are registered for a particular app. The key is an NSString
28
+/// The dictionary of components that are registered for a particular app. The key is an `NSString`
31
 /// of the protocol.
29
 /// of the protocol.
32
 @property(nonatomic, strong) NSMutableDictionary<NSString *, FIRComponentCreationBlock> *components;
30
 @property(nonatomic, strong) NSMutableDictionary<NSString *, FIRComponentCreationBlock> *components;
33
 
31
 
34
 /// Cached instances of components that requested to be cached.
32
 /// Cached instances of components that requested to be cached.
35
 @property(nonatomic, strong) NSMutableDictionary<NSString *, id> *cachedInstances;
33
 @property(nonatomic, strong) NSMutableDictionary<NSString *, id> *cachedInstances;
36
 
34
 
35
+/// Protocols of components that have requested to be eagerly instantiated.
36
+@property(nonatomic, strong, nullable) NSMutableArray<Protocol *> *eagerProtocolsToInstantiate;
37
+
37
 @end
38
 @end
38
 
39
 
39
 @implementation FIRComponentContainer
40
 @implementation FIRComponentContainer
69
     _app = app;
70
     _app = app;
70
     _cachedInstances = [NSMutableDictionary<NSString *, id> dictionary];
71
     _cachedInstances = [NSMutableDictionary<NSString *, id> dictionary];
71
     _components = [NSMutableDictionary<NSString *, FIRComponentCreationBlock> dictionary];
72
     _components = [NSMutableDictionary<NSString *, FIRComponentCreationBlock> dictionary];
72
-    _containerQueue =
73
-        dispatch_queue_create("com.google.FirebaseComponentContainer", DISPATCH_QUEUE_SERIAL);
74
 
73
 
75
     [self populateComponentsFromRegisteredClasses:allRegistrants forApp:app];
74
     [self populateComponentsFromRegisteredClasses:allRegistrants forApp:app];
76
   }
75
   }
78
 }
77
 }
79
 
78
 
80
 - (void)populateComponentsFromRegisteredClasses:(NSSet<Class> *)classes forApp:(FIRApp *)app {
79
 - (void)populateComponentsFromRegisteredClasses:(NSSet<Class> *)classes forApp:(FIRApp *)app {
80
+  // Keep track of any components that need to eagerly instantiate after all components are added.
81
+  self.eagerProtocolsToInstantiate = [[NSMutableArray alloc] init];
82
+
81
   // Loop through the verified component registrants and populate the components array.
83
   // Loop through the verified component registrants and populate the components array.
82
   for (Class<FIRLibrary> klass in classes) {
84
   for (Class<FIRLibrary> klass in classes) {
83
     // Loop through all the components being registered and store them as appropriate.
85
     // Loop through all the components being registered and store them as appropriate.
96
       // Store the creation block for later usage.
98
       // Store the creation block for later usage.
97
       self.components[protocolName] = component.creationBlock;
99
       self.components[protocolName] = component.creationBlock;
98
 
100
 
99
-      // Instantiate the instance if it has requested to be instantiated.
101
+      // Queue any protocols that should be eagerly instantiated. Don't instantiate them yet
102
+      // because they could depend on other components that haven't been added to the components
103
+      // array yet.
100
       BOOL shouldInstantiateEager =
104
       BOOL shouldInstantiateEager =
101
           (component.instantiationTiming == FIRInstantiationTimingAlwaysEager);
105
           (component.instantiationTiming == FIRInstantiationTimingAlwaysEager);
102
       BOOL shouldInstantiateDefaultEager =
106
       BOOL shouldInstantiateDefaultEager =
103
           (component.instantiationTiming == FIRInstantiationTimingEagerInDefaultApp &&
107
           (component.instantiationTiming == FIRInstantiationTimingEagerInDefaultApp &&
104
            [app isDefaultApp]);
108
            [app isDefaultApp]);
105
       if (shouldInstantiateEager || shouldInstantiateDefaultEager) {
109
       if (shouldInstantiateEager || shouldInstantiateDefaultEager) {
106
-        [self instantiateInstanceForProtocol:component.protocol withBlock:component.creationBlock];
110
+        [self.eagerProtocolsToInstantiate addObject:component.protocol];
107
       }
111
       }
108
     }
112
     }
109
   }
113
   }
111
 
115
 
112
 #pragma mark - Instance Creation
116
 #pragma mark - Instance Creation
113
 
117
 
118
+- (void)instantiateEagerComponents {
119
+  // After all components are registered, instantiate the ones that are requesting eager
120
+  // instantiation.
121
+  @synchronized(self) {
122
+    for (Protocol *protocol in self.eagerProtocolsToInstantiate) {
123
+      // Get an instance for the protocol, which will instantiate it since it couldn't have been
124
+      // cached yet. Ignore the instance coming back since we don't need it.
125
+      __unused id unusedInstance = [self instanceForProtocol:protocol];
126
+    }
127
+
128
+    // All eager instantiation is complete, clear the stored property now.
129
+    self.eagerProtocolsToInstantiate = nil;
130
+  }
131
+}
132
+
114
 /// Instantiate an instance of a class that conforms to the specified protocol.
133
 /// Instantiate an instance of a class that conforms to the specified protocol.
115
 /// This will:
134
 /// This will:
116
 ///   - Call the block to create an instance if possible,
135
 ///   - Call the block to create an instance if possible,
117
 ///   - Validate that the instance returned conforms to the protocol it claims to,
136
 ///   - Validate that the instance returned conforms to the protocol it claims to,
118
 ///   - Cache the instance if the block requests it
137
 ///   - Cache the instance if the block requests it
138
+///
139
+/// Note that this method assumes the caller already has @sychronized on self.
119
 - (nullable id)instantiateInstanceForProtocol:(Protocol *)protocol
140
 - (nullable id)instantiateInstanceForProtocol:(Protocol *)protocol
120
                                     withBlock:(FIRComponentCreationBlock)creationBlock {
141
                                     withBlock:(FIRComponentCreationBlock)creationBlock {
121
   if (!creationBlock) {
142
   if (!creationBlock) {
140
 
161
 
141
   // The instance is ready to be returned, but check if it should be cached first before returning.
162
   // The instance is ready to be returned, but check if it should be cached first before returning.
142
   if (shouldCache) {
163
   if (shouldCache) {
143
-    dispatch_sync(_containerQueue, ^{
144
-      self.cachedInstances[protocolName] = instance;
145
-    });
164
+    self.cachedInstances[protocolName] = instance;
146
   }
165
   }
147
 
166
 
148
   return instance;
167
   return instance;
153
 - (nullable id)instanceForProtocol:(Protocol *)protocol {
172
 - (nullable id)instanceForProtocol:(Protocol *)protocol {
154
   // Check if there is a cached instance, and return it if so.
173
   // Check if there is a cached instance, and return it if so.
155
   NSString *protocolName = NSStringFromProtocol(protocol);
174
   NSString *protocolName = NSStringFromProtocol(protocol);
156
-  __block id cachedInstance;
157
-  dispatch_sync(_containerQueue, ^{
158
-    cachedInstance = self.cachedInstances[protocolName];
159
-  });
160
 
175
 
161
-  if (cachedInstance) {
162
-    return cachedInstance;
176
+  id cachedInstance;
177
+  @synchronized(self) {
178
+    cachedInstance = self.cachedInstances[protocolName];
179
+    if (!cachedInstance) {
180
+      // Use the creation block to instantiate an instance and return it.
181
+      FIRComponentCreationBlock creationBlock = self.components[protocolName];
182
+      cachedInstance = [self instantiateInstanceForProtocol:protocol withBlock:creationBlock];
183
+    }
163
   }
184
   }
164
-
165
-  // Use the creation block to instantiate an instance and return it.
166
-  FIRComponentCreationBlock creationBlock = self.components[protocolName];
167
-  return [self instantiateInstanceForProtocol:protocol withBlock:creationBlock];
185
+  return cachedInstance;
168
 }
186
 }
169
 
187
 
170
 #pragma mark - Lifecycle
188
 #pragma mark - Lifecycle
171
 
189
 
172
 - (void)removeAllCachedInstances {
190
 - (void)removeAllCachedInstances {
173
-  // Loop through the cache and notify each instance that is a maintainer to clean up after itself.
174
-  // Design note: we're getting a copy here, unlocking the cached instances, iterating over the
175
-  // copy, then locking and removing all cached instances. A race condition *could* exist where a
176
-  // new cached instance is created between the copy and the removal, but the chances are slim and
177
-  // side-effects are significantly smaller than including the entire loop in the `dispatch_sync`
178
-  // block (access to the cache from inside the block would deadlock and crash).
179
-  __block NSDictionary<NSString *, id> *instancesCopy;
180
-  dispatch_sync(_containerQueue, ^{
181
-    instancesCopy = [self.cachedInstances copy];
182
-  });
183
-
184
-  for (id instance in instancesCopy.allValues) {
185
-    if ([instance conformsToProtocol:@protocol(FIRComponentLifecycleMaintainer)] &&
186
-        [instance respondsToSelector:@selector(appWillBeDeleted:)]) {
187
-      [instance appWillBeDeleted:self.app];
191
+  @synchronized(self) {
192
+    // Loop through the cache and notify each instance that is a maintainer to clean up after
193
+    // itself.
194
+    for (id instance in self.cachedInstances.allValues) {
195
+      if ([instance conformsToProtocol:@protocol(FIRComponentLifecycleMaintainer)] &&
196
+          [instance respondsToSelector:@selector(appWillBeDeleted:)]) {
197
+        [instance appWillBeDeleted:self.app];
198
+      }
188
     }
199
     }
189
-  }
190
-
191
-  instancesCopy = nil;
192
 
200
 
193
-  // Empty the cache.
194
-  dispatch_sync(_containerQueue, ^{
201
+    // Empty the cache.
195
     [self.cachedInstances removeAllObjects];
202
     [self.cachedInstances removeAllObjects];
196
-  });
203
+  }
197
 }
204
 }
198
 
205
 
199
 @end
206
 @end

+ 5
- 2
Pods/FirebaseCore/Firebase/Core/Private/FIRComponentContainerInternal.h View File

24
 
24
 
25
 @interface FIRComponentContainer (Private)
25
 @interface FIRComponentContainer (Private)
26
 
26
 
27
-/// Initializes a contain for a given app. This should only be called by the app itself.
27
+/// Initializes a container for a given app. This should only be called by the app itself.
28
 - (instancetype)initWithApp:(FIRApp *)app;
28
 - (instancetype)initWithApp:(FIRApp *)app;
29
 
29
 
30
 /// Retrieves an instance that conforms to the specified protocol. This will return `nil` if the
30
 /// Retrieves an instance that conforms to the specified protocol. This will return `nil` if the
31
-/// protocol wasn't registered, or if the instance couldn't instantiate for the provided app.
31
+/// protocol wasn't registered, or if the instance couldn't be instantiated for the provided app.
32
 - (nullable id)instanceForProtocol:(Protocol *)protocol NS_SWIFT_NAME(instance(for:));
32
 - (nullable id)instanceForProtocol:(Protocol *)protocol NS_SWIFT_NAME(instance(for:));
33
 
33
 
34
+/// Instantiates all the components that have registered as "eager" after initialization.
35
+- (void)instantiateEagerComponents;
36
+
34
 /// Remove all of the cached instances stored and allow them to clean up after themselves.
37
 /// Remove all of the cached instances stored and allow them to clean up after themselves.
35
 - (void)removeAllCachedInstances;
38
 - (void)removeAllCachedInstances;
36
 
39
 

+ 3
- 2
Pods/FirebaseCore/README.md View File

81
 
81
 
82
 `pod gen Firebase{name here}.podspec --local-sources=./ --auto-open`
82
 `pod gen Firebase{name here}.podspec --local-sources=./ --auto-open`
83
 
83
 
84
+Note: If the CocoaPods cache is out of date, you may need to run
85
+`pod repo update` before the `pod gen` command.
86
+
84
 Firestore has a self contained Xcode project. See
87
 Firestore has a self contained Xcode project. See
85
 [Firestore/README.md](Firestore/README.md).
88
 [Firestore/README.md](Firestore/README.md).
86
 
89
 
195
 may be some changes where the SDK no longer works as expected on macOS or tvOS. If you encounter
198
 may be some changes where the SDK no longer works as expected on macOS or tvOS. If you encounter
196
 this, please [file an issue](https://github.com/firebase/firebase-ios-sdk/issues).
199
 this, please [file an issue](https://github.com/firebase/firebase-ios-sdk/issues).
197
 
200
 
198
-Note that the Firebase pod is not available for macOS and tvOS.
199
-
200
 To install, add a subset of the following to the Podfile:
201
 To install, add a subset of the following to the Podfile:
201
 
202
 
202
 ```
203
 ```

+ 1
- 1
Pods/FirebaseInstanceID/Firebase/InstanceID/FIRIMessageCode.h View File

55
   kFIRInstanceIDMessageCodeAuthServiceCheckinInProgress = 5004,
55
   kFIRInstanceIDMessageCodeAuthServiceCheckinInProgress = 5004,
56
 
56
 
57
   // FIRInstanceIDBackupExcludedPlist.m
57
   // FIRInstanceIDBackupExcludedPlist.m
58
+  // Do NOT USE 6003
58
   kFIRInstanceIDMessageCodeBackupExcludedPlist000 = 6000,
59
   kFIRInstanceIDMessageCodeBackupExcludedPlist000 = 6000,
59
   kFIRInstanceIDMessageCodeBackupExcludedPlist001 = 6001,
60
   kFIRInstanceIDMessageCodeBackupExcludedPlist001 = 6001,
60
   kFIRInstanceIDMessageCodeBackupExcludedPlist002 = 6002,
61
   kFIRInstanceIDMessageCodeBackupExcludedPlist002 = 6002,
61
-  kFIRInstanceIDMessageCodeBackupExcludedPlistInvalidPlistEnum = 6003,
62
   // FIRInstanceIDCheckinService.m
62
   // FIRInstanceIDCheckinService.m
63
   kFIRInstanceIDMessageCodeService000 = 7000,
63
   kFIRInstanceIDMessageCodeService000 = 7000,
64
   kFIRInstanceIDMessageCodeService001 = 7001,
64
   kFIRInstanceIDMessageCodeService001 = 7001,

+ 29
- 57
Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceID.m View File

22
 #import <FirebaseCore/FIRLibrary.h>
22
 #import <FirebaseCore/FIRLibrary.h>
23
 #import <FirebaseCore/FIROptions.h>
23
 #import <FirebaseCore/FIROptions.h>
24
 #import <GoogleUtilities/GULAppEnvironmentUtil.h>
24
 #import <GoogleUtilities/GULAppEnvironmentUtil.h>
25
+#import <GoogleUtilities/GULUserDefaults.h>
25
 #import "FIRInstanceID+Private.h"
26
 #import "FIRInstanceID+Private.h"
26
 #import "FIRInstanceIDAuthService.h"
27
 #import "FIRInstanceIDAuthService.h"
27
 #import "FIRInstanceIDCheckinPreferences.h"
28
 #import "FIRInstanceIDCheckinPreferences.h"
67
 static NSString *const kAPSEnvironmentDevelopmentValue = @"development";
68
 static NSString *const kAPSEnvironmentDevelopmentValue = @"development";
68
 /// FIRMessaging selector that returns the current FIRMessaging auto init
69
 /// FIRMessaging selector that returns the current FIRMessaging auto init
69
 /// enabled flag.
70
 /// enabled flag.
70
-static NSString *const kFIRInstanceIDFCMSelectorAutoInitEnabled = @"isAutoInitEnabled";
71
-static NSString *const kFIRInstanceIDFCMSelectorInstance = @"messaging";
71
+static NSString *const kFIRInstanceIDFCMSelectorAutoInitEnabled =
72
+    @"isAutoInitEnabledWithUserDefaults:";
72
 
73
 
73
 static NSString *const kFIRInstanceIDAPNSTokenType = @"APNSTokenType";
74
 static NSString *const kFIRInstanceIDAPNSTokenType = @"APNSTokenType";
74
 static NSString *const kFIRIIDAppReadyToConfigureSDKNotification =
75
 static NSString *const kFIRIIDAppReadyToConfigureSDKNotification =
77
 static NSString *const kFIRIIDErrorDomain = @"com.firebase.instanceid";
78
 static NSString *const kFIRIIDErrorDomain = @"com.firebase.instanceid";
78
 static NSString *const kFIRIIDServiceInstanceID = @"InstanceID";
79
 static NSString *const kFIRIIDServiceInstanceID = @"InstanceID";
79
 
80
 
80
-static NSInteger const kFIRIIDErrorCodeInstanceIDFailed = -121;
81
-
82
 typedef void (^FIRInstanceIDKeyPairHandler)(FIRInstanceIDKeyPair *keyPair, NSError *error);
81
 typedef void (^FIRInstanceIDKeyPairHandler)(FIRInstanceIDKeyPair *keyPair, NSError *error);
83
 
82
 
84
 /**
83
 /**
639
 + (nonnull NSArray<FIRComponent *> *)componentsToRegister {
638
 + (nonnull NSArray<FIRComponent *> *)componentsToRegister {
640
   FIRComponentCreationBlock creationBlock =
639
   FIRComponentCreationBlock creationBlock =
641
       ^id _Nullable(FIRComponentContainer *container, BOOL *isCacheable) {
640
       ^id _Nullable(FIRComponentContainer *container, BOOL *isCacheable) {
641
+    // InstanceID only works with the default app.
642
+    if (!container.app.isDefaultApp) {
643
+      // Only configure for the default FIRApp.
644
+      FIRInstanceIDLoggerDebug(kFIRInstanceIDMessageCodeFIRApp002,
645
+                               @"Firebase Instance ID only works with the default app.");
646
+      return nil;
647
+    }
648
+
642
     // Ensure it's cached so it returns the same instance every time instanceID is called.
649
     // Ensure it's cached so it returns the same instance every time instanceID is called.
643
     *isCacheable = YES;
650
     *isCacheable = YES;
644
     FIRInstanceID *instanceID = [[FIRInstanceID alloc] initPrivately];
651
     FIRInstanceID *instanceID = [[FIRInstanceID alloc] initPrivately];
645
     [instanceID start];
652
     [instanceID start];
653
+    [instanceID configureInstanceIDWithOptions:container.app.options];
646
     return instanceID;
654
     return instanceID;
647
   };
655
   };
648
   FIRComponent *instanceIDProvider =
656
   FIRComponent *instanceIDProvider =
649
       [FIRComponent componentWithProtocol:@protocol(FIRInstanceIDInstanceProvider)
657
       [FIRComponent componentWithProtocol:@protocol(FIRInstanceIDInstanceProvider)
650
-                      instantiationTiming:FIRInstantiationTimingLazy
658
+                      instantiationTiming:FIRInstantiationTimingEagerInDefaultApp
651
                              dependencies:@[]
659
                              dependencies:@[]
652
                             creationBlock:creationBlock];
660
                             creationBlock:creationBlock];
653
   return @[ instanceIDProvider ];
661
   return @[ instanceIDProvider ];
654
 }
662
 }
655
 
663
 
656
-+ (void)configureWithApp:(FIRApp *)app {
657
-  if (!app.isDefaultApp) {
658
-    // Only configure for the default FIRApp.
659
-    FIRInstanceIDLoggerDebug(kFIRInstanceIDMessageCodeFIRApp002,
660
-                             @"Firebase Instance ID only works with the default app.");
661
-    return;
662
-  }
663
-  [[FIRInstanceID instanceID] configureInstanceIDWithOptions:app.options app:app];
664
-}
665
-
666
-- (void)configureInstanceIDWithOptions:(FIROptions *)options app:(FIRApp *)firApp {
664
+- (void)configureInstanceIDWithOptions:(FIROptions *)options {
667
   NSString *GCMSenderID = options.GCMSenderID;
665
   NSString *GCMSenderID = options.GCMSenderID;
668
   if (!GCMSenderID.length) {
666
   if (!GCMSenderID.length) {
669
     FIRInstanceIDLoggerError(kFIRInstanceIDMessageCodeFIRApp000,
667
     FIRInstanceIDLoggerError(kFIRInstanceIDMessageCodeFIRApp000,
670
                              @"Firebase not set up correctly, nil or empty senderID.");
668
                              @"Firebase not set up correctly, nil or empty senderID.");
671
-    [FIRInstanceID exitWithReason:@"GCM_SENDER_ID must not be nil or empty." forFirebaseApp:firApp];
672
-    return;
669
+    [NSException raise:kFIRIIDErrorDomain
670
+                format:@"Could not configure Firebase InstanceID. GCMSenderID must not be nil or "
671
+                       @"empty."];
673
   }
672
   }
674
 
673
 
675
   self.fcmSenderID = GCMSenderID;
674
   self.fcmSenderID = GCMSenderID;
676
-  self.firebaseAppID = firApp.options.googleAppID;
675
+  self.firebaseAppID = options.googleAppID;
677
 
676
 
678
   // FCM generates a FCM token during app start for sending push notification to device.
677
   // FCM generates a FCM token during app start for sending push notification to device.
679
   // This is not needed for app extension.
678
   // This is not needed for app extension.
682
   }
681
   }
683
 }
682
 }
684
 
683
 
685
-+ (NSError *)configureErrorWithReason:(nonnull NSString *)reason {
686
-  NSString *description =
687
-      [NSString stringWithFormat:@"Configuration failed for service %@.", kFIRIIDServiceInstanceID];
688
-  if (!reason.length) {
689
-    reason = @"Unknown reason";
690
-  }
691
-
692
-  NSDictionary *userInfo =
693
-      @{NSLocalizedDescriptionKey : description, NSLocalizedFailureReasonErrorKey : reason};
694
-
695
-  return [NSError errorWithDomain:kFIRIIDErrorDomain
696
-                             code:kFIRIIDErrorCodeInstanceIDFailed
697
-                         userInfo:userInfo];
698
-}
699
-
700
-+ (void)exitWithReason:(nonnull NSString *)reason forFirebaseApp:(FIRApp *)firebaseApp {
701
-  [NSException raise:kFIRIIDErrorDomain
702
-              format:@"Could not configure Firebase InstanceID. %@", reason];
703
-}
704
-
705
 // This is used to start any operations when we receive FirebaseSDK setup notification
684
 // This is used to start any operations when we receive FirebaseSDK setup notification
706
 // from FIRCore.
685
 // from FIRCore.
707
 - (void)didCompleteConfigure {
686
 - (void)didCompleteConfigure {
709
   // When there is a cached token, do the token refresh.
688
   // When there is a cached token, do the token refresh.
710
   if (cachedToken) {
689
   if (cachedToken) {
711
     // Clean up expired tokens by checking the token refresh policy.
690
     // Clean up expired tokens by checking the token refresh policy.
712
-    if ([self.tokenManager checkForTokenRefreshPolicy]) {
691
+    NSError *error;
692
+    NSString *cachedIID = [self.keyPairStore appIdentityWithError:&error];
693
+    if ([self.tokenManager checkTokenRefreshPolicyWithIID:cachedIID]) {
713
       // Default token is expired, fetch default token from server.
694
       // Default token is expired, fetch default token from server.
714
       [self defaultTokenWithHandler:nil];
695
       [self defaultTokenWithHandler:nil];
715
     }
696
     }
736
     return NO;
717
     return NO;
737
   }
718
   }
738
 
719
 
739
-  // Messaging doesn't have the singleton method, auto init should be enabled since FCM exists.
740
-  SEL instanceSelector = NSSelectorFromString(kFIRInstanceIDFCMSelectorInstance);
741
-  if (![messagingClass respondsToSelector:instanceSelector]) {
742
-    return YES;
743
-  }
744
-
745
-  // Get FIRMessaging shared instance.
746
-  IMP messagingInstanceIMP = [messagingClass methodForSelector:instanceSelector];
747
-  id (*getMessagingInstance)(id, SEL) = (void *)messagingInstanceIMP;
748
-  id messagingInstance = getMessagingInstance(messagingClass, instanceSelector);
749
-
750
-  // Messaging doesn't have the property, auto init should be enabled since FCM exists.
720
+  // Messaging doesn't have the class method, auto init should be enabled since FCM exists.
751
   SEL autoInitSelector = NSSelectorFromString(kFIRInstanceIDFCMSelectorAutoInitEnabled);
721
   SEL autoInitSelector = NSSelectorFromString(kFIRInstanceIDFCMSelectorAutoInitEnabled);
752
-  if (![messagingInstance respondsToSelector:autoInitSelector]) {
722
+  if (![messagingClass respondsToSelector:autoInitSelector]) {
753
     return YES;
723
     return YES;
754
   }
724
   }
755
 
725
 
756
-  // Get autoInitEnabled method.
757
-  IMP isAutoInitEnabledIMP = [messagingInstance methodForSelector:autoInitSelector];
758
-  BOOL (*isAutoInitEnabled)(id, SEL) = (BOOL(*)(id, SEL))isAutoInitEnabledIMP;
726
+  // Get the autoInitEnabled class method.
727
+  IMP isAutoInitEnabledIMP = [messagingClass methodForSelector:autoInitSelector];
728
+  BOOL(*isAutoInitEnabled)
729
+  (Class, SEL, GULUserDefaults *) = (BOOL(*)(id, SEL, GULUserDefaults *))isAutoInitEnabledIMP;
759
 
730
 
760
   // Check FCM's isAutoInitEnabled property.
731
   // Check FCM's isAutoInitEnabled property.
761
-  return isAutoInitEnabled(messagingInstance, autoInitSelector);
732
+  return isAutoInitEnabled(messagingClass, autoInitSelector,
733
+                           [GULUserDefaults standardUserDefaults]);
762
 }
734
 }
763
 
735
 
764
 // Actually makes InstanceID instantiate both the IID and Token-related subsystems.
736
 // Actually makes InstanceID instantiate both the IID and Token-related subsystems.

+ 10
- 95
Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDBackupExcludedPlist.m View File

18
 
18
 
19
 #import "FIRInstanceIDLogger.h"
19
 #import "FIRInstanceIDLogger.h"
20
 
20
 
21
-typedef enum : NSUInteger {
22
-  FIRInstanceIDPlistDirectoryUnknown,
23
-  FIRInstanceIDPlistDirectoryDocuments,
24
-  FIRInstanceIDPlistDirectoryApplicationSupport,
25
-} FIRInstanceIDPlistDirectory;
26
-
27
 @interface FIRInstanceIDBackupExcludedPlist ()
21
 @interface FIRInstanceIDBackupExcludedPlist ()
28
 
22
 
29
 @property(nonatomic, readwrite, copy) NSString *fileName;
23
 @property(nonatomic, readwrite, copy) NSString *fileName;
30
 @property(nonatomic, readwrite, copy) NSString *subDirectoryName;
24
 @property(nonatomic, readwrite, copy) NSString *subDirectoryName;
31
-@property(nonatomic, readwrite, assign) BOOL fileInStandardDirectory;
32
-
33
 @property(nonatomic, readwrite, strong) NSDictionary *cachedPlistContents;
25
 @property(nonatomic, readwrite, strong) NSDictionary *cachedPlistContents;
34
 
26
 
35
 @end
27
 @end
41
   if (self) {
33
   if (self) {
42
     _fileName = [fileName copy];
34
     _fileName = [fileName copy];
43
     _subDirectoryName = [subDirectory copy];
35
     _subDirectoryName = [subDirectory copy];
44
-#if TARGET_OS_IOS
45
-    _fileInStandardDirectory = [self moveToApplicationSupportSubDirectory:subDirectory];
46
-#else
47
-    // For tvOS and macOS, we never store the content in document folder, so
48
-    // the migration is unnecessary.
49
-    _fileInStandardDirectory = YES;
50
-#endif
51
   }
36
   }
52
   return self;
37
   return self;
53
 }
38
 }
54
 
39
 
55
 - (BOOL)writeDictionary:(NSDictionary *)dict error:(NSError **)error {
40
 - (BOOL)writeDictionary:(NSDictionary *)dict error:(NSError **)error {
56
-  NSString *path = [self plistPathInDirectory:[self plistDirectory]];
41
+  NSString *path = [self plistPathInDirectory];
57
   if (![dict writeToFile:path atomically:YES]) {
42
   if (![dict writeToFile:path atomically:YES]) {
58
     FIRInstanceIDLoggerError(kFIRInstanceIDMessageCodeBackupExcludedPlist000,
43
     FIRInstanceIDLoggerError(kFIRInstanceIDMessageCodeBackupExcludedPlist000,
59
                              @"Failed to write to %@.plist", self.fileName);
44
                              @"Failed to write to %@.plist", self.fileName);
85
 
70
 
86
 - (BOOL)deleteFile:(NSError **)error {
71
 - (BOOL)deleteFile:(NSError **)error {
87
   BOOL success = YES;
72
   BOOL success = YES;
88
-  NSString *path = [self plistPathInDirectory:[self plistDirectory]];
73
+  NSString *path = [self plistPathInDirectory];
89
   if ([[NSFileManager defaultManager] fileExistsAtPath:path]) {
74
   if ([[NSFileManager defaultManager] fileExistsAtPath:path]) {
90
     success = [[NSFileManager defaultManager] removeItemAtPath:path error:error];
75
     success = [[NSFileManager defaultManager] removeItemAtPath:path error:error];
91
   }
76
   }
96
 
81
 
97
 - (NSDictionary *)contentAsDictionary {
82
 - (NSDictionary *)contentAsDictionary {
98
   if (!self.cachedPlistContents) {
83
   if (!self.cachedPlistContents) {
99
-    NSString *path = [self plistPathInDirectory:[self plistDirectory]];
84
+    NSString *path = [self plistPathInDirectory];
100
     if ([[NSFileManager defaultManager] fileExistsAtPath:path]) {
85
     if ([[NSFileManager defaultManager] fileExistsAtPath:path]) {
101
       self.cachedPlistContents = [[NSDictionary alloc] initWithContentsOfFile:path];
86
       self.cachedPlistContents = [[NSDictionary alloc] initWithContentsOfFile:path];
102
     }
87
     }
104
   return self.cachedPlistContents;
89
   return self.cachedPlistContents;
105
 }
90
 }
106
 
91
 
107
-- (BOOL)moveToApplicationSupportSubDirectory:(NSString *)subDirectoryName {
108
-  NSArray *directoryPaths =
109
-      NSSearchPathForDirectoriesInDomains([self supportedDirectory], NSUserDomainMask, YES);
110
-  // This only going to happen inside iOS so it is an applicationSupportDirectory.
111
-  NSString *applicationSupportDirPath = directoryPaths.lastObject;
112
-  NSArray *components = @[ applicationSupportDirPath, subDirectoryName ];
113
-  NSString *subDirectoryPath = [NSString pathWithComponents:components];
114
-  BOOL hasSubDirectory;
115
-  if (![[NSFileManager defaultManager] fileExistsAtPath:subDirectoryPath
116
-                                            isDirectory:&hasSubDirectory]) {
117
-    // Cannot move to non-existent directory
118
-    return NO;
119
-  }
120
-
121
-  if ([self doesFileExistInDirectory:FIRInstanceIDPlistDirectoryDocuments]) {
122
-    NSString *oldPlistPath = [self plistPathInDirectory:FIRInstanceIDPlistDirectoryDocuments];
123
-    NSString *newPlistPath =
124
-        [self plistPathInDirectory:FIRInstanceIDPlistDirectoryApplicationSupport];
125
-    if ([self doesFileExistInDirectory:FIRInstanceIDPlistDirectoryApplicationSupport]) {
126
-      // File exists in both Documents and ApplicationSupport
127
-      return NO;
128
-    }
129
-    NSError *moveError;
130
-    if (![[NSFileManager defaultManager] moveItemAtPath:oldPlistPath
131
-                                                 toPath:newPlistPath
132
-                                                  error:&moveError]) {
133
-      FIRInstanceIDLoggerError(kFIRInstanceIDMessageCodeBackupExcludedPlist002,
134
-                               @"Failed to move file %@ from %@ to %@. Error: %@", self.fileName,
135
-                               oldPlistPath, newPlistPath, moveError);
136
-      return NO;
137
-    }
138
-  }
139
-  // We moved the file if it existed, otherwise we didn't need to do anything
140
-  return YES;
141
-}
142
-
143
 - (BOOL)doesFileExist {
92
 - (BOOL)doesFileExist {
144
-  return [self doesFileExistInDirectory:[self plistDirectory]];
93
+  NSString *path = [self plistPathInDirectory];
94
+  return [[NSFileManager defaultManager] fileExistsAtPath:path];
145
 }
95
 }
146
 
96
 
147
 #pragma mark - Private
97
 #pragma mark - Private
148
 
98
 
149
-- (FIRInstanceIDPlistDirectory)plistDirectory {
150
-  if (_fileInStandardDirectory) {
151
-    return FIRInstanceIDPlistDirectoryApplicationSupport;
152
-  } else {
153
-    return FIRInstanceIDPlistDirectoryDocuments;
154
-  };
155
-}
156
-
157
-- (NSString *)plistPathInDirectory:(FIRInstanceIDPlistDirectory)directory {
158
-  return [self pathWithName:self.fileName inDirectory:directory];
159
-}
160
-
161
-- (NSString *)pathWithName:(NSString *)plistName
162
-               inDirectory:(FIRInstanceIDPlistDirectory)directory {
99
+- (NSString *)plistPathInDirectory {
163
   NSArray *directoryPaths;
100
   NSArray *directoryPaths;
164
-  NSArray *components = @[];
165
-  NSString *plistNameWithExtension = [NSString stringWithFormat:@"%@.plist", plistName];
166
-  switch (directory) {
167
-    case FIRInstanceIDPlistDirectoryDocuments:
168
-      directoryPaths =
169
-          NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
170
-      components = @[ directoryPaths.lastObject, plistNameWithExtension ];
171
-      break;
172
-
173
-    case FIRInstanceIDPlistDirectoryApplicationSupport:
174
-      directoryPaths =
175
-          NSSearchPathForDirectoriesInDomains([self supportedDirectory], NSUserDomainMask, YES);
176
-      components = @[ directoryPaths.lastObject, _subDirectoryName, plistNameWithExtension ];
177
-      break;
178
-
179
-    default:
180
-      FIRInstanceIDLoggerError(kFIRInstanceIDMessageCodeBackupExcludedPlistInvalidPlistEnum,
181
-                               @"Invalid plist directory type: %lu", (unsigned long)directory);
182
-      NSAssert(NO, @"Invalid plist directory type: %lu", (unsigned long)directory);
183
-      break;
184
-  }
101
+  NSString *plistNameWithExtension = [NSString stringWithFormat:@"%@.plist", self.fileName];
102
+  directoryPaths =
103
+      NSSearchPathForDirectoriesInDomains([self supportedDirectory], NSUserDomainMask, YES);
104
+  NSArray *components = @[ directoryPaths.lastObject, _subDirectoryName, plistNameWithExtension ];
185
 
105
 
186
   return [NSString pathWithComponents:components];
106
   return [NSString pathWithComponents:components];
187
 }
107
 }
188
 
108
 
189
-- (BOOL)doesFileExistInDirectory:(FIRInstanceIDPlistDirectory)directory {
190
-  NSString *path = [self plistPathInDirectory:directory];
191
-  return [[NSFileManager defaultManager] fileExistsAtPath:path];
192
-}
193
-
194
 - (NSSearchPathDirectory)supportedDirectory {
109
 - (NSSearchPathDirectory)supportedDirectory {
195
 #if TARGET_OS_TV
110
 #if TARGET_OS_TV
196
   return NSCachesDirectory;
111
   return NSCachesDirectory;

+ 2
- 1
Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDTokenManager.h View File

121
 /**
121
 /**
122
  *  Invalidate any cached tokens, if the app version has changed since last launch or if the token
122
  *  Invalidate any cached tokens, if the app version has changed since last launch or if the token
123
  *  is cached for more than 7 days.
123
  *  is cached for more than 7 days.
124
+ *  @param IID The cached instanceID, check if token is prefixed by such IID.
124
  *
125
  *
125
  *  @return Whether we should fetch default token from server.
126
  *  @return Whether we should fetch default token from server.
126
  *
127
  *
127
  *  @discussion This should safely be called prior to any tokens being retrieved from
128
  *  @discussion This should safely be called prior to any tokens being retrieved from
128
  *  the cache or being fetched from the network.
129
  *  the cache or being fetched from the network.
129
  */
130
  */
130
-- (BOOL)checkForTokenRefreshPolicy;
131
+- (BOOL)checkTokenRefreshPolicyWithIID:(NSString *)IID;
131
 
132
 
132
 /**
133
 /**
133
  *  Upon being provided with different APNs or sandbox, any locally cached tokens
134
  *  Upon being provided with different APNs or sandbox, any locally cached tokens

+ 3
- 3
Pods/FirebaseInstanceID/Firebase/InstanceID/FIRInstanceIDTokenManager.m View File

273
 }
273
 }
274
 
274
 
275
 #pragma mark - Invalidating Cached Tokens
275
 #pragma mark - Invalidating Cached Tokens
276
-- (BOOL)checkForTokenRefreshPolicy {
276
+- (BOOL)checkTokenRefreshPolicyWithIID:(NSString *)IID {
277
   // We know at least one cached token exists.
277
   // We know at least one cached token exists.
278
   BOOL shouldFetchDefaultToken = NO;
278
   BOOL shouldFetchDefaultToken = NO;
279
   NSArray<FIRInstanceIDTokenInfo *> *tokenInfos = [self.instanceIDStore cachedTokenInfos];
279
   NSArray<FIRInstanceIDTokenInfo *> *tokenInfos = [self.instanceIDStore cachedTokenInfos];
282
       [NSMutableArray arrayWithCapacity:tokenInfos.count];
282
       [NSMutableArray arrayWithCapacity:tokenInfos.count];
283
   for (FIRInstanceIDTokenInfo *tokenInfo in tokenInfos) {
283
   for (FIRInstanceIDTokenInfo *tokenInfo in tokenInfos) {
284
     BOOL isTokenFresh = [tokenInfo isFresh];
284
     BOOL isTokenFresh = [tokenInfo isFresh];
285
-    if (isTokenFresh) {
286
-      // Token is fresh, do nothing.
285
+    if (isTokenFresh && [tokenInfo.token hasPrefix:IID]) {
286
+      // Token is fresh and in right format, do nothing
287
       continue;
287
       continue;
288
     }
288
     }
289
     if ([tokenInfo.scope isEqualToString:kFIRInstanceIDDefaultTokenScope]) {
289
     if ([tokenInfo.scope isEqualToString:kFIRInstanceIDDefaultTokenScope]) {

+ 14
- 5
Pods/FirebaseInstanceID/README.md View File

3
 This repository contains a subset of the Firebase iOS SDK source. It currently
3
 This repository contains a subset of the Firebase iOS SDK source. It currently
4
 includes FirebaseCore, FirebaseABTesting, FirebaseAuth, FirebaseDatabase,
4
 includes FirebaseCore, FirebaseABTesting, FirebaseAuth, FirebaseDatabase,
5
 FirebaseFirestore, FirebaseFunctions, FirebaseInstanceID, FirebaseInAppMessaging,
5
 FirebaseFirestore, FirebaseFunctions, FirebaseInstanceID, FirebaseInAppMessaging,
6
-FirebaseInAppMessagingDisplay, FirebaseMessaging and FirebaseStorage.
6
+FirebaseInAppMessagingDisplay, FirebaseMessaging, FirebaseRemoteConfig, and
7
+FirebaseStorage.
7
 
8
 
8
 The repository also includes GoogleUtilities source. The
9
 The repository also includes GoogleUtilities source. The
9
 [GoogleUtilities](GoogleUtilities/README.md) pod is
10
 [GoogleUtilities](GoogleUtilities/README.md) pod is
80
 
81
 
81
 `pod gen Firebase{name here}.podspec --local-sources=./ --auto-open`
82
 `pod gen Firebase{name here}.podspec --local-sources=./ --auto-open`
82
 
83
 
84
+Note: If the CocoaPods cache is out of date, you may need to run
85
+`pod repo update` before the `pod gen` command.
86
+
83
 Firestore has a self contained Xcode project. See
87
 Firestore has a self contained Xcode project. See
84
 [Firestore/README.md](Firestore/README.md).
88
 [Firestore/README.md](Firestore/README.md).
85
 
89
 
98
 These commands will get the right versions:
102
 These commands will get the right versions:
99
 
103
 
100
 ```
104
 ```
101
-brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/773cb75d360b58f32048f5964038d09825a507c8/Formula/clang-format.rb
102
-brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/3dfea1004e0736754bbf49673cca8aaed8a94089/Formula/swiftformat.rb
105
+brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/e3496d9/Formula/clang-format.rb
106
+brew upgrade https://raw.githubusercontent.com/Homebrew/homebrew-core/7963c3d/Formula/swiftformat.rb
103
 ```
107
 ```
104
 
108
 
105
 Note: if you already have a newer version of these installed you may need to
109
 Note: if you already have a newer version of these installed you may need to
106
 `brew switch` to this version.
110
 `brew switch` to this version.
107
 
111
 
112
+To update this section, find the versions of clang-format and swiftformat.rb to
113
+match the versions in the CI failure logs
114
+[here](https://github.com/Homebrew/homebrew-core/tree/master/Formula).
115
+
108
 ### Running Unit Tests
116
 ### Running Unit Tests
109
 
117
 
110
 Select a scheme and press Command-u to build a component and run its unit tests.
118
 Select a scheme and press Command-u to build a component and run its unit tests.
179
 
187
 
180
 ### macOS and tvOS
188
 ### macOS and tvOS
181
 Thanks to contributions from the community, FirebaseABTesting, FirebaseAuth, FirebaseCore,
189
 Thanks to contributions from the community, FirebaseABTesting, FirebaseAuth, FirebaseCore,
182
-FirebaseDatabase, FirebaseMessaging,
183
-FirebaseFirestore, FirebaseFunctions and FirebaseStorage now compile, run unit tests, and work on
190
+FirebaseDatabase, FirebaseMessaging, FirebaseFirestore,
191
+FirebaseFunctions, FirebaseRemoteConfig, and FirebaseStorage now compile, run unit tests, and work on
184
 macOS and tvOS.
192
 macOS and tvOS.
185
 
193
 
186
 For tvOS, checkout the [Sample](Example/tvOSSample).
194
 For tvOS, checkout the [Sample](Example/tvOSSample).
202
 pod 'FirebaseFirestore'
210
 pod 'FirebaseFirestore'
203
 pod 'FirebaseFunctions'
211
 pod 'FirebaseFunctions'
204
 pod 'FirebaseMessaging'
212
 pod 'FirebaseMessaging'
213
+pod 'FirebaseRemoteConfig'
205
 pod 'FirebaseStorage'
214
 pod 'FirebaseStorage'
206
 ```
215
 ```
207
 
216
 

+ 26
- 0
Pods/GTMSessionFetcher/Source/GTMSessionFetcher.h View File

424
   #endif  // GTM_USE_SESSION_FETCHER
424
   #endif  // GTM_USE_SESSION_FETCHER
425
 #endif
425
 #endif
426
 
426
 
427
+// When creating background sessions to perform out-of-process uploads and
428
+// downloads, on app launch any background sessions must be reconnected in
429
+// order to receive events that occurred while the app was not running.
430
+//
431
+// The fetcher will automatically attempt to recreate the sessions on app
432
+// start, but doing so reads from NSUserDefaults. This may have launch-time
433
+// performance impacts.
434
+//
435
+// To avoid launch performance impacts, on iPhone/iPad with iOS 13+ the
436
+// GTMSessionFetcher class will register for the app launch notification and
437
+// perform the reconnect then.
438
+//
439
+// Apps targeting Mac or older iOS SDKs can opt into the new behavior by defining
440
+// GTMSESSION_RECONNECT_BACKGROUND_SESSIONS_ON_LAUNCH=1.
441
+//
442
+// Apps targeting new SDKs can force the old behavior by defining
443
+// GTMSESSION_RECONNECT_BACKGROUND_SESSIONS_ON_LAUNCH = 0.
444
+#ifndef GTMSESSION_RECONNECT_BACKGROUND_SESSIONS_ON_LAUNCH
445
+  // Default to the on-launch behavior for iOS 13+.
446
+  #if TARGET_OS_IOS && defined(__IPHONE_13_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_13_0
447
+    #define GTMSESSION_RECONNECT_BACKGROUND_SESSIONS_ON_LAUNCH 1
448
+  #else
449
+    #define GTMSESSION_RECONNECT_BACKGROUND_SESSIONS_ON_LAUNCH 0
450
+  #endif
451
+#endif
452
+
427
 GTM_ASSUME_NONNULL_BEGIN
453
 GTM_ASSUME_NONNULL_BEGIN
428
 
454
 
429
 // Notifications
455
 // Notifications

+ 110
- 28
Pods/GTMSessionFetcher/Source/GTMSessionFetcher.m View File

18
 #endif
18
 #endif
19
 
19
 
20
 #import "GTMSessionFetcher.h"
20
 #import "GTMSessionFetcher.h"
21
+#if TARGET_OS_OSX && GTMSESSION_RECONNECT_BACKGROUND_SESSIONS_ON_LAUNCH
22
+// To reconnect background sessions on Mac outside +load requires importing and linking
23
+// AppKit to access the NSApplicationDidFinishLaunching symbol.
24
+#import <AppKit/AppKit.h>
25
+#endif
21
 
26
 
22
 #import <sys/utsname.h>
27
 #import <sys/utsname.h>
23
 
28
 
87
   #endif
92
   #endif
88
 #endif
93
 #endif
89
 
94
 
95
+#if ((defined(TARGET_OS_MACCATALYST) && TARGET_OS_MACCATALYST) || \
96
+     (TARGET_OS_OSX && defined(__MAC_10_15) && __MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_15) || \
97
+     (TARGET_OS_IOS && defined(__IPHONE_13_0) && __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_13_0) || \
98
+     (TARGET_OS_WATCH && defined(__WATCHOS_6_0) && __WATCHOS_VERSION_MIN_REQUIRED >= __WATCHOS_6_0) || \
99
+     (TARGET_OS_TV && defined(__TVOS_13_0) && __TVOS_VERSION_MIN_REQUIRED >= __TVOS_13_0))
100
+#define GTM_SDK_REQUIRES_TLSMINIMUMSUPPORTEDPROTOCOLVERSION 1
101
+#define GTM_SDK_SUPPORTS_TLSMINIMUMSUPPORTEDPROTOCOLVERSION 1
102
+#elif ((TARGET_OS_OSX && defined(__MAC_10_15) && __MAC_OS_X_VERSION_MAX_ALLOWED >= __MAC_10_15) || \
103
+       (TARGET_OS_IOS && defined(__IPHONE_13_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_13_0) || \
104
+       (TARGET_OS_WATCH && defined(__WATCHOS_6_0) && __WATCHOS_VERSION_MAX_ALLOWED >= __WATCHOS_6_0) || \
105
+       (TARGET_OS_TV && defined(__TVOS_13_0) && __TVOS_VERSION_MAX_ALLOWED >= __TVOS_13_0))
106
+#define GTM_SDK_REQUIRES_TLSMINIMUMSUPPORTEDPROTOCOLVERSION 0
107
+#define GTM_SDK_SUPPORTS_TLSMINIMUMSUPPORTEDPROTOCOLVERSION 1
108
+#else
109
+#define GTM_SDK_REQUIRES_TLSMINIMUMSUPPORTEDPROTOCOLVERSION 0
110
+#define GTM_SDK_SUPPORTS_TLSMINIMUMSUPPORTEDPROTOCOLVERSION 0
111
+#endif
112
+
113
+#if ((defined(TARGET_OS_MACCATALYST) && TARGET_OS_MACCATALYST) || \
114
+     (TARGET_OS_OSX && defined(__MAC_10_15) && __MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_15) || \
115
+     (TARGET_OS_IOS && defined(__IPHONE_13_0) && __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_13_0) || \
116
+     (TARGET_OS_WATCH && defined(__WATCHOS_6_0) && __WATCHOS_VERSION_MIN_REQUIRED >= __WATCHOS_6_0) || \
117
+     (TARGET_OS_TV && defined(__TVOS_13_0) && __TVOS_VERSION_MIN_REQUIRED >= __TVOS_13_0))
118
+#define GTM_SDK_REQUIRES_SECTRUSTEVALUATEWITHERROR 1
119
+#else
120
+#define GTM_SDK_REQUIRES_SECTRUSTEVALUATEWITHERROR 0
121
+#endif
122
+
90
 @interface GTMSessionFetcher ()
123
 @interface GTMSessionFetcher ()
91
 
124
 
92
 @property(atomic, strong, readwrite, GTM_NULLABLE) NSData *downloadedData;
125
 @property(atomic, strong, readwrite, GTM_NULLABLE) NSData *downloadedData;
212
 
245
 
213
 #if !GTMSESSION_UNIT_TESTING
246
 #if !GTMSESSION_UNIT_TESTING
214
 + (void)load {
247
 + (void)load {
248
+#if GTMSESSION_RECONNECT_BACKGROUND_SESSIONS_ON_LAUNCH && TARGET_OS_IPHONE
249
+  NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
250
+  [nc addObserver:self
251
+         selector:@selector(reconnectFetchersForBackgroundSessionsOnAppLaunch:)
252
+             name:UIApplicationDidFinishLaunchingNotification
253
+           object:nil];
254
+#elif GTMSESSION_RECONNECT_BACKGROUND_SESSIONS_ON_LAUNCH && TARGET_OS_OSX
255
+  NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
256
+  [nc addObserver:self
257
+         selector:@selector(reconnectFetchersForBackgroundSessionsOnAppLaunch:)
258
+             name:NSApplicationDidFinishLaunchingNotification
259
+           object:nil];
260
+#else
215
   [self fetchersForBackgroundSessions];
261
   [self fetchersForBackgroundSessions];
216
-}
217
 #endif
262
 #endif
263
+}
264
+
265
++ (void)reconnectFetchersForBackgroundSessionsOnAppLaunch:(NSNotification *)notification {
266
+  // Give all other app-did-launch handlers a chance to complete before
267
+  // reconnecting the fetchers. Not doing this may lead to reconnecting
268
+  // before the app delegate has a chance to run.
269
+  dispatch_async(dispatch_get_main_queue(), ^{
270
+    [self fetchersForBackgroundSessions];
271
+  });
272
+}
273
+#endif  // !GTMSESSION_UNIT_TESTING
218
 
274
 
219
 + (instancetype)fetcherWithRequest:(GTM_NULLABLE NSURLRequest *)request {
275
 + (instancetype)fetcherWithRequest:(GTM_NULLABLE NSURLRequest *)request {
220
   return [[self alloc] initWithRequest:request configuration:nil];
276
   return [[self alloc] initWithRequest:request configuration:nil];
619
         _configuration = [NSURLSessionConfiguration ephemeralSessionConfiguration];
675
         _configuration = [NSURLSessionConfiguration ephemeralSessionConfiguration];
620
       }
676
       }
621
 #if !GTM_ALLOW_INSECURE_REQUESTS
677
 #if !GTM_ALLOW_INSECURE_REQUESTS
678
+#if GTM_SDK_REQUIRES_TLSMINIMUMSUPPORTEDPROTOCOLVERSION
679
+      _configuration.TLSMinimumSupportedProtocolVersion = tls_protocol_version_TLSv12;
680
+#elif GTM_SDK_SUPPORTS_TLSMINIMUMSUPPORTEDPROTOCOLVERSION
681
+      if (@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)) {
682
+        _configuration.TLSMinimumSupportedProtocolVersion = tls_protocol_version_TLSv12;
683
+      } else {
684
+        _configuration.TLSMinimumSupportedProtocol = kTLSProtocol12;
685
+      }
686
+#else
622
       _configuration.TLSMinimumSupportedProtocol = kTLSProtocol12;
687
       _configuration.TLSMinimumSupportedProtocol = kTLSProtocol12;
688
+#endif  // GTM_SDK_REQUIRES_TLSMINIMUMSUPPORTEDPROTOCOLVERSION
623
 #endif
689
 #endif
624
     }  // !_configuration
690
     }  // !_configuration
625
     _configuration.HTTPCookieStorage = self.cookieStorage;
691
     _configuration.HTTPCookieStorage = self.cookieStorage;
1046
     GTMSessionFetcherReceivedProgressBlock receivedProgressBlock = _receivedProgressBlock;
1112
     GTMSessionFetcherReceivedProgressBlock receivedProgressBlock = _receivedProgressBlock;
1047
     GTMSessionFetcherWillCacheURLResponseBlock willCacheURLResponseBlock =
1113
     GTMSessionFetcherWillCacheURLResponseBlock willCacheURLResponseBlock =
1048
         _willCacheURLResponseBlock;
1114
         _willCacheURLResponseBlock;
1115
+    GTMSessionFetcherChallengeBlock challengeBlock = _challengeBlock;
1049
 
1116
 
1050
     // Simulate receipt of redirection.
1117
     // Simulate receipt of redirection.
1051
     if (willRedirectBlock) {
1118
     if (willRedirectBlock) {
1063
     // It might be nice to eventually let the user determine which testBlock
1130
     // It might be nice to eventually let the user determine which testBlock
1064
     // fetches get challenged rather than always executing the supplied
1131
     // fetches get challenged rather than always executing the supplied
1065
     // challenge block.
1132
     // challenge block.
1066
-    if (_challengeBlock) {
1133
+    if (challengeBlock) {
1067
       [self invokeOnCallbackUnsynchronizedQueueAfterUserStopped:YES
1134
       [self invokeOnCallbackUnsynchronizedQueueAfterUserStopped:YES
1068
                                                           block:^{
1135
                                                           block:^{
1069
-        if (self->_challengeBlock) {
1070
-          NSURL *requestURL = self->_request.URL;
1071
-          NSString *host = requestURL.host;
1072
-          NSURLProtectionSpace *pspace =
1073
-              [[NSURLProtectionSpace alloc] initWithHost:host
1074
-                                                    port:requestURL.port.integerValue
1075
-                                                protocol:requestURL.scheme
1076
-                                                   realm:nil
1077
-                                    authenticationMethod:NSURLAuthenticationMethodHTTPBasic];
1078
-          id<NSURLAuthenticationChallengeSender> unusedSender =
1079
-              (id<NSURLAuthenticationChallengeSender>)[NSNull null];
1080
-          NSURLAuthenticationChallenge *challenge =
1081
-              [[NSURLAuthenticationChallenge alloc] initWithProtectionSpace:pspace
1082
-                                                         proposedCredential:nil
1083
-                                                       previousFailureCount:0
1084
-                                                            failureResponse:nil
1085
-                                                                      error:nil
1086
-                                                                     sender:unusedSender];
1087
-          self->_challengeBlock(self, challenge, ^(NSURLSessionAuthChallengeDisposition disposition,
1088
-                                             NSURLCredential * GTM_NULLABLE_TYPE credential){
1089
-            // We could change the responseData and responseError based on the disposition,
1090
-            // but it's easier for apps to just supply the expected data and error
1091
-            // directly to the test block. So this simulation ignores the disposition.
1092
-          });
1093
-        }
1136
+        NSURL *requestURL = self->_request.URL;
1137
+        NSString *host = requestURL.host;
1138
+        NSURLProtectionSpace *pspace =
1139
+            [[NSURLProtectionSpace alloc] initWithHost:host
1140
+                                                  port:requestURL.port.integerValue
1141
+                                              protocol:requestURL.scheme
1142
+                                                 realm:nil
1143
+                                  authenticationMethod:NSURLAuthenticationMethodHTTPBasic];
1144
+        id<NSURLAuthenticationChallengeSender> unusedSender =
1145
+            (id<NSURLAuthenticationChallengeSender>)[NSNull null];
1146
+        NSURLAuthenticationChallenge *challenge =
1147
+            [[NSURLAuthenticationChallenge alloc] initWithProtectionSpace:pspace
1148
+                                                       proposedCredential:nil
1149
+                                                     previousFailureCount:0
1150
+                                                          failureResponse:nil
1151
+                                                                    error:nil
1152
+                                                                   sender:unusedSender];
1153
+        challengeBlock(self, challenge, ^(NSURLSessionAuthChallengeDisposition disposition,
1154
+                                          NSURLCredential * GTM_NULLABLE_TYPE credential){
1155
+          // We could change the responseData and responseError based on the disposition,
1156
+          // but it's easier for apps to just supply the expected data and error
1157
+          // directly to the test block. So this simulation ignores the disposition.
1158
+        });
1094
       }];
1159
       }];
1095
     }
1160
     }
1096
 
1161
 
2325
     // It looks like the implementation of SecTrustEvaluate() on Mac grabs a global lock,
2390
     // It looks like the implementation of SecTrustEvaluate() on Mac grabs a global lock,
2326
     // so it may be redundant for us to also lock, but it's easy to synchronize here
2391
     // so it may be redundant for us to also lock, but it's easy to synchronize here
2327
     // anyway.
2392
     // anyway.
2328
-    SecTrustResultType trustEval = kSecTrustResultInvalid;
2329
     BOOL shouldAllow;
2393
     BOOL shouldAllow;
2394
+#if GTM_SDK_REQUIRES_SECTRUSTEVALUATEWITHERROR
2395
+    CFErrorRef errorRef = NULL;
2396
+    @synchronized ([GTMSessionFetcher class]) {
2397
+      GTMSessionMonitorSynchronized([GTMSessionFetcher class]);
2398
+
2399
+      // SecTrustEvaluateWithError handles both the "proceed" and "unspecified" cases,
2400
+      // so it is not necessary to check the trust result the evaluation returns true.
2401
+      shouldAllow = SecTrustEvaluateWithError(serverTrust, &errorRef);
2402
+    }
2403
+
2404
+    if (errorRef) {
2405
+      GTMSESSION_LOG_DEBUG(@"Error %d evaluating trust for %@",
2406
+                           (int)CFErrorGetCode(errorRef), request);
2407
+      CFRelease(errorRef);
2408
+    }
2409
+#else
2410
+    SecTrustResultType trustEval = kSecTrustResultInvalid;
2330
     OSStatus trustError;
2411
     OSStatus trustError;
2331
     @synchronized([GTMSessionFetcher class]) {
2412
     @synchronized([GTMSessionFetcher class]) {
2332
       GTMSessionMonitorSynchronized([GTMSessionFetcher class]);
2413
       GTMSessionMonitorSynchronized([GTMSessionFetcher class]);
2350
                              CFBridgingRelease(SecTrustCopyProperties(serverTrust)));
2431
                              CFBridgingRelease(SecTrustCopyProperties(serverTrust)));
2351
       }
2432
       }
2352
     }
2433
     }
2434
+#endif  // GTM_SDK_REQUIRES_SECTRUSTEVALUATEWITHERROR
2353
     handler(serverTrust, shouldAllow);
2435
     handler(serverTrust, shouldAllow);
2354
 
2436
 
2355
     CFRelease(serverTrust);
2437
     CFRelease(serverTrust);

+ 9
- 0
Pods/GTMSessionFetcher/Source/GTMSessionUploadFetcher.h View File

102
                                chunkSize:(int64_t)chunkSize
102
                                chunkSize:(int64_t)chunkSize
103
                           fetcherService:(GTM_NULLABLE GTMSessionFetcherService *)fetcherServiceOrNil;
103
                           fetcherService:(GTM_NULLABLE GTMSessionFetcherService *)fetcherServiceOrNil;
104
 
104
 
105
+// Allows cellular access.
105
 + (instancetype)uploadFetcherWithLocation:(NSURL * GTM_NULLABLE_TYPE)uploadLocationURL
106
 + (instancetype)uploadFetcherWithLocation:(NSURL * GTM_NULLABLE_TYPE)uploadLocationURL
106
                            uploadMIMEType:(NSString *)uploadMIMEType
107
                            uploadMIMEType:(NSString *)uploadMIMEType
107
                                 chunkSize:(int64_t)chunkSize
108
                                 chunkSize:(int64_t)chunkSize
108
                            fetcherService:(GTM_NULLABLE GTMSessionFetcherService *)fetcherServiceOrNil;
109
                            fetcherService:(GTM_NULLABLE GTMSessionFetcherService *)fetcherServiceOrNil;
109
 
110
 
111
++ (instancetype)uploadFetcherWithLocation:(NSURL *GTM_NULLABLE_TYPE)uploadLocationURL
112
+                           uploadMIMEType:(NSString *)uploadMIMEType
113
+                                chunkSize:(int64_t)chunkSize
114
+                     allowsCellularAccess:(BOOL)allowsCellularAccess
115
+                           fetcherService:(GTM_NULLABLE GTMSessionFetcherService *)fetcherServiceOrNil;
116
+
110
 // Allows dataProviders for files of unknown length. Pass kGTMSessionUploadFetcherUnknownFileSize as
117
 // Allows dataProviders for files of unknown length. Pass kGTMSessionUploadFetcherUnknownFileSize as
111
 // |fullLength| if the length is unknown.
118
 // |fullLength| if the length is unknown.
112
 - (void)setUploadDataLength:(int64_t)fullLength
119
 - (void)setUploadDataLength:(int64_t)fullLength
127
 @property(atomic, copy) NSString *uploadMIMEType;
134
 @property(atomic, copy) NSString *uploadMIMEType;
128
 @property(atomic, assign) int64_t chunkSize;
135
 @property(atomic, assign) int64_t chunkSize;
129
 @property(atomic, readonly, assign) int64_t currentOffset;
136
 @property(atomic, readonly, assign) int64_t currentOffset;
137
+// Reflects the original NSURLRequest's @c allowCellularAccess property.
138
+@property(atomic, readonly, assign) BOOL allowsCellularAccess;
130
 
139
 
131
 // The fetcher for the current data chunk, if any
140
 // The fetcher for the current data chunk, if any
132
 @property(atomic, strong, GTM_NULLABLE) GTMSessionFetcher *chunkFetcher;
141
 @property(atomic, strong, GTM_NULLABLE) GTMSessionFetcher *chunkFetcher;

+ 42
- 8
Pods/GTMSessionFetcher/Source/GTMSessionUploadFetcher.m View File

26
 static NSString *const kGTMSessionIdentifierUploadMIMETypeMetadataKey       = @"_uploadMIME";
26
 static NSString *const kGTMSessionIdentifierUploadMIMETypeMetadataKey       = @"_uploadMIME";
27
 static NSString *const kGTMSessionIdentifierUploadChunkSizeMetadataKey      = @"_upChSize";
27
 static NSString *const kGTMSessionIdentifierUploadChunkSizeMetadataKey      = @"_upChSize";
28
 static NSString *const kGTMSessionIdentifierUploadCurrentOffsetMetadataKey  = @"_upOffset";
28
 static NSString *const kGTMSessionIdentifierUploadCurrentOffsetMetadataKey  = @"_upOffset";
29
+static NSString *const kGTMSessionIdentifierUploadAllowsCellularAccess      = @"_upAllowsCellularAccess";
29
 
30
 
30
 static NSString *const kGTMSessionHeaderXGoogUploadChunkGranularity = @"X-Goog-Upload-Chunk-Granularity";
31
 static NSString *const kGTMSessionHeaderXGoogUploadChunkGranularity = @"X-Goog-Upload-Chunk-Granularity";
31
 static NSString *const kGTMSessionHeaderXGoogUploadCommand          = @"X-Goog-Upload-Command";
32
 static NSString *const kGTMSessionHeaderXGoogUploadCommand          = @"X-Goog-Upload-Command";
97
 @property(assign, atomic, getter=isSubdataGenerating) BOOL subdataGenerating;
98
 @property(assign, atomic, getter=isSubdataGenerating) BOOL subdataGenerating;
98
 @property(assign, atomic) BOOL shouldInitiateOffsetQuery;
99
 @property(assign, atomic) BOOL shouldInitiateOffsetQuery;
99
 @property(assign, atomic) int64_t uploadGranularity;
100
 @property(assign, atomic) int64_t uploadGranularity;
101
+@property(assign, atomic) BOOL allowsCellularAccess;
100
 
102
 
101
 @end
103
 @end
102
 
104
 
157
   GTMSessionUploadFetcher *fetcher = [self uploadFetcherWithRequest:request
159
   GTMSessionUploadFetcher *fetcher = [self uploadFetcherWithRequest:request
158
                                                      fetcherService:fetcherService];
160
                                                      fetcherService:fetcherService];
159
   [fetcher setLocationURL:nil
161
   [fetcher setLocationURL:nil
160
-           uploadMIMEType:uploadMIMEType
161
-                chunkSize:chunkSize];
162
+            uploadMIMEType:uploadMIMEType
163
+                 chunkSize:chunkSize
164
+      allowsCellularAccess:request.allowsCellularAccess];
162
   return fetcher;
165
   return fetcher;
163
 }
166
 }
164
 
167
 
165
-+ (instancetype)uploadFetcherWithLocation:(NSURL * GTM_NULLABLE_TYPE)uploadLocationURL
168
++ (instancetype)uploadFetcherWithLocation:(NSURL *GTM_NULLABLE_TYPE)uploadLocationURL
166
                            uploadMIMEType:(NSString *)uploadMIMEType
169
                            uploadMIMEType:(NSString *)uploadMIMEType
167
                                 chunkSize:(int64_t)chunkSize
170
                                 chunkSize:(int64_t)chunkSize
171
+                           fetcherService:(GTM_NULLABLE GTMSessionFetcherService *)fetcherServiceOrNil {
172
+  return [self uploadFetcherWithLocation:uploadLocationURL
173
+                          uploadMIMEType:uploadMIMEType
174
+                               chunkSize:chunkSize
175
+                    allowsCellularAccess:YES
176
+                          fetcherService:fetcherServiceOrNil];
177
+}
178
+
179
++ (instancetype)uploadFetcherWithLocation:(NSURL *GTM_NULLABLE_TYPE)uploadLocationURL
180
+                           uploadMIMEType:(NSString *)uploadMIMEType
181
+                                chunkSize:(int64_t)chunkSize
182
+                     allowsCellularAccess:(BOOL)allowsCellularAccess
168
                            fetcherService:(GTMSessionFetcherService *)fetcherService {
183
                            fetcherService:(GTMSessionFetcherService *)fetcherService {
169
   GTMSessionUploadFetcher *fetcher = [self uploadFetcherWithRequest:nil
184
   GTMSessionUploadFetcher *fetcher = [self uploadFetcherWithRequest:nil
170
                                                      fetcherService:fetcherService];
185
                                                      fetcherService:fetcherService];
171
   [fetcher setLocationURL:uploadLocationURL
186
   [fetcher setLocationURL:uploadLocationURL
172
-           uploadMIMEType:uploadMIMEType
173
-                chunkSize:chunkSize];
187
+            uploadMIMEType:uploadMIMEType
188
+                 chunkSize:chunkSize
189
+      allowsCellularAccess:allowsCellularAccess];
174
   return fetcher;
190
   return fetcher;
175
 }
191
 }
176
 
192
 
211
   }
227
   }
212
   int64_t currentOffset =
228
   int64_t currentOffset =
213
       [metadata[kGTMSessionIdentifierUploadCurrentOffsetMetadataKey] longLongValue];
229
       [metadata[kGTMSessionIdentifierUploadCurrentOffsetMetadataKey] longLongValue];
230
+
231
+  BOOL allowsCellularAccess = YES;
232
+  if (metadata[kGTMSessionIdentifierUploadAllowsCellularAccess]) {
233
+    allowsCellularAccess = [metadata[kGTMSessionIdentifierUploadAllowsCellularAccess] boolValue];
234
+  }
235
+
214
   GTMSESSION_ASSERT_DEBUG(currentOffset <= uploadFileLength,
236
   GTMSESSION_ASSERT_DEBUG(currentOffset <= uploadFileLength,
215
                           @"CurrentOffset (%lld) exceeds UploadFileSize (%lld)",
237
                           @"CurrentOffset (%lld) exceeds UploadFileSize (%lld)",
216
                           currentOffset, uploadFileLength);
238
                           currentOffset, uploadFileLength);
219
   GTMSessionUploadFetcher *uploadFetcher = [self uploadFetcherWithLocation:uploadLocationURL
241
   GTMSessionUploadFetcher *uploadFetcher = [self uploadFetcherWithLocation:uploadLocationURL
220
                                                             uploadMIMEType:uploadMIMEType
242
                                                             uploadMIMEType:uploadMIMEType
221
                                                                  chunkSize:uploadChunkSize
243
                                                                  chunkSize:uploadChunkSize
244
+                                                      allowsCellularAccess:allowsCellularAccess
222
                                                             fetcherService:nil];
245
                                                             fetcherService:nil];
223
   // Set the upload file length before setting the upload file URL tries to determine the length.
246
   // Set the upload file length before setting the upload file URL tries to determine the length.
224
   [uploadFetcher setUploadFileLength:uploadFileLength];
247
   [uploadFetcher setUploadFileLength:uploadFileLength];
513
   [self setRequest:mutableRequest];
536
   [self setRequest:mutableRequest];
514
 }
537
 }
515
 
538
 
516
-- (void)setLocationURL:(NSURL * GTM_NULLABLE_TYPE)location
517
-        uploadMIMEType:(NSString *)uploadMIMEType
518
-             chunkSize:(int64_t)chunkSize {
539
+- (void)setLocationURL:(NSURL *GTM_NULLABLE_TYPE)location
540
+          uploadMIMEType:(NSString *)uploadMIMEType
541
+               chunkSize:(int64_t)chunkSize
542
+    allowsCellularAccess:(BOOL)allowsCellularAccess {
519
   @synchronized(self) {
543
   @synchronized(self) {
520
     GTMSessionMonitorSynchronized(self);
544
     GTMSessionMonitorSynchronized(self);
521
 
545
 
522
     GTMSESSION_ASSERT_DEBUG(chunkSize > 0, @"chunk size is zero");
546
     GTMSESSION_ASSERT_DEBUG(chunkSize > 0, @"chunk size is zero");
523
 
547
 
548
+    _allowsCellularAccess = allowsCellularAccess;
549
+
524
     // When resuming an upload, set the known upload target URL.
550
     // When resuming an upload, set the known upload target URL.
525
     _uploadLocationURL = location;
551
     _uploadLocationURL = location;
526
 
552
 
1323
   }
1349
   }
1324
   metadata[kGTMSessionIdentifierUploadChunkSizeMetadataKey] = @(self.chunkSize);
1350
   metadata[kGTMSessionIdentifierUploadChunkSizeMetadataKey] = @(self.chunkSize);
1325
   metadata[kGTMSessionIdentifierUploadCurrentOffsetMetadataKey] = @(self.currentOffset);
1351
   metadata[kGTMSessionIdentifierUploadCurrentOffsetMetadataKey] = @(self.currentOffset);
1352
+  metadata[kGTMSessionIdentifierUploadAllowsCellularAccess] = @(self.request.allowsCellularAccess);
1353
+
1326
   return metadata;
1354
   return metadata;
1327
 }
1355
 }
1328
 
1356
 
1339
   // n.b. that self.request is nil for upload fetchers created with an existing upload location
1367
   // n.b. that self.request is nil for upload fetchers created with an existing upload location
1340
   // URL.
1368
   // URL.
1341
   NSURLRequest *origRequest = self.request;
1369
   NSURLRequest *origRequest = self.request;
1370
+
1371
+  chunkRequest.allowsCellularAccess = origRequest.allowsCellularAccess;
1372
+  if (!origRequest) {
1373
+    chunkRequest.allowsCellularAccess = _allowsCellularAccess;
1374
+  }
1342
   NSString *userAgent = [origRequest valueForHTTPHeaderField:@"User-Agent"];
1375
   NSString *userAgent = [origRequest valueForHTTPHeaderField:@"User-Agent"];
1343
   if (userAgent.length > 0) {
1376
   if (userAgent.length > 0) {
1344
     [chunkRequest setValue:userAgent forHTTPHeaderField:@"User-Agent"];
1377
     [chunkRequest setValue:userAgent forHTTPHeaderField:@"User-Agent"];
1749
 
1782
 
1750
 // Public properties.
1783
 // Public properties.
1751
 @synthesize currentOffset = _currentOffset,
1784
 @synthesize currentOffset = _currentOffset,
1785
+            allowsCellularAccess = _allowsCellularAccess,
1752
             delegateCompletionHandler = _delegateCompletionHandler,
1786
             delegateCompletionHandler = _delegateCompletionHandler,
1753
             chunkFetcher = _chunkFetcher,
1787
             chunkFetcher = _chunkFetcher,
1754
             lastChunkRequest = _lastChunkRequest,
1788
             lastChunkRequest = _lastChunkRequest,

BIN
Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.framework/GoogleAppMeasurement View File


+ 6
- 1
Pods/GoogleUtilities/GoogleUtilities/Logger/GULLogger.m View File

161
                                                                     range:messageCodeRange];
161
                                                                     range:messageCodeRange];
162
   NSCAssert(numberOfMatches == 1, @"Incorrect message code format.");
162
   NSCAssert(numberOfMatches == 1, @"Incorrect message code format.");
163
 #endif
163
 #endif
164
-  NSString *logMsg = [[NSString alloc] initWithFormat:message arguments:args_ptr];
164
+  NSString *logMsg;
165
+  if (args_ptr == NULL) {
166
+    logMsg = message;
167
+  } else {
168
+    logMsg = [[NSString alloc] initWithFormat:message arguments:args_ptr];
169
+  }
165
   logMsg = [NSString stringWithFormat:@"%s - %@[%@] %@", sVersion, service, messageCode, logMsg];
170
   logMsg = [NSString stringWithFormat:@"%s - %@[%@] %@", sVersion, service, messageCode, logMsg];
166
   dispatch_async(sGULClientQueue, ^{
171
   dispatch_async(sGULClientQueue, ^{
167
     asl_log(sGULLoggerClient, NULL, (int)level, "%s", logMsg.UTF8String);
172
     asl_log(sGULLoggerClient, NULL, (int)level, "%s", logMsg.UTF8String);

+ 10
- 6
Pods/GoogleUtilities/GoogleUtilities/Network/GULMutableDictionary.m View File

45
 - (id)objectForKey:(id)key {
45
 - (id)objectForKey:(id)key {
46
   __block id object;
46
   __block id object;
47
   dispatch_sync(_queue, ^{
47
   dispatch_sync(_queue, ^{
48
-    object = self->_objects[key];
48
+    object = [self->_objects objectForKey:key];
49
   });
49
   });
50
   return object;
50
   return object;
51
 }
51
 }
52
 
52
 
53
 - (void)setObject:(id)object forKey:(id<NSCopying>)key {
53
 - (void)setObject:(id)object forKey:(id<NSCopying>)key {
54
   dispatch_async(_queue, ^{
54
   dispatch_async(_queue, ^{
55
-    self->_objects[key] = object;
55
+    [self->_objects setObject:object forKey:key];
56
   });
56
   });
57
 }
57
 }
58
 
58
 
77
 }
77
 }
78
 
78
 
79
 - (id)objectForKeyedSubscript:(id<NSCopying>)key {
79
 - (id)objectForKeyedSubscript:(id<NSCopying>)key {
80
-  // The method this calls is already synchronized.
81
-  return [self objectForKey:key];
80
+  __block id object;
81
+  dispatch_sync(_queue, ^{
82
+    object = self->_objects[key];
83
+  });
84
+  return object;
82
 }
85
 }
83
 
86
 
84
 - (void)setObject:(id)obj forKeyedSubscript:(id<NSCopying>)key {
87
 - (void)setObject:(id)obj forKeyedSubscript:(id<NSCopying>)key {
85
-  // The method this calls is already synchronized.
86
-  [self setObject:obj forKey:key];
88
+  dispatch_async(_queue, ^{
89
+    self->_objects[key] = obj;
90
+  });
87
 }
91
 }
88
 
92
 
89
 - (NSDictionary *)dictionary {
93
 - (NSDictionary *)dictionary {

+ 21
- 2
Pods/GoogleUtilities/GoogleUtilities/Network/GULNetworkURLSession.m View File

22
 #import "Private/GULNetworkMessageCode.h"
22
 #import "Private/GULNetworkMessageCode.h"
23
 
23
 
24
 @interface GULNetworkURLSession () <NSURLSessionDelegate,
24
 @interface GULNetworkURLSession () <NSURLSessionDelegate,
25
-                                    NSURLSessionTaskDelegate,
26
-                                    NSURLSessionDownloadDelegate>
25
+                                    NSURLSessionDataDelegate,
26
+                                    NSURLSessionDownloadDelegate,
27
+                                    NSURLSessionTaskDelegate>
27
 @end
28
 @end
28
 
29
 
29
 @implementation GULNetworkURLSession {
30
 @implementation GULNetworkURLSession {
221
   return _sessionID;
222
   return _sessionID;
222
 }
223
 }
223
 
224
 
225
+#pragma mark - NSURLSessionDataDelegate
226
+
227
+/// Called by the NSURLSession when the data task has received some of the expected data.
228
+/// Once the session is completed, URLSession:task:didCompleteWithError will be called and the
229
+/// completion handler will be called with the downloaded data.
230
+- (void)URLSession:(NSURLSession *)session
231
+          dataTask:(NSURLSessionDataTask *)dataTask
232
+    didReceiveData:(NSData *)data {
233
+  @synchronized(self) {
234
+    NSMutableData *mutableData = [[NSMutableData alloc] init];
235
+    if (_downloadedData) {
236
+      mutableData = _downloadedData.mutableCopy;
237
+    }
238
+    [mutableData appendData:data];
239
+    _downloadedData = mutableData;
240
+  }
241
+}
242
+
224
 #pragma mark - NSURLSessionTaskDelegate
243
 #pragma mark - NSURLSessionTaskDelegate
225
 
244
 
226
 /// Called by the NSURLSession once the download task is completed. The file is saved in the
245
 /// Called by the NSURLSession once the download task is completed. The file is saved in the

+ 77
- 55
Pods/Manifest.lock View File

6
   - AWSCore (2.8.4)
6
   - AWSCore (2.8.4)
7
   - AWSSNS (2.8.4):
7
   - AWSSNS (2.8.4):
8
     - AWSCore (= 2.8.4)
8
     - AWSCore (= 2.8.4)
9
-  - Firebase/Auth (5.19.0):
9
+  - Firebase/Auth (6.11.0):
10
     - Firebase/CoreOnly
10
     - Firebase/CoreOnly
11
-    - FirebaseAuth (= 5.4.1)
12
-  - Firebase/Core (5.19.0):
11
+    - FirebaseAuth (~> 6.3.1)
12
+  - Firebase/Core (6.11.0):
13
     - Firebase/CoreOnly
13
     - Firebase/CoreOnly
14
-    - FirebaseAnalytics (= 5.8.0)
15
-  - Firebase/CoreOnly (5.19.0):
16
-    - FirebaseCore (= 5.4.0)
17
-  - FirebaseAnalytics (5.8.0):
18
-    - FirebaseCore (~> 5.4)
19
-    - FirebaseInstanceID (~> 3.8)
20
-    - GoogleAppMeasurement (= 5.8.0)
21
-    - GoogleUtilities/AppDelegateSwizzler (~> 5.2)
22
-    - GoogleUtilities/MethodSwizzler (~> 5.2)
23
-    - GoogleUtilities/Network (~> 5.2)
24
-    - "GoogleUtilities/NSData+zlib (~> 5.2)"
25
-    - nanopb (~> 0.3)
26
-  - FirebaseAuth (5.4.1):
14
+    - FirebaseAnalytics (= 6.1.3)
15
+  - Firebase/CoreOnly (6.11.0):
16
+    - FirebaseCore (= 6.3.2)
17
+  - FirebaseAnalytics (6.1.3):
18
+    - FirebaseCore (~> 6.3)
19
+    - FirebaseInstanceID (~> 4.2)
20
+    - GoogleAppMeasurement (= 6.1.3)
21
+    - GoogleUtilities/AppDelegateSwizzler (~> 6.0)
22
+    - GoogleUtilities/MethodSwizzler (~> 6.0)
23
+    - GoogleUtilities/Network (~> 6.0)
24
+    - "GoogleUtilities/NSData+zlib (~> 6.0)"
25
+    - nanopb (~> 0.3.901)
26
+  - FirebaseAuth (6.3.1):
27
     - FirebaseAuthInterop (~> 1.0)
27
     - FirebaseAuthInterop (~> 1.0)
28
-    - FirebaseCore (~> 5.2)
29
-    - GoogleUtilities/Environment (~> 5.2)
28
+    - FirebaseCore (~> 6.2)
29
+    - GoogleUtilities/AppDelegateSwizzler (~> 6.2)
30
+    - GoogleUtilities/Environment (~> 6.2)
30
     - GTMSessionFetcher/Core (~> 1.1)
31
     - GTMSessionFetcher/Core (~> 1.1)
31
   - FirebaseAuthInterop (1.0.0)
32
   - FirebaseAuthInterop (1.0.0)
32
-  - FirebaseCore (5.4.0):
33
-    - GoogleUtilities/Environment (~> 5.2)
34
-    - GoogleUtilities/Logger (~> 5.2)
35
-  - FirebaseInstanceID (3.8.0):
36
-    - FirebaseCore (~> 5.2)
37
-    - GoogleUtilities/Environment (~> 5.2)
38
-    - GoogleUtilities/UserDefaults (~> 5.2)
39
-  - GoogleAppMeasurement (5.8.0):
40
-    - GoogleUtilities/AppDelegateSwizzler (~> 5.2)
41
-    - GoogleUtilities/MethodSwizzler (~> 5.2)
42
-    - GoogleUtilities/Network (~> 5.2)
43
-    - "GoogleUtilities/NSData+zlib (~> 5.2)"
44
-    - nanopb (~> 0.3)
45
-  - GoogleUtilities/AppDelegateSwizzler (5.5.0):
33
+  - FirebaseCore (6.3.2):
34
+    - FirebaseCoreDiagnostics (~> 1.0)
35
+    - FirebaseCoreDiagnosticsInterop (~> 1.0)
36
+    - GoogleUtilities/Environment (~> 6.2)
37
+    - GoogleUtilities/Logger (~> 6.2)
38
+  - FirebaseCoreDiagnostics (1.1.1):
39
+    - FirebaseCoreDiagnosticsInterop (~> 1.0)
40
+    - GoogleDataTransportCCTSupport (~> 1.0)
41
+    - GoogleUtilities/Environment (~> 6.2)
42
+    - GoogleUtilities/Logger (~> 6.2)
43
+    - nanopb (~> 0.3.901)
44
+  - FirebaseCoreDiagnosticsInterop (1.0.0)
45
+  - FirebaseInstanceID (4.2.6):
46
+    - FirebaseCore (~> 6.0)
47
+    - GoogleUtilities/Environment (~> 6.0)
48
+    - GoogleUtilities/UserDefaults (~> 6.0)
49
+  - GoogleAppMeasurement (6.1.3):
50
+    - GoogleUtilities/AppDelegateSwizzler (~> 6.0)
51
+    - GoogleUtilities/MethodSwizzler (~> 6.0)
52
+    - GoogleUtilities/Network (~> 6.0)
53
+    - "GoogleUtilities/NSData+zlib (~> 6.0)"
54
+    - nanopb (~> 0.3.901)
55
+  - GoogleDataTransport (3.0.1)
56
+  - GoogleDataTransportCCTSupport (1.2.1):
57
+    - GoogleDataTransport (~> 3.0)
58
+    - nanopb (~> 0.3.901)
59
+  - GoogleUtilities/AppDelegateSwizzler (6.3.1):
46
     - GoogleUtilities/Environment
60
     - GoogleUtilities/Environment
47
     - GoogleUtilities/Logger
61
     - GoogleUtilities/Logger
48
     - GoogleUtilities/Network
62
     - GoogleUtilities/Network
49
-  - GoogleUtilities/Environment (5.5.0)
50
-  - GoogleUtilities/Logger (5.5.0):
63
+  - GoogleUtilities/Environment (6.3.1)
64
+  - GoogleUtilities/Logger (6.3.1):
51
     - GoogleUtilities/Environment
65
     - GoogleUtilities/Environment
52
-  - GoogleUtilities/MethodSwizzler (5.5.0):
66
+  - GoogleUtilities/MethodSwizzler (6.3.1):
53
     - GoogleUtilities/Logger
67
     - GoogleUtilities/Logger
54
-  - GoogleUtilities/Network (5.5.0):
68
+  - GoogleUtilities/Network (6.3.1):
55
     - GoogleUtilities/Logger
69
     - GoogleUtilities/Logger
56
     - "GoogleUtilities/NSData+zlib"
70
     - "GoogleUtilities/NSData+zlib"
57
     - GoogleUtilities/Reachability
71
     - GoogleUtilities/Reachability
58
-  - "GoogleUtilities/NSData+zlib (5.5.0)"
59
-  - GoogleUtilities/Reachability (5.5.0):
72
+  - "GoogleUtilities/NSData+zlib (6.3.1)"
73
+  - GoogleUtilities/Reachability (6.3.1):
60
     - GoogleUtilities/Logger
74
     - GoogleUtilities/Logger
61
-  - GoogleUtilities/UserDefaults (5.5.0):
75
+  - GoogleUtilities/UserDefaults (6.3.1):
62
     - GoogleUtilities/Logger
76
     - GoogleUtilities/Logger
63
-  - GTMSessionFetcher/Core (1.2.1)
64
-  - nanopb (0.3.901):
65
-    - nanopb/decode (= 0.3.901)
66
-    - nanopb/encode (= 0.3.901)
67
-  - nanopb/decode (0.3.901)
68
-  - nanopb/encode (0.3.901)
77
+  - GTMSessionFetcher/Core (1.3.0)
78
+  - nanopb (0.3.9011):
79
+    - nanopb/decode (= 0.3.9011)
80
+    - nanopb/encode (= 0.3.9011)
81
+  - nanopb/decode (0.3.9011)
82
+  - nanopb/encode (0.3.9011)
69
 
83
 
70
 DEPENDENCIES:
84
 DEPENDENCIES:
71
   - AWSCognitoIdentityProvider (~> 2.8.0)
85
   - AWSCognitoIdentityProvider (~> 2.8.0)
85
     - FirebaseAuth
99
     - FirebaseAuth
86
     - FirebaseAuthInterop
100
     - FirebaseAuthInterop
87
     - FirebaseCore
101
     - FirebaseCore
102
+    - FirebaseCoreDiagnostics
103
+    - FirebaseCoreDiagnosticsInterop
88
     - FirebaseInstanceID
104
     - FirebaseInstanceID
89
     - GoogleAppMeasurement
105
     - GoogleAppMeasurement
106
+    - GoogleDataTransport
107
+    - GoogleDataTransportCCTSupport
90
     - GoogleUtilities
108
     - GoogleUtilities
91
     - GTMSessionFetcher
109
     - GTMSessionFetcher
92
     - nanopb
110
     - nanopb
96
   AWSCognitoIdentityProviderASF: f94f1a502e72ef3d0a1de93e10bf7a79c8698118
114
   AWSCognitoIdentityProviderASF: f94f1a502e72ef3d0a1de93e10bf7a79c8698118
97
   AWSCore: 734b0d67c2c77f6edae9e5520431a37310ea4193
115
   AWSCore: 734b0d67c2c77f6edae9e5520431a37310ea4193
98
   AWSSNS: 42b39d6628bfb40bf5f9e3c6e4738ce68a323235
116
   AWSSNS: 42b39d6628bfb40bf5f9e3c6e4738ce68a323235
99
-  Firebase: c60d49e9c2630875a96207d15e2affb8364996d1
100
-  FirebaseAnalytics: fd72a26bf8dac84cefba2f0864366f718555a5b0
101
-  FirebaseAuth: cbb892a66baed025efc179372598941252acf853
117
+  Firebase: bc9cfc7a96c73268656d5aaab453ff1b4b530e0e
118
+  FirebaseAnalytics: 0e3ecff2c5d86070f7d4325e21f1edabfbd558dc
119
+  FirebaseAuth: b401a012cc33b04df3b52bb308b04e8766f2693e
102
   FirebaseAuthInterop: 0ffa57668be100582bb7643d4fcb7615496c41fc
120
   FirebaseAuthInterop: 0ffa57668be100582bb7643d4fcb7615496c41fc
103
-  FirebaseCore: 22a79a961c3951ef2f77b67bfbc99e454247b319
104
-  FirebaseInstanceID: cf488df2f4b79782f0e430b04a0e17c0aa7979b2
105
-  GoogleAppMeasurement: 1624046ab1bcc5e170061a56ef5679000b079c8e
106
-  GoogleUtilities: 6481e6318c5fcabaaa8513ef8120f329055d7c10
107
-  GTMSessionFetcher: 32aeca0aa144acea523e1c8e053089dec2cb98ca
108
-  nanopb: 2901f78ea1b7b4015c860c2fdd1ea2fee1a18d48
121
+  FirebaseCore: beeff42c07c30ea94702471d99db2089b594fbbd
122
+  FirebaseCoreDiagnostics: af29e43048607588c050889d19204f4d7b758c9f
123
+  FirebaseCoreDiagnosticsInterop: 6829da2b8d1fc795ff1bd99df751d3788035d2cb
124
+  FirebaseInstanceID: d0eafcd8bdbd3447cd694594734078c3e3e77d8b
125
+  GoogleAppMeasurement: 434cc7be25e71dc04b8d0e3079125127b330e84a
126
+  GoogleDataTransport: 166f9b9f82cbf60a204e8fe2daa9db3e3ec1fb15
127
+  GoogleDataTransportCCTSupport: f6ab1962e9dc05ab1fb938b795e5b310209edeec
128
+  GoogleUtilities: f895fde57977df4e0233edda0dbeac490e3703b6
129
+  GTMSessionFetcher: 43b8b64263023d4f32caa0b40f4c8bfa3c5f36d8
130
+  nanopb: 18003b5e52dab79db540fe93fe9579f399bd1ccd
109
 
131
 
110
 PODFILE CHECKSUM: b32d1d4808cf6b66bc130db9af762de0d62a6d2f
132
 PODFILE CHECKSUM: b32d1d4808cf6b66bc130db9af762de0d62a6d2f
111
 
133
 
112
-COCOAPODS: 1.6.1
134
+COCOAPODS: 1.7.4

+ 2254
- 2224
Pods/Pods.xcodeproj/project.pbxproj
File diff suppressed because it is too large
View File


+ 1
- 1
Pods/Target Support Files/FirebaseAuth/FirebaseAuth-Info.plist View File

15
   <key>CFBundlePackageType</key>
15
   <key>CFBundlePackageType</key>
16
   <string>FMWK</string>
16
   <string>FMWK</string>
17
   <key>CFBundleShortVersionString</key>
17
   <key>CFBundleShortVersionString</key>
18
-  <string>6.2.3</string>
18
+  <string>6.3.1</string>
19
   <key>CFBundleSignature</key>
19
   <key>CFBundleSignature</key>
20
   <string>????</string>
20
   <string>????</string>
21
   <key>CFBundleVersion</key>
21
   <key>CFBundleVersion</key>

+ 1
- 1
Pods/Target Support Files/FirebaseAuth/FirebaseAuth.xcconfig View File

1
 CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuth
1
 CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuth
2
 FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb"
2
 FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb"
3
 GCC_C_LANGUAGE_STANDARD = c99
3
 GCC_C_LANGUAGE_STANDARD = c99
4
-GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 FIRAuth_VERSION=6.2.3 FIRAuth_MINOR_VERSION=6.2
4
+GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 FIRAuth_VERSION=6.3.1 FIRAuth_MINOR_VERSION=6.3
5
 HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public"
5
 HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public"
6
 PODS_BUILD_DIR = ${BUILD_DIR}
6
 PODS_BUILD_DIR = ${BUILD_DIR}
7
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
7
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)

+ 1
- 1
Pods/Target Support Files/FirebaseCore/FirebaseCore-Info.plist View File

15
   <key>CFBundlePackageType</key>
15
   <key>CFBundlePackageType</key>
16
   <string>FMWK</string>
16
   <string>FMWK</string>
17
   <key>CFBundleShortVersionString</key>
17
   <key>CFBundleShortVersionString</key>
18
-  <string>6.3.0</string>
18
+  <string>6.3.2</string>
19
   <key>CFBundleSignature</key>
19
   <key>CFBundleSignature</key>
20
   <string>????</string>
20
   <string>????</string>
21
   <key>CFBundleVersion</key>
21
   <key>CFBundleVersion</key>

+ 1
- 1
Pods/Target Support Files/FirebaseCore/FirebaseCore.xcconfig View File

1
 CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore
1
 CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore
2
 FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb"
2
 FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb"
3
 GCC_C_LANGUAGE_STANDARD = c99
3
 GCC_C_LANGUAGE_STANDARD = c99
4
-GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 FIRCore_VERSION=6.3.0 Firebase_VERSION=6.9.0
4
+GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 FIRCore_VERSION=6.3.2 Firebase_VERSION=6.11.0
5
 HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public"
5
 HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public"
6
 OTHER_CFLAGS = $(inherited) -fno-autolink
6
 OTHER_CFLAGS = $(inherited) -fno-autolink
7
 PODS_BUILD_DIR = ${BUILD_DIR}
7
 PODS_BUILD_DIR = ${BUILD_DIR}

+ 1
- 1
Pods/Target Support Files/FirebaseInstanceID/FirebaseInstanceID-Info.plist View File

15
   <key>CFBundlePackageType</key>
15
   <key>CFBundlePackageType</key>
16
   <string>FMWK</string>
16
   <string>FMWK</string>
17
   <key>CFBundleShortVersionString</key>
17
   <key>CFBundleShortVersionString</key>
18
-  <string>4.2.5</string>
18
+  <string>4.2.6</string>
19
   <key>CFBundleSignature</key>
19
   <key>CFBundleSignature</key>
20
   <string>????</string>
20
   <string>????</string>
21
   <key>CFBundleVersion</key>
21
   <key>CFBundleVersion</key>

+ 1
- 1
Pods/Target Support Files/FirebaseInstanceID/FirebaseInstanceID.xcconfig View File

1
 CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstanceID
1
 CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstanceID
2
 FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb"
2
 FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreDiagnostics" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransportCCTSupport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb"
3
 GCC_C_LANGUAGE_STANDARD = c99
3
 GCC_C_LANGUAGE_STANDARD = c99
4
-GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 FIRInstanceID_LIB_VERSION=4.2.5
4
+GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 FIRInstanceID_LIB_VERSION=4.2.6
5
 HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public"
5
 HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public"
6
 PODS_BUILD_DIR = ${BUILD_DIR}
6
 PODS_BUILD_DIR = ${BUILD_DIR}
7
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
7
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)

+ 1
- 1
Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher-Info.plist View File

15
   <key>CFBundlePackageType</key>
15
   <key>CFBundlePackageType</key>
16
   <string>FMWK</string>
16
   <string>FMWK</string>
17
   <key>CFBundleShortVersionString</key>
17
   <key>CFBundleShortVersionString</key>
18
-  <string>1.2.2</string>
18
+  <string>1.3.0</string>
19
   <key>CFBundleSignature</key>
19
   <key>CFBundleSignature</key>
20
   <string>????</string>
20
   <string>????</string>
21
   <key>CFBundleVersion</key>
21
   <key>CFBundleVersion</key>

+ 1
- 1
Pods/Target Support Files/GoogleUtilities/GoogleUtilities-Info.plist View File

15
   <key>CFBundlePackageType</key>
15
   <key>CFBundlePackageType</key>
16
   <string>FMWK</string>
16
   <string>FMWK</string>
17
   <key>CFBundleShortVersionString</key>
17
   <key>CFBundleShortVersionString</key>
18
-  <string>6.3.0</string>
18
+  <string>6.3.1</string>
19
   <key>CFBundleSignature</key>
19
   <key>CFBundleSignature</key>
20
   <string>????</string>
20
   <string>????</string>
21
   <key>CFBundleVersion</key>
21
   <key>CFBundleVersion</key>

+ 203
- 1
Pods/Target Support Files/Pods-EncuestaMarle/Pods-EncuestaMarle-acknowledgements.markdown View File

23
 
23
 
24
 ## Firebase
24
 ## Firebase
25
 
25
 
26
-Copyright 2019 Google
26
+
27
+                                 Apache License
28
+                           Version 2.0, January 2004
29
+                        http://www.apache.org/licenses/
30
+
31
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
32
+
33
+   1. Definitions.
34
+
35
+      "License" shall mean the terms and conditions for use, reproduction,
36
+      and distribution as defined by Sections 1 through 9 of this document.
37
+
38
+      "Licensor" shall mean the copyright owner or entity authorized by
39
+      the copyright owner that is granting the License.
40
+
41
+      "Legal Entity" shall mean the union of the acting entity and all
42
+      other entities that control, are controlled by, or are under common
43
+      control with that entity. For the purposes of this definition,
44
+      "control" means (i) the power, direct or indirect, to cause the
45
+      direction or management of such entity, whether by contract or
46
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
47
+      outstanding shares, or (iii) beneficial ownership of such entity.
48
+
49
+      "You" (or "Your") shall mean an individual or Legal Entity
50
+      exercising permissions granted by this License.
51
+
52
+      "Source" form shall mean the preferred form for making modifications,
53
+      including but not limited to software source code, documentation
54
+      source, and configuration files.
55
+
56
+      "Object" form shall mean any form resulting from mechanical
57
+      transformation or translation of a Source form, including but
58
+      not limited to compiled object code, generated documentation,
59
+      and conversions to other media types.
60
+
61
+      "Work" shall mean the work of authorship, whether in Source or
62
+      Object form, made available under the License, as indicated by a
63
+      copyright notice that is included in or attached to the work
64
+      (an example is provided in the Appendix below).
65
+
66
+      "Derivative Works" shall mean any work, whether in Source or Object
67
+      form, that is based on (or derived from) the Work and for which the
68
+      editorial revisions, annotations, elaborations, or other modifications
69
+      represent, as a whole, an original work of authorship. For the purposes
70
+      of this License, Derivative Works shall not include works that remain
71
+      separable from, or merely link (or bind by name) to the interfaces of,
72
+      the Work and Derivative Works thereof.
73
+
74
+      "Contribution" shall mean any work of authorship, including
75
+      the original version of the Work and any modifications or additions
76
+      to that Work or Derivative Works thereof, that is intentionally
77
+      submitted to Licensor for inclusion in the Work by the copyright owner
78
+      or by an individual or Legal Entity authorized to submit on behalf of
79
+      the copyright owner. For the purposes of this definition, "submitted"
80
+      means any form of electronic, verbal, or written communication sent
81
+      to the Licensor or its representatives, including but not limited to
82
+      communication on electronic mailing lists, source code control systems,
83
+      and issue tracking systems that are managed by, or on behalf of, the
84
+      Licensor for the purpose of discussing and improving the Work, but
85
+      excluding communication that is conspicuously marked or otherwise
86
+      designated in writing by the copyright owner as "Not a Contribution."
87
+
88
+      "Contributor" shall mean Licensor and any individual or Legal Entity
89
+      on behalf of whom a Contribution has been received by Licensor and
90
+      subsequently incorporated within the Work.
91
+
92
+   2. Grant of Copyright License. Subject to the terms and conditions of
93
+      this License, each Contributor hereby grants to You a perpetual,
94
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
95
+      copyright license to reproduce, prepare Derivative Works of,
96
+      publicly display, publicly perform, sublicense, and distribute the
97
+      Work and such Derivative Works in Source or Object form.
98
+
99
+   3. Grant of Patent License. Subject to the terms and conditions of
100
+      this License, each Contributor hereby grants to You a perpetual,
101
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
102
+      (except as stated in this section) patent license to make, have made,
103
+      use, offer to sell, sell, import, and otherwise transfer the Work,
104
+      where such license applies only to those patent claims licensable
105
+      by such Contributor that are necessarily infringed by their
106
+      Contribution(s) alone or by combination of their Contribution(s)
107
+      with the Work to which such Contribution(s) was submitted. If You
108
+      institute patent litigation against any entity (including a
109
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
110
+      or a Contribution incorporated within the Work constitutes direct
111
+      or contributory patent infringement, then any patent licenses
112
+      granted to You under this License for that Work shall terminate
113
+      as of the date such litigation is filed.
114
+
115
+   4. Redistribution. You may reproduce and distribute copies of the
116
+      Work or Derivative Works thereof in any medium, with or without
117
+      modifications, and in Source or Object form, provided that You
118
+      meet the following conditions:
119
+
120
+      (a) You must give any other recipients of the Work or
121
+          Derivative Works a copy of this License; and
122
+
123
+      (b) You must cause any modified files to carry prominent notices
124
+          stating that You changed the files; and
125
+
126
+      (c) You must retain, in the Source form of any Derivative Works
127
+          that You distribute, all copyright, patent, trademark, and
128
+          attribution notices from the Source form of the Work,
129
+          excluding those notices that do not pertain to any part of
130
+          the Derivative Works; and
131
+
132
+      (d) If the Work includes a "NOTICE" text file as part of its
133
+          distribution, then any Derivative Works that You distribute must
134
+          include a readable copy of the attribution notices contained
135
+          within such NOTICE file, excluding those notices that do not
136
+          pertain to any part of the Derivative Works, in at least one
137
+          of the following places: within a NOTICE text file distributed
138
+          as part of the Derivative Works; within the Source form or
139
+          documentation, if provided along with the Derivative Works; or,
140
+          within a display generated by the Derivative Works, if and
141
+          wherever such third-party notices normally appear. The contents
142
+          of the NOTICE file are for informational purposes only and
143
+          do not modify the License. You may add Your own attribution
144
+          notices within Derivative Works that You distribute, alongside
145
+          or as an addendum to the NOTICE text from the Work, provided
146
+          that such additional attribution notices cannot be construed
147
+          as modifying the License.
148
+
149
+      You may add Your own copyright statement to Your modifications and
150
+      may provide additional or different license terms and conditions
151
+      for use, reproduction, or distribution of Your modifications, or
152
+      for any such Derivative Works as a whole, provided Your use,
153
+      reproduction, and distribution of the Work otherwise complies with
154
+      the conditions stated in this License.
155
+
156
+   5. Submission of Contributions. Unless You explicitly state otherwise,
157
+      any Contribution intentionally submitted for inclusion in the Work
158
+      by You to the Licensor shall be under the terms and conditions of
159
+      this License, without any additional terms or conditions.
160
+      Notwithstanding the above, nothing herein shall supersede or modify
161
+      the terms of any separate license agreement you may have executed
162
+      with Licensor regarding such Contributions.
163
+
164
+   6. Trademarks. This License does not grant permission to use the trade
165
+      names, trademarks, service marks, or product names of the Licensor,
166
+      except as required for reasonable and customary use in describing the
167
+      origin of the Work and reproducing the content of the NOTICE file.
168
+
169
+   7. Disclaimer of Warranty. Unless required by applicable law or
170
+      agreed to in writing, Licensor provides the Work (and each
171
+      Contributor provides its Contributions) on an "AS IS" BASIS,
172
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
173
+      implied, including, without limitation, any warranties or conditions
174
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
175
+      PARTICULAR PURPOSE. You are solely responsible for determining the
176
+      appropriateness of using or redistributing the Work and assume any
177
+      risks associated with Your exercise of permissions under this License.
178
+
179
+   8. Limitation of Liability. In no event and under no legal theory,
180
+      whether in tort (including negligence), contract, or otherwise,
181
+      unless required by applicable law (such as deliberate and grossly
182
+      negligent acts) or agreed to in writing, shall any Contributor be
183
+      liable to You for damages, including any direct, indirect, special,
184
+      incidental, or consequential damages of any character arising as a
185
+      result of this License or out of the use or inability to use the
186
+      Work (including but not limited to damages for loss of goodwill,
187
+      work stoppage, computer failure or malfunction, or any and all
188
+      other commercial damages or losses), even if such Contributor
189
+      has been advised of the possibility of such damages.
190
+
191
+   9. Accepting Warranty or Additional Liability. While redistributing
192
+      the Work or Derivative Works thereof, You may choose to offer,
193
+      and charge a fee for, acceptance of support, warranty, indemnity,
194
+      or other liability obligations and/or rights consistent with this
195
+      License. However, in accepting such obligations, You may act only
196
+      on Your own behalf and on Your sole responsibility, not on behalf
197
+      of any other Contributor, and only if You agree to indemnify,
198
+      defend, and hold each Contributor harmless for any liability
199
+      incurred by, or claims asserted against, such Contributor by reason
200
+      of your accepting any such warranty or additional liability.
201
+
202
+   END OF TERMS AND CONDITIONS
203
+
204
+   APPENDIX: How to apply the Apache License to your work.
205
+
206
+      To apply the Apache License to your work, attach the following
207
+      boilerplate notice, with the fields enclosed by brackets "[]"
208
+      replaced with your own identifying information. (Don't include
209
+      the brackets!)  The text should be enclosed in the appropriate
210
+      comment syntax for the file format. We also recommend that a
211
+      file or class name and description of purpose be included on the
212
+      same "printed page" as the copyright notice for easier
213
+      identification within third-party archives.
214
+
215
+   Copyright [yyyy] [name of copyright owner]
216
+
217
+   Licensed under the Apache License, Version 2.0 (the "License");
218
+   you may not use this file except in compliance with the License.
219
+   You may obtain a copy of the License at
220
+
221
+       http://www.apache.org/licenses/LICENSE-2.0
222
+
223
+   Unless required by applicable law or agreed to in writing, software
224
+   distributed under the License is distributed on an "AS IS" BASIS,
225
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
226
+   See the License for the specific language governing permissions and
227
+   limitations under the License.
228
+
27
 
229
 
28
 ## FirebaseAnalytics
230
 ## FirebaseAnalytics
29
 
231
 

+ 204
- 2
Pods/Target Support Files/Pods-EncuestaMarle/Pods-EncuestaMarle-acknowledgements.plist View File

58
 		</dict>
58
 		</dict>
59
 		<dict>
59
 		<dict>
60
 			<key>FooterText</key>
60
 			<key>FooterText</key>
61
-			<string>Copyright 2019 Google</string>
61
+			<string>
62
+                                 Apache License
63
+                           Version 2.0, January 2004
64
+                        http://www.apache.org/licenses/
65
+
66
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
67
+
68
+   1. Definitions.
69
+
70
+      "License" shall mean the terms and conditions for use, reproduction,
71
+      and distribution as defined by Sections 1 through 9 of this document.
72
+
73
+      "Licensor" shall mean the copyright owner or entity authorized by
74
+      the copyright owner that is granting the License.
75
+
76
+      "Legal Entity" shall mean the union of the acting entity and all
77
+      other entities that control, are controlled by, or are under common
78
+      control with that entity. For the purposes of this definition,
79
+      "control" means (i) the power, direct or indirect, to cause the
80
+      direction or management of such entity, whether by contract or
81
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
82
+      outstanding shares, or (iii) beneficial ownership of such entity.
83
+
84
+      "You" (or "Your") shall mean an individual or Legal Entity
85
+      exercising permissions granted by this License.
86
+
87
+      "Source" form shall mean the preferred form for making modifications,
88
+      including but not limited to software source code, documentation
89
+      source, and configuration files.
90
+
91
+      "Object" form shall mean any form resulting from mechanical
92
+      transformation or translation of a Source form, including but
93
+      not limited to compiled object code, generated documentation,
94
+      and conversions to other media types.
95
+
96
+      "Work" shall mean the work of authorship, whether in Source or
97
+      Object form, made available under the License, as indicated by a
98
+      copyright notice that is included in or attached to the work
99
+      (an example is provided in the Appendix below).
100
+
101
+      "Derivative Works" shall mean any work, whether in Source or Object
102
+      form, that is based on (or derived from) the Work and for which the
103
+      editorial revisions, annotations, elaborations, or other modifications
104
+      represent, as a whole, an original work of authorship. For the purposes
105
+      of this License, Derivative Works shall not include works that remain
106
+      separable from, or merely link (or bind by name) to the interfaces of,
107
+      the Work and Derivative Works thereof.
108
+
109
+      "Contribution" shall mean any work of authorship, including
110
+      the original version of the Work and any modifications or additions
111
+      to that Work or Derivative Works thereof, that is intentionally
112
+      submitted to Licensor for inclusion in the Work by the copyright owner
113
+      or by an individual or Legal Entity authorized to submit on behalf of
114
+      the copyright owner. For the purposes of this definition, "submitted"
115
+      means any form of electronic, verbal, or written communication sent
116
+      to the Licensor or its representatives, including but not limited to
117
+      communication on electronic mailing lists, source code control systems,
118
+      and issue tracking systems that are managed by, or on behalf of, the
119
+      Licensor for the purpose of discussing and improving the Work, but
120
+      excluding communication that is conspicuously marked or otherwise
121
+      designated in writing by the copyright owner as "Not a Contribution."
122
+
123
+      "Contributor" shall mean Licensor and any individual or Legal Entity
124
+      on behalf of whom a Contribution has been received by Licensor and
125
+      subsequently incorporated within the Work.
126
+
127
+   2. Grant of Copyright License. Subject to the terms and conditions of
128
+      this License, each Contributor hereby grants to You a perpetual,
129
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
130
+      copyright license to reproduce, prepare Derivative Works of,
131
+      publicly display, publicly perform, sublicense, and distribute the
132
+      Work and such Derivative Works in Source or Object form.
133
+
134
+   3. Grant of Patent License. Subject to the terms and conditions of
135
+      this License, each Contributor hereby grants to You a perpetual,
136
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
137
+      (except as stated in this section) patent license to make, have made,
138
+      use, offer to sell, sell, import, and otherwise transfer the Work,
139
+      where such license applies only to those patent claims licensable
140
+      by such Contributor that are necessarily infringed by their
141
+      Contribution(s) alone or by combination of their Contribution(s)
142
+      with the Work to which such Contribution(s) was submitted. If You
143
+      institute patent litigation against any entity (including a
144
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
145
+      or a Contribution incorporated within the Work constitutes direct
146
+      or contributory patent infringement, then any patent licenses
147
+      granted to You under this License for that Work shall terminate
148
+      as of the date such litigation is filed.
149
+
150
+   4. Redistribution. You may reproduce and distribute copies of the
151
+      Work or Derivative Works thereof in any medium, with or without
152
+      modifications, and in Source or Object form, provided that You
153
+      meet the following conditions:
154
+
155
+      (a) You must give any other recipients of the Work or
156
+          Derivative Works a copy of this License; and
157
+
158
+      (b) You must cause any modified files to carry prominent notices
159
+          stating that You changed the files; and
160
+
161
+      (c) You must retain, in the Source form of any Derivative Works
162
+          that You distribute, all copyright, patent, trademark, and
163
+          attribution notices from the Source form of the Work,
164
+          excluding those notices that do not pertain to any part of
165
+          the Derivative Works; and
166
+
167
+      (d) If the Work includes a "NOTICE" text file as part of its
168
+          distribution, then any Derivative Works that You distribute must
169
+          include a readable copy of the attribution notices contained
170
+          within such NOTICE file, excluding those notices that do not
171
+          pertain to any part of the Derivative Works, in at least one
172
+          of the following places: within a NOTICE text file distributed
173
+          as part of the Derivative Works; within the Source form or
174
+          documentation, if provided along with the Derivative Works; or,
175
+          within a display generated by the Derivative Works, if and
176
+          wherever such third-party notices normally appear. The contents
177
+          of the NOTICE file are for informational purposes only and
178
+          do not modify the License. You may add Your own attribution
179
+          notices within Derivative Works that You distribute, alongside
180
+          or as an addendum to the NOTICE text from the Work, provided
181
+          that such additional attribution notices cannot be construed
182
+          as modifying the License.
183
+
184
+      You may add Your own copyright statement to Your modifications and
185
+      may provide additional or different license terms and conditions
186
+      for use, reproduction, or distribution of Your modifications, or
187
+      for any such Derivative Works as a whole, provided Your use,
188
+      reproduction, and distribution of the Work otherwise complies with
189
+      the conditions stated in this License.
190
+
191
+   5. Submission of Contributions. Unless You explicitly state otherwise,
192
+      any Contribution intentionally submitted for inclusion in the Work
193
+      by You to the Licensor shall be under the terms and conditions of
194
+      this License, without any additional terms or conditions.
195
+      Notwithstanding the above, nothing herein shall supersede or modify
196
+      the terms of any separate license agreement you may have executed
197
+      with Licensor regarding such Contributions.
198
+
199
+   6. Trademarks. This License does not grant permission to use the trade
200
+      names, trademarks, service marks, or product names of the Licensor,
201
+      except as required for reasonable and customary use in describing the
202
+      origin of the Work and reproducing the content of the NOTICE file.
203
+
204
+   7. Disclaimer of Warranty. Unless required by applicable law or
205
+      agreed to in writing, Licensor provides the Work (and each
206
+      Contributor provides its Contributions) on an "AS IS" BASIS,
207
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
208
+      implied, including, without limitation, any warranties or conditions
209
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
210
+      PARTICULAR PURPOSE. You are solely responsible for determining the
211
+      appropriateness of using or redistributing the Work and assume any
212
+      risks associated with Your exercise of permissions under this License.
213
+
214
+   8. Limitation of Liability. In no event and under no legal theory,
215
+      whether in tort (including negligence), contract, or otherwise,
216
+      unless required by applicable law (such as deliberate and grossly
217
+      negligent acts) or agreed to in writing, shall any Contributor be
218
+      liable to You for damages, including any direct, indirect, special,
219
+      incidental, or consequential damages of any character arising as a
220
+      result of this License or out of the use or inability to use the
221
+      Work (including but not limited to damages for loss of goodwill,
222
+      work stoppage, computer failure or malfunction, or any and all
223
+      other commercial damages or losses), even if such Contributor
224
+      has been advised of the possibility of such damages.
225
+
226
+   9. Accepting Warranty or Additional Liability. While redistributing
227
+      the Work or Derivative Works thereof, You may choose to offer,
228
+      and charge a fee for, acceptance of support, warranty, indemnity,
229
+      or other liability obligations and/or rights consistent with this
230
+      License. However, in accepting such obligations, You may act only
231
+      on Your own behalf and on Your sole responsibility, not on behalf
232
+      of any other Contributor, and only if You agree to indemnify,
233
+      defend, and hold each Contributor harmless for any liability
234
+      incurred by, or claims asserted against, such Contributor by reason
235
+      of your accepting any such warranty or additional liability.
236
+
237
+   END OF TERMS AND CONDITIONS
238
+
239
+   APPENDIX: How to apply the Apache License to your work.
240
+
241
+      To apply the Apache License to your work, attach the following
242
+      boilerplate notice, with the fields enclosed by brackets "[]"
243
+      replaced with your own identifying information. (Don't include
244
+      the brackets!)  The text should be enclosed in the appropriate
245
+      comment syntax for the file format. We also recommend that a
246
+      file or class name and description of purpose be included on the
247
+      same "printed page" as the copyright notice for easier
248
+      identification within third-party archives.
249
+
250
+   Copyright [yyyy] [name of copyright owner]
251
+
252
+   Licensed under the Apache License, Version 2.0 (the "License");
253
+   you may not use this file except in compliance with the License.
254
+   You may obtain a copy of the License at
255
+
256
+       http://www.apache.org/licenses/LICENSE-2.0
257
+
258
+   Unless required by applicable law or agreed to in writing, software
259
+   distributed under the License is distributed on an "AS IS" BASIS,
260
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
261
+   See the License for the specific language governing permissions and
262
+   limitations under the License.
263
+</string>
62
 			<key>License</key>
264
 			<key>License</key>
63
-			<string>Copyright</string>
265
+			<string>Apache</string>
64
 			<key>Title</key>
266
 			<key>Title</key>
65
 			<string>Firebase</string>
267
 			<string>Firebase</string>
66
 			<key>Type</key>
268
 			<key>Type</key>

+ 1
- 1
Pods/Target Support Files/nanopb/nanopb-Info.plist View File

15
   <key>CFBundlePackageType</key>
15
   <key>CFBundlePackageType</key>
16
   <string>FMWK</string>
16
   <string>FMWK</string>
17
   <key>CFBundleShortVersionString</key>
17
   <key>CFBundleShortVersionString</key>
18
-  <string>0.3.901</string>
18
+  <string>0.3.9011</string>
19
   <key>CFBundleSignature</key>
19
   <key>CFBundleSignature</key>
20
   <string>????</string>
20
   <string>????</string>
21
   <key>CFBundleVersion</key>
21
   <key>CFBundleVersion</key>

+ 0
- 0
Pods/nanopb/LICENSE.txt View File


+ 0
- 0
Pods/nanopb/README.md View File


+ 0
- 0
Pods/nanopb/pb.h View File


+ 0
- 0
Pods/nanopb/pb_common.c View File


+ 0
- 0
Pods/nanopb/pb_common.h View File


+ 0
- 0
Pods/nanopb/pb_decode.c View File


+ 0
- 0
Pods/nanopb/pb_decode.h View File


+ 0
- 0
Pods/nanopb/pb_encode.c View File


+ 0
- 0
Pods/nanopb/pb_encode.h View File