cocoapods-catalyst-validator 0.1.0.beta.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (515) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +3 -0
  3. data/Gemfile +5 -0
  4. data/Gemfile.lock +107 -0
  5. data/LICENSE.txt +22 -0
  6. data/README.md +18 -0
  7. data/Rakefile +13 -0
  8. data/cocoapods-catalyst-validator.gemspec +23 -0
  9. data/examples/AExample/AExample/AExample.entitlements +10 -0
  10. data/examples/AExample/AExample/AppDelegate.h +14 -0
  11. data/examples/AExample/AExample/AppDelegate.m +40 -0
  12. data/examples/AExample/AExample/Assets.xcassets/AccentColor.colorset/Contents.json +11 -0
  13. data/examples/AExample/AExample/Assets.xcassets/AppIcon.appiconset/Contents.json +98 -0
  14. data/examples/AExample/AExample/Assets.xcassets/Contents.json +6 -0
  15. data/examples/AExample/AExample/Base.lproj/LaunchScreen.storyboard +25 -0
  16. data/examples/AExample/AExample/Base.lproj/Main.storyboard +24 -0
  17. data/examples/AExample/AExample/Info.plist +25 -0
  18. data/examples/AExample/AExample/SceneDelegate.h +15 -0
  19. data/examples/AExample/AExample/SceneDelegate.m +57 -0
  20. data/examples/AExample/AExample/ViewController.h +14 -0
  21. data/examples/AExample/AExample/ViewController.m +22 -0
  22. data/examples/AExample/AExample/main.m +18 -0
  23. data/examples/AExample/AExample.xcodeproj/project.pbxproj +664 -0
  24. data/examples/AExample/AExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  25. data/examples/AExample/AExample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  26. data/examples/AExample/AExample.xcodeproj/project.xcworkspace/xcuserdata/xuzhongping.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  27. data/examples/AExample/AExample.xcodeproj/xcuserdata/xuzhongping.xcuserdatad/xcschemes/xcschememanagement.plist +19 -0
  28. data/examples/AExample/AExample.xcworkspace/contents.xcworkspacedata +10 -0
  29. data/examples/AExample/AExample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  30. data/examples/AExample/AExample.xcworkspace/xcuserdata/xuzhongping.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  31. data/examples/AExample/AExampleCP/AppDelegate.h +14 -0
  32. data/examples/AExample/AExampleCP/AppDelegate.m +40 -0
  33. data/examples/AExample/AExampleCP/Assets.xcassets/AccentColor.colorset/Contents.json +11 -0
  34. data/examples/AExample/AExampleCP/Assets.xcassets/AppIcon.appiconset/Contents.json +98 -0
  35. data/examples/AExample/AExampleCP/Assets.xcassets/Contents.json +6 -0
  36. data/examples/AExample/AExampleCP/Base.lproj/LaunchScreen.storyboard +25 -0
  37. data/examples/AExample/AExampleCP/Base.lproj/Main.storyboard +24 -0
  38. data/examples/AExample/AExampleCP/Info.plist +25 -0
  39. data/examples/AExample/AExampleCP/SceneDelegate.h +15 -0
  40. data/examples/AExample/AExampleCP/SceneDelegate.m +57 -0
  41. data/examples/AExample/AExampleCP/ViewController.h +14 -0
  42. data/examples/AExample/AExampleCP/ViewController.m +22 -0
  43. data/examples/AExample/AExampleCP/main.m +18 -0
  44. data/examples/AExample/Podfile +24 -0
  45. data/examples/AExample/Podfile.lock +112 -0
  46. data/examples/AExample/Pods/Bugly/Bugly.framework/Bugly +0 -0
  47. data/examples/AExample/Pods/Bugly/Bugly.framework/Headers/Bugly.h +163 -0
  48. data/examples/AExample/Pods/Bugly/Bugly.framework/Headers/BuglyConfig.h +149 -0
  49. data/examples/AExample/Pods/Bugly/Bugly.framework/Headers/BuglyLog.h +78 -0
  50. data/examples/AExample/Pods/Bugly/Bugly.framework/Modules/module.modulemap +12 -0
  51. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/Info.plist +97 -0
  52. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_armv7/FirebaseAnalytics.framework/FirebaseAnalytics +0 -0
  53. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_armv7/FirebaseAnalytics.framework/Headers/FIRAnalytics+AppDelegate.h +62 -0
  54. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_armv7/FirebaseAnalytics.framework/Headers/FIRAnalytics+Consent.h +33 -0
  55. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_armv7/FirebaseAnalytics.framework/Headers/FIRAnalytics.h +142 -0
  56. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_armv7/FirebaseAnalytics.framework/Headers/FIREventNames.h +495 -0
  57. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_armv7/FirebaseAnalytics.framework/Headers/FIRParameterNames.h +731 -0
  58. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_armv7/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h +29 -0
  59. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_armv7/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h +6 -0
  60. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_armv7/FirebaseAnalytics.framework/Info.plist +20 -0
  61. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_armv7/FirebaseAnalytics.framework/Modules/module.modulemap +13 -0
  62. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/FirebaseAnalytics.framework/FirebaseAnalytics +0 -0
  63. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIRAnalytics+AppDelegate.h +62 -0
  64. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIRAnalytics+Consent.h +33 -0
  65. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIRAnalytics.h +142 -0
  66. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIREventNames.h +495 -0
  67. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIRParameterNames.h +731 -0
  68. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h +29 -0
  69. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h +6 -0
  70. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/FirebaseAnalytics.framework/Info.plist +20 -0
  71. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/FirebaseAnalytics.framework/Modules/module.modulemap +13 -0
  72. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/FirebaseAnalytics +0 -0
  73. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/Headers/FIRAnalytics+AppDelegate.h +62 -0
  74. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/Headers/FIRAnalytics+Consent.h +33 -0
  75. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/Headers/FIRAnalytics.h +142 -0
  76. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/Headers/FIREventNames.h +495 -0
  77. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/Headers/FIRParameterNames.h +731 -0
  78. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h +29 -0
  79. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h +6 -0
  80. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/Info.plist +20 -0
  81. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/Modules/module.modulemap +13 -0
  82. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/FirebaseAnalytics +0 -0
  83. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/Headers/FIRAnalytics+AppDelegate.h +62 -0
  84. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/Headers/FIRAnalytics+Consent.h +33 -0
  85. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/Headers/FIRAnalytics.h +142 -0
  86. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/Headers/FIREventNames.h +495 -0
  87. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/Headers/FIRParameterNames.h +731 -0
  88. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h +29 -0
  89. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h +6 -0
  90. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/Info.plist +20 -0
  91. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/Modules/module.modulemap +13 -0
  92. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/FirebaseAnalytics +0 -0
  93. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/Headers/FIRAnalytics+AppDelegate.h +62 -0
  94. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/Headers/FIRAnalytics+Consent.h +33 -0
  95. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/Headers/FIRAnalytics.h +142 -0
  96. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/Headers/FIREventNames.h +495 -0
  97. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/Headers/FIRParameterNames.h +731 -0
  98. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h +29 -0
  99. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h +6 -0
  100. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/Info.plist +20 -0
  101. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/Modules/module.modulemap +12 -0
  102. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/FirebaseAnalytics +0 -0
  103. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIRAnalytics+AppDelegate.h +62 -0
  104. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIRAnalytics+Consent.h +33 -0
  105. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIRAnalytics.h +142 -0
  106. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIREventNames.h +495 -0
  107. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIRParameterNames.h +731 -0
  108. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h +29 -0
  109. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h +6 -0
  110. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/Info.plist +20 -0
  111. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/Modules/module.modulemap +12 -0
  112. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/FIRAnalyticsConfiguration.h +56 -0
  113. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/FIRAnalyticsConfiguration.m +62 -0
  114. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/FIRApp.m +856 -0
  115. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/FIRAppAssociationRegistration.h +49 -0
  116. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/FIRAppAssociationRegistration.m +47 -0
  117. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/FIRBundleUtil.h +53 -0
  118. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/FIRBundleUtil.m +79 -0
  119. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/FIRComponent.m +65 -0
  120. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/FIRComponentContainer.m +214 -0
  121. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/FIRComponentContainerInternal.h +49 -0
  122. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/FIRComponentType.m +28 -0
  123. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/FIRConfiguration.m +46 -0
  124. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/FIRConfigurationInternal.h +29 -0
  125. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/FIRCoreDiagnosticsConnector.m +61 -0
  126. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/FIRDependency.m +44 -0
  127. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/FIRDiagnosticsData.h +35 -0
  128. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/FIRDiagnosticsData.m +66 -0
  129. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/FIRFirebaseUserAgent.h +36 -0
  130. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/FIRFirebaseUserAgent.m +107 -0
  131. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/FIRHeartbeatInfo.m +72 -0
  132. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/FIRLogger.m +174 -0
  133. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/FIROptions.m +498 -0
  134. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/FIRVersion.m +32 -0
  135. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRAppInternal.h +153 -0
  136. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRComponent.h +91 -0
  137. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRComponentContainer.h +41 -0
  138. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRComponentType.h +34 -0
  139. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRCoreDiagnosticsConnector.h +35 -0
  140. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRDependency.h +45 -0
  141. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRHeartbeatInfo.h +39 -0
  142. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRLibrary.h +44 -0
  143. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRLogger.h +146 -0
  144. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIROptionsInternal.h +115 -0
  145. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/Private/FirebaseCoreInternal.h +28 -0
  146. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/Public/FirebaseCore/FIRApp.h +127 -0
  147. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/Public/FirebaseCore/FIRConfiguration.h +45 -0
  148. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/Public/FirebaseCore/FIRLoggerLevel.h +38 -0
  149. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/Public/FirebaseCore/FIROptions.h +126 -0
  150. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/Public/FirebaseCore/FIRVersion.h +25 -0
  151. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/Public/FirebaseCore/FirebaseCore.h +21 -0
  152. data/examples/AExample/Pods/FirebaseCore/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsData.h +61 -0
  153. data/examples/AExample/Pods/FirebaseCore/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsInterop.h +34 -0
  154. data/examples/AExample/Pods/FirebaseCore/LICENSE +202 -0
  155. data/examples/AExample/Pods/FirebaseCore/README.md +319 -0
  156. data/examples/AExample/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/FIRCoreDiagnostics.m +551 -0
  157. data/examples/AExample/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.c +60 -0
  158. data/examples/AExample/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.h +193 -0
  159. data/examples/AExample/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/Public/FIRCoreDiagnostics.h +18 -0
  160. data/examples/AExample/Pods/FirebaseCoreDiagnostics/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsData.h +61 -0
  161. data/examples/AExample/Pods/FirebaseCoreDiagnostics/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsInterop.h +34 -0
  162. data/examples/AExample/Pods/FirebaseCoreDiagnostics/LICENSE +202 -0
  163. data/examples/AExample/Pods/FirebaseCoreDiagnostics/README.md +319 -0
  164. data/examples/AExample/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRAppInternal.h +153 -0
  165. data/examples/AExample/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRComponent.h +91 -0
  166. data/examples/AExample/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRComponentContainer.h +41 -0
  167. data/examples/AExample/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRComponentType.h +34 -0
  168. data/examples/AExample/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRCoreDiagnosticsConnector.h +35 -0
  169. data/examples/AExample/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRDependency.h +45 -0
  170. data/examples/AExample/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRHeartbeatInfo.h +39 -0
  171. data/examples/AExample/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRLibrary.h +44 -0
  172. data/examples/AExample/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRLogger.h +146 -0
  173. data/examples/AExample/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIROptionsInternal.h +115 -0
  174. data/examples/AExample/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FirebaseCoreInternal.h +28 -0
  175. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Errors/FIRInstallationsErrorUtil.h +65 -0
  176. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Errors/FIRInstallationsErrorUtil.m +145 -0
  177. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Errors/FIRInstallationsHTTPError.h +53 -0
  178. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Errors/FIRInstallationsHTTPError.m +79 -0
  179. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallations.m +282 -0
  180. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsAuthTokenResult.m +30 -0
  181. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsAuthTokenResultInternal.h +27 -0
  182. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsItem.h +93 -0
  183. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsItem.m +161 -0
  184. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsLogger.h +52 -0
  185. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsLogger.m +50 -0
  186. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDStore.h +48 -0
  187. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDStore.m +242 -0
  188. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDTokenStore.h +36 -0
  189. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDTokenStore.m +158 -0
  190. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsAPIService.h +62 -0
  191. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsAPIService.m +380 -0
  192. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsItem+RegisterInstallationAPI.h +53 -0
  193. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsItem+RegisterInstallationAPI.m +142 -0
  194. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRCurrentDateProvider.h +27 -0
  195. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRCurrentDateProvider.m +23 -0
  196. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsBackoffController.h +54 -0
  197. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsBackoffController.m +132 -0
  198. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsIDController.h +44 -0
  199. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsIDController.m +531 -0
  200. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsSingleOperationPromiseCache.h +58 -0
  201. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsSingleOperationPromiseCache.m +75 -0
  202. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsStatus.h +35 -0
  203. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStore.h +71 -0
  204. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStore.m +126 -0
  205. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredAuthToken.h +58 -0
  206. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredAuthToken.m +77 -0
  207. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredItem.h +51 -0
  208. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredItem.m +80 -0
  209. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Private/FirebaseInstallationsInternal.h +19 -0
  210. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Public/FirebaseInstallations/FIRInstallations.h +127 -0
  211. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Public/FirebaseInstallations/FIRInstallationsAuthTokenResult.h +33 -0
  212. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Public/FirebaseInstallations/FIRInstallationsErrors.h +34 -0
  213. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Public/FirebaseInstallations/FirebaseInstallations.h +19 -0
  214. data/examples/AExample/Pods/FirebaseInstallations/LICENSE +202 -0
  215. data/examples/AExample/Pods/FirebaseInstallations/README.md +319 -0
  216. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/Info.plist +97 -0
  217. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/ios-arm64_armv7/GoogleAppMeasurement.framework/GoogleAppMeasurement +0 -0
  218. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/ios-arm64_armv7/GoogleAppMeasurement.framework/Info.plist +20 -0
  219. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/ios-arm64_armv7/GoogleAppMeasurement.framework/Modules/module.modulemap +10 -0
  220. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAppMeasurement.framework/GoogleAppMeasurement +0 -0
  221. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAppMeasurement.framework/Info.plist +20 -0
  222. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAppMeasurement.framework/Modules/module.modulemap +10 -0
  223. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAppMeasurement.framework/GoogleAppMeasurement +0 -0
  224. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAppMeasurement.framework/Info.plist +20 -0
  225. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAppMeasurement.framework/Modules/module.modulemap +10 -0
  226. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/macos-arm64_x86_64/GoogleAppMeasurement.framework/GoogleAppMeasurement +0 -0
  227. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/macos-arm64_x86_64/GoogleAppMeasurement.framework/Info.plist +20 -0
  228. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/macos-arm64_x86_64/GoogleAppMeasurement.framework/Modules/module.modulemap +10 -0
  229. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/tvos-arm64/GoogleAppMeasurement.framework/GoogleAppMeasurement +0 -0
  230. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/tvos-arm64/GoogleAppMeasurement.framework/Info.plist +20 -0
  231. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/tvos-arm64/GoogleAppMeasurement.framework/Modules/module.modulemap +10 -0
  232. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/tvos-arm64_x86_64-simulator/GoogleAppMeasurement.framework/GoogleAppMeasurement +0 -0
  233. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/tvos-arm64_x86_64-simulator/GoogleAppMeasurement.framework/Info.plist +20 -0
  234. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/tvos-arm64_x86_64-simulator/GoogleAppMeasurement.framework/Modules/module.modulemap +10 -0
  235. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/Info.plist +97 -0
  236. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/ios-arm64_armv7/GoogleAppMeasurementIdentitySupport.framework/GoogleAppMeasurementIdentitySupport +0 -0
  237. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/ios-arm64_armv7/GoogleAppMeasurementIdentitySupport.framework/Info.plist +20 -0
  238. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/ios-arm64_armv7/GoogleAppMeasurementIdentitySupport.framework/Modules/module.modulemap +5 -0
  239. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAppMeasurementIdentitySupport.framework/GoogleAppMeasurementIdentitySupport +0 -0
  240. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAppMeasurementIdentitySupport.framework/Info.plist +20 -0
  241. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAppMeasurementIdentitySupport.framework/Modules/module.modulemap +5 -0
  242. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAppMeasurementIdentitySupport.framework/GoogleAppMeasurementIdentitySupport +0 -0
  243. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAppMeasurementIdentitySupport.framework/Info.plist +20 -0
  244. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAppMeasurementIdentitySupport.framework/Modules/module.modulemap +5 -0
  245. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/macos-arm64_x86_64/GoogleAppMeasurementIdentitySupport.framework/GoogleAppMeasurementIdentitySupport +0 -0
  246. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/macos-arm64_x86_64/GoogleAppMeasurementIdentitySupport.framework/Info.plist +20 -0
  247. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/macos-arm64_x86_64/GoogleAppMeasurementIdentitySupport.framework/Modules/module.modulemap +5 -0
  248. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/tvos-arm64/GoogleAppMeasurementIdentitySupport.framework/GoogleAppMeasurementIdentitySupport +0 -0
  249. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/tvos-arm64/GoogleAppMeasurementIdentitySupport.framework/Info.plist +20 -0
  250. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/tvos-arm64/GoogleAppMeasurementIdentitySupport.framework/Modules/module.modulemap +5 -0
  251. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/tvos-arm64_x86_64-simulator/GoogleAppMeasurementIdentitySupport.framework/GoogleAppMeasurementIdentitySupport +0 -0
  252. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/tvos-arm64_x86_64-simulator/GoogleAppMeasurementIdentitySupport.framework/Info.plist +20 -0
  253. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/tvos-arm64_x86_64-simulator/GoogleAppMeasurementIdentitySupport.framework/Modules/module.modulemap +5 -0
  254. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCCTLibrary/GDTCCTCompressionHelper.m +95 -0
  255. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCCTLibrary/GDTCCTNanopbHelpers.m +270 -0
  256. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCCTLibrary/GDTCCTUploadOperation.m +573 -0
  257. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCCTLibrary/GDTCCTUploader.m +210 -0
  258. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCCTLibrary/GDTCOREvent+GDTCCTSupport.m +240 -0
  259. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCCTLibrary/Private/GDTCCTCompressionHelper.h +40 -0
  260. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCCTLibrary/Private/GDTCCTNanopbHelpers.h +128 -0
  261. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCCTLibrary/Private/GDTCCTUploadOperation.h +76 -0
  262. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCCTLibrary/Private/GDTCCTUploader.h +45 -0
  263. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCCTLibrary/Protogen/nanopb/cct.nanopb.c +128 -0
  264. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCCTLibrary/Protogen/nanopb/cct.nanopb.h +281 -0
  265. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCCTLibrary/Public/GDTCOREvent+GDTCCTSupport.h +51 -0
  266. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORAssert.m +36 -0
  267. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORClock.m +178 -0
  268. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORConsoleLogger.m +55 -0
  269. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORDirectorySizeTracker.m +101 -0
  270. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCOREndpoints.m +92 -0
  271. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCOREvent.m +153 -0
  272. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORFlatFileStorage+Promises.m +104 -0
  273. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORFlatFileStorage.m +826 -0
  274. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORLifecycle.m +119 -0
  275. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORPlatform.m +604 -0
  276. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORReachability.m +125 -0
  277. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORRegistrar.m +157 -0
  278. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORStorageEventSelector.m +39 -0
  279. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORTransformer.m +111 -0
  280. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORTransport.m +92 -0
  281. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORUploadBatch.m +30 -0
  282. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORUploadCoordinator.m +176 -0
  283. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Internal/GDTCORAssert.h +95 -0
  284. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Internal/GDTCORDirectorySizeTracker.h +66 -0
  285. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Internal/GDTCORLifecycle.h +63 -0
  286. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Internal/GDTCORPlatform.h +225 -0
  287. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Internal/GDTCORReachability.h +31 -0
  288. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Internal/GDTCORRegistrar.h +50 -0
  289. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Internal/GDTCORStorageEventSelector.h +61 -0
  290. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Internal/GDTCORStorageProtocol.h +171 -0
  291. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Internal/GDTCORUploader.h +59 -0
  292. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCOREndpoints_Private.h +27 -0
  293. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCOREvent_Private.h +33 -0
  294. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORFlatFileStorage+Promises.h +28 -0
  295. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORFlatFileStorage.h +158 -0
  296. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORReachability_Private.h +30 -0
  297. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORRegistrar_Private.h +35 -0
  298. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransformer.h +57 -0
  299. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransformer_Private.h +37 -0
  300. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransport_Private.h +39 -0
  301. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORUploadBatch.h +37 -0
  302. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORUploadCoordinator.h +68 -0
  303. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport/GDTCORClock.h +66 -0
  304. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport/GDTCORConsoleLogger.h +144 -0
  305. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport/GDTCOREndpoints.h +36 -0
  306. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport/GDTCOREvent.h +87 -0
  307. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport/GDTCOREventDataObject.h +36 -0
  308. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport/GDTCOREventTransformer.h +38 -0
  309. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport/GDTCORTargets.h +40 -0
  310. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport/GDTCORTransport.h +92 -0
  311. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport/GoogleDataTransport.h +24 -0
  312. data/examples/AExample/Pods/GoogleDataTransport/LICENSE +202 -0
  313. data/examples/AExample/Pods/GoogleDataTransport/README.md +231 -0
  314. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/AppDelegateSwizzler/GULAppDelegateSwizzler.m +1070 -0
  315. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/AppDelegateSwizzler/GULSceneDelegateSwizzler.m +439 -0
  316. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/AppDelegateSwizzler/Internal/GULAppDelegateSwizzler_Private.h +55 -0
  317. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/AppDelegateSwizzler/Internal/GULSceneDelegateSwizzler_Private.h +48 -0
  318. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/AppDelegateSwizzler/Public/GoogleUtilities/GULAppDelegateSwizzler.h +107 -0
  319. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/AppDelegateSwizzler/Public/GoogleUtilities/GULApplication.h +50 -0
  320. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/AppDelegateSwizzler/Public/GoogleUtilities/GULSceneDelegateSwizzler.h +76 -0
  321. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Common/GULLoggerCodes.h +56 -0
  322. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Environment/GULHeartbeatDateStorage.m +153 -0
  323. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Environment/GULHeartbeatDateStorageUserDefaults.m +68 -0
  324. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Environment/GULSecureCoding.m +103 -0
  325. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GoogleUtilities/GULAppEnvironmentUtil.h +60 -0
  326. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GoogleUtilities/GULHeartbeatDateStorable.h +40 -0
  327. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GoogleUtilities/GULHeartbeatDateStorage.h +54 -0
  328. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GoogleUtilities/GULHeartbeatDateStorageUserDefaults.h +51 -0
  329. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GoogleUtilities/GULKeychainStorage.h +79 -0
  330. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GoogleUtilities/GULKeychainUtils.h +61 -0
  331. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GoogleUtilities/GULSecureCoding.h +36 -0
  332. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GoogleUtilities/GULURLSessionDataResponse.h +31 -0
  333. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GoogleUtilities/NSURLSession+GULPromises.h +37 -0
  334. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Environment/SecureStorage/GULKeychainStorage.m +192 -0
  335. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Environment/SecureStorage/GULKeychainUtils.m +113 -0
  336. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Environment/URLSessionPromiseWrapper/GULURLSessionDataResponse.m +30 -0
  337. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Environment/URLSessionPromiseWrapper/NSURLSession+GULPromises.m +46 -0
  338. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Environment/third_party/GULAppEnvironmentUtil.m +333 -0
  339. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Logger/GULLogger.m +215 -0
  340. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Logger/Public/GoogleUtilities/GULLogger.h +159 -0
  341. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Logger/Public/GoogleUtilities/GULLoggerLevel.h +37 -0
  342. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/MethodSwizzler/GULSwizzler.m +153 -0
  343. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/MethodSwizzler/Public/GoogleUtilities/GULOriginalIMPConvenienceMacros.h +207 -0
  344. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/MethodSwizzler/Public/GoogleUtilities/GULSwizzler.h +71 -0
  345. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/NSData+zlib/GULNSData+zlib.m +207 -0
  346. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/NSData+zlib/Public/GoogleUtilities/GULNSData+zlib.h +49 -0
  347. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Network/GULMutableDictionary.m +101 -0
  348. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Network/GULNetwork.m +390 -0
  349. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Network/GULNetworkConstants.m +41 -0
  350. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Network/GULNetworkInternal.h +24 -0
  351. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Network/GULNetworkURLSession.m +766 -0
  352. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Network/Public/GoogleUtilities/GULMutableDictionary.h +46 -0
  353. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Network/Public/GoogleUtilities/GULNetwork.h +87 -0
  354. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Network/Public/GoogleUtilities/GULNetworkConstants.h +71 -0
  355. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Network/Public/GoogleUtilities/GULNetworkLoggerProtocol.h +49 -0
  356. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Network/Public/GoogleUtilities/GULNetworkMessageCode.h +47 -0
  357. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Network/Public/GoogleUtilities/GULNetworkURLSession.h +62 -0
  358. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Reachability/GULReachabilityChecker+Internal.h +48 -0
  359. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Reachability/GULReachabilityChecker.m +263 -0
  360. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Reachability/GULReachabilityMessageCode.h +29 -0
  361. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Reachability/Public/GoogleUtilities/GULReachabilityChecker.h +79 -0
  362. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/UserDefaults/GULUserDefaults.m +213 -0
  363. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/UserDefaults/Public/GoogleUtilities/GULUserDefaults.h +110 -0
  364. data/examples/AExample/Pods/GoogleUtilities/LICENSE +247 -0
  365. data/examples/AExample/Pods/GoogleUtilities/README.md +189 -0
  366. data/examples/AExample/Pods/Manifest.lock +112 -0
  367. data/examples/AExample/Pods/Pods.xcodeproj/project.pbxproj +3670 -0
  368. data/examples/AExample/Pods/Pods.xcodeproj/xcuserdata/xuzhongping.xcuserdatad/xcschemes/FirebaseAnalytics.xcscheme +58 -0
  369. data/examples/AExample/Pods/Pods.xcodeproj/xcuserdata/xuzhongping.xcuserdatad/xcschemes/FirebaseCore.xcscheme +58 -0
  370. data/examples/AExample/Pods/Pods.xcodeproj/xcuserdata/xuzhongping.xcuserdatad/xcschemes/FirebaseCoreDiagnostics.xcscheme +58 -0
  371. data/examples/AExample/Pods/Pods.xcodeproj/xcuserdata/xuzhongping.xcuserdatad/xcschemes/FirebaseInstallations.xcscheme +58 -0
  372. data/examples/AExample/Pods/Pods.xcodeproj/xcuserdata/xuzhongping.xcuserdatad/xcschemes/GoogleAppMeasurement.xcscheme +58 -0
  373. data/examples/AExample/Pods/Pods.xcodeproj/xcuserdata/xuzhongping.xcuserdatad/xcschemes/GoogleDataTransport.xcscheme +58 -0
  374. data/examples/AExample/Pods/Pods.xcodeproj/xcuserdata/xuzhongping.xcuserdatad/xcschemes/GoogleUtilities.xcscheme +58 -0
  375. data/examples/AExample/Pods/Pods.xcodeproj/xcuserdata/xuzhongping.xcuserdatad/xcschemes/Pods-AExample-AExampleCP.xcscheme +58 -0
  376. data/examples/AExample/Pods/Pods.xcodeproj/xcuserdata/xuzhongping.xcuserdatad/xcschemes/Pods-AExample.xcscheme +58 -0
  377. data/examples/AExample/Pods/Pods.xcodeproj/xcuserdata/xuzhongping.xcuserdatad/xcschemes/PromisesObjC.xcscheme +58 -0
  378. data/examples/AExample/Pods/Pods.xcodeproj/xcuserdata/xuzhongping.xcuserdatad/xcschemes/nanopb.xcscheme +58 -0
  379. data/examples/AExample/Pods/Pods.xcodeproj/xcuserdata/xuzhongping.xcuserdatad/xcschemes/xcschememanagement.plist +66 -0
  380. data/examples/AExample/Pods/PromisesObjC/LICENSE +202 -0
  381. data/examples/AExample/Pods/PromisesObjC/README.md +60 -0
  382. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+All.m +86 -0
  383. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Always.m +58 -0
  384. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Any.m +112 -0
  385. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Async.m +70 -0
  386. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Await.m +48 -0
  387. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Catch.m +55 -0
  388. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Delay.m +59 -0
  389. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Do.m +59 -0
  390. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Race.m +65 -0
  391. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Recover.m +54 -0
  392. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Reduce.m +61 -0
  393. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Retry.m +128 -0
  394. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Testing.m +55 -0
  395. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Then.m +50 -0
  396. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Timeout.m +64 -0
  397. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Validate.m +56 -0
  398. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Wrap.m +420 -0
  399. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise.m +299 -0
  400. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/FBLPromiseError.m +19 -0
  401. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+All.h +63 -0
  402. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Always.h +54 -0
  403. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Any.h +69 -0
  404. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Async.h +60 -0
  405. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Await.h +32 -0
  406. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Catch.h +59 -0
  407. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Delay.h +59 -0
  408. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Do.h +55 -0
  409. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Race.h +62 -0
  410. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Recover.h +60 -0
  411. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Reduce.h +71 -0
  412. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Retry.h +165 -0
  413. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Testing.h +57 -0
  414. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Then.h +63 -0
  415. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Timeout.h +57 -0
  416. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Validate.h +60 -0
  417. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Wrap.h +316 -0
  418. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise.h +93 -0
  419. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromiseError.h +43 -0
  420. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromisePrivate.h +66 -0
  421. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromises.h +32 -0
  422. data/examples/AExample/Pods/Target Support Files/FirebaseAnalytics/FirebaseAnalytics-xcframeworks-input-files.xcfilelist +2 -0
  423. data/examples/AExample/Pods/Target Support Files/FirebaseAnalytics/FirebaseAnalytics-xcframeworks-output-files.xcfilelist +1 -0
  424. data/examples/AExample/Pods/Target Support Files/FirebaseAnalytics/FirebaseAnalytics-xcframeworks.sh +109 -0
  425. data/examples/AExample/Pods/Target Support Files/FirebaseAnalytics/FirebaseAnalytics.debug.xcconfig +13 -0
  426. data/examples/AExample/Pods/Target Support Files/FirebaseAnalytics/FirebaseAnalytics.release.xcconfig +13 -0
  427. data/examples/AExample/Pods/Target Support Files/FirebaseCore/FirebaseCore-Info.plist +26 -0
  428. data/examples/AExample/Pods/Target Support Files/FirebaseCore/FirebaseCore-dummy.m +5 -0
  429. data/examples/AExample/Pods/Target Support Files/FirebaseCore/FirebaseCore-umbrella.h +22 -0
  430. data/examples/AExample/Pods/Target Support Files/FirebaseCore/FirebaseCore.debug.xcconfig +16 -0
  431. data/examples/AExample/Pods/Target Support Files/FirebaseCore/FirebaseCore.modulemap +6 -0
  432. data/examples/AExample/Pods/Target Support Files/FirebaseCore/FirebaseCore.release.xcconfig +16 -0
  433. data/examples/AExample/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-Info.plist +26 -0
  434. data/examples/AExample/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-dummy.m +5 -0
  435. data/examples/AExample/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-umbrella.h +17 -0
  436. data/examples/AExample/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.debug.xcconfig +17 -0
  437. data/examples/AExample/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.modulemap +6 -0
  438. data/examples/AExample/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.release.xcconfig +17 -0
  439. data/examples/AExample/Pods/Target Support Files/FirebaseInstallations/FirebaseInstallations-Info.plist +26 -0
  440. data/examples/AExample/Pods/Target Support Files/FirebaseInstallations/FirebaseInstallations-dummy.m +5 -0
  441. data/examples/AExample/Pods/Target Support Files/FirebaseInstallations/FirebaseInstallations-umbrella.h +20 -0
  442. data/examples/AExample/Pods/Target Support Files/FirebaseInstallations/FirebaseInstallations.debug.xcconfig +15 -0
  443. data/examples/AExample/Pods/Target Support Files/FirebaseInstallations/FirebaseInstallations.modulemap +6 -0
  444. data/examples/AExample/Pods/Target Support Files/FirebaseInstallations/FirebaseInstallations.release.xcconfig +15 -0
  445. data/examples/AExample/Pods/Target Support Files/GoogleAppMeasurement/GoogleAppMeasurement-xcframeworks-input-files.xcfilelist +3 -0
  446. data/examples/AExample/Pods/Target Support Files/GoogleAppMeasurement/GoogleAppMeasurement-xcframeworks-output-files.xcfilelist +2 -0
  447. data/examples/AExample/Pods/Target Support Files/GoogleAppMeasurement/GoogleAppMeasurement-xcframeworks.sh +110 -0
  448. data/examples/AExample/Pods/Target Support Files/GoogleAppMeasurement/GoogleAppMeasurement.debug.xcconfig +13 -0
  449. data/examples/AExample/Pods/Target Support Files/GoogleAppMeasurement/GoogleAppMeasurement.release.xcconfig +13 -0
  450. data/examples/AExample/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport-Info.plist +26 -0
  451. data/examples/AExample/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport-dummy.m +5 -0
  452. data/examples/AExample/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport-umbrella.h +25 -0
  453. data/examples/AExample/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.debug.xcconfig +16 -0
  454. data/examples/AExample/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.modulemap +6 -0
  455. data/examples/AExample/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.release.xcconfig +16 -0
  456. data/examples/AExample/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-Info.plist +26 -0
  457. data/examples/AExample/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-dummy.m +5 -0
  458. data/examples/AExample/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-umbrella.h +41 -0
  459. data/examples/AExample/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.debug.xcconfig +15 -0
  460. data/examples/AExample/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.modulemap +6 -0
  461. data/examples/AExample/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.release.xcconfig +15 -0
  462. data/examples/AExample/Pods/Target Support Files/Pods-AExample/Pods-AExample-Info.plist +26 -0
  463. data/examples/AExample/Pods/Target Support Files/Pods-AExample/Pods-AExample-acknowledgements.markdown +1316 -0
  464. data/examples/AExample/Pods/Target Support Files/Pods-AExample/Pods-AExample-acknowledgements.plist +1396 -0
  465. data/examples/AExample/Pods/Target Support Files/Pods-AExample/Pods-AExample-dummy.m +5 -0
  466. data/examples/AExample/Pods/Target Support Files/Pods-AExample/Pods-AExample-frameworks-Debug-input-files.xcfilelist +8 -0
  467. data/examples/AExample/Pods/Target Support Files/Pods-AExample/Pods-AExample-frameworks-Debug-output-files.xcfilelist +7 -0
  468. data/examples/AExample/Pods/Target Support Files/Pods-AExample/Pods-AExample-frameworks-Release-input-files.xcfilelist +8 -0
  469. data/examples/AExample/Pods/Target Support Files/Pods-AExample/Pods-AExample-frameworks-Release-output-files.xcfilelist +7 -0
  470. data/examples/AExample/Pods/Target Support Files/Pods-AExample/Pods-AExample-frameworks.sh +198 -0
  471. data/examples/AExample/Pods/Target Support Files/Pods-AExample/Pods-AExample-umbrella.h +16 -0
  472. data/examples/AExample/Pods/Target Support Files/Pods-AExample/Pods-AExample.debug.xcconfig +12 -0
  473. data/examples/AExample/Pods/Target Support Files/Pods-AExample/Pods-AExample.modulemap +6 -0
  474. data/examples/AExample/Pods/Target Support Files/Pods-AExample/Pods-AExample.release.xcconfig +12 -0
  475. data/examples/AExample/Pods/Target Support Files/Pods-AExample-AExampleCP/Pods-AExample-AExampleCP-Info.plist +26 -0
  476. data/examples/AExample/Pods/Target Support Files/Pods-AExample-AExampleCP/Pods-AExample-AExampleCP-acknowledgements.markdown +1316 -0
  477. data/examples/AExample/Pods/Target Support Files/Pods-AExample-AExampleCP/Pods-AExample-AExampleCP-acknowledgements.plist +1396 -0
  478. data/examples/AExample/Pods/Target Support Files/Pods-AExample-AExampleCP/Pods-AExample-AExampleCP-dummy.m +5 -0
  479. data/examples/AExample/Pods/Target Support Files/Pods-AExample-AExampleCP/Pods-AExample-AExampleCP-frameworks-Debug-input-files.xcfilelist +8 -0
  480. data/examples/AExample/Pods/Target Support Files/Pods-AExample-AExampleCP/Pods-AExample-AExampleCP-frameworks-Debug-output-files.xcfilelist +7 -0
  481. data/examples/AExample/Pods/Target Support Files/Pods-AExample-AExampleCP/Pods-AExample-AExampleCP-frameworks-Release-input-files.xcfilelist +8 -0
  482. data/examples/AExample/Pods/Target Support Files/Pods-AExample-AExampleCP/Pods-AExample-AExampleCP-frameworks-Release-output-files.xcfilelist +7 -0
  483. data/examples/AExample/Pods/Target Support Files/Pods-AExample-AExampleCP/Pods-AExample-AExampleCP-frameworks.sh +198 -0
  484. data/examples/AExample/Pods/Target Support Files/Pods-AExample-AExampleCP/Pods-AExample-AExampleCP-umbrella.h +16 -0
  485. data/examples/AExample/Pods/Target Support Files/Pods-AExample-AExampleCP/Pods-AExample-AExampleCP.debug.xcconfig +12 -0
  486. data/examples/AExample/Pods/Target Support Files/Pods-AExample-AExampleCP/Pods-AExample-AExampleCP.modulemap +6 -0
  487. data/examples/AExample/Pods/Target Support Files/Pods-AExample-AExampleCP/Pods-AExample-AExampleCP.release.xcconfig +12 -0
  488. data/examples/AExample/Pods/Target Support Files/PromisesObjC/PromisesObjC-Info.plist +26 -0
  489. data/examples/AExample/Pods/Target Support Files/PromisesObjC/PromisesObjC-dummy.m +5 -0
  490. data/examples/AExample/Pods/Target Support Files/PromisesObjC/PromisesObjC-umbrella.h +36 -0
  491. data/examples/AExample/Pods/Target Support Files/PromisesObjC/PromisesObjC.debug.xcconfig +12 -0
  492. data/examples/AExample/Pods/Target Support Files/PromisesObjC/PromisesObjC.modulemap +6 -0
  493. data/examples/AExample/Pods/Target Support Files/PromisesObjC/PromisesObjC.release.xcconfig +12 -0
  494. data/examples/AExample/Pods/Target Support Files/nanopb/nanopb-Info.plist +26 -0
  495. data/examples/AExample/Pods/Target Support Files/nanopb/nanopb-dummy.m +5 -0
  496. data/examples/AExample/Pods/Target Support Files/nanopb/nanopb-prefix.pch +12 -0
  497. data/examples/AExample/Pods/Target Support Files/nanopb/nanopb-umbrella.h +26 -0
  498. data/examples/AExample/Pods/Target Support Files/nanopb/nanopb.debug.xcconfig +11 -0
  499. data/examples/AExample/Pods/Target Support Files/nanopb/nanopb.modulemap +6 -0
  500. data/examples/AExample/Pods/Target Support Files/nanopb/nanopb.release.xcconfig +11 -0
  501. data/examples/AExample/Pods/nanopb/LICENSE.txt +20 -0
  502. data/examples/AExample/Pods/nanopb/README.md +71 -0
  503. data/examples/AExample/Pods/nanopb/pb.h +599 -0
  504. data/examples/AExample/Pods/nanopb/pb_common.c +97 -0
  505. data/examples/AExample/Pods/nanopb/pb_common.h +42 -0
  506. data/examples/AExample/Pods/nanopb/pb_decode.c +1564 -0
  507. data/examples/AExample/Pods/nanopb/pb_decode.h +178 -0
  508. data/examples/AExample/Pods/nanopb/pb_encode.c +913 -0
  509. data/examples/AExample/Pods/nanopb/pb_encode.h +170 -0
  510. data/lib/cocoapods-catalyst-validator/cocoapods-catalyst-validator.rb +110 -0
  511. data/lib/cocoapods-catalyst-validator/gem_version.rb +3 -0
  512. data/lib/cocoapods_plugin.rb +3 -0
  513. data/spec/command/validator_spec.rb +12 -0
  514. data/spec/spec_helper.rb +50 -0
  515. metadata +601 -0
