cocoapods-catalyst-validator 0.1.0.beta.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (515) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +3 -0
  3. data/Gemfile +5 -0
  4. data/Gemfile.lock +107 -0
  5. data/LICENSE.txt +22 -0
  6. data/README.md +18 -0
  7. data/Rakefile +13 -0
  8. data/cocoapods-catalyst-validator.gemspec +23 -0
  9. data/examples/AExample/AExample/AExample.entitlements +10 -0
  10. data/examples/AExample/AExample/AppDelegate.h +14 -0
  11. data/examples/AExample/AExample/AppDelegate.m +40 -0
  12. data/examples/AExample/AExample/Assets.xcassets/AccentColor.colorset/Contents.json +11 -0
  13. data/examples/AExample/AExample/Assets.xcassets/AppIcon.appiconset/Contents.json +98 -0
  14. data/examples/AExample/AExample/Assets.xcassets/Contents.json +6 -0
  15. data/examples/AExample/AExample/Base.lproj/LaunchScreen.storyboard +25 -0
  16. data/examples/AExample/AExample/Base.lproj/Main.storyboard +24 -0
  17. data/examples/AExample/AExample/Info.plist +25 -0
  18. data/examples/AExample/AExample/SceneDelegate.h +15 -0
  19. data/examples/AExample/AExample/SceneDelegate.m +57 -0
  20. data/examples/AExample/AExample/ViewController.h +14 -0
  21. data/examples/AExample/AExample/ViewController.m +22 -0
  22. data/examples/AExample/AExample/main.m +18 -0
  23. data/examples/AExample/AExample.xcodeproj/project.pbxproj +664 -0
  24. data/examples/AExample/AExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  25. data/examples/AExample/AExample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  26. data/examples/AExample/AExample.xcodeproj/project.xcworkspace/xcuserdata/xuzhongping.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  27. data/examples/AExample/AExample.xcodeproj/xcuserdata/xuzhongping.xcuserdatad/xcschemes/xcschememanagement.plist +19 -0
  28. data/examples/AExample/AExample.xcworkspace/contents.xcworkspacedata +10 -0
  29. data/examples/AExample/AExample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  30. data/examples/AExample/AExample.xcworkspace/xcuserdata/xuzhongping.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  31. data/examples/AExample/AExampleCP/AppDelegate.h +14 -0
  32. data/examples/AExample/AExampleCP/AppDelegate.m +40 -0
  33. data/examples/AExample/AExampleCP/Assets.xcassets/AccentColor.colorset/Contents.json +11 -0
  34. data/examples/AExample/AExampleCP/Assets.xcassets/AppIcon.appiconset/Contents.json +98 -0
  35. data/examples/AExample/AExampleCP/Assets.xcassets/Contents.json +6 -0
  36. data/examples/AExample/AExampleCP/Base.lproj/LaunchScreen.storyboard +25 -0
  37. data/examples/AExample/AExampleCP/Base.lproj/Main.storyboard +24 -0
  38. data/examples/AExample/AExampleCP/Info.plist +25 -0
  39. data/examples/AExample/AExampleCP/SceneDelegate.h +15 -0
  40. data/examples/AExample/AExampleCP/SceneDelegate.m +57 -0
  41. data/examples/AExample/AExampleCP/ViewController.h +14 -0
  42. data/examples/AExample/AExampleCP/ViewController.m +22 -0
  43. data/examples/AExample/AExampleCP/main.m +18 -0
  44. data/examples/AExample/Podfile +24 -0
  45. data/examples/AExample/Podfile.lock +112 -0
  46. data/examples/AExample/Pods/Bugly/Bugly.framework/Bugly +0 -0
  47. data/examples/AExample/Pods/Bugly/Bugly.framework/Headers/Bugly.h +163 -0
  48. data/examples/AExample/Pods/Bugly/Bugly.framework/Headers/BuglyConfig.h +149 -0
  49. data/examples/AExample/Pods/Bugly/Bugly.framework/Headers/BuglyLog.h +78 -0
  50. data/examples/AExample/Pods/Bugly/Bugly.framework/Modules/module.modulemap +12 -0
  51. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/Info.plist +97 -0
  52. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_armv7/FirebaseAnalytics.framework/FirebaseAnalytics +0 -0
  53. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_armv7/FirebaseAnalytics.framework/Headers/FIRAnalytics+AppDelegate.h +62 -0
  54. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_armv7/FirebaseAnalytics.framework/Headers/FIRAnalytics+Consent.h +33 -0
  55. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_armv7/FirebaseAnalytics.framework/Headers/FIRAnalytics.h +142 -0
  56. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_armv7/FirebaseAnalytics.framework/Headers/FIREventNames.h +495 -0
  57. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_armv7/FirebaseAnalytics.framework/Headers/FIRParameterNames.h +731 -0
  58. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_armv7/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h +29 -0
  59. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_armv7/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h +6 -0
  60. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_armv7/FirebaseAnalytics.framework/Info.plist +20 -0
  61. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_armv7/FirebaseAnalytics.framework/Modules/module.modulemap +13 -0
  62. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/FirebaseAnalytics.framework/FirebaseAnalytics +0 -0
  63. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIRAnalytics+AppDelegate.h +62 -0
  64. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIRAnalytics+Consent.h +33 -0
  65. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIRAnalytics.h +142 -0
  66. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIREventNames.h +495 -0
  67. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIRParameterNames.h +731 -0
  68. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h +29 -0
  69. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h +6 -0
  70. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/FirebaseAnalytics.framework/Info.plist +20 -0
  71. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_i386_x86_64-simulator/FirebaseAnalytics.framework/Modules/module.modulemap +13 -0
  72. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/FirebaseAnalytics +0 -0
  73. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/Headers/FIRAnalytics+AppDelegate.h +62 -0
  74. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/Headers/FIRAnalytics+Consent.h +33 -0
  75. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/Headers/FIRAnalytics.h +142 -0
  76. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/Headers/FIREventNames.h +495 -0
  77. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/Headers/FIRParameterNames.h +731 -0
  78. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h +29 -0
  79. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h +6 -0
  80. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/Info.plist +20 -0
  81. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/ios-arm64_x86_64-maccatalyst/FirebaseAnalytics.framework/Modules/module.modulemap +13 -0
  82. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/FirebaseAnalytics +0 -0
  83. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/Headers/FIRAnalytics+AppDelegate.h +62 -0
  84. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/Headers/FIRAnalytics+Consent.h +33 -0
  85. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/Headers/FIRAnalytics.h +142 -0
  86. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/Headers/FIREventNames.h +495 -0
  87. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/Headers/FIRParameterNames.h +731 -0
  88. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h +29 -0
  89. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h +6 -0
  90. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/Info.plist +20 -0
  91. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/macos-arm64_x86_64/FirebaseAnalytics.framework/Modules/module.modulemap +13 -0
  92. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/FirebaseAnalytics +0 -0
  93. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/Headers/FIRAnalytics+AppDelegate.h +62 -0
  94. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/Headers/FIRAnalytics+Consent.h +33 -0
  95. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/Headers/FIRAnalytics.h +142 -0
  96. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/Headers/FIREventNames.h +495 -0
  97. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/Headers/FIRParameterNames.h +731 -0
  98. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h +29 -0
  99. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h +6 -0
  100. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/Info.plist +20 -0
  101. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64/FirebaseAnalytics.framework/Modules/module.modulemap +12 -0
  102. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/FirebaseAnalytics +0 -0
  103. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIRAnalytics+AppDelegate.h +62 -0
  104. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIRAnalytics+Consent.h +33 -0
  105. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIRAnalytics.h +142 -0
  106. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIREventNames.h +495 -0
  107. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIRParameterNames.h +731 -0
  108. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/Headers/FIRUserPropertyNames.h +29 -0
  109. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/Headers/FirebaseAnalytics.h +6 -0
  110. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/Info.plist +20 -0
  111. data/examples/AExample/Pods/FirebaseAnalytics/Frameworks/FirebaseAnalytics.xcframework/tvos-arm64_x86_64-simulator/FirebaseAnalytics.framework/Modules/module.modulemap +12 -0
  112. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/FIRAnalyticsConfiguration.h +56 -0
  113. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/FIRAnalyticsConfiguration.m +62 -0
  114. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/FIRApp.m +856 -0
  115. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/FIRAppAssociationRegistration.h +49 -0
  116. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/FIRAppAssociationRegistration.m +47 -0
  117. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/FIRBundleUtil.h +53 -0
  118. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/FIRBundleUtil.m +79 -0
  119. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/FIRComponent.m +65 -0
  120. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/FIRComponentContainer.m +214 -0
  121. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/FIRComponentContainerInternal.h +49 -0
  122. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/FIRComponentType.m +28 -0
  123. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/FIRConfiguration.m +46 -0
  124. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/FIRConfigurationInternal.h +29 -0
  125. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/FIRCoreDiagnosticsConnector.m +61 -0
  126. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/FIRDependency.m +44 -0
  127. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/FIRDiagnosticsData.h +35 -0
  128. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/FIRDiagnosticsData.m +66 -0
  129. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/FIRFirebaseUserAgent.h +36 -0
  130. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/FIRFirebaseUserAgent.m +107 -0
  131. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/FIRHeartbeatInfo.m +72 -0
  132. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/FIRLogger.m +174 -0
  133. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/FIROptions.m +498 -0
  134. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/FIRVersion.m +32 -0
  135. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRAppInternal.h +153 -0
  136. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRComponent.h +91 -0
  137. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRComponentContainer.h +41 -0
  138. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRComponentType.h +34 -0
  139. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRCoreDiagnosticsConnector.h +35 -0
  140. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRDependency.h +45 -0
  141. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRHeartbeatInfo.h +39 -0
  142. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRLibrary.h +44 -0
  143. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIRLogger.h +146 -0
  144. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/Private/FIROptionsInternal.h +115 -0
  145. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/Private/FirebaseCoreInternal.h +28 -0
  146. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/Public/FirebaseCore/FIRApp.h +127 -0
  147. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/Public/FirebaseCore/FIRConfiguration.h +45 -0
  148. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/Public/FirebaseCore/FIRLoggerLevel.h +38 -0
  149. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/Public/FirebaseCore/FIROptions.h +126 -0
  150. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/Public/FirebaseCore/FIRVersion.h +25 -0
  151. data/examples/AExample/Pods/FirebaseCore/FirebaseCore/Sources/Public/FirebaseCore/FirebaseCore.h +21 -0
  152. data/examples/AExample/Pods/FirebaseCore/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsData.h +61 -0
  153. data/examples/AExample/Pods/FirebaseCore/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsInterop.h +34 -0
  154. data/examples/AExample/Pods/FirebaseCore/LICENSE +202 -0
  155. data/examples/AExample/Pods/FirebaseCore/README.md +319 -0
  156. data/examples/AExample/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/FIRCoreDiagnostics.m +551 -0
  157. data/examples/AExample/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.c +60 -0
  158. data/examples/AExample/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/Protogen/nanopb/firebasecore.nanopb.h +193 -0
  159. data/examples/AExample/Pods/FirebaseCoreDiagnostics/Firebase/CoreDiagnostics/FIRCDLibrary/Public/FIRCoreDiagnostics.h +18 -0
  160. data/examples/AExample/Pods/FirebaseCoreDiagnostics/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsData.h +61 -0
  161. data/examples/AExample/Pods/FirebaseCoreDiagnostics/Interop/CoreDiagnostics/Public/FIRCoreDiagnosticsInterop.h +34 -0
  162. data/examples/AExample/Pods/FirebaseCoreDiagnostics/LICENSE +202 -0
  163. data/examples/AExample/Pods/FirebaseCoreDiagnostics/README.md +319 -0
  164. data/examples/AExample/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRAppInternal.h +153 -0
  165. data/examples/AExample/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRComponent.h +91 -0
  166. data/examples/AExample/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRComponentContainer.h +41 -0
  167. data/examples/AExample/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRComponentType.h +34 -0
  168. data/examples/AExample/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRCoreDiagnosticsConnector.h +35 -0
  169. data/examples/AExample/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRDependency.h +45 -0
  170. data/examples/AExample/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRHeartbeatInfo.h +39 -0
  171. data/examples/AExample/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRLibrary.h +44 -0
  172. data/examples/AExample/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIRLogger.h +146 -0
  173. data/examples/AExample/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FIROptionsInternal.h +115 -0
  174. data/examples/AExample/Pods/FirebaseInstallations/FirebaseCore/Sources/Private/FirebaseCoreInternal.h +28 -0
  175. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Errors/FIRInstallationsErrorUtil.h +65 -0
  176. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Errors/FIRInstallationsErrorUtil.m +145 -0
  177. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Errors/FIRInstallationsHTTPError.h +53 -0
  178. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Errors/FIRInstallationsHTTPError.m +79 -0
  179. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallations.m +282 -0
  180. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsAuthTokenResult.m +30 -0
  181. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsAuthTokenResultInternal.h +27 -0
  182. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsItem.h +93 -0
  183. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsItem.m +161 -0
  184. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsLogger.h +52 -0
  185. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/FIRInstallationsLogger.m +50 -0
  186. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDStore.h +48 -0
  187. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDStore.m +242 -0
  188. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDTokenStore.h +36 -0
  189. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/IIDMigration/FIRInstallationsIIDTokenStore.m +158 -0
  190. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsAPIService.h +62 -0
  191. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsAPIService.m +380 -0
  192. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsItem+RegisterInstallationAPI.h +53 -0
  193. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsAPI/FIRInstallationsItem+RegisterInstallationAPI.m +142 -0
  194. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRCurrentDateProvider.h +27 -0
  195. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRCurrentDateProvider.m +23 -0
  196. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsBackoffController.h +54 -0
  197. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsBackoffController.m +132 -0
  198. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsIDController.h +44 -0
  199. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsIDController.m +531 -0
  200. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsSingleOperationPromiseCache.h +58 -0
  201. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsSingleOperationPromiseCache.m +75 -0
  202. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsIDController/FIRInstallationsStatus.h +35 -0
  203. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStore.h +71 -0
  204. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStore.m +126 -0
  205. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredAuthToken.h +58 -0
  206. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredAuthToken.m +77 -0
  207. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredItem.h +51 -0
  208. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/InstallationsStore/FIRInstallationsStoredItem.m +80 -0
  209. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Private/FirebaseInstallationsInternal.h +19 -0
  210. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Public/FirebaseInstallations/FIRInstallations.h +127 -0
  211. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Public/FirebaseInstallations/FIRInstallationsAuthTokenResult.h +33 -0
  212. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Public/FirebaseInstallations/FIRInstallationsErrors.h +34 -0
  213. data/examples/AExample/Pods/FirebaseInstallations/FirebaseInstallations/Source/Library/Public/FirebaseInstallations/FirebaseInstallations.h +19 -0
  214. data/examples/AExample/Pods/FirebaseInstallations/LICENSE +202 -0
  215. data/examples/AExample/Pods/FirebaseInstallations/README.md +319 -0
  216. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/Info.plist +97 -0
  217. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/ios-arm64_armv7/GoogleAppMeasurement.framework/GoogleAppMeasurement +0 -0
  218. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/ios-arm64_armv7/GoogleAppMeasurement.framework/Info.plist +20 -0
  219. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/ios-arm64_armv7/GoogleAppMeasurement.framework/Modules/module.modulemap +10 -0
  220. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAppMeasurement.framework/GoogleAppMeasurement +0 -0
  221. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAppMeasurement.framework/Info.plist +20 -0
  222. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAppMeasurement.framework/Modules/module.modulemap +10 -0
  223. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAppMeasurement.framework/GoogleAppMeasurement +0 -0
  224. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAppMeasurement.framework/Info.plist +20 -0
  225. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAppMeasurement.framework/Modules/module.modulemap +10 -0
  226. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/macos-arm64_x86_64/GoogleAppMeasurement.framework/GoogleAppMeasurement +0 -0
  227. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/macos-arm64_x86_64/GoogleAppMeasurement.framework/Info.plist +20 -0
  228. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/macos-arm64_x86_64/GoogleAppMeasurement.framework/Modules/module.modulemap +10 -0
  229. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/tvos-arm64/GoogleAppMeasurement.framework/GoogleAppMeasurement +0 -0
  230. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/tvos-arm64/GoogleAppMeasurement.framework/Info.plist +20 -0
  231. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/tvos-arm64/GoogleAppMeasurement.framework/Modules/module.modulemap +10 -0
  232. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/tvos-arm64_x86_64-simulator/GoogleAppMeasurement.framework/GoogleAppMeasurement +0 -0
  233. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/tvos-arm64_x86_64-simulator/GoogleAppMeasurement.framework/Info.plist +20 -0
  234. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurement.xcframework/tvos-arm64_x86_64-simulator/GoogleAppMeasurement.framework/Modules/module.modulemap +10 -0
  235. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/Info.plist +97 -0
  236. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/ios-arm64_armv7/GoogleAppMeasurementIdentitySupport.framework/GoogleAppMeasurementIdentitySupport +0 -0
  237. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/ios-arm64_armv7/GoogleAppMeasurementIdentitySupport.framework/Info.plist +20 -0
  238. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/ios-arm64_armv7/GoogleAppMeasurementIdentitySupport.framework/Modules/module.modulemap +5 -0
  239. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAppMeasurementIdentitySupport.framework/GoogleAppMeasurementIdentitySupport +0 -0
  240. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAppMeasurementIdentitySupport.framework/Info.plist +20 -0
  241. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/ios-arm64_i386_x86_64-simulator/GoogleAppMeasurementIdentitySupport.framework/Modules/module.modulemap +5 -0
  242. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAppMeasurementIdentitySupport.framework/GoogleAppMeasurementIdentitySupport +0 -0
  243. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAppMeasurementIdentitySupport.framework/Info.plist +20 -0
  244. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/ios-arm64_x86_64-maccatalyst/GoogleAppMeasurementIdentitySupport.framework/Modules/module.modulemap +5 -0
  245. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/macos-arm64_x86_64/GoogleAppMeasurementIdentitySupport.framework/GoogleAppMeasurementIdentitySupport +0 -0
  246. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/macos-arm64_x86_64/GoogleAppMeasurementIdentitySupport.framework/Info.plist +20 -0
  247. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/macos-arm64_x86_64/GoogleAppMeasurementIdentitySupport.framework/Modules/module.modulemap +5 -0
  248. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/tvos-arm64/GoogleAppMeasurementIdentitySupport.framework/GoogleAppMeasurementIdentitySupport +0 -0
  249. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/tvos-arm64/GoogleAppMeasurementIdentitySupport.framework/Info.plist +20 -0
  250. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/tvos-arm64/GoogleAppMeasurementIdentitySupport.framework/Modules/module.modulemap +5 -0
  251. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/tvos-arm64_x86_64-simulator/GoogleAppMeasurementIdentitySupport.framework/GoogleAppMeasurementIdentitySupport +0 -0
  252. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/tvos-arm64_x86_64-simulator/GoogleAppMeasurementIdentitySupport.framework/Info.plist +20 -0
  253. data/examples/AExample/Pods/GoogleAppMeasurement/Frameworks/GoogleAppMeasurementIdentitySupport.xcframework/tvos-arm64_x86_64-simulator/GoogleAppMeasurementIdentitySupport.framework/Modules/module.modulemap +5 -0
  254. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCCTLibrary/GDTCCTCompressionHelper.m +95 -0
  255. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCCTLibrary/GDTCCTNanopbHelpers.m +270 -0
  256. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCCTLibrary/GDTCCTUploadOperation.m +573 -0
  257. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCCTLibrary/GDTCCTUploader.m +210 -0
  258. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCCTLibrary/GDTCOREvent+GDTCCTSupport.m +240 -0
  259. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCCTLibrary/Private/GDTCCTCompressionHelper.h +40 -0
  260. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCCTLibrary/Private/GDTCCTNanopbHelpers.h +128 -0
  261. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCCTLibrary/Private/GDTCCTUploadOperation.h +76 -0
  262. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCCTLibrary/Private/GDTCCTUploader.h +45 -0
  263. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCCTLibrary/Protogen/nanopb/cct.nanopb.c +128 -0
  264. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCCTLibrary/Protogen/nanopb/cct.nanopb.h +281 -0
  265. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCCTLibrary/Public/GDTCOREvent+GDTCCTSupport.h +51 -0
  266. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORAssert.m +36 -0
  267. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORClock.m +178 -0
  268. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORConsoleLogger.m +55 -0
  269. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORDirectorySizeTracker.m +101 -0
  270. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCOREndpoints.m +92 -0
  271. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCOREvent.m +153 -0
  272. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORFlatFileStorage+Promises.m +104 -0
  273. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORFlatFileStorage.m +826 -0
  274. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORLifecycle.m +119 -0
  275. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORPlatform.m +604 -0
  276. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORReachability.m +125 -0
  277. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORRegistrar.m +157 -0
  278. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORStorageEventSelector.m +39 -0
  279. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORTransformer.m +111 -0
  280. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORTransport.m +92 -0
  281. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORUploadBatch.m +30 -0
  282. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/GDTCORUploadCoordinator.m +176 -0
  283. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Internal/GDTCORAssert.h +95 -0
  284. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Internal/GDTCORDirectorySizeTracker.h +66 -0
  285. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Internal/GDTCORLifecycle.h +63 -0
  286. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Internal/GDTCORPlatform.h +225 -0
  287. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Internal/GDTCORReachability.h +31 -0
  288. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Internal/GDTCORRegistrar.h +50 -0
  289. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Internal/GDTCORStorageEventSelector.h +61 -0
  290. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Internal/GDTCORStorageProtocol.h +171 -0
  291. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Internal/GDTCORUploader.h +59 -0
  292. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCOREndpoints_Private.h +27 -0
  293. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCOREvent_Private.h +33 -0
  294. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORFlatFileStorage+Promises.h +28 -0
  295. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORFlatFileStorage.h +158 -0
  296. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORReachability_Private.h +30 -0
  297. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORRegistrar_Private.h +35 -0
  298. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransformer.h +57 -0
  299. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransformer_Private.h +37 -0
  300. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORTransport_Private.h +39 -0
  301. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORUploadBatch.h +37 -0
  302. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Private/GDTCORUploadCoordinator.h +68 -0
  303. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport/GDTCORClock.h +66 -0
  304. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport/GDTCORConsoleLogger.h +144 -0
  305. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport/GDTCOREndpoints.h +36 -0
  306. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport/GDTCOREvent.h +87 -0
  307. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport/GDTCOREventDataObject.h +36 -0
  308. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport/GDTCOREventTransformer.h +38 -0
  309. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport/GDTCORTargets.h +40 -0
  310. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport/GDTCORTransport.h +92 -0
  311. data/examples/AExample/Pods/GoogleDataTransport/GoogleDataTransport/GDTCORLibrary/Public/GoogleDataTransport/GoogleDataTransport.h +24 -0
  312. data/examples/AExample/Pods/GoogleDataTransport/LICENSE +202 -0
  313. data/examples/AExample/Pods/GoogleDataTransport/README.md +231 -0
  314. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/AppDelegateSwizzler/GULAppDelegateSwizzler.m +1070 -0
  315. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/AppDelegateSwizzler/GULSceneDelegateSwizzler.m +439 -0
  316. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/AppDelegateSwizzler/Internal/GULAppDelegateSwizzler_Private.h +55 -0
  317. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/AppDelegateSwizzler/Internal/GULSceneDelegateSwizzler_Private.h +48 -0
  318. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/AppDelegateSwizzler/Public/GoogleUtilities/GULAppDelegateSwizzler.h +107 -0
  319. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/AppDelegateSwizzler/Public/GoogleUtilities/GULApplication.h +50 -0
  320. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/AppDelegateSwizzler/Public/GoogleUtilities/GULSceneDelegateSwizzler.h +76 -0
  321. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Common/GULLoggerCodes.h +56 -0
  322. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Environment/GULHeartbeatDateStorage.m +153 -0
  323. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Environment/GULHeartbeatDateStorageUserDefaults.m +68 -0
  324. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Environment/GULSecureCoding.m +103 -0
  325. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GoogleUtilities/GULAppEnvironmentUtil.h +60 -0
  326. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GoogleUtilities/GULHeartbeatDateStorable.h +40 -0
  327. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GoogleUtilities/GULHeartbeatDateStorage.h +54 -0
  328. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GoogleUtilities/GULHeartbeatDateStorageUserDefaults.h +51 -0
  329. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GoogleUtilities/GULKeychainStorage.h +79 -0
  330. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GoogleUtilities/GULKeychainUtils.h +61 -0
  331. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GoogleUtilities/GULSecureCoding.h +36 -0
  332. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GoogleUtilities/GULURLSessionDataResponse.h +31 -0
  333. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Environment/Public/GoogleUtilities/NSURLSession+GULPromises.h +37 -0
  334. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Environment/SecureStorage/GULKeychainStorage.m +192 -0
  335. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Environment/SecureStorage/GULKeychainUtils.m +113 -0
  336. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Environment/URLSessionPromiseWrapper/GULURLSessionDataResponse.m +30 -0
  337. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Environment/URLSessionPromiseWrapper/NSURLSession+GULPromises.m +46 -0
  338. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Environment/third_party/GULAppEnvironmentUtil.m +333 -0
  339. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Logger/GULLogger.m +215 -0
  340. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Logger/Public/GoogleUtilities/GULLogger.h +159 -0
  341. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Logger/Public/GoogleUtilities/GULLoggerLevel.h +37 -0
  342. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/MethodSwizzler/GULSwizzler.m +153 -0
  343. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/MethodSwizzler/Public/GoogleUtilities/GULOriginalIMPConvenienceMacros.h +207 -0
  344. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/MethodSwizzler/Public/GoogleUtilities/GULSwizzler.h +71 -0
  345. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/NSData+zlib/GULNSData+zlib.m +207 -0
  346. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/NSData+zlib/Public/GoogleUtilities/GULNSData+zlib.h +49 -0
  347. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Network/GULMutableDictionary.m +101 -0
  348. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Network/GULNetwork.m +390 -0
  349. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Network/GULNetworkConstants.m +41 -0
  350. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Network/GULNetworkInternal.h +24 -0
  351. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Network/GULNetworkURLSession.m +766 -0
  352. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Network/Public/GoogleUtilities/GULMutableDictionary.h +46 -0
  353. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Network/Public/GoogleUtilities/GULNetwork.h +87 -0
  354. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Network/Public/GoogleUtilities/GULNetworkConstants.h +71 -0
  355. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Network/Public/GoogleUtilities/GULNetworkLoggerProtocol.h +49 -0
  356. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Network/Public/GoogleUtilities/GULNetworkMessageCode.h +47 -0
  357. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Network/Public/GoogleUtilities/GULNetworkURLSession.h +62 -0
  358. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Reachability/GULReachabilityChecker+Internal.h +48 -0
  359. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Reachability/GULReachabilityChecker.m +263 -0
  360. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Reachability/GULReachabilityMessageCode.h +29 -0
  361. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/Reachability/Public/GoogleUtilities/GULReachabilityChecker.h +79 -0
  362. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/UserDefaults/GULUserDefaults.m +213 -0
  363. data/examples/AExample/Pods/GoogleUtilities/GoogleUtilities/UserDefaults/Public/GoogleUtilities/GULUserDefaults.h +110 -0
  364. data/examples/AExample/Pods/GoogleUtilities/LICENSE +247 -0
  365. data/examples/AExample/Pods/GoogleUtilities/README.md +189 -0
  366. data/examples/AExample/Pods/Manifest.lock +112 -0
  367. data/examples/AExample/Pods/Pods.xcodeproj/project.pbxproj +3670 -0
  368. data/examples/AExample/Pods/Pods.xcodeproj/xcuserdata/xuzhongping.xcuserdatad/xcschemes/FirebaseAnalytics.xcscheme +58 -0
  369. data/examples/AExample/Pods/Pods.xcodeproj/xcuserdata/xuzhongping.xcuserdatad/xcschemes/FirebaseCore.xcscheme +58 -0
  370. data/examples/AExample/Pods/Pods.xcodeproj/xcuserdata/xuzhongping.xcuserdatad/xcschemes/FirebaseCoreDiagnostics.xcscheme +58 -0
  371. data/examples/AExample/Pods/Pods.xcodeproj/xcuserdata/xuzhongping.xcuserdatad/xcschemes/FirebaseInstallations.xcscheme +58 -0
  372. data/examples/AExample/Pods/Pods.xcodeproj/xcuserdata/xuzhongping.xcuserdatad/xcschemes/GoogleAppMeasurement.xcscheme +58 -0
  373. data/examples/AExample/Pods/Pods.xcodeproj/xcuserdata/xuzhongping.xcuserdatad/xcschemes/GoogleDataTransport.xcscheme +58 -0
  374. data/examples/AExample/Pods/Pods.xcodeproj/xcuserdata/xuzhongping.xcuserdatad/xcschemes/GoogleUtilities.xcscheme +58 -0
  375. data/examples/AExample/Pods/Pods.xcodeproj/xcuserdata/xuzhongping.xcuserdatad/xcschemes/Pods-AExample-AExampleCP.xcscheme +58 -0
  376. data/examples/AExample/Pods/Pods.xcodeproj/xcuserdata/xuzhongping.xcuserdatad/xcschemes/Pods-AExample.xcscheme +58 -0
  377. data/examples/AExample/Pods/Pods.xcodeproj/xcuserdata/xuzhongping.xcuserdatad/xcschemes/PromisesObjC.xcscheme +58 -0
  378. data/examples/AExample/Pods/Pods.xcodeproj/xcuserdata/xuzhongping.xcuserdatad/xcschemes/nanopb.xcscheme +58 -0
  379. data/examples/AExample/Pods/Pods.xcodeproj/xcuserdata/xuzhongping.xcuserdatad/xcschemes/xcschememanagement.plist +66 -0
  380. data/examples/AExample/Pods/PromisesObjC/LICENSE +202 -0
  381. data/examples/AExample/Pods/PromisesObjC/README.md +60 -0
  382. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+All.m +86 -0
  383. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Always.m +58 -0
  384. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Any.m +112 -0
  385. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Async.m +70 -0
  386. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Await.m +48 -0
  387. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Catch.m +55 -0
  388. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Delay.m +59 -0
  389. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Do.m +59 -0
  390. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Race.m +65 -0
  391. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Recover.m +54 -0
  392. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Reduce.m +61 -0
  393. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Retry.m +128 -0
  394. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Testing.m +55 -0
  395. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Then.m +50 -0
  396. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Timeout.m +64 -0
  397. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Validate.m +56 -0
  398. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise+Wrap.m +420 -0
  399. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/FBLPromise.m +299 -0
  400. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/FBLPromiseError.m +19 -0
  401. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+All.h +63 -0
  402. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Always.h +54 -0
  403. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Any.h +69 -0
  404. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Async.h +60 -0
  405. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Await.h +32 -0
  406. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Catch.h +59 -0
  407. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Delay.h +59 -0
  408. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Do.h +55 -0
  409. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Race.h +62 -0
  410. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Recover.h +60 -0
  411. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Reduce.h +71 -0
  412. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Retry.h +165 -0
  413. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Testing.h +57 -0
  414. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Then.h +63 -0
  415. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Timeout.h +57 -0
  416. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Validate.h +60 -0
  417. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise+Wrap.h +316 -0
  418. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromise.h +93 -0
  419. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromiseError.h +43 -0
  420. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromisePrivate.h +66 -0
  421. data/examples/AExample/Pods/PromisesObjC/Sources/FBLPromises/include/FBLPromises.h +32 -0
  422. data/examples/AExample/Pods/Target Support Files/FirebaseAnalytics/FirebaseAnalytics-xcframeworks-input-files.xcfilelist +2 -0
  423. data/examples/AExample/Pods/Target Support Files/FirebaseAnalytics/FirebaseAnalytics-xcframeworks-output-files.xcfilelist +1 -0
  424. data/examples/AExample/Pods/Target Support Files/FirebaseAnalytics/FirebaseAnalytics-xcframeworks.sh +109 -0
  425. data/examples/AExample/Pods/Target Support Files/FirebaseAnalytics/FirebaseAnalytics.debug.xcconfig +13 -0
  426. data/examples/AExample/Pods/Target Support Files/FirebaseAnalytics/FirebaseAnalytics.release.xcconfig +13 -0
  427. data/examples/AExample/Pods/Target Support Files/FirebaseCore/FirebaseCore-Info.plist +26 -0
  428. data/examples/AExample/Pods/Target Support Files/FirebaseCore/FirebaseCore-dummy.m +5 -0
  429. data/examples/AExample/Pods/Target Support Files/FirebaseCore/FirebaseCore-umbrella.h +22 -0
  430. data/examples/AExample/Pods/Target Support Files/FirebaseCore/FirebaseCore.debug.xcconfig +16 -0
  431. data/examples/AExample/Pods/Target Support Files/FirebaseCore/FirebaseCore.modulemap +6 -0
  432. data/examples/AExample/Pods/Target Support Files/FirebaseCore/FirebaseCore.release.xcconfig +16 -0
  433. data/examples/AExample/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-Info.plist +26 -0
  434. data/examples/AExample/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-dummy.m +5 -0
  435. data/examples/AExample/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics-umbrella.h +17 -0
  436. data/examples/AExample/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.debug.xcconfig +17 -0
  437. data/examples/AExample/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.modulemap +6 -0
  438. data/examples/AExample/Pods/Target Support Files/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.release.xcconfig +17 -0
  439. data/examples/AExample/Pods/Target Support Files/FirebaseInstallations/FirebaseInstallations-Info.plist +26 -0
  440. data/examples/AExample/Pods/Target Support Files/FirebaseInstallations/FirebaseInstallations-dummy.m +5 -0
  441. data/examples/AExample/Pods/Target Support Files/FirebaseInstallations/FirebaseInstallations-umbrella.h +20 -0
  442. data/examples/AExample/Pods/Target Support Files/FirebaseInstallations/FirebaseInstallations.debug.xcconfig +15 -0
  443. data/examples/AExample/Pods/Target Support Files/FirebaseInstallations/FirebaseInstallations.modulemap +6 -0
  444. data/examples/AExample/Pods/Target Support Files/FirebaseInstallations/FirebaseInstallations.release.xcconfig +15 -0
  445. data/examples/AExample/Pods/Target Support Files/GoogleAppMeasurement/GoogleAppMeasurement-xcframeworks-input-files.xcfilelist +3 -0
  446. data/examples/AExample/Pods/Target Support Files/GoogleAppMeasurement/GoogleAppMeasurement-xcframeworks-output-files.xcfilelist +2 -0
  447. data/examples/AExample/Pods/Target Support Files/GoogleAppMeasurement/GoogleAppMeasurement-xcframeworks.sh +110 -0
  448. data/examples/AExample/Pods/Target Support Files/GoogleAppMeasurement/GoogleAppMeasurement.debug.xcconfig +13 -0
  449. data/examples/AExample/Pods/Target Support Files/GoogleAppMeasurement/GoogleAppMeasurement.release.xcconfig +13 -0
  450. data/examples/AExample/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport-Info.plist +26 -0
  451. data/examples/AExample/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport-dummy.m +5 -0
  452. data/examples/AExample/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport-umbrella.h +25 -0
  453. data/examples/AExample/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.debug.xcconfig +16 -0
  454. data/examples/AExample/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.modulemap +6 -0
  455. data/examples/AExample/Pods/Target Support Files/GoogleDataTransport/GoogleDataTransport.release.xcconfig +16 -0
  456. data/examples/AExample/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-Info.plist +26 -0
  457. data/examples/AExample/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-dummy.m +5 -0
  458. data/examples/AExample/Pods/Target Support Files/GoogleUtilities/GoogleUtilities-umbrella.h +41 -0
  459. data/examples/AExample/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.debug.xcconfig +15 -0
  460. data/examples/AExample/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.modulemap +6 -0
  461. data/examples/AExample/Pods/Target Support Files/GoogleUtilities/GoogleUtilities.release.xcconfig +15 -0
  462. data/examples/AExample/Pods/Target Support Files/Pods-AExample/Pods-AExample-Info.plist +26 -0
  463. data/examples/AExample/Pods/Target Support Files/Pods-AExample/Pods-AExample-acknowledgements.markdown +1316 -0
  464. data/examples/AExample/Pods/Target Support Files/Pods-AExample/Pods-AExample-acknowledgements.plist +1396 -0
  465. data/examples/AExample/Pods/Target Support Files/Pods-AExample/Pods-AExample-dummy.m +5 -0
  466. data/examples/AExample/Pods/Target Support Files/Pods-AExample/Pods-AExample-frameworks-Debug-input-files.xcfilelist +8 -0
  467. data/examples/AExample/Pods/Target Support Files/Pods-AExample/Pods-AExample-frameworks-Debug-output-files.xcfilelist +7 -0
  468. data/examples/AExample/Pods/Target Support Files/Pods-AExample/Pods-AExample-frameworks-Release-input-files.xcfilelist +8 -0
  469. data/examples/AExample/Pods/Target Support Files/Pods-AExample/Pods-AExample-frameworks-Release-output-files.xcfilelist +7 -0
  470. data/examples/AExample/Pods/Target Support Files/Pods-AExample/Pods-AExample-frameworks.sh +198 -0
  471. data/examples/AExample/Pods/Target Support Files/Pods-AExample/Pods-AExample-umbrella.h +16 -0
  472. data/examples/AExample/Pods/Target Support Files/Pods-AExample/Pods-AExample.debug.xcconfig +12 -0
  473. data/examples/AExample/Pods/Target Support Files/Pods-AExample/Pods-AExample.modulemap +6 -0
  474. data/examples/AExample/Pods/Target Support Files/Pods-AExample/Pods-AExample.release.xcconfig +12 -0
  475. data/examples/AExample/Pods/Target Support Files/Pods-AExample-AExampleCP/Pods-AExample-AExampleCP-Info.plist +26 -0
  476. data/examples/AExample/Pods/Target Support Files/Pods-AExample-AExampleCP/Pods-AExample-AExampleCP-acknowledgements.markdown +1316 -0
  477. data/examples/AExample/Pods/Target Support Files/Pods-AExample-AExampleCP/Pods-AExample-AExampleCP-acknowledgements.plist +1396 -0
  478. data/examples/AExample/Pods/Target Support Files/Pods-AExample-AExampleCP/Pods-AExample-AExampleCP-dummy.m +5 -0
  479. data/examples/AExample/Pods/Target Support Files/Pods-AExample-AExampleCP/Pods-AExample-AExampleCP-frameworks-Debug-input-files.xcfilelist +8 -0
  480. data/examples/AExample/Pods/Target Support Files/Pods-AExample-AExampleCP/Pods-AExample-AExampleCP-frameworks-Debug-output-files.xcfilelist +7 -0
  481. data/examples/AExample/Pods/Target Support Files/Pods-AExample-AExampleCP/Pods-AExample-AExampleCP-frameworks-Release-input-files.xcfilelist +8 -0
  482. data/examples/AExample/Pods/Target Support Files/Pods-AExample-AExampleCP/Pods-AExample-AExampleCP-frameworks-Release-output-files.xcfilelist +7 -0
  483. data/examples/AExample/Pods/Target Support Files/Pods-AExample-AExampleCP/Pods-AExample-AExampleCP-frameworks.sh +198 -0
  484. data/examples/AExample/Pods/Target Support Files/Pods-AExample-AExampleCP/Pods-AExample-AExampleCP-umbrella.h +16 -0
  485. data/examples/AExample/Pods/Target Support Files/Pods-AExample-AExampleCP/Pods-AExample-AExampleCP.debug.xcconfig +12 -0
  486. data/examples/AExample/Pods/Target Support Files/Pods-AExample-AExampleCP/Pods-AExample-AExampleCP.modulemap +6 -0
  487. data/examples/AExample/Pods/Target Support Files/Pods-AExample-AExampleCP/Pods-AExample-AExampleCP.release.xcconfig +12 -0
  488. data/examples/AExample/Pods/Target Support Files/PromisesObjC/PromisesObjC-Info.plist +26 -0
  489. data/examples/AExample/Pods/Target Support Files/PromisesObjC/PromisesObjC-dummy.m +5 -0
  490. data/examples/AExample/Pods/Target Support Files/PromisesObjC/PromisesObjC-umbrella.h +36 -0
  491. data/examples/AExample/Pods/Target Support Files/PromisesObjC/PromisesObjC.debug.xcconfig +12 -0
  492. data/examples/AExample/Pods/Target Support Files/PromisesObjC/PromisesObjC.modulemap +6 -0
  493. data/examples/AExample/Pods/Target Support Files/PromisesObjC/PromisesObjC.release.xcconfig +12 -0
  494. data/examples/AExample/Pods/Target Support Files/nanopb/nanopb-Info.plist +26 -0
  495. data/examples/AExample/Pods/Target Support Files/nanopb/nanopb-dummy.m +5 -0
  496. data/examples/AExample/Pods/Target Support Files/nanopb/nanopb-prefix.pch +12 -0
  497. data/examples/AExample/Pods/Target Support Files/nanopb/nanopb-umbrella.h +26 -0
  498. data/examples/AExample/Pods/Target Support Files/nanopb/nanopb.debug.xcconfig +11 -0
  499. data/examples/AExample/Pods/Target Support Files/nanopb/nanopb.modulemap +6 -0
  500. data/examples/AExample/Pods/Target Support Files/nanopb/nanopb.release.xcconfig +11 -0
  501. data/examples/AExample/Pods/nanopb/LICENSE.txt +20 -0
  502. data/examples/AExample/Pods/nanopb/README.md +71 -0
  503. data/examples/AExample/Pods/nanopb/pb.h +599 -0
  504. data/examples/AExample/Pods/nanopb/pb_common.c +97 -0
  505. data/examples/AExample/Pods/nanopb/pb_common.h +42 -0
  506. data/examples/AExample/Pods/nanopb/pb_decode.c +1564 -0
  507. data/examples/AExample/Pods/nanopb/pb_decode.h +178 -0
  508. data/examples/AExample/Pods/nanopb/pb_encode.c +913 -0
  509. data/examples/AExample/Pods/nanopb/pb_encode.h +170 -0
  510. data/lib/cocoapods-catalyst-validator/cocoapods-catalyst-validator.rb +110 -0
  511. data/lib/cocoapods-catalyst-validator/gem_version.rb +3 -0
  512. data/lib/cocoapods_plugin.rb +3 -0
  513. data/spec/command/validator_spec.rb +12 -0
  514. data/spec/spec_helper.rb +50 -0
  515. metadata +601 -0
@@ -0,0 +1,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