cocoapods-catalyst-validator 0.1.0.beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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,1070 @@
1
+ // Copyright 2018 Google LLC
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ #import <TargetConditionals.h>
16
+
17
+ #import "GoogleUtilities/AppDelegateSwizzler/Internal/GULAppDelegateSwizzler_Private.h"
18
+ #import "GoogleUtilities/AppDelegateSwizzler/Public/GoogleUtilities/GULAppDelegateSwizzler.h"
19
+ #import "GoogleUtilities/Common/GULLoggerCodes.h"
20
+ #import "GoogleUtilities/Environment/Public/GoogleUtilities/GULAppEnvironmentUtil.h"
21
+ #import "GoogleUtilities/Logger/Public/GoogleUtilities/GULLogger.h"
22
+ #import "GoogleUtilities/Network/Public/GoogleUtilities/GULMutableDictionary.h"
23
+
24
+ #import <dispatch/group.h>
25
+ #import <objc/runtime.h>
26
+
27
+ // Implementations need to be typed before calling the implementation directly to cast the
28
+ // arguments and the return types correctly. Otherwise, it will crash the app.
29
+ typedef BOOL (*GULRealOpenURLSourceApplicationAnnotationIMP)(
30
+ id, SEL, GULApplication *, NSURL *, NSString *, id);
31
+
32
+ typedef BOOL (*GULRealOpenURLOptionsIMP)(
33
+ id, SEL, GULApplication *, NSURL *, NSDictionary<NSString *, id> *);
34
+
35
+ #pragma clang diagnostic push
36
+ #pragma clang diagnostic ignored "-Wstrict-prototypes"
37
+ typedef void (*GULRealHandleEventsForBackgroundURLSessionIMP)(
38
+ id, SEL, GULApplication *, NSString *, void (^)());
39
+ #pragma clang diagnostic pop
40
+
41
+ typedef BOOL (*GULRealContinueUserActivityIMP)(
42
+ id, SEL, GULApplication *, NSUserActivity *, void (^)(NSArray *restorableObjects));
43
+
44
+ typedef void (*GULRealDidRegisterForRemoteNotificationsIMP)(id, SEL, GULApplication *, NSData *);
45
+
46
+ typedef void (*GULRealDidFailToRegisterForRemoteNotificationsIMP)(id,
47
+ SEL,
48
+ GULApplication *,
49
+ NSError *);
50
+
51
+ typedef void (*GULRealDidReceiveRemoteNotificationIMP)(id, SEL, GULApplication *, NSDictionary *);
52
+
53
+ #if !TARGET_OS_WATCH && !TARGET_OS_OSX
54
+ typedef void (*GULRealDidReceiveRemoteNotificationWithCompletionIMP)(
55
+ id, SEL, GULApplication *, NSDictionary *, void (^)(UIBackgroundFetchResult));
56
+ #endif // !TARGET_OS_WATCH && !TARGET_OS_OSX
57
+
58
+ typedef void (^GULAppDelegateInterceptorCallback)(id<GULApplicationDelegate>);
59
+
60
+ // The strings below are the keys for associated objects.
61
+ static char const *const kGULRealIMPBySelectorKey = "GUL_realIMPBySelector";
62
+ static char const *const kGULRealClassKey = "GUL_realClass";
63
+
64
+ static NSString *const kGULAppDelegateKeyPath = @"delegate";
65
+
66
+ static GULLoggerService kGULLoggerSwizzler = @"[GoogleUtilities/AppDelegateSwizzler]";
67
+
68
+ // Since Firebase SDKs also use this for app delegate proxying, in order to not be a breaking change
69
+ // we disable App Delegate proxying when either of these two flags are set to NO.
70
+
71
+ /** Plist key that allows Firebase developers to disable App and Scene Delegate Proxying. */
72
+ static NSString *const kGULFirebaseAppDelegateProxyEnabledPlistKey =
73
+ @"FirebaseAppDelegateProxyEnabled";
74
+
75
+ /** Plist key that allows developers not using Firebase to disable App and Scene Delegate Proxying.
76
+ */
77
+ static NSString *const kGULGoogleUtilitiesAppDelegateProxyEnabledPlistKey =
78
+ @"GoogleUtilitiesAppDelegateProxyEnabled";
79
+
80
+ /** The prefix of the App Delegate. */
81
+ static NSString *const kGULAppDelegatePrefix = @"GUL_";
82
+
83
+ /** The original instance of App Delegate. */
84
+ static id<GULApplicationDelegate> gOriginalAppDelegate;
85
+
86
+ /** The original App Delegate class */
87
+ static Class gOriginalAppDelegateClass;
88
+
89
+ /** The subclass of the original App Delegate. */
90
+ static Class gAppDelegateSubclass;
91
+
92
+ /** Remote notification methods selectors
93
+ *
94
+ * We have to opt out of referencing APNS related App Delegate methods directly to prevent
95
+ * an Apple review warning email about missing Push Notification Entitlement
96
+ * (like here: https://github.com/firebase/firebase-ios-sdk/issues/2807). From our experience, the
97
+ * warning is triggered when any of the symbols is present in the application sent to review, even
98
+ * if the code is never executed. Because GULAppDelegateSwizzler may be used by applications that
99
+ * are not using APNS we have to refer to the methods indirectly using selector constructed from
100
+ * string.
101
+ *
102
+ * NOTE: None of the methods is proxied unless it is explicitly requested by calling the method
103
+ * +[GULAppDelegateSwizzler proxyOriginalDelegateIncludingAPNSMethods]
104
+ */
105
+ static NSString *const kGULDidRegisterForRemoteNotificationsSEL =
106
+ @"application:didRegisterForRemoteNotificationsWithDeviceToken:";
107
+ static NSString *const kGULDidFailToRegisterForRemoteNotificationsSEL =
108
+ @"application:didFailToRegisterForRemoteNotificationsWithError:";
109
+ static NSString *const kGULDidReceiveRemoteNotificationSEL =
110
+ @"application:didReceiveRemoteNotification:";
111
+ static NSString *const kGULDidReceiveRemoteNotificationWithCompletionSEL =
112
+ @"application:didReceiveRemoteNotification:fetchCompletionHandler:";
113
+
114
+ /**
115
+ * This class is necessary to store the delegates in an NSArray without retaining them.
116
+ * [NSValue valueWithNonRetainedObject] also provides this functionality, but does not provide a
117
+ * zeroing pointer. This will cause EXC_BAD_ACCESS when trying to access the object after it is
118
+ * dealloced. Instead, this container stores a weak, zeroing reference to the object, which
119
+ * automatically is set to nil by the runtime when the object is dealloced.
120
+ */
121
+ @interface GULZeroingWeakContainer : NSObject
122
+
123
+ /** Stores a weak object. */
124
+ @property(nonatomic, weak) id object;
125
+
126
+ @end
127
+
128
+ @implementation GULZeroingWeakContainer
129
+ @end
130
+
131
+ @interface GULAppDelegateObserver : NSObject
132
+ @end
133
+
134
+ @implementation GULAppDelegateObserver {
135
+ BOOL _isObserving;
136
+ }
137
+
138
+ + (GULAppDelegateObserver *)sharedInstance {
139
+ static GULAppDelegateObserver *instance;
140
+ static dispatch_once_t once;
141
+ dispatch_once(&once, ^{
142
+ instance = [[GULAppDelegateObserver alloc] init];
143
+ });
144
+ return instance;
145
+ }
146
+
147
+ - (void)observeUIApplication {
148
+ if (_isObserving) {
149
+ return;
150
+ }
151
+ [[GULAppDelegateSwizzler sharedApplication]
152
+ addObserver:self
153
+ forKeyPath:kGULAppDelegateKeyPath
154
+ options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld
155
+ context:nil];
156
+ _isObserving = YES;
157
+ }
158
+
159
+ - (void)observeValueForKeyPath:(NSString *)keyPath
160
+ ofObject:(id)object
161
+ change:(NSDictionary *)change
162
+ context:(void *)context {
163
+ if ([keyPath isEqual:kGULAppDelegateKeyPath]) {
164
+ id newValue = change[NSKeyValueChangeNewKey];
165
+ id oldValue = change[NSKeyValueChangeOldKey];
166
+ if ([newValue isEqual:oldValue]) {
167
+ return;
168
+ }
169
+ // Free the stored app delegate instance because it has been changed to a different instance to
170
+ // avoid keeping it alive forever.
171
+ if ([oldValue isEqual:gOriginalAppDelegate]) {
172
+ gOriginalAppDelegate = nil;
173
+ // Remove the observer. Parse it to NSObject to avoid warning.
174
+ [[GULAppDelegateSwizzler sharedApplication] removeObserver:self
175
+ forKeyPath:kGULAppDelegateKeyPath];
176
+ _isObserving = NO;
177
+ }
178
+ }
179
+ }
180
+
181
+ @end
182
+
183
+ @implementation GULAppDelegateSwizzler
184
+
185
+ static dispatch_once_t sProxyAppDelegateOnceToken;
186
+ static dispatch_once_t sProxyAppDelegateRemoteNotificationOnceToken;
187
+
188
+ #pragma mark - Public methods
189
+
190
+ + (BOOL)isAppDelegateProxyEnabled {
191
+ NSDictionary *infoDictionary = [NSBundle mainBundle].infoDictionary;
192
+
193
+ id isFirebaseProxyEnabledPlistValue = infoDictionary[kGULFirebaseAppDelegateProxyEnabledPlistKey];
194
+ id isGoogleProxyEnabledPlistValue =
195
+ infoDictionary[kGULGoogleUtilitiesAppDelegateProxyEnabledPlistKey];
196
+
197
+ // Enabled by default.
198
+ BOOL isFirebaseAppDelegateProxyEnabled = YES;
199
+ BOOL isGoogleUtilitiesAppDelegateProxyEnabled = YES;
200
+
201
+ if ([isFirebaseProxyEnabledPlistValue isKindOfClass:[NSNumber class]]) {
202
+ isFirebaseAppDelegateProxyEnabled = [isFirebaseProxyEnabledPlistValue boolValue];
203
+ }
204
+
205
+ if ([isGoogleProxyEnabledPlistValue isKindOfClass:[NSNumber class]]) {
206
+ isGoogleUtilitiesAppDelegateProxyEnabled = [isGoogleProxyEnabledPlistValue boolValue];
207
+ }
208
+
209
+ // Only deactivate the proxy if it is explicitly disabled by app developers using either one of
210
+ // the plist flags.
211
+ return isFirebaseAppDelegateProxyEnabled && isGoogleUtilitiesAppDelegateProxyEnabled;
212
+ }
213
+
214
+ + (GULAppDelegateInterceptorID)registerAppDelegateInterceptor:
215
+ (id<GULApplicationDelegate>)interceptor {
216
+ NSAssert(interceptor, @"AppDelegateProxy cannot add nil interceptor");
217
+ NSAssert([interceptor conformsToProtocol:@protocol(GULApplicationDelegate)],
218
+ @"AppDelegateProxy interceptor does not conform to UIApplicationDelegate");
219
+
220
+ if (!interceptor) {
221
+ GULLogError(kGULLoggerSwizzler, NO,
222
+ [NSString stringWithFormat:@"I-SWZ%06ld",
223
+ (long)kGULSwizzlerMessageCodeAppDelegateSwizzling000],
224
+ @"AppDelegateProxy cannot add nil interceptor.");
225
+ return nil;
226
+ }
227
+ if (![interceptor conformsToProtocol:@protocol(GULApplicationDelegate)]) {
228
+ GULLogError(kGULLoggerSwizzler, NO,
229
+ [NSString stringWithFormat:@"I-SWZ%06ld",
230
+ (long)kGULSwizzlerMessageCodeAppDelegateSwizzling001],
231
+ @"AppDelegateProxy interceptor does not conform to UIApplicationDelegate");
232
+ return nil;
233
+ }
234
+
235
+ // The ID should be the same given the same interceptor object.
236
+ NSString *interceptorID = [NSString stringWithFormat:@"%@%p", kGULAppDelegatePrefix, interceptor];
237
+ if (!interceptorID.length) {
238
+ GULLogError(kGULLoggerSwizzler, NO,
239
+ [NSString stringWithFormat:@"I-SWZ%06ld",
240
+ (long)kGULSwizzlerMessageCodeAppDelegateSwizzling002],
241
+ @"AppDelegateProxy cannot create Interceptor ID.");
242
+ return nil;
243
+ }
244
+ GULZeroingWeakContainer *weakObject = [[GULZeroingWeakContainer alloc] init];
245
+ weakObject.object = interceptor;
246
+ [GULAppDelegateSwizzler interceptors][interceptorID] = weakObject;
247
+ return interceptorID;
248
+ }
249
+
250
+ + (void)unregisterAppDelegateInterceptorWithID:(GULAppDelegateInterceptorID)interceptorID {
251
+ NSAssert(interceptorID, @"AppDelegateProxy cannot unregister nil interceptor ID.");
252
+ NSAssert(((NSString *)interceptorID).length != 0,
253
+ @"AppDelegateProxy cannot unregister empty interceptor ID.");
254
+
255
+ if (!interceptorID) {
256
+ GULLogError(kGULLoggerSwizzler, NO,
257
+ [NSString stringWithFormat:@"I-SWZ%06ld",
258
+ (long)kGULSwizzlerMessageCodeAppDelegateSwizzling003],
259
+ @"AppDelegateProxy cannot unregister empty interceptor ID.");
260
+ return;
261
+ }
262
+
263
+ GULZeroingWeakContainer *weakContainer = [GULAppDelegateSwizzler interceptors][interceptorID];
264
+ if (!weakContainer.object) {
265
+ GULLogError(kGULLoggerSwizzler, NO,
266
+ [NSString stringWithFormat:@"I-SWZ%06ld",
267
+ (long)kGULSwizzlerMessageCodeAppDelegateSwizzling004],
268
+ @"AppDelegateProxy cannot unregister interceptor that was not registered. "
269
+ "Interceptor ID %@",
270
+ interceptorID);
271
+ return;
272
+ }
273
+
274
+ [[GULAppDelegateSwizzler interceptors] removeObjectForKey:interceptorID];
275
+ }
276
+
277
+ + (void)proxyOriginalDelegate {
278
+ if ([GULAppEnvironmentUtil isAppExtension]) {
279
+ return;
280
+ }
281
+
282
+ dispatch_once(&sProxyAppDelegateOnceToken, ^{
283
+ id<GULApplicationDelegate> originalDelegate =
284
+ [GULAppDelegateSwizzler sharedApplication].delegate;
285
+ [GULAppDelegateSwizzler proxyAppDelegate:originalDelegate];
286
+ });
287
+ }
288
+
289
+ + (void)proxyOriginalDelegateIncludingAPNSMethods {
290
+ if ([GULAppEnvironmentUtil isAppExtension]) {
291
+ return;
292
+ }
293
+
294
+ [self proxyOriginalDelegate];
295
+
296
+ dispatch_once(&sProxyAppDelegateRemoteNotificationOnceToken, ^{
297
+ id<GULApplicationDelegate> appDelegate = [GULAppDelegateSwizzler sharedApplication].delegate;
298
+
299
+ NSMutableDictionary *realImplementationsBySelector =
300
+ [objc_getAssociatedObject(appDelegate, &kGULRealIMPBySelectorKey) mutableCopy];
301
+
302
+ [self proxyRemoteNotificationsMethodsWithAppDelegateSubClass:gAppDelegateSubclass
303
+ realClass:gOriginalAppDelegateClass
304
+ appDelegate:appDelegate
305
+ realImplementationsBySelector:realImplementationsBySelector];
306
+
307
+ objc_setAssociatedObject(appDelegate, &kGULRealIMPBySelectorKey,
308
+ [realImplementationsBySelector copy], OBJC_ASSOCIATION_RETAIN);
309
+ [self reassignAppDelegate];
310
+ });
311
+ }
312
+
313
+ #pragma mark - Create proxy
314
+
315
+ + (GULApplication *)sharedApplication {
316
+ if ([GULAppEnvironmentUtil isAppExtension]) {
317
+ return nil;
318
+ }
319
+ id sharedApplication = nil;
320
+ Class uiApplicationClass = NSClassFromString(kGULApplicationClassName);
321
+ if (uiApplicationClass &&
322
+ [uiApplicationClass respondsToSelector:(NSSelectorFromString(@"sharedApplication"))]) {
323
+ sharedApplication = [uiApplicationClass sharedApplication];
324
+ }
325
+ return sharedApplication;
326
+ }
327
+
328
+ #pragma mark - Override default methods
329
+
330
+ /** Creates a new subclass of the class of the given object and sets the isa value of the given
331
+ * object to the new subclass. Additionally this copies methods to that new subclass that allow us
332
+ * to intercept UIApplicationDelegate methods. This is better known as isa swizzling.
333
+ *
334
+ * @param appDelegate The object to which you want to isa swizzle. This has to conform to the
335
+ * UIApplicationDelegate subclass.
336
+ * @return Returns the new subclass.
337
+ */
338
+ + (nullable Class)createSubclassWithObject:(id<GULApplicationDelegate>)appDelegate {
339
+ Class realClass = [appDelegate class];
340
+
341
+ // Create GUL_<RealAppDelegate>_<UUID>
342
+ NSString *classNameWithPrefix =
343
+ [kGULAppDelegatePrefix stringByAppendingString:NSStringFromClass(realClass)];
344
+ NSString *newClassName =
345
+ [NSString stringWithFormat:@"%@-%@", classNameWithPrefix, [NSUUID UUID].UUIDString];
346
+
347
+ if (NSClassFromString(newClassName)) {
348
+ GULLogError(kGULLoggerSwizzler, NO,
349
+ [NSString stringWithFormat:@"I-SWZ%06ld",
350
+ (long)kGULSwizzlerMessageCodeAppDelegateSwizzling005],
351
+ @"Cannot create a proxy for App Delegate. Subclass already exists. Original Class: "
352
+ @"%@, subclass: %@",
353
+ NSStringFromClass(realClass), newClassName);
354
+ return nil;
355
+ }
356
+
357
+ // Register the new class as subclass of the real one. Do not allocate more than the real class
358
+ // size.
359
+ Class appDelegateSubClass = objc_allocateClassPair(realClass, newClassName.UTF8String, 0);
360
+ if (appDelegateSubClass == Nil) {
361
+ GULLogError(kGULLoggerSwizzler, NO,
362
+ [NSString stringWithFormat:@"I-SWZ%06ld",
363
+ (long)kGULSwizzlerMessageCodeAppDelegateSwizzling006],
364
+ @"Cannot create a proxy for App Delegate. Subclass already exists. Original Class: "
365
+ @"%@, subclass: Nil",
366
+ NSStringFromClass(realClass));
367
+ return nil;
368
+ }
369
+
370
+ NSMutableDictionary<NSString *, NSValue *> *realImplementationsBySelector =
371
+ [[NSMutableDictionary alloc] init];
372
+
373
+ // For application:continueUserActivity:restorationHandler:
374
+ SEL continueUserActivitySEL = @selector(application:continueUserActivity:restorationHandler:);
375
+ [self proxyDestinationSelector:continueUserActivitySEL
376
+ implementationsFromSourceSelector:continueUserActivitySEL
377
+ fromClass:[GULAppDelegateSwizzler class]
378
+ toClass:appDelegateSubClass
379
+ realClass:realClass
380
+ storeDestinationImplementationTo:realImplementationsBySelector];
381
+
382
+ #if TARGET_OS_IOS || TARGET_OS_TV
383
+ // Add the following methods from GULAppDelegate class, and store the real implementation so it
384
+ // can forward to the real one.
385
+ // For application:openURL:options:
386
+ SEL applicationOpenURLOptionsSEL = @selector(application:openURL:options:);
387
+ if ([appDelegate respondsToSelector:applicationOpenURLOptionsSEL]) {
388
+ // Only add the application:openURL:options: method if the original AppDelegate implements it.
389
+ // This fixes a bug if an app only implements application:openURL:sourceApplication:annotation:
390
+ // (if we add the `options` method, iOS sees that one exists and does not call the
391
+ // `sourceApplication` method, which in this case is the only one the app implements).
392
+
393
+ [self proxyDestinationSelector:applicationOpenURLOptionsSEL
394
+ implementationsFromSourceSelector:applicationOpenURLOptionsSEL
395
+ fromClass:[GULAppDelegateSwizzler class]
396
+ toClass:appDelegateSubClass
397
+ realClass:realClass
398
+ storeDestinationImplementationTo:realImplementationsBySelector];
399
+ }
400
+
401
+ // For application:handleEventsForBackgroundURLSession:completionHandler:
402
+ SEL handleEventsForBackgroundURLSessionSEL = @selector(application:
403
+ handleEventsForBackgroundURLSession:completionHandler:);
404
+ [self proxyDestinationSelector:handleEventsForBackgroundURLSessionSEL
405
+ implementationsFromSourceSelector:handleEventsForBackgroundURLSessionSEL
406
+ fromClass:[GULAppDelegateSwizzler class]
407
+ toClass:appDelegateSubClass
408
+ realClass:realClass
409
+ storeDestinationImplementationTo:realImplementationsBySelector];
410
+ #endif // TARGET_OS_IOS || TARGET_OS_TV
411
+
412
+ #if TARGET_OS_IOS
413
+ // For application:openURL:sourceApplication:annotation:
414
+ SEL openURLSourceApplicationAnnotationSEL = @selector(application:
415
+ openURL:sourceApplication:annotation:);
416
+
417
+ [self proxyDestinationSelector:openURLSourceApplicationAnnotationSEL
418
+ implementationsFromSourceSelector:openURLSourceApplicationAnnotationSEL
419
+ fromClass:[GULAppDelegateSwizzler class]
420
+ toClass:appDelegateSubClass
421
+ realClass:realClass
422
+ storeDestinationImplementationTo:realImplementationsBySelector];
423
+ #endif // TARGET_OS_IOS
424
+
425
+ // Override the description too so the custom class name will not show up.
426
+ [GULAppDelegateSwizzler addInstanceMethodWithDestinationSelector:@selector(description)
427
+ withImplementationFromSourceSelector:@selector(fakeDescription)
428
+ fromClass:[self class]
429
+ toClass:appDelegateSubClass];
430
+
431
+ // Store original implementations to a fake property of the original delegate.
432
+ objc_setAssociatedObject(appDelegate, &kGULRealIMPBySelectorKey,
433
+ [realImplementationsBySelector copy], OBJC_ASSOCIATION_RETAIN_NONATOMIC);
434
+ objc_setAssociatedObject(appDelegate, &kGULRealClassKey, realClass,
435
+ OBJC_ASSOCIATION_RETAIN_NONATOMIC);
436
+
437
+ // The subclass size has to be exactly the same size with the original class size. The subclass
438
+ // cannot have more ivars/properties than its superclass since it will cause an offset in memory
439
+ // that can lead to overwriting the isa of an object in the next frame.
440
+ if (class_getInstanceSize(realClass) != class_getInstanceSize(appDelegateSubClass)) {
441
+ GULLogError(kGULLoggerSwizzler, NO,
442
+ [NSString stringWithFormat:@"I-SWZ%06ld",
443
+ (long)kGULSwizzlerMessageCodeAppDelegateSwizzling007],
444
+ @"Cannot create subclass of App Delegate, because the created subclass is not the "
445
+ @"same size. %@",
446
+ NSStringFromClass(realClass));
447
+ NSAssert(NO, @"Classes must be the same size to swizzle isa");
448
+ return nil;
449
+ }
450
+
451
+ // Make the newly created class to be the subclass of the real App Delegate class.
452
+ objc_registerClassPair(appDelegateSubClass);
453
+ if (object_setClass(appDelegate, appDelegateSubClass)) {
454
+ GULLogDebug(kGULLoggerSwizzler, NO,
455
+ [NSString stringWithFormat:@"I-SWZ%06ld",
456
+ (long)kGULSwizzlerMessageCodeAppDelegateSwizzling008],
457
+ @"Successfully created App Delegate Proxy automatically. To disable the "
458
+ @"proxy, set the flag %@ to NO (Boolean) in the Info.plist",
459
+ [GULAppDelegateSwizzler correctAppDelegateProxyKey]);
460
+ }
461
+
462
+ return appDelegateSubClass;
463
+ }
464
+
465
+ + (void)proxyRemoteNotificationsMethodsWithAppDelegateSubClass:(Class)appDelegateSubClass
466
+ realClass:(Class)realClass
467
+ appDelegate:(id)appDelegate
468
+ realImplementationsBySelector:
469
+ (NSMutableDictionary *)realImplementationsBySelector {
470
+ if (realClass == nil || appDelegateSubClass == nil || appDelegate == nil ||
471
+ realImplementationsBySelector == nil) {
472
+ // The App Delegate has not been swizzled.
473
+ return;
474
+ }
475
+
476
+ // For application:didRegisterForRemoteNotificationsWithDeviceToken:
477
+ SEL didRegisterForRemoteNotificationsSEL =
478
+ NSSelectorFromString(kGULDidRegisterForRemoteNotificationsSEL);
479
+ SEL didRegisterForRemoteNotificationsDonorSEL = @selector(application:
480
+ donor_didRegisterForRemoteNotificationsWithDeviceToken:);
481
+
482
+ [self proxyDestinationSelector:didRegisterForRemoteNotificationsSEL
483
+ implementationsFromSourceSelector:didRegisterForRemoteNotificationsDonorSEL
484
+ fromClass:[GULAppDelegateSwizzler class]
485
+ toClass:appDelegateSubClass
486
+ realClass:realClass
487
+ storeDestinationImplementationTo:realImplementationsBySelector];
488
+
489
+ // For application:didFailToRegisterForRemoteNotificationsWithError:
490
+ SEL didFailToRegisterForRemoteNotificationsSEL =
491
+ NSSelectorFromString(kGULDidFailToRegisterForRemoteNotificationsSEL);
492
+ SEL didFailToRegisterForRemoteNotificationsDonorSEL = @selector(application:
493
+ donor_didFailToRegisterForRemoteNotificationsWithError:);
494
+
495
+ [self proxyDestinationSelector:didFailToRegisterForRemoteNotificationsSEL
496
+ implementationsFromSourceSelector:didFailToRegisterForRemoteNotificationsDonorSEL
497
+ fromClass:[GULAppDelegateSwizzler class]
498
+ toClass:appDelegateSubClass
499
+ realClass:realClass
500
+ storeDestinationImplementationTo:realImplementationsBySelector];
501
+
502
+ // For application:didReceiveRemoteNotification:
503
+ SEL didReceiveRemoteNotificationSEL = NSSelectorFromString(kGULDidReceiveRemoteNotificationSEL);
504
+ SEL didReceiveRemoteNotificationDonotSEL = @selector(application:
505
+ donor_didReceiveRemoteNotification:);
506
+
507
+ [self proxyDestinationSelector:didReceiveRemoteNotificationSEL
508
+ implementationsFromSourceSelector:didReceiveRemoteNotificationDonotSEL
509
+ fromClass:[GULAppDelegateSwizzler class]
510
+ toClass:appDelegateSubClass
511
+ realClass:realClass
512
+ storeDestinationImplementationTo:realImplementationsBySelector];
513
+
514
+ // For application:didReceiveRemoteNotification:fetchCompletionHandler:
515
+ #if !TARGET_OS_WATCH && !TARGET_OS_OSX
516
+ SEL didReceiveRemoteNotificationWithCompletionSEL =
517
+ NSSelectorFromString(kGULDidReceiveRemoteNotificationWithCompletionSEL);
518
+ SEL didReceiveRemoteNotificationWithCompletionDonorSEL =
519
+ @selector(application:donor_didReceiveRemoteNotification:fetchCompletionHandler:);
520
+ if ([appDelegate respondsToSelector:didReceiveRemoteNotificationWithCompletionSEL]) {
521
+ // Only add the application:didReceiveRemoteNotification:fetchCompletionHandler: method if
522
+ // the original AppDelegate implements it.
523
+ // This fixes a bug if an app only implements application:didReceiveRemoteNotification:
524
+ // (if we add the method with completion, iOS sees that one exists and does not call
525
+ // the method without the completion, which in this case is the only one the app implements).
526
+
527
+ [self proxyDestinationSelector:didReceiveRemoteNotificationWithCompletionSEL
528
+ implementationsFromSourceSelector:didReceiveRemoteNotificationWithCompletionDonorSEL
529
+ fromClass:[GULAppDelegateSwizzler class]
530
+ toClass:appDelegateSubClass
531
+ realClass:realClass
532
+ storeDestinationImplementationTo:realImplementationsBySelector];
533
+ }
534
+ #endif // !TARGET_OS_WATCH && !TARGET_OS_OSX
535
+ }
536
+
537
+ /// We have to do this to invalidate the cache that caches the original respondsToSelector of
538
+ /// openURL handlers. Without this, it won't call the default implementations because the system
539
+ /// checks and caches them.
540
+ /// Register KVO only once. Otherwise, the observing method will be called as many times as
541
+ /// being registered.
542
+ + (void)reassignAppDelegate {
543
+ #if !TARGET_OS_WATCH
544
+ id<GULApplicationDelegate> delegate = [self sharedApplication].delegate;
545
+ [self sharedApplication].delegate = nil;
546
+ [self sharedApplication].delegate = delegate;
547
+ gOriginalAppDelegate = delegate;
548
+ [[GULAppDelegateObserver sharedInstance] observeUIApplication];
549
+ #endif
550
+ }
551
+
552
+ #pragma mark - Helper methods
553
+
554
+ + (GULMutableDictionary *)interceptors {
555
+ static dispatch_once_t onceToken;
556
+ static GULMutableDictionary *sInterceptors;
557
+ dispatch_once(&onceToken, ^{
558
+ sInterceptors = [[GULMutableDictionary alloc] init];
559
+ });
560
+ return sInterceptors;
561
+ }
562
+
563
+ + (nullable NSValue *)originalImplementationForSelector:(SEL)selector object:(id)object {
564
+ NSDictionary *realImplementationBySelector =
565
+ objc_getAssociatedObject(object, &kGULRealIMPBySelectorKey);
566
+ return realImplementationBySelector[NSStringFromSelector(selector)];
567
+ }
568
+
569
+ + (void)proxyDestinationSelector:(SEL)destinationSelector
570
+ implementationsFromSourceSelector:(SEL)sourceSelector
571
+ fromClass:(Class)sourceClass
572
+ toClass:(Class)destinationClass
573
+ realClass:(Class)realClass
574
+ storeDestinationImplementationTo:
575
+ (NSMutableDictionary<NSString *, NSValue *> *)destinationImplementationsBySelector {
576
+ [self addInstanceMethodWithDestinationSelector:destinationSelector
577
+ withImplementationFromSourceSelector:sourceSelector
578
+ fromClass:sourceClass
579
+ toClass:destinationClass];
580
+ IMP sourceImplementation =
581
+ [GULAppDelegateSwizzler implementationOfMethodSelector:destinationSelector
582
+ fromClass:realClass];
583
+ NSValue *sourceImplementationPointer = [NSValue valueWithPointer:sourceImplementation];
584
+
585
+ NSString *destinationSelectorString = NSStringFromSelector(destinationSelector);
586
+ destinationImplementationsBySelector[destinationSelectorString] = sourceImplementationPointer;
587
+ }
588
+
589
+ /** Copies a method identified by the methodSelector from one class to the other. After this method
590
+ * is called, performing [toClassInstance methodSelector] will be similar to calling
591
+ * [fromClassInstance methodSelector]. This method does nothing if toClass already has a method
592
+ * identified by methodSelector.
593
+ *
594
+ * @param methodSelector The SEL that identifies both the method on the fromClass as well as the
595
+ * one on the toClass.
596
+ * @param fromClass The class from which a method is sourced.
597
+ * @param toClass The class to which the method is added. If the class already has a method with
598
+ * the same selector, this has no effect.
599
+ */
600
+ + (void)addInstanceMethodWithSelector:(SEL)methodSelector
601
+ fromClass:(Class)fromClass
602
+ toClass:(Class)toClass {
603
+ [self addInstanceMethodWithDestinationSelector:methodSelector
604
+ withImplementationFromSourceSelector:methodSelector
605
+ fromClass:fromClass
606
+ toClass:toClass];
607
+ }
608
+
609
+ /** Copies a method identified by the sourceSelector from the fromClass as a method for the
610
+ * destinationSelector on the toClass. After this method is called, performing
611
+ * [toClassInstance destinationSelector] will be similar to calling
612
+ * [fromClassInstance sourceSelector]. This method does nothing if toClass already has a method
613
+ * identified by destinationSelector.
614
+ *
615
+ * @param destinationSelector The SEL that identifies the method on the toClass.
616
+ * @param sourceSelector The SEL that identifies the method on the fromClass.
617
+ * @param fromClass The class from which a method is sourced.
618
+ * @param toClass The class to which the method is added. If the class already has a method with
619
+ * the same selector, this has no effect.
620
+ */
621
+ + (void)addInstanceMethodWithDestinationSelector:(SEL)destinationSelector
622
+ withImplementationFromSourceSelector:(SEL)sourceSelector
623
+ fromClass:(Class)fromClass
624
+ toClass:(Class)toClass {
625
+ Method method = class_getInstanceMethod(fromClass, sourceSelector);
626
+ IMP methodIMP = method_getImplementation(method);
627
+ const char *types = method_getTypeEncoding(method);
628
+ if (!class_addMethod(toClass, destinationSelector, methodIMP, types)) {
629
+ GULLogWarning(kGULLoggerSwizzler, NO,
630
+ [NSString stringWithFormat:@"I-SWZ%06ld",
631
+ (long)kGULSwizzlerMessageCodeAppDelegateSwizzling009],
632
+ @"Cannot copy method to destination selector %@ as it already exists",
633
+ NSStringFromSelector(destinationSelector));
634
+ }
635
+ }
636
+
637
+ /** Gets the IMP of the instance method on the class identified by the selector.
638
+ *
639
+ * @param selector The selector of which the IMP is to be fetched.
640
+ * @param aClass The class from which the IMP is to be fetched.
641
+ * @return The IMP of the instance method identified by selector and aClass.
642
+ */
643
+ + (IMP)implementationOfMethodSelector:(SEL)selector fromClass:(Class)aClass {
644
+ Method aMethod = class_getInstanceMethod(aClass, selector);
645
+ return method_getImplementation(aMethod);
646
+ }
647
+
648
+ /** Enumerates through all the interceptors and if they respond to a given selector, executes a
649
+ * GULAppDelegateInterceptorCallback with the interceptor.
650
+ *
651
+ * @param methodSelector The SEL to check if an interceptor responds to.
652
+ * @param callback the GULAppDelegateInterceptorCallback.
653
+ */
654
+ + (void)notifyInterceptorsWithMethodSelector:(SEL)methodSelector
655
+ callback:(GULAppDelegateInterceptorCallback)callback {
656
+ if (!callback) {
657
+ return;
658
+ }
659
+
660
+ NSDictionary *interceptors = [GULAppDelegateSwizzler interceptors].dictionary;
661
+ [interceptors enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
662
+ GULZeroingWeakContainer *interceptorContainer = obj;
663
+ id interceptor = interceptorContainer.object;
664
+ if (!interceptor) {
665
+ GULLogWarning(
666
+ kGULLoggerSwizzler, NO,
667
+ [NSString
668
+ stringWithFormat:@"I-SWZ%06ld", (long)kGULSwizzlerMessageCodeAppDelegateSwizzling010],
669
+ @"AppDelegateProxy cannot find interceptor with ID %@. Removing the interceptor.", key);
670
+ [[GULAppDelegateSwizzler interceptors] removeObjectForKey:key];
671
+ return;
672
+ }
673
+ if ([interceptor respondsToSelector:methodSelector]) {
674
+ callback(interceptor);
675
+ }
676
+ }];
677
+ }
678
+
679
+ // The methods below are donor methods which are added to the dynamic subclass of the App Delegate.
680
+ // They are called within the scope of the real App Delegate so |self| does not refer to the
681
+ // GULAppDelegateSwizzler instance but the real App Delegate instance.
682
+
683
+ #pragma mark - [Donor Methods] Overridden instance description method
684
+
685
+ - (NSString *)fakeDescription {
686
+ Class realClass = objc_getAssociatedObject(self, &kGULRealClassKey);
687
+ return [NSString stringWithFormat:@"<%@: %p>", realClass, self];
688
+ }
689
+
690
+ #pragma mark - [Donor Methods] URL overridden handler methods
691
+ #if TARGET_OS_IOS || TARGET_OS_TV
692
+
693
+ - (BOOL)application:(GULApplication *)application
694
+ openURL:(NSURL *)url
695
+ options:(NSDictionary<NSString *, id> *)options {
696
+ SEL methodSelector = @selector(application:openURL:options:);
697
+ // Call the real implementation if the real App Delegate has any.
698
+ NSValue *openURLIMPPointer =
699
+ [GULAppDelegateSwizzler originalImplementationForSelector:methodSelector object:self];
700
+ GULRealOpenURLOptionsIMP openURLOptionsIMP = [openURLIMPPointer pointerValue];
701
+
702
+ __block BOOL returnedValue = NO;
703
+
704
+ // This is needed to for the library to be warning free on iOS versions < 9.
705
+ #pragma clang diagnostic push
706
+ #pragma clang diagnostic ignored "-Wunguarded-availability"
707
+ [GULAppDelegateSwizzler
708
+ notifyInterceptorsWithMethodSelector:methodSelector
709
+ callback:^(id<GULApplicationDelegate> interceptor) {
710
+ returnedValue |= [interceptor application:application
711
+ openURL:url
712
+ options:options];
713
+ }];
714
+ #pragma clang diagnostic pop
715
+ if (openURLOptionsIMP) {
716
+ returnedValue |= openURLOptionsIMP(self, methodSelector, application, url, options);
717
+ }
718
+ return returnedValue;
719
+ }
720
+
721
+ #endif // TARGET_OS_IOS || TARGET_OS_TV
722
+
723
+ #if TARGET_OS_IOS
724
+
725
+ - (BOOL)application:(GULApplication *)application
726
+ openURL:(NSURL *)url
727
+ sourceApplication:(NSString *)sourceApplication
728
+ annotation:(id)annotation {
729
+ SEL methodSelector = @selector(application:openURL:sourceApplication:annotation:);
730
+
731
+ // Call the real implementation if the real App Delegate has any.
732
+ NSValue *openURLSourceAppAnnotationIMPPointer =
733
+ [GULAppDelegateSwizzler originalImplementationForSelector:methodSelector object:self];
734
+ GULRealOpenURLSourceApplicationAnnotationIMP openURLSourceApplicationAnnotationIMP =
735
+ [openURLSourceAppAnnotationIMPPointer pointerValue];
736
+
737
+ __block BOOL returnedValue = NO;
738
+ [GULAppDelegateSwizzler
739
+ notifyInterceptorsWithMethodSelector:methodSelector
740
+ callback:^(id<GULApplicationDelegate> interceptor) {
741
+ #pragma clang diagnostic push
742
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
743
+ returnedValue |= [interceptor application:application
744
+ openURL:url
745
+ sourceApplication:sourceApplication
746
+ annotation:annotation];
747
+ #pragma clang diagnostic pop
748
+ }];
749
+ if (openURLSourceApplicationAnnotationIMP) {
750
+ returnedValue |= openURLSourceApplicationAnnotationIMP(self, methodSelector, application, url,
751
+ sourceApplication, annotation);
752
+ }
753
+ return returnedValue;
754
+ }
755
+
756
+ #endif // TARGET_OS_IOS
757
+
758
+ #pragma mark - [Donor Methods] Network overridden handler methods
759
+
760
+ #if TARGET_OS_IOS || TARGET_OS_TV
761
+
762
+ #pragma clang diagnostic push
763
+ #pragma clang diagnostic ignored "-Wstrict-prototypes"
764
+ - (void)application:(GULApplication *)application
765
+ handleEventsForBackgroundURLSession:(NSString *)identifier
766
+ completionHandler:(void (^)())completionHandler API_AVAILABLE(ios(7.0)) {
767
+ #pragma clang diagnostic pop
768
+ SEL methodSelector = @selector(application:
769
+ handleEventsForBackgroundURLSession:completionHandler:);
770
+ NSValue *handleBackgroundSessionPointer =
771
+ [GULAppDelegateSwizzler originalImplementationForSelector:methodSelector object:self];
772
+ GULRealHandleEventsForBackgroundURLSessionIMP handleBackgroundSessionIMP =
773
+ [handleBackgroundSessionPointer pointerValue];
774
+
775
+ // Notify interceptors.
776
+ [GULAppDelegateSwizzler
777
+ notifyInterceptorsWithMethodSelector:methodSelector
778
+ callback:^(id<GULApplicationDelegate> interceptor) {
779
+ [interceptor application:application
780
+ handleEventsForBackgroundURLSession:identifier
781
+ completionHandler:completionHandler];
782
+ }];
783
+ // Call the real implementation if the real App Delegate has any.
784
+ if (handleBackgroundSessionIMP) {
785
+ handleBackgroundSessionIMP(self, methodSelector, application, identifier, completionHandler);
786
+ }
787
+ }
788
+
789
+ #endif // TARGET_OS_IOS || TARGET_OS_TV
790
+
791
+ #pragma mark - [Donor Methods] User Activities overridden handler methods
792
+
793
+ - (BOOL)application:(GULApplication *)application
794
+ continueUserActivity:(NSUserActivity *)userActivity
795
+ restorationHandler:(void (^)(NSArray *restorableObjects))restorationHandler {
796
+ SEL methodSelector = @selector(application:continueUserActivity:restorationHandler:);
797
+ NSValue *continueUserActivityIMPPointer =
798
+ [GULAppDelegateSwizzler originalImplementationForSelector:methodSelector object:self];
799
+ GULRealContinueUserActivityIMP continueUserActivityIMP =
800
+ continueUserActivityIMPPointer.pointerValue;
801
+
802
+ __block BOOL returnedValue = NO;
803
+ #if !TARGET_OS_WATCH
804
+ [GULAppDelegateSwizzler
805
+ notifyInterceptorsWithMethodSelector:methodSelector
806
+ callback:^(id<GULApplicationDelegate> interceptor) {
807
+ returnedValue |= [interceptor application:application
808
+ continueUserActivity:userActivity
809
+ restorationHandler:restorationHandler];
810
+ }];
811
+ #endif
812
+ // Call the real implementation if the real App Delegate has any.
813
+ if (continueUserActivityIMP) {
814
+ returnedValue |= continueUserActivityIMP(self, methodSelector, application, userActivity,
815
+ restorationHandler);
816
+ }
817
+ return returnedValue;
818
+ }
819
+
820
+ #pragma mark - [Donor Methods] Remote Notifications
821
+
822
+ - (void)application:(GULApplication *)application
823
+ donor_didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
824
+ SEL methodSelector = NSSelectorFromString(kGULDidRegisterForRemoteNotificationsSEL);
825
+
826
+ NSValue *didRegisterForRemoteNotificationsIMPPointer =
827
+ [GULAppDelegateSwizzler originalImplementationForSelector:methodSelector object:self];
828
+ GULRealDidRegisterForRemoteNotificationsIMP didRegisterForRemoteNotificationsIMP =
829
+ [didRegisterForRemoteNotificationsIMPPointer pointerValue];
830
+
831
+ // Notify interceptors.
832
+ [GULAppDelegateSwizzler
833
+ notifyInterceptorsWithMethodSelector:methodSelector
834
+ callback:^(id<GULApplicationDelegate> interceptor) {
835
+ NSInvocation *invocation = [GULAppDelegateSwizzler
836
+ appDelegateInvocationForSelector:methodSelector];
837
+ [invocation setTarget:interceptor];
838
+ [invocation setSelector:methodSelector];
839
+ [invocation setArgument:(void *)(&application) atIndex:2];
840
+ [invocation setArgument:(void *)(&deviceToken) atIndex:3];
841
+ [invocation invoke];
842
+ }];
843
+ // Call the real implementation if the real App Delegate has any.
844
+ if (didRegisterForRemoteNotificationsIMP) {
845
+ didRegisterForRemoteNotificationsIMP(self, methodSelector, application, deviceToken);
846
+ }
847
+ }
848
+
849
+ - (void)application:(GULApplication *)application
850
+ donor_didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
851
+ SEL methodSelector = NSSelectorFromString(kGULDidFailToRegisterForRemoteNotificationsSEL);
852
+ NSValue *didFailToRegisterForRemoteNotificationsIMPPointer =
853
+ [GULAppDelegateSwizzler originalImplementationForSelector:methodSelector object:self];
854
+ GULRealDidFailToRegisterForRemoteNotificationsIMP didFailToRegisterForRemoteNotificationsIMP =
855
+ [didFailToRegisterForRemoteNotificationsIMPPointer pointerValue];
856
+
857
+ // Notify interceptors.
858
+ [GULAppDelegateSwizzler
859
+ notifyInterceptorsWithMethodSelector:methodSelector
860
+ callback:^(id<GULApplicationDelegate> interceptor) {
861
+ NSInvocation *invocation = [GULAppDelegateSwizzler
862
+ appDelegateInvocationForSelector:methodSelector];
863
+ [invocation setTarget:interceptor];
864
+ [invocation setSelector:methodSelector];
865
+ [invocation setArgument:(void *)(&application) atIndex:2];
866
+ [invocation setArgument:(void *)(&error) atIndex:3];
867
+ [invocation invoke];
868
+ }];
869
+ // Call the real implementation if the real App Delegate has any.
870
+ if (didFailToRegisterForRemoteNotificationsIMP) {
871
+ didFailToRegisterForRemoteNotificationsIMP(self, methodSelector, application, error);
872
+ }
873
+ }
874
+
875
+ #if !TARGET_OS_WATCH && !TARGET_OS_OSX
876
+ - (void)application:(GULApplication *)application
877
+ donor_didReceiveRemoteNotification:(NSDictionary *)userInfo
878
+ fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
879
+ SEL methodSelector = NSSelectorFromString(kGULDidReceiveRemoteNotificationWithCompletionSEL);
880
+ NSValue *didReceiveRemoteNotificationWithCompletionIMPPointer =
881
+ [GULAppDelegateSwizzler originalImplementationForSelector:methodSelector object:self];
882
+ GULRealDidReceiveRemoteNotificationWithCompletionIMP
883
+ didReceiveRemoteNotificationWithCompletionIMP =
884
+ [didReceiveRemoteNotificationWithCompletionIMPPointer pointerValue];
885
+
886
+ dispatch_group_t __block callbackGroup = dispatch_group_create();
887
+ NSMutableArray<NSNumber *> *__block fetchResults = [NSMutableArray array];
888
+
889
+ void (^localCompletionHandler)(UIBackgroundFetchResult) =
890
+ ^void(UIBackgroundFetchResult fetchResult) {
891
+ [fetchResults addObject:[NSNumber numberWithInt:(int)fetchResult]];
892
+ dispatch_group_leave(callbackGroup);
893
+ };
894
+
895
+ // Notify interceptors.
896
+ [GULAppDelegateSwizzler
897
+ notifyInterceptorsWithMethodSelector:methodSelector
898
+ callback:^(id<GULApplicationDelegate> interceptor) {
899
+ dispatch_group_enter(callbackGroup);
900
+
901
+ NSInvocation *invocation = [GULAppDelegateSwizzler
902
+ appDelegateInvocationForSelector:methodSelector];
903
+ [invocation setTarget:interceptor];
904
+ [invocation setSelector:methodSelector];
905
+ [invocation setArgument:(void *)(&application) atIndex:2];
906
+ [invocation setArgument:(void *)(&userInfo) atIndex:3];
907
+ [invocation setArgument:(void *)(&localCompletionHandler)
908
+ atIndex:4];
909
+ [invocation invoke];
910
+ }];
911
+ // Call the real implementation if the real App Delegate has any.
912
+ if (didReceiveRemoteNotificationWithCompletionIMP) {
913
+ dispatch_group_enter(callbackGroup);
914
+
915
+ didReceiveRemoteNotificationWithCompletionIMP(self, methodSelector, application, userInfo,
916
+ localCompletionHandler);
917
+ }
918
+
919
+ dispatch_group_notify(callbackGroup, dispatch_get_main_queue(), ^() {
920
+ BOOL allFetchesFailed = YES;
921
+ BOOL anyFetchHasNewData = NO;
922
+
923
+ for (NSNumber *oneResult in fetchResults) {
924
+ UIBackgroundFetchResult result = oneResult.intValue;
925
+
926
+ switch (result) {
927
+ case UIBackgroundFetchResultNoData:
928
+ allFetchesFailed = NO;
929
+ break;
930
+ case UIBackgroundFetchResultNewData:
931
+ allFetchesFailed = NO;
932
+ anyFetchHasNewData = YES;
933
+ break;
934
+ case UIBackgroundFetchResultFailed:
935
+
936
+ break;
937
+ }
938
+ }
939
+
940
+ UIBackgroundFetchResult finalFetchResult = UIBackgroundFetchResultNoData;
941
+
942
+ if (allFetchesFailed) {
943
+ finalFetchResult = UIBackgroundFetchResultFailed;
944
+ } else if (anyFetchHasNewData) {
945
+ finalFetchResult = UIBackgroundFetchResultNewData;
946
+ } else {
947
+ finalFetchResult = UIBackgroundFetchResultNoData;
948
+ }
949
+
950
+ completionHandler(finalFetchResult);
951
+ });
952
+ }
953
+ #endif // !TARGET_OS_WATCH && !TARGET_OS_OSX
954
+
955
+ - (void)application:(GULApplication *)application
956
+ donor_didReceiveRemoteNotification:(NSDictionary *)userInfo {
957
+ SEL methodSelector = NSSelectorFromString(kGULDidReceiveRemoteNotificationSEL);
958
+ NSValue *didReceiveRemoteNotificationIMPPointer =
959
+ [GULAppDelegateSwizzler originalImplementationForSelector:methodSelector object:self];
960
+ GULRealDidReceiveRemoteNotificationIMP didReceiveRemoteNotificationIMP =
961
+ [didReceiveRemoteNotificationIMPPointer pointerValue];
962
+
963
+ // Notify interceptors.
964
+ #pragma clang diagnostic push
965
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
966
+ [GULAppDelegateSwizzler
967
+ notifyInterceptorsWithMethodSelector:methodSelector
968
+ callback:^(id<GULApplicationDelegate> interceptor) {
969
+ NSInvocation *invocation = [GULAppDelegateSwizzler
970
+ appDelegateInvocationForSelector:methodSelector];
971
+ [invocation setTarget:interceptor];
972
+ [invocation setSelector:methodSelector];
973
+ [invocation setArgument:(void *)(&application) atIndex:2];
974
+ [invocation setArgument:(void *)(&userInfo) atIndex:3];
975
+ [invocation invoke];
976
+ }];
977
+ #pragma clang diagnostic pop
978
+ // Call the real implementation if the real App Delegate has any.
979
+ if (didReceiveRemoteNotificationIMP) {
980
+ didReceiveRemoteNotificationIMP(self, methodSelector, application, userInfo);
981
+ }
982
+ }
983
+
984
+ + (nullable NSInvocation *)appDelegateInvocationForSelector:(SEL)selector {
985
+ struct objc_method_description methodDescription =
986
+ protocol_getMethodDescription(@protocol(GULApplicationDelegate), selector, NO, YES);
987
+ if (methodDescription.types == NULL) {
988
+ return nil;
989
+ }
990
+
991
+ NSMethodSignature *signature = [NSMethodSignature signatureWithObjCTypes:methodDescription.types];
992
+ return [NSInvocation invocationWithMethodSignature:signature];
993
+ }
994
+
995
+ + (void)proxyAppDelegate:(id<GULApplicationDelegate>)appDelegate {
996
+ if (![appDelegate conformsToProtocol:@protocol(GULApplicationDelegate)]) {
997
+ GULLogNotice(
998
+ kGULLoggerSwizzler, NO,
999
+ [NSString
1000
+ stringWithFormat:@"I-SWZ%06ld",
1001
+ (long)kGULSwizzlerMessageCodeAppDelegateSwizzlingInvalidAppDelegate],
1002
+ @"App Delegate does not conform to UIApplicationDelegate protocol. %@",
1003
+ [GULAppDelegateSwizzler correctAlternativeWhenAppDelegateProxyNotCreated]);
1004
+ return;
1005
+ }
1006
+
1007
+ id<GULApplicationDelegate> originalDelegate = appDelegate;
1008
+ // Do not create a subclass if it is not enabled.
1009
+ if (![GULAppDelegateSwizzler isAppDelegateProxyEnabled]) {
1010
+ GULLogNotice(kGULLoggerSwizzler, NO,
1011
+ [NSString stringWithFormat:@"I-SWZ%06ld",
1012
+ (long)kGULSwizzlerMessageCodeAppDelegateSwizzling011],
1013
+ @"App Delegate Proxy is disabled. %@",
1014
+ [GULAppDelegateSwizzler correctAlternativeWhenAppDelegateProxyNotCreated]);
1015
+ return;
1016
+ }
1017
+ // Do not accept nil delegate.
1018
+ if (!originalDelegate) {
1019
+ GULLogError(kGULLoggerSwizzler, NO,
1020
+ [NSString stringWithFormat:@"I-SWZ%06ld",
1021
+ (long)kGULSwizzlerMessageCodeAppDelegateSwizzling012],
1022
+ @"Cannot create App Delegate Proxy because App Delegate instance is nil. %@",
1023
+ [GULAppDelegateSwizzler correctAlternativeWhenAppDelegateProxyNotCreated]);
1024
+ return;
1025
+ }
1026
+
1027
+ @try {
1028
+ gOriginalAppDelegateClass = [originalDelegate class];
1029
+ gAppDelegateSubclass = [self createSubclassWithObject:originalDelegate];
1030
+ [self reassignAppDelegate];
1031
+ } @catch (NSException *exception) {
1032
+ GULLogError(kGULLoggerSwizzler, NO,
1033
+ [NSString stringWithFormat:@"I-SWZ%06ld",
1034
+ (long)kGULSwizzlerMessageCodeAppDelegateSwizzling013],
1035
+ @"Cannot create App Delegate Proxy. %@",
1036
+ [GULAppDelegateSwizzler correctAlternativeWhenAppDelegateProxyNotCreated]);
1037
+ return;
1038
+ }
1039
+ }
1040
+
1041
+ #pragma mark - Methods to print correct debug logs
1042
+
1043
+ + (NSString *)correctAppDelegateProxyKey {
1044
+ return NSClassFromString(@"FIRCore") ? kGULFirebaseAppDelegateProxyEnabledPlistKey
1045
+ : kGULGoogleUtilitiesAppDelegateProxyEnabledPlistKey;
1046
+ }
1047
+
1048
+ + (NSString *)correctAlternativeWhenAppDelegateProxyNotCreated {
1049
+ return NSClassFromString(@"FIRCore")
1050
+ ? @"To log deep link campaigns manually, call the methods in "
1051
+ @"FIRAnalytics+AppDelegate.h."
1052
+ : @"";
1053
+ }
1054
+
1055
+ #pragma mark - Private Methods for Testing
1056
+
1057
+ + (void)clearInterceptors {
1058
+ [[self interceptors] removeAllObjects];
1059
+ }
1060
+
1061
+ + (void)resetProxyOriginalDelegateOnceToken {
1062
+ sProxyAppDelegateOnceToken = 0;
1063
+ sProxyAppDelegateRemoteNotificationOnceToken = 0;
1064
+ }
1065
+
1066
+ + (id<GULApplicationDelegate>)originalDelegate {
1067
+ return gOriginalAppDelegate;
1068
+ }
1069
+
1070
+ @end