@@ -0,0 +1,826 @@
1
+ /*
2
+ * Copyright 2018 Google
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ #import "GoogleDataTransport/GDTCORLibrary/Private/GDTCORFlatFileStorage.h"
18
+
19
+ #import "GoogleDataTransport/GDTCORLibrary/Internal/GDTCORAssert.h"
20
+ #import "GoogleDataTransport/GDTCORLibrary/Internal/GDTCORLifecycle.h"
21
+ #import "GoogleDataTransport/GDTCORLibrary/Internal/GDTCORPlatform.h"
22
+ #import "GoogleDataTransport/GDTCORLibrary/Internal/GDTCORStorageEventSelector.h"
23
+ #import "GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport/GDTCORConsoleLogger.h"
24
+ #import "GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport/GDTCOREvent.h"
25
+
26
+ #import "GoogleDataTransport/GDTCORLibrary/Private/GDTCOREvent_Private.h"
27
+ #import "GoogleDataTransport/GDTCORLibrary/Private/GDTCORRegistrar_Private.h"
28
+ #import "GoogleDataTransport/GDTCORLibrary/Private/GDTCORUploadCoordinator.h"
29
+
30
+ #import "GoogleDataTransport/GDTCORLibrary/Internal/GDTCORDirectorySizeTracker.h"
31
+
32
+ NS_ASSUME_NONNULL_BEGIN
33
+
34
+ /** A library data key this class uses to track batchIDs. */
35
+ static NSString *const gBatchIDCounterKey = @"GDTCORFlatFileStorageBatchIDCounter";
36
+
37
+ /** The separator used between metadata elements in filenames. */
38
+ static NSString *const kMetadataSeparator = @"-";
39
+
40
+ NSString *const kGDTCOREventComponentsEventIDKey = @"GDTCOREventComponentsEventIDKey";
41
+
42
+ NSString *const kGDTCOREventComponentsQoSTierKey = @"GDTCOREventComponentsQoSTierKey";
43
+
44
+ NSString *const kGDTCOREventComponentsMappingIDKey = @"GDTCOREventComponentsMappingIDKey";
45
+
46
+ NSString *const kGDTCOREventComponentsExpirationKey = @"GDTCOREventComponentsExpirationKey";
47
+
48
+ NSString *const kGDTCORBatchComponentsTargetKey = @"GDTCORBatchComponentsTargetKey";
49
+
50
+ NSString *const kGDTCORBatchComponentsBatchIDKey = @"GDTCORBatchComponentsBatchIDKey";
51
+
52
+ NSString *const kGDTCORBatchComponentsExpirationKey = @"GDTCORBatchComponentsExpirationKey";
53
+
54
+ NSString *const GDTCORFlatFileStorageErrorDomain = @"GDTCORFlatFileStorage";
55
+
56
+ const uint64_t kGDTCORFlatFileStorageSizeLimit = 20 * 1000 * 1000; // 20 MB.
57
+
58
+ @interface GDTCORFlatFileStorage ()
59
+
60
+ /** An instance of the size tracker to keep track of the disk space consumed by the storage. */
61
+ @property(nonatomic, readonly) GDTCORDirectorySizeTracker *sizeTracker;
62
+
63
+ @end
64
+
65
+ @implementation GDTCORFlatFileStorage
66
+
67
+ @synthesize sizeTracker = _sizeTracker;
68
+
69
+ + (void)load {
70
+ #if !NDEBUG
71
+ [[GDTCORRegistrar sharedInstance] registerStorage:[self sharedInstance] target:kGDTCORTargetTest];
72
+ #endif // !NDEBUG
73
+ [[GDTCORRegistrar sharedInstance] registerStorage:[self sharedInstance] target:kGDTCORTargetCCT];
74
+ [[GDTCORRegistrar sharedInstance] registerStorage:[self sharedInstance] target:kGDTCORTargetFLL];
75
+ [[GDTCORRegistrar sharedInstance] registerStorage:[self sharedInstance] target:kGDTCORTargetCSH];
76
+ [[GDTCORRegistrar sharedInstance] registerStorage:[self sharedInstance] target:kGDTCORTargetINT];
77
+ }
78
+
79
+ + (instancetype)sharedInstance {
80
+ static GDTCORFlatFileStorage *sharedStorage;
81
+ static dispatch_once_t onceToken;
82
+ dispatch_once(&onceToken, ^{
83
+ sharedStorage = [[GDTCORFlatFileStorage alloc] init];
84
+ });
85
+ return sharedStorage;
86
+ }
87
+
88
+ - (instancetype)init {
89
+ self = [super init];
90
+ if (self) {
91
+ _storageQueue =
92
+ dispatch_queue_create("com.google.GDTCORFlatFileStorage", DISPATCH_QUEUE_SERIAL);
93
+ _uploadCoordinator = [GDTCORUploadCoordinator sharedInstance];
94
+ }
95
+ return self;
96
+ }
97
+
98
+ - (GDTCORDirectorySizeTracker *)sizeTracker {
99
+ if (_sizeTracker == nil) {
100
+ _sizeTracker =
101
+ [[GDTCORDirectorySizeTracker alloc] initWithDirectoryPath:GDTCORRootDirectory().path];
102
+ }
103
+ return _sizeTracker;
104
+ }
105
+
106
+ #pragma mark - GDTCORStorageProtocol
107
+
108
+ - (void)storeEvent:(GDTCOREvent *)event
109
+ onComplete:(void (^_Nullable)(BOOL wasWritten, NSError *_Nullable error))completion {
110
+ GDTCORLogDebug(@"Saving event: %@", event);
111
+ if (event == nil || event.serializedDataObjectBytes == nil) {
112
+ GDTCORLogDebug(@"%@", @"The event was nil, so it was not saved.");
113
+ if (completion) {
114
+ completion(NO, [NSError errorWithDomain:NSInternalInconsistencyException
115
+ code:-1
116
+ userInfo:nil]);
117
+ }
118
+ return;
119
+ }
120
+ if (!completion) {
121
+ completion = ^(BOOL wasWritten, NSError *_Nullable error) {
122
+ GDTCORLogDebug(@"event %@ stored. success:%@ error:%@", event, wasWritten ? @"YES" : @"NO",
123
+ error);
124
+ };
125
+ }
126
+
127
+ __block GDTCORBackgroundIdentifier bgID = GDTCORBackgroundIdentifierInvalid;
128
+ bgID = [[GDTCORApplication sharedApplication]
129
+ beginBackgroundTaskWithName:@"GDTStorage"
130
+ expirationHandler:^{
131
+ // End the background task if it's still valid.
132
+ [[GDTCORApplication sharedApplication] endBackgroundTask:bgID];
133
+ bgID = GDTCORBackgroundIdentifierInvalid;
134
+ }];
135
+
136
+ dispatch_async(_storageQueue, ^{
137
+ // Check that a backend implementation is available for this target.
138
+ GDTCORTarget target = event.target;
139
+ NSString *filePath = [GDTCORFlatFileStorage pathForTarget:target
140
+ eventID:event.eventID
141
+ qosTier:@(event.qosTier)
142
+ expirationDate:event.expirationDate
143
+ mappingID:event.mappingID];
144
+ NSError *error;
145
+ NSData *encodedEvent = GDTCOREncodeArchive(event, nil, &error);
146
+ if (error) {
147
+ completion(NO, error);
148
+ return;
149
+ }
150
+
151
+ // Check storage size limit before storing the event.
152
+ uint64_t resultingStorageSize = self.sizeTracker.directoryContentSize + encodedEvent.length;
153
+ if (resultingStorageSize > kGDTCORFlatFileStorageSizeLimit) {
154
+ NSError *error = [NSError
155
+ errorWithDomain:GDTCORFlatFileStorageErrorDomain
156
+ code:GDTCORFlatFileStorageErrorSizeLimitReached
157
+ userInfo:@{
158
+ NSLocalizedFailureReasonErrorKey : @"Storage size limit has been reached."
159
+ }];
160
+ completion(NO, error);
161
+ return;
162
+ }
163
+
164
+ // Write the encoded event to the file.
165
+ BOOL writeResult = GDTCORWriteDataToFile(encodedEvent, filePath, &error);
166
+ if (writeResult == NO || error) {
167
+ GDTCORLogDebug(@"Attempt to write archive failed: path:%@ error:%@", filePath, error);
168
+ completion(NO, error);
169
+ return;
170
+ } else {
171
+ GDTCORLogDebug(@"Writing archive succeeded: %@", filePath);
172
+ completion(YES, nil);
173
+ }
174
+
175
+ // Notify size tracker.
176
+ [self.sizeTracker fileWasAddedAtPath:filePath withSize:encodedEvent.length];
177
+
178
+ // Check the QoS, if it's high priority, notify the target that it has a high priority event.
179
+ if (event.qosTier == GDTCOREventQoSFast) {
180
+ // TODO: Remove a direct dependency on the upload coordinator.
181
+ [self.uploadCoordinator forceUploadForTarget:target];
182
+ }
183
+
184
+ // Cancel or end the associated background task if it's still valid.
185
+ [[GDTCORApplication sharedApplication] endBackgroundTask:bgID];
186
+ bgID = GDTCORBackgroundIdentifierInvalid;
187
+ });
188
+ }
189
+
190
+ - (void)batchWithEventSelector:(nonnull GDTCORStorageEventSelector *)eventSelector
191
+ batchExpiration:(nonnull NSDate *)expiration
192
+ onComplete:
193
+ (nonnull void (^)(NSNumber *_Nullable batchID,
194
+ NSSet<GDTCOREvent *> *_Nullable events))onComplete {
195
+ dispatch_queue_t queue = _storageQueue;
196
+ void (^onPathsForTargetComplete)(NSNumber *, NSSet<NSString *> *_Nonnull) = ^(
197
+ NSNumber *batchID, NSSet<NSString *> *_Nonnull paths) {
198
+ dispatch_async(queue, ^{
199
+ NSMutableSet<GDTCOREvent *> *events = [[NSMutableSet alloc] init];
200
+ for (NSString *eventPath in paths) {
201
+ NSError *error;
202
+ GDTCOREvent *event =
203
+ (GDTCOREvent *)GDTCORDecodeArchive([GDTCOREvent class], eventPath, nil, &error);
204
+ if (event == nil || error) {
205
+ GDTCORLogDebug(@"Error deserializing event: %@", error);
206
+ [[NSFileManager defaultManager] removeItemAtPath:eventPath error:nil];
207
+ continue;
208
+ } else {
209
+ NSString *fileName = [eventPath lastPathComponent];
210
+ NSString *batchPath =
211
+ [GDTCORFlatFileStorage batchPathForTarget:eventSelector.selectedTarget
212
+ batchID:batchID
213
+ expirationDate:expiration];
214
+ [[NSFileManager defaultManager] createDirectoryAtPath:batchPath
215
+ withIntermediateDirectories:YES
216
+ attributes:nil
217
+ error:nil];
218
+ NSString *destinationPath = [batchPath stringByAppendingPathComponent:fileName];
219
+ error = nil;
220
+ [[NSFileManager defaultManager] moveItemAtPath:eventPath
221
+ toPath:destinationPath
222
+ error:&error];
223
+ if (error) {
224
+ GDTCORLogDebug(@"An event file wasn't moveable into the batch directory: %@", error);
225
+ }
226
+ [events addObject:event];
227
+ }
228
+ }
229
+ if (onComplete) {
230
+ if (events.count == 0) {
231
+ onComplete(nil, nil);
232
+ } else {
233
+ onComplete(batchID, events);
234
+ }
235
+ }
236
+ });
237
+ };
238
+
239
+ void (^onBatchIDFetchComplete)(NSNumber *) = ^(NSNumber *batchID) {
240
+ dispatch_async(queue, ^{
241
+ if (batchID == nil) {
242
+ if (onComplete) {
243
+ onComplete(nil, nil);
244
+ return;
245
+ }
246
+ }
247
+ [self pathsForTarget:eventSelector.selectedTarget
248
+ eventIDs:eventSelector.selectedEventIDs
249
+ qosTiers:eventSelector.selectedQosTiers
250
+ mappingIDs:eventSelector.selectedMappingIDs
251
+ onComplete:^(NSSet<NSString *> *_Nonnull paths) {
252
+ onPathsForTargetComplete(batchID, paths);
253
+ }];
254
+ });
255
+ };
256
+
257
+ [self nextBatchID:^(NSNumber *_Nullable batchID) {
258
+ if (batchID == nil) {
259
+ if (onComplete) {
260
+ onComplete(nil, nil);
261
+ }
262
+ } else {
263
+ onBatchIDFetchComplete(batchID);
264
+ }
265
+ }];
266
+ }
267
+
268
+ - (void)removeBatchWithID:(nonnull NSNumber *)batchID
269
+ deleteEvents:(BOOL)deleteEvents
270
+ onComplete:(void (^_Nullable)(void))onComplete {
271
+ dispatch_async(_storageQueue, ^{
272
+ [self syncThreadUnsafeRemoveBatchWithID:batchID deleteEvents:deleteEvents];
273
+
274
+ if (onComplete) {
275
+ onComplete();
276
+ }
277
+ });
278
+ }
279
+
280
+ - (void)batchIDsForTarget:(GDTCORTarget)target
281
+ onComplete:(nonnull void (^)(NSSet<NSNumber *> *_Nullable))onComplete {
282
+ dispatch_async(_storageQueue, ^{
283
+ NSFileManager *fileManager = [NSFileManager defaultManager];
284
+ NSError *error;
285
+ NSArray<NSString *> *batchPaths =
286
+ [fileManager contentsOfDirectoryAtPath:[GDTCORFlatFileStorage batchDataStoragePath]
287
+ error:&error];
288
+ if (error || batchPaths.count == 0) {
289
+ if (onComplete) {
290
+ onComplete(nil);
291
+ }
292
+ return;
293
+ }
294
+ NSMutableSet<NSNumber *> *batchIDs = [[NSMutableSet alloc] init];
295
+ for (NSString *path in batchPaths) {
296
+ NSDictionary<NSString *, id> *components = [self batchComponentsFromFilename:path];
297
+ NSNumber *targetNumber = components[kGDTCORBatchComponentsTargetKey];
298
+ NSNumber *batchID = components[kGDTCORBatchComponentsBatchIDKey];
299
+ if (batchID != nil && targetNumber.intValue == target) {
300
+ [batchIDs addObject:batchID];
301
+ }
302
+ }
303
+ if (onComplete) {
304
+ onComplete(batchIDs);
305
+ }
306
+ });
307
+ }
308
+
309
+ - (void)libraryDataForKey:(nonnull NSString *)key
310
+ onFetchComplete:(nonnull void (^)(NSData *_Nullable, NSError *_Nullable))onFetchComplete
311
+ setNewValue:(NSData *_Nullable (^_Nullable)(void))setValueBlock {
312
+ dispatch_async(_storageQueue, ^{
313
+ NSString *dataPath = [[[self class] libraryDataStoragePath] stringByAppendingPathComponent:key];
314
+ NSError *error;
315
+ NSData *data = [NSData dataWithContentsOfFile:dataPath options:0 error:&error];
316
+ if (onFetchComplete) {
317
+ onFetchComplete(data, error);
318
+ }
319
+ if (setValueBlock) {
320
+ NSData *newValue = setValueBlock();
321
+ // The -isKindOfClass check is necessary because without an explicit 'return nil' in the block
322
+ // the implicit return value will be the block itself. The compiler doesn't detect this.
323
+ if (newValue != nil && [newValue isKindOfClass:[NSData class]] && newValue.length) {
324
+ NSError *newValueError;
325
+ if ([newValue writeToFile:dataPath options:NSDataWritingAtomic error:&newValueError]) {
326
+ // Update storage size.
327
+ [self.sizeTracker fileWasRemovedAtPath:dataPath withSize:data.length];
328
+ [self.sizeTracker fileWasAddedAtPath:dataPath withSize:newValue.length];
329
+ } else {
330
+ GDTCORLogDebug(@"Error writing new value in libraryDataForKey: %@", newValueError);
331
+ }
332
+ }
333
+ }
334
+ });
335
+ }
336
+
337
+ - (void)storeLibraryData:(NSData *)data
338
+ forKey:(nonnull NSString *)key
339
+ onComplete:(nullable void (^)(NSError *_Nullable error))onComplete {
340
+ if (!data || data.length <= 0) {
341
+ if (onComplete) {
342
+ onComplete([NSError errorWithDomain:NSInternalInconsistencyException code:-1 userInfo:nil]);
343
+ }
344
+ return;
345
+ }
346
+ dispatch_async(_storageQueue, ^{
347
+ NSError *error;
348
+ NSString *dataPath = [[[self class] libraryDataStoragePath] stringByAppendingPathComponent:key];
349
+ if ([data writeToFile:dataPath options:NSDataWritingAtomic error:&error]) {
350
+ [self.sizeTracker fileWasAddedAtPath:dataPath withSize:data.length];
351
+ }
352
+ if (onComplete) {
353
+ onComplete(error);
354
+ }
355
+ });
356
+ }
357
+
358
+ - (void)removeLibraryDataForKey:(nonnull NSString *)key
359
+ onComplete:(nonnull void (^)(NSError *_Nullable error))onComplete {
360
+ dispatch_async(_storageQueue, ^{
361
+ NSError *error;
362
+ NSString *dataPath = [[[self class] libraryDataStoragePath] stringByAppendingPathComponent:key];
363
+ GDTCORStorageSizeBytes fileSize =
364
+ [self.sizeTracker fileSizeAtURL:[NSURL fileURLWithPath:dataPath]];
365
+
366
+ if ([[NSFileManager defaultManager] fileExistsAtPath:dataPath]) {
367
+ if ([[NSFileManager defaultManager] removeItemAtPath:dataPath error:&error]) {
368
+ [self.sizeTracker fileWasRemovedAtPath:dataPath withSize:fileSize];
369
+ }
370
+ if (onComplete) {
371
+ onComplete(error);
372
+ }
373
+ }
374
+ });
375
+ }
376
+
377
+ - (void)hasEventsForTarget:(GDTCORTarget)target onComplete:(void (^)(BOOL hasEvents))onComplete {
378
+ dispatch_async(_storageQueue, ^{
379
+ NSFileManager *fileManager = [NSFileManager defaultManager];
380
+ NSString *targetPath = [NSString
381
+ stringWithFormat:@"%@/%ld", [GDTCORFlatFileStorage eventDataStoragePath], (long)target];
382
+ [fileManager createDirectoryAtPath:targetPath
383
+ withIntermediateDirectories:YES
384
+ attributes:nil
385
+ error:nil];
386
+ NSDirectoryEnumerator *enumerator = [fileManager enumeratorAtPath:targetPath];
387
+ BOOL hasEventAtLeastOneEvent = [enumerator nextObject] != nil;
388
+ if (onComplete) {
389
+ onComplete(hasEventAtLeastOneEvent);
390
+ }
391
+ });
392
+ }
393
+
394
+ - (void)checkForExpirations {
395
+ dispatch_async(_storageQueue, ^{
396
+ GDTCORLogDebug(@"%@", @"Checking for expired events and batches");
397
+ NSTimeInterval now = [NSDate date].timeIntervalSince1970;
398
+ NSFileManager *fileManager = [NSFileManager defaultManager];
399
+
400
+ // TODO: Storage may not have enough context to remove batches because a batch may be being
401
+ // uploaded but the storage has not context of it.
402
+
403
+ // Find expired batches and move their events back to the main storage.
404
+ // If a batch contains expired events they are expected to be removed further in the method
405
+ // together with other expired events in the main storage.
406
+ NSString *batchDataPath = [GDTCORFlatFileStorage batchDataStoragePath];
407
+ NSArray<NSString *> *batchDataPaths = [fileManager contentsOfDirectoryAtPath:batchDataPath
408
+ error:nil];
409
+ for (NSString *path in batchDataPaths) {
410
+ @autoreleasepool {
411
+ NSString *fileName = [path lastPathComponent];
412
+ NSDictionary<NSString *, id> *batchComponents = [self batchComponentsFromFilename:fileName];
413
+ NSDate *expirationDate = batchComponents[kGDTCORBatchComponentsExpirationKey];
414
+ NSNumber *batchID = batchComponents[kGDTCORBatchComponentsBatchIDKey];
415
+ if (expirationDate != nil && expirationDate.timeIntervalSince1970 < now && batchID != nil) {
416
+ NSNumber *batchID = batchComponents[kGDTCORBatchComponentsBatchIDKey];
417
+ // Move all events from the expired batch back to the main storage.
418
+ [self syncThreadUnsafeRemoveBatchWithID:batchID deleteEvents:NO];
419
+ }
420
+ }
421
+ }
422
+
423
+ // Find expired events and remove them from the storage.
424
+ NSString *eventDataPath = [GDTCORFlatFileStorage eventDataStoragePath];
425
+ NSDirectoryEnumerator *enumerator = [fileManager enumeratorAtPath:eventDataPath];
426
+ NSString *path;
427
+
428
+ while (YES) {
429
+ @autoreleasepool {
430
+ // Call `[enumerator nextObject]` under autorelease pool to make sure all autoreleased
431
+ // objects created under the hood are released on each iteration end to avoid unnecessary
432
+ // memory growth.
433
+ path = [enumerator nextObject];
434
+ if (path == nil) {
435
+ break;
436
+ }
437
+
438
+ NSString *fileName = [path lastPathComponent];
439
+ NSDictionary<NSString *, id> *eventComponents = [self eventComponentsFromFilename:fileName];
440
+ NSDate *expirationDate = eventComponents[kGDTCOREventComponentsExpirationKey];
441
+ if (expirationDate != nil && expirationDate.timeIntervalSince1970 < now) {
442
+ NSString *pathToDelete = [eventDataPath stringByAppendingPathComponent:path];
443
+ NSError *error;
444
+ [fileManager removeItemAtPath:pathToDelete error:&error];
445
+ if (error != nil) {
446
+ GDTCORLogDebug(@"There was an error deleting an expired item: %@", error);
447
+ } else {
448
+ GDTCORLogDebug(@"Item deleted because it expired: %@", pathToDelete);
449
+ }
450
+ }
451
+ }
452
+ }
453
+
454
+ [self.sizeTracker resetCachedSize];
455
+ });
456
+ }
457
+
458
+ - (void)storageSizeWithCallback:(void (^)(uint64_t storageSize))onComplete {
459
+ if (!onComplete) {
460
+ return;
461
+ }
462
+
463
+ dispatch_async(_storageQueue, ^{
464
+ onComplete([self.sizeTracker directoryContentSize]);
465
+ });
466
+ }
467
+
468
+ #pragma mark - Private not thread safe methods
469
+ /** Looks for directory paths containing events for a batch with the specified ID.
470
+ * @param batchID A batch ID.
471
+ * @param outError A pointer to `NSError *` to assign as possible error to.
472
+ * @return An array of an array of paths to directories for event batches with a specified batch ID
473
+ * or `nil` in the case of an error. Usually returns a single path but potentially return more in
474
+ * cases when the app is terminated while uploading a batch.
475
+ */
476
+ - (nullable NSArray<NSString *> *)batchDirPathsForBatchID:(NSNumber *)batchID
477
+ error:(NSError **_Nonnull)outError {
478
+ NSFileManager *fileManager = [NSFileManager defaultManager];
479
+ NSError *error;
480
+ NSArray<NSString *> *batches =
481
+ [fileManager contentsOfDirectoryAtPath:[GDTCORFlatFileStorage batchDataStoragePath]
482
+ error:&error];
483
+ if (batches == nil) {
484
+ *outError = error;
485
+ GDTCORLogDebug(@"Failed to find event file paths for batchID: %@, error: %@", batchID, error);
486
+ return nil;
487
+ }
488
+
489
+ NSMutableArray<NSString *> *batchDirPaths = [NSMutableArray array];
490
+ for (NSString *path in batches) {
491
+ NSDictionary<NSString *, id> *components = [self batchComponentsFromFilename:path];
492
+ NSNumber *pathBatchID = components[kGDTCORBatchComponentsBatchIDKey];
493
+ if ([pathBatchID isEqual:batchID]) {
494
+ NSString *batchDirPath =
495
+ [[GDTCORFlatFileStorage batchDataStoragePath] stringByAppendingPathComponent:path];
496
+ [batchDirPaths addObject:batchDirPath];
497
+ }
498
+ }
499
+
500
+ return [batchDirPaths copy];
501
+ }
502
+
503
+ /** Makes a copy of the contents of a directory to a directory at the specified path.*/
504
+ - (BOOL)moveContentsOfDirectoryAtPath:(NSString *)sourcePath
505
+ to:(NSString *)destinationPath
506
+ error:(NSError **_Nonnull)outError {
507
+ NSFileManager *fileManager = [NSFileManager defaultManager];
508
+
509
+ NSError *error;
510
+ NSArray<NSString *> *contentsPaths = [fileManager contentsOfDirectoryAtPath:sourcePath
511
+ error:&error];
512
+ if (contentsPaths == nil) {
513
+ *outError = error;
514
+ return NO;
515
+ }
516
+
517
+ NSMutableArray<NSError *> *errors = [NSMutableArray array];
518
+ for (NSString *path in contentsPaths) {
519
+ NSString *contentDestinationPath = [destinationPath stringByAppendingPathComponent:path];
520
+ NSString *contentSourcePath = [sourcePath stringByAppendingPathComponent:path];
521
+
522
+ NSError *moveError;
523
+ if (![fileManager moveItemAtPath:contentSourcePath
524
+ toPath:contentDestinationPath
525
+ error:&moveError] &&
526
+ moveError) {
527
+ [errors addObject:moveError];
528
+ }
529
+ }
530
+
531
+ if (errors.count == 0) {
532
+ return YES;
533
+ } else {
534
+ NSError *combinedError = [NSError errorWithDomain:@"GDTCORFlatFileStorage"
535
+ code:-1
536
+ userInfo:@{NSUnderlyingErrorKey : errors}];
537
+ *outError = combinedError;
538
+ return NO;
539
+ }
540
+ }
541
+
542
+ - (void)syncThreadUnsafeRemoveBatchWithID:(nonnull NSNumber *)batchID
543
+ deleteEvents:(BOOL)deleteEvents {
544
+ NSError *error;
545
+ NSArray<NSString *> *batchDirPaths = [self batchDirPathsForBatchID:batchID error:&error];
546
+
547
+ if (batchDirPaths == nil) {
548
+ return;
549
+ }
550
+
551
+ NSFileManager *fileManager = [NSFileManager defaultManager];
552
+
553
+ void (^removeBatchDir)(NSString *batchDirPath) = ^(NSString *batchDirPath) {
554
+ NSError *error;
555
+ if ([fileManager removeItemAtPath:batchDirPath error:&error]) {
556
+ GDTCORLogDebug(@"Batch removed at path: %@", batchDirPath);
557
+ } else {
558
+ GDTCORLogDebug(@"Failed to remove batch at path: %@", batchDirPath);
559
+ }
560
+ };
561
+
562
+ for (NSString *batchDirPath in batchDirPaths) {
563
+ @autoreleasepool {
564
+ if (deleteEvents) {
565
+ removeBatchDir(batchDirPath);
566
+ } else {
567
+ NSString *batchDirName = [batchDirPath lastPathComponent];
568
+ NSDictionary<NSString *, id> *components = [self batchComponentsFromFilename:batchDirName];
569
+ NSString *targetValue = [components[kGDTCORBatchComponentsTargetKey] stringValue];
570
+ NSString *destinationPath;
571
+ if (targetValue) {
572
+ destinationPath = [[GDTCORFlatFileStorage eventDataStoragePath]
573
+ stringByAppendingPathComponent:targetValue];
574
+ }
575
+
576
+ // `- [NSFileManager moveItemAtPath:toPath:error:]` method fails if an item by the
577
+ // destination path already exists (which usually is the case for the current method). Move
578
+ // the events one by one instead.
579
+ if (destinationPath && [self moveContentsOfDirectoryAtPath:batchDirPath
580
+ to:destinationPath
581
+ error:&error]) {
582
+ GDTCORLogDebug(@"Batched events at path: %@ moved back to the storage: %@", batchDirPath,
583
+ destinationPath);
584
+ } else {
585
+ GDTCORLogDebug(@"Error encountered whilst moving events back: %@", error);
586
+ }
587
+
588
+ // Even if not all events where moved back to the storage, there is not much can be done at
589
+ // this point, so cleanup batch directory now to avoid cluttering.
590
+ removeBatchDir(batchDirPath);
591
+ }
592
+ }
593
+ }
594
+
595
+ [self.sizeTracker resetCachedSize];
596
+ }
597
+
598
+ #pragma mark - Private helper methods
599
+
600
+ + (NSString *)eventDataStoragePath {
601
+ static NSString *eventDataPath;
602
+ static dispatch_once_t onceToken;
603
+ dispatch_once(&onceToken, ^{
604
+ eventDataPath = [NSString stringWithFormat:@"%@/%@/gdt_event_data", GDTCORRootDirectory().path,
605
+ NSStringFromClass([self class])];
606
+ });
607
+ NSError *error;
608
+ [[NSFileManager defaultManager] createDirectoryAtPath:eventDataPath
609
+ withIntermediateDirectories:YES
610
+ attributes:0
611
+ error:&error];
612
+ GDTCORAssert(error == nil, @"Creating the library data path failed: %@", error);
613
+ return eventDataPath;
614
+ }
615
+
616
+ + (NSString *)batchDataStoragePath {
617
+ static NSString *batchDataPath;
618
+ static dispatch_once_t onceToken;
619
+ dispatch_once(&onceToken, ^{
620
+ batchDataPath = [NSString stringWithFormat:@"%@/%@/gdt_batch_data", GDTCORRootDirectory().path,
621
+ NSStringFromClass([self class])];
622
+ });
623
+ NSError *error;
624
+ [[NSFileManager defaultManager] createDirectoryAtPath:batchDataPath
625
+ withIntermediateDirectories:YES
626
+ attributes:0
627
+ error:&error];
628
+ GDTCORAssert(error == nil, @"Creating the batch data path failed: %@", error);
629
+ return batchDataPath;
630
+ }
631
+
632
+ + (NSString *)libraryDataStoragePath {
633
+ static NSString *libraryDataPath;
634
+ static dispatch_once_t onceToken;
635
+ dispatch_once(&onceToken, ^{
636
+ libraryDataPath =
637
+ [NSString stringWithFormat:@"%@/%@/gdt_library_data", GDTCORRootDirectory().path,
638
+ NSStringFromClass([self class])];
639
+ });
640
+ NSError *error;
641
+ [[NSFileManager defaultManager] createDirectoryAtPath:libraryDataPath
642
+ withIntermediateDirectories:YES
643
+ attributes:0
644
+ error:&error];
645
+ GDTCORAssert(error == nil, @"Creating the library data path failed: %@", error);
646
+ return libraryDataPath;
647
+ }
648
+
649
+ + (NSString *)batchPathForTarget:(GDTCORTarget)target
650
+ batchID:(NSNumber *)batchID
651
+ expirationDate:(NSDate *)expirationDate {
652
+ return
653
+ [NSString stringWithFormat:@"%@/%ld%@%@%@%llu", [GDTCORFlatFileStorage batchDataStoragePath],
654
+ (long)target, kMetadataSeparator, batchID, kMetadataSeparator,
655
+ ((uint64_t)expirationDate.timeIntervalSince1970)];
656
+ }
657
+
658
+ + (NSString *)pathForTarget:(GDTCORTarget)target
659
+ eventID:(NSString *)eventID
660
+ qosTier:(NSNumber *)qosTier
661
+ expirationDate:(NSDate *)expirationDate
662
+ mappingID:(NSString *)mappingID {
663
+ NSMutableCharacterSet *allowedChars = [[NSCharacterSet alphanumericCharacterSet] mutableCopy];
664
+ [allowedChars addCharactersInString:kMetadataSeparator];
665
+ mappingID = [mappingID stringByAddingPercentEncodingWithAllowedCharacters:allowedChars];
666
+ return [NSString stringWithFormat:@"%@/%ld/%@%@%@%@%llu%@%@",
667
+ [GDTCORFlatFileStorage eventDataStoragePath], (long)target,
668
+ eventID, kMetadataSeparator, qosTier, kMetadataSeparator,
669
+ ((uint64_t)expirationDate.timeIntervalSince1970),
670
+ kMetadataSeparator, mappingID];
671
+ }
672
+
673
+ - (void)pathsForTarget:(GDTCORTarget)target
674
+ eventIDs:(nullable NSSet<NSString *> *)eventIDs
675
+ qosTiers:(nullable NSSet<NSNumber *> *)qosTiers
676
+ mappingIDs:(nullable NSSet<NSString *> *)mappingIDs
677
+ onComplete:(void (^)(NSSet<NSString *> *paths))onComplete {
678
+ void (^completion)(NSSet<NSString *> *) = onComplete == nil ? ^(NSSet<NSString *> *paths){} : onComplete;
679
+ dispatch_async(_storageQueue, ^{
680
+ NSMutableSet<NSString *> *paths = [[NSMutableSet alloc] init];
681
+ NSFileManager *fileManager = [NSFileManager defaultManager];
682
+ NSString *targetPath = [NSString
683
+ stringWithFormat:@"%@/%ld", [GDTCORFlatFileStorage eventDataStoragePath], (long)target];
684
+ [fileManager createDirectoryAtPath:targetPath
685
+ withIntermediateDirectories:YES
686
+ attributes:nil
687
+ error:nil];
688
+ NSError *error;
689
+ NSArray<NSString *> *dirPaths = [fileManager contentsOfDirectoryAtPath:targetPath error:&error];
690
+ if (error) {
691
+ GDTCORLogDebug(@"There was an error reading the contents of the target path: %@", error);
692
+ completion(paths);
693
+ return;
694
+ }
695
+ BOOL checkingIDs = eventIDs.count > 0;
696
+ BOOL checkingQosTiers = qosTiers.count > 0;
697
+ BOOL checkingMappingIDs = mappingIDs.count > 0;
698
+ BOOL checkingAnything = checkingIDs == NO && checkingQosTiers == NO && checkingMappingIDs == NO;
699
+ for (NSString *path in dirPaths) {
700
+ // Skip hidden files that are created as part of atomic file creation.
701
+ if ([path hasPrefix:@"."]) {
702
+ continue;
703
+ }
704
+ NSString *filePath = [targetPath stringByAppendingPathComponent:path];
705
+ if (checkingAnything) {
706
+ [paths addObject:filePath];
707
+ continue;
708
+ }
709
+ NSString *filename = [path lastPathComponent];
710
+ NSDictionary<NSString *, id> *eventComponents = [self eventComponentsFromFilename:filename];
711
+ if (!eventComponents) {
712
+ GDTCORLogDebug(@"There was an error reading the filename components: %@", eventComponents);
713
+ continue;
714
+ }
715
+ NSString *eventID = eventComponents[kGDTCOREventComponentsEventIDKey];
716
+ NSNumber *qosTier = eventComponents[kGDTCOREventComponentsQoSTierKey];
717
+ NSString *mappingID = eventComponents[kGDTCOREventComponentsMappingIDKey];
718
+
719
+ NSNumber *eventIDMatch = checkingIDs ? @([eventIDs containsObject:eventID]) : nil;
720
+ NSNumber *qosTierMatch = checkingQosTiers ? @([qosTiers containsObject:qosTier]) : nil;
721
+ NSNumber *mappingIDMatch =
722
+ checkingMappingIDs
723
+ ? @([mappingIDs containsObject:[mappingID stringByRemovingPercentEncoding]])
724
+ : nil;
725
+ if ((eventIDMatch == nil || eventIDMatch.boolValue) &&
726
+ (qosTierMatch == nil || qosTierMatch.boolValue) &&
727
+ (mappingIDMatch == nil || mappingIDMatch.boolValue)) {
728
+ [paths addObject:filePath];
729
+ }
730
+ }
731
+ completion(paths);
732
+ });
733
+ }
734
+
735
+ - (void)nextBatchID:(void (^)(NSNumber *_Nullable batchID))nextBatchID {
736
+ __block int32_t lastBatchID = -1;
737
+ [self libraryDataForKey:gBatchIDCounterKey
738
+ onFetchComplete:^(NSData *_Nullable data, NSError *_Nullable getValueError) {
739
+ if (!getValueError) {
740
+ [data getBytes:(void *)&lastBatchID length:sizeof(int32_t)];
741
+ }
742
+ if (data == nil) {
743
+ lastBatchID = 0;
744
+ }
745
+ if (nextBatchID) {
746
+ nextBatchID(@(lastBatchID));
747
+ }
748
+ }
749
+ setNewValue:^NSData *_Nullable(void) {
750
+ if (lastBatchID != -1) {
751
+ int32_t incrementedValue = lastBatchID + 1;
752
+ return [NSData dataWithBytes:&incrementedValue length:sizeof(int32_t)];
753
+ }
754
+ return nil;
755
+ }];
756
+ }
757
+
758
+ - (nullable NSDictionary<NSString *, id> *)eventComponentsFromFilename:(NSString *)fileName {
759
+ NSArray<NSString *> *components = [fileName componentsSeparatedByString:kMetadataSeparator];
760
+ if (components.count >= 4) {
761
+ NSString *eventID = components[0];
762
+ NSNumber *qosTier = @(components[1].integerValue);
763
+ NSDate *expirationDate = [NSDate dateWithTimeIntervalSince1970:components[2].longLongValue];
764
+ NSString *mappingID = [[components subarrayWithRange:NSMakeRange(3, components.count - 3)]
765
+ componentsJoinedByString:kMetadataSeparator];
766
+ if (eventID == nil || qosTier == nil || mappingID == nil || expirationDate == nil) {
767
+ GDTCORLogDebug(@"There was an error parsing the event filename components: %@", components);
768
+ return nil;
769
+ }
770
+ return @{
771
+ kGDTCOREventComponentsEventIDKey : eventID,
772
+ kGDTCOREventComponentsQoSTierKey : qosTier,
773
+ kGDTCOREventComponentsExpirationKey : expirationDate,
774
+ kGDTCOREventComponentsMappingIDKey : mappingID
775
+ };
776
+ }
777
+ GDTCORLogDebug(@"The event filename could not be split: %@", fileName);
778
+ return nil;
779
+ }
780
+
781
+ - (nullable NSDictionary<NSString *, id> *)batchComponentsFromFilename:(NSString *)fileName {
782
+ NSArray<NSString *> *components = [fileName componentsSeparatedByString:kMetadataSeparator];
783
+ if (components.count == 3) {
784
+ NSNumber *target = @(components[0].integerValue);
785
+ NSNumber *batchID = @(components[1].integerValue);
786
+ NSDate *expirationDate = [NSDate dateWithTimeIntervalSince1970:components[2].doubleValue];
787
+ if (target == nil || batchID == nil || expirationDate == nil) {
788
+ GDTCORLogDebug(@"There was an error parsing the batch filename components: %@", components);
789
+ return nil;
790
+ }
791
+ return @{
792
+ kGDTCORBatchComponentsTargetKey : target,
793
+ kGDTCORBatchComponentsBatchIDKey : batchID,
794
+ kGDTCORBatchComponentsExpirationKey : expirationDate
795
+ };
796
+ }
797
+ GDTCORLogDebug(@"The batch filename could not be split: %@", fileName);
798
+ return nil;
799
+ }
800
+
801
+ #pragma mark - GDTCORLifecycleProtocol
802
+
803
+ - (void)appWillBackground:(GDTCORApplication *)app {
804
+ dispatch_async(_storageQueue, ^{
805
+ // Immediately request a background task to run until the end of the current queue of work,
806
+ // and cancel it once the work is done.
807
+ __block GDTCORBackgroundIdentifier bgID =
808
+ [app beginBackgroundTaskWithName:@"GDTStorage"
809
+ expirationHandler:^{
810
+ [app endBackgroundTask:bgID];
811
+ bgID = GDTCORBackgroundIdentifierInvalid;
812
+ }];
813
+ // End the background task if it's still valid.
814
+ [app endBackgroundTask:bgID];
815
+ bgID = GDTCORBackgroundIdentifierInvalid;
816
+ });
817
+ }
818
+
819
+ - (void)appWillTerminate:(GDTCORApplication *)application {
820
+ dispatch_sync(_storageQueue, ^{
821
+ });
822
+ }
823
+
824
+ @end
825
+
826
+ NS_ASSUME_NONNULL_END