Эх сурвалжийг харах

修改pod。修护解题技巧 bug

openlockPPP 2 жил өмнө
parent
commit
a88b85a900

+ 3 - 3
Podfile

@@ -4,7 +4,7 @@ source 'https://github.com/CocoaPods/Specs.git'
 #	清华源
 #source 'https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git'
 # Private Speces
-source 'https://github.com/ScareCrowInMountain/RQPrivateSpec.git'
+#source 'https://github.com/ScareCrowInMountain/RQPrivateSpec.git'
 
 # 说明平台是ios,版本是11.0
 platform:ios,'11.0'
@@ -15,7 +15,7 @@ inhibit_all_warnings!
 target  'jiaPei'  do
 	  # CocoaPods
     # Private
-    pod 'RQAPPEventModuleComponent'
+    #pod 'RQAPPEventModuleComponent'
     
     # Base
     pod 'AFNetworking'
@@ -158,7 +158,7 @@ pre_install do |installer|
   dir_web = File.join(installer.sandbox.pod_dir('WebViewJavascriptBridge'), 'WebViewJavascriptBridge')
   Dir.foreach(dir_web) {|x|
     real_path = File.join(dir_web, x)
-    if (!File.directory?(real_path) && File.exists?(real_path))
+    if (!File.directory?(real_path) && File.exist?(real_path))
       if(x == 'WebViewJavascriptBridge.h' || x == 'WebViewJavascriptBridge.m')
         File.delete(real_path)
       end

+ 43 - 44
Podfile.lock

@@ -6,40 +6,40 @@ PODS:
   - Ads-CN/Dep_Accurate (5.1.1.0):
     - BUAdSDK (= 0.2.0.1)
     - BURelyFoundation/CSJ (= 0.1.0.17)
-  - ADSuyiKit (0.6.1.03231)
+  - ADSuyiKit (0.6.1.03232)
   - ADSuyiLocationManager (0.2.0.12221)
   - ADSuyiNetwork (0.2.1.11211):
     - ADSuyiKit (~> 0.6.0)
-  - ADSuyiSDK (3.7.3.03231):
+  - ADSuyiSDK (3.7.3.03232):
     - ADSuyiKit (~> 0.6.1.03231)
     - ADSuyiLocationManager (~> 0.2.0.0)
     - ADSuyiNetwork (~> 0.2.1.0)
-    - ADSuyiSDK/core (= 3.7.3.03231)
-  - ADSuyiSDK/ADSuyiSDKPlatforms/bu (3.7.3.03231):
+    - ADSuyiSDK/core (= 3.7.3.03232)
+  - ADSuyiSDK/ADSuyiSDKPlatforms/bu (3.7.3.03232):
     - Ads-CN (= 5.1.1.0)
     - ADSuyiKit (~> 0.6.1.03231)
     - ADSuyiLocationManager (~> 0.2.0.0)
     - ADSuyiNetwork (~> 0.2.1.0)
     - ADSuyiSDK/core
-  - ADSuyiSDK/ADSuyiSDKPlatforms/gdt (3.7.3.03231):
+  - ADSuyiSDK/ADSuyiSDKPlatforms/gdt (3.7.3.03232):
     - ADSuyiKit (~> 0.6.1.03231)
     - ADSuyiLocationManager (~> 0.2.0.0)
     - ADSuyiNetwork (~> 0.2.1.0)
     - ADSuyiSDK/core
     - GDTMobSDK (= 4.14.12)
-  - ADSuyiSDK/ADSuyiSDKPlatforms/ks (3.7.3.03231):
+  - ADSuyiSDK/ADSuyiSDKPlatforms/ks (3.7.3.03232):
     - ADSuyiKit (~> 0.6.1.03231)
     - ADSuyiLocationManager (~> 0.2.0.0)
     - ADSuyiNetwork (~> 0.2.1.0)
     - ADSuyiSDK/core
     - KSAdSDK (= 3.3.38.1)
-  - ADSuyiSDK/ADSuyiSDKPlatforms/tianmu (3.7.3.03231):
+  - ADSuyiSDK/ADSuyiSDKPlatforms/tianmu (3.7.3.03232):
     - ADSuyiKit (~> 0.6.1.03231)
     - ADSuyiLocationManager (~> 0.2.0.0)
     - ADSuyiNetwork (~> 0.2.1.0)
     - ADSuyiSDK/core
     - TianmuSDK (= 2.0.3.1)
-  - ADSuyiSDK/core (3.7.3.03231):
+  - ADSuyiSDK/core (3.7.3.03232):
     - ADSuyiKit (~> 0.6.1.03231)
     - ADSuyiLocationManager (~> 0.2.0.0)
     - ADSuyiNetwork (~> 0.2.1.0)
@@ -59,17 +59,17 @@ PODS:
   - AFNetworking/UIKit (4.0.1):
     - AFNetworking/NSURLSession
   - AlipaySDK-iOS (15.8.11)
-  - BaiduMapKit (6.5.7):
-    - BaiduMapKit/Base (= 6.5.7)
-    - BaiduMapKit/Map (= 6.5.7)
-    - BaiduMapKit/Search (= 6.5.7)
-    - BaiduMapKit/Utils (= 6.5.7)
-  - BaiduMapKit/Base (6.5.7)
-  - BaiduMapKit/Map (6.5.7):
+  - BaiduMapKit (6.5.8):
+    - BaiduMapKit/Base (= 6.5.8)
+    - BaiduMapKit/Map (= 6.5.8)
+    - BaiduMapKit/Search (= 6.5.8)
+    - BaiduMapKit/Utils (= 6.5.8)
+  - BaiduMapKit/Base (6.5.8)
+  - BaiduMapKit/Map (6.5.8):
     - BaiduMapKit/Base
-  - BaiduMapKit/Search (6.5.7):
+  - BaiduMapKit/Search (6.5.8):
     - BaiduMapKit/Base
-  - BaiduMapKit/Utils (6.5.7):
+  - BaiduMapKit/Utils (6.5.8):
     - BaiduMapKit/Base
   - BMKLocationKit (2.0.7)
   - BUAdSDK (0.2.0.1):
@@ -154,21 +154,23 @@ PODS:
   - GDTMobSDK (4.14.12):
     - GDTMobSDK/GDTMobSDK (= 4.14.12)
   - GDTMobSDK/GDTMobSDK (4.14.12)
-  - GKPhotoBrowser (2.5.7):
-    - GKPhotoBrowser/Default (= 2.5.7)
-  - GKPhotoBrowser/AVPlayer (2.5.7):
+  - GKPhotoBrowser (2.5.8):
+    - GKPhotoBrowser/Default (= 2.5.8)
+  - GKPhotoBrowser/AVPlayer (2.5.8):
     - GKPhotoBrowser/Core
-  - GKPhotoBrowser/Core (2.5.7):
+  - GKPhotoBrowser/Core (2.5.8):
     - GKSliderView
-  - GKPhotoBrowser/Default (2.5.7):
+  - GKPhotoBrowser/Default (2.5.8):
     - GKPhotoBrowser/AVPlayer
     - GKPhotoBrowser/SD
-  - GKPhotoBrowser/SD (2.5.7):
+  - GKPhotoBrowser/SD (2.5.8):
     - GKPhotoBrowser/Core
     - SDWebImage (~> 5.0)
   - GKSliderView (1.1.0)
-  - GTSDK (2.7.4.0):
+  - GTCommonSDK (3.0.4.0):
     - ZXSDK
+  - GTSDK (3.0.0.0):
+    - GTCommonSDK (>= 3.0.3.0)
   - HappyDNS (1.0.2)
   - HWPanModal (0.9.7)
   - IDMPhotoBrowser (1.10.2):
@@ -194,9 +196,9 @@ PODS:
   - libwebp/mux (1.2.4):
     - libwebp/demux
   - libwebp/webp (1.2.4)
-  - LookinServer (1.1.5):
-    - LookinServer/Core (= 1.1.5)
-  - LookinServer/Core (1.1.5)
+  - LookinServer (1.1.7):
+    - LookinServer/Core (= 1.1.7)
+  - LookinServer/Core (1.1.7)
   - Masonry (1.1.0)
   - MBProgressHUD (1.2.0)
   - MJExtension (3.4.1)
@@ -516,14 +518,13 @@ PODS:
     - RealReachability/Ping (= 1.4.1)
   - RealReachability/Connection (1.4.1)
   - RealReachability/Ping (1.4.1)
-  - RQAPPEventModuleComponent (0.1.4)
   - SAMKeychain (1.5.3)
   - SCLAlertView-Objective-C (1.2.0)
   - SDCycleScrollView (1.82):
     - SDWebImage (>= 5.0.0)
-  - SDWebImage (5.15.6):
-    - SDWebImage/Core (= 5.15.6)
-  - SDWebImage/Core (5.15.6)
+  - SDWebImage (5.15.8):
+    - SDWebImage/Core (= 5.15.8)
+  - SDWebImage/Core (5.15.8)
   - SDWebImageWebPCoder (0.8.3):
     - libwebp (~> 1.0)
     - SDWebImage/Core (~> 5.10)
@@ -606,7 +607,6 @@ DEPENDENCIES:
   - QMUIKit
   - ReactiveObjC
   - RealReachability
-  - RQAPPEventModuleComponent
   - SAMKeychain
   - SCLAlertView-Objective-C
   - SDCycleScrollView
@@ -653,6 +653,7 @@ SPEC REPOS:
     - GDTMobSDK
     - GKPhotoBrowser
     - GKSliderView
+    - GTCommonSDK
     - GTSDK
     - HappyDNS
     - HWPanModal
@@ -701,8 +702,6 @@ SPEC REPOS:
     - YYWebImage
     - ZFPlayer
     - ZXSDK
-  https://github.com/ScareCrowInMountain/RQPrivateSpec.git:
-    - RQAPPEventModuleComponent
 
 EXTERNAL SOURCES:
   MLeaksFinder:
@@ -715,13 +714,13 @@ CHECKOUT OPTIONS:
 
 SPEC CHECKSUMS:
   Ads-CN: 396987a7511948ed83ec8d6503acf202ed0ccca2
-  ADSuyiKit: cce3b5f9a8e10a90885c91170c22258ba27990e5
+  ADSuyiKit: ecb3e30e520467ff3e252e9be413a9665282fbd6
   ADSuyiLocationManager: 2dca29a165b255b70eec3471513903f0dc66e385
   ADSuyiNetwork: 31fb2e83a9ecf12b859eefcd6378ecb510d327fc
-  ADSuyiSDK: 8c86c20de50fc01ac460ed87b51843929dcdddfe
+  ADSuyiSDK: ea54b3850942a16da86b94507cc5b246b56d2c99
   AFNetworking: 3bd23d814e976cd148d7d44c3ab78017b744cd58
   AlipaySDK-iOS: a07b6eafa847a5b29acb6c150ea16d9792d5d167
-  BaiduMapKit: aa6e7f70bf2446cd67b9dd0960b763602f359107
+  BaiduMapKit: 54aa08075ec9440b11e5d3d95c5807409a1c05cd
   BMKLocationKit: a68845e2771bb3028feb638186d96124f4f142cd
   BUAdSDK: 002b735289815f703efc9108f66347ac61f1892a
   Bugly: b8715e6ec4004b7f7fbffab0643ba80545aee3da
@@ -737,9 +736,10 @@ SPEC CHECKSUMS:
   FLAnimatedImage: bbf914596368867157cc71b38a8ec834b3eeb32b
   FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
   GDTMobSDK: 085bb4c2390d78330405d90acfc43fa7f8d0a44e
-  GKPhotoBrowser: e1d153b63b6ecd639f8b502b08d3994eaa3c569b
+  GKPhotoBrowser: 39aef2d8ddf5b6f42dfd3dcaa111babcfa94bbc3
   GKSliderView: b5fc3b68bbfdb05ee403303377921d6564de61a9
-  GTSDK: f28e6d575e8a1c26e331ce29b0ecac7db39679cc
+  GTCommonSDK: 88f22c2db467f2a117863d6070f3fcb8947658d1
+  GTSDK: 9ddb00161546cf5d5c03befb383d5928e9254f07
   HappyDNS: 75eed16b27c6c3abccea34ac349ab7b7e954b25b
   HWPanModal: 2340d953661dbeadd1f041cde9e059c0704c873a
   IDMPhotoBrowser: 4bb459b1faffc228e92bccdf7c54ad6d6b7e8c37
@@ -752,7 +752,7 @@ SPEC CHECKSUMS:
   KTVCocoaHTTPServer: df8d7b861e603ff8037e9b2138aca2563a6b768d
   KTVHTTPCache: 588c3eb16f6bd1e6fde1e230dabfb7bd4e490a4d
   libwebp: f62cb61d0a484ba548448a4bd52aabf150ff6eef
-  LookinServer: 2893f2bae53cbf3fd49bbe1a8ea1745582ef1317
+  LookinServer: 4ce0469b066871525611d009d8d16a7a50c23491
   Masonry: 678fab65091a9290e40e2832a55e7ab731aad201
   MBProgressHUD: 3ee5efcc380f6a79a7cc9b363dd669c5e1ae7406
   MJExtension: 21c5f6f8c4d5d8844b7ae8fbae08fed0b501f961
@@ -767,11 +767,10 @@ SPEC CHECKSUMS:
   QMUIKit: 6321cf1124623d686a9ec0a79a7cc59d0d64a52c
   ReactiveObjC: 011caa393aa0383245f2dcf9bf02e86b80b36040
   RealReachability: 828e74e3a1e89ba8f54395344637689cf4065c36
-  RQAPPEventModuleComponent: c0155c85e2ee89e79d68fda881984cd2ee62cf2b
   SAMKeychain: 483e1c9f32984d50ca961e26818a534283b4cd5c
   SCLAlertView-Objective-C: 84f12f66d779dadad7f293e5e8b7697ba4254ee0
   SDCycleScrollView: a0d74c3384caa72bdfc81470bdbc8c14b3e1fbcf
-  SDWebImage: d47d81bea8a77187896b620dc79c3c528e8906b9
+  SDWebImage: cb032eba469c54e0000e78bcb0a13cdde0a52798
   SDWebImageWebPCoder: bbf46e29fb8d1980a78ad3d5e9b4123c77f10ebc
   SGQRCode: 6ad664d63f38f2842503bc5087812c5a3136d924
   SocketRocket: fccef3f9c5cedea1353a9ef6ada904fde10d6608
@@ -790,6 +789,6 @@ SPEC CHECKSUMS:
   ZFPlayer: 5cf39e8d9f0c2394a014b0db4767b5b5a6bffe13
   ZXSDK: 3ae8f7f2c5d45b4c1def43e14d930495c5f4d424
 
-PODFILE CHECKSUM: 3639f0d10657f20d5890cd2fa7823ab829f24b68
+PODFILE CHECKSUM: f76fa47c492177440fc27b7171b6a34cd2b0e3c0
 
-COCOAPODS: 1.11.3
+COCOAPODS: 1.12.1

+ 49 - 4
jiaPei.xcodeproj/project.pbxproj

@@ -79,6 +79,12 @@
 		1DE204741E4AF95200710ECE /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DE204731E4AF95200710ECE /* CoreLocation.framework */; };
 		1DFC1E982154B82C006CD48C /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DFC1E972154B82C006CD48C /* CoreAudio.framework */; };
 		1DFC1E9F2154B85C006CD48C /* libsqlite3.0.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 183DE9DF1C2FA564003740D1 /* libsqlite3.0.tbd */; };
+		900A2DE32A1FA89700395C1F /* RQAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 900A2DDD2A1FA89700395C1F /* RQAppDelegate.m */; };
+		900A2DE42A1FA89700395C1F /* RQAppEventModuleManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 900A2DDE2A1FA89700395C1F /* RQAppEventModuleManager.m */; };
+		900A2DE52A1FA89700395C1F /* RQAppEventAnnotation.m in Sources */ = {isa = PBXBuildFile; fileRef = 900A2DE02A1FA89700395C1F /* RQAppEventAnnotation.m */; };
+		900A2DE62A1FA89700395C1F /* RQBaseAppEventModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 900A2DE12A1FA89700395C1F /* RQBaseAppEventModule.m */; };
+		90626F3D2A204BC400C8FA05 /* kt_jq.db in Resources */ = {isa = PBXBuildFile; fileRef = 90626F3C2A204BC300C8FA05 /* kt_jq.db */; };
+		90626F402A20540600C8FA05 /* YNYDTJQQuestionModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 90626F3F2A20540600C8FA05 /* YNYDTJQQuestionModule.m */; };
 		D00177E22886A6F70078949E /* RQExerciseExplainHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = D00177E12886A6F70078949E /* RQExerciseExplainHeaderView.m */; };
 		D00177E42886A70C0078949E /* RQExerciseExplainHeaderView.xib in Resources */ = {isa = PBXBuildFile; fileRef = D00177E32886A70C0078949E /* RQExerciseExplainHeaderView.xib */; };
 		D00177E72886AA650078949E /* RQExciseExplainHeaderGroupViewModel.m in Sources */ = {isa = PBXBuildFile; fileRef = D00177E62886AA650078949E /* RQExciseExplainHeaderGroupViewModel.m */; };
@@ -1749,6 +1755,18 @@
 		1DFC1E9C2154B85B006CD48C /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };
 		1DFC1E9D2154B85B006CD48C /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = System/Library/Frameworks/MobileCoreServices.framework; sourceTree = SDKROOT; };
 		1DFC1E9E2154B85C006CD48C /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
+		900A2DDA2A1FA89700395C1F /* RQAppEventModuleManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RQAppEventModuleManager.h; sourceTree = "<group>"; };
+		900A2DDB2A1FA89700395C1F /* RQBaseAppEventModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RQBaseAppEventModule.h; sourceTree = "<group>"; };
+		900A2DDC2A1FA89700395C1F /* RQAppEventAnnotation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RQAppEventAnnotation.h; sourceTree = "<group>"; };
+		900A2DDD2A1FA89700395C1F /* RQAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RQAppDelegate.m; sourceTree = "<group>"; };
+		900A2DDE2A1FA89700395C1F /* RQAppEventModuleManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RQAppEventModuleManager.m; sourceTree = "<group>"; };
+		900A2DDF2A1FA89700395C1F /* RQAppEventModuleProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RQAppEventModuleProtocol.h; sourceTree = "<group>"; };
+		900A2DE02A1FA89700395C1F /* RQAppEventAnnotation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RQAppEventAnnotation.m; sourceTree = "<group>"; };
+		900A2DE12A1FA89700395C1F /* RQBaseAppEventModule.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RQBaseAppEventModule.m; sourceTree = "<group>"; };
+		900A2DE22A1FA89700395C1F /* RQAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RQAppDelegate.h; sourceTree = "<group>"; };
+		90626F3C2A204BC300C8FA05 /* kt_jq.db */ = {isa = PBXFileReference; lastKnownFileType = file; path = kt_jq.db; sourceTree = "<group>"; };
+		90626F3E2A20540600C8FA05 /* YNYDTJQQuestionModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YNYDTJQQuestionModule.h; sourceTree = "<group>"; };
+		90626F3F2A20540600C8FA05 /* YNYDTJQQuestionModule.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YNYDTJQQuestionModule.m; sourceTree = "<group>"; };
 		D00177E02886A6F70078949E /* RQExerciseExplainHeaderView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RQExerciseExplainHeaderView.h; sourceTree = "<group>"; };
 		D00177E12886A6F70078949E /* RQExerciseExplainHeaderView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RQExerciseExplainHeaderView.m; sourceTree = "<group>"; };
 		D00177E32886A70C0078949E /* RQExerciseExplainHeaderView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = RQExerciseExplainHeaderView.xib; sourceTree = "<group>"; };
@@ -4408,6 +4426,22 @@
 			path = ..;
 			sourceTree = "<group>";
 		};
+		900A2DD92A1FA89700395C1F /* RQAPPEventModuleComponent */ = {
+			isa = PBXGroup;
+			children = (
+				900A2DDA2A1FA89700395C1F /* RQAppEventModuleManager.h */,
+				900A2DDB2A1FA89700395C1F /* RQBaseAppEventModule.h */,
+				900A2DDC2A1FA89700395C1F /* RQAppEventAnnotation.h */,
+				900A2DDD2A1FA89700395C1F /* RQAppDelegate.m */,
+				900A2DDE2A1FA89700395C1F /* RQAppEventModuleManager.m */,
+				900A2DDF2A1FA89700395C1F /* RQAppEventModuleProtocol.h */,
+				900A2DE02A1FA89700395C1F /* RQAppEventAnnotation.m */,
+				900A2DE12A1FA89700395C1F /* RQBaseAppEventModule.m */,
+				900A2DE22A1FA89700395C1F /* RQAppDelegate.h */,
+			);
+			path = RQAPPEventModuleComponent;
+			sourceTree = "<group>";
+		};
 		9A75AB77D77332A5EDD30629 /* Pods */ = {
 			isa = PBXGroup;
 			children = (
@@ -4476,6 +4510,8 @@
 		D004D7E927FDDF7100A96946 /* Modules */ = {
 			isa = PBXGroup;
 			children = (
+				90626F3E2A20540600C8FA05 /* YNYDTJQQuestionModule.h */,
+				90626F3F2A20540600C8FA05 /* YNYDTJQQuestionModule.m */,
 				D05A6FB027F2E5F100C096DB /* RQYDTUserQuestionModule.h */,
 				D05A6FB127F2E5F100C096DB /* RQYDTUserQuestionModule.m */,
 				D081CD0327F15AAB0054317F /* RQYDTXCQuestionModule.h */,
@@ -7772,6 +7808,7 @@
 		D081CCEB27F156380054317F /* Resources */ = {
 			isa = PBXGroup;
 			children = (
+				90626F3C2A204BC300C8FA05 /* kt_jq.db */,
 				D05A6FB327F30AE600C096DB /* jsjp_user.db */,
 				D081CCF127F15A280054317F /* hc.db */,
 				D081CCF427F15A2A0054317F /* kc.db */,
@@ -9279,6 +9316,7 @@
 		D0DA2664219D9E430093CD42 /* Vendor */ = {
 			isa = PBXGroup;
 			children = (
+				900A2DD92A1FA89700395C1F /* RQAPPEventModuleComponent */,
 				D020105B29373AE7001B9F4D /* SmallVideo */,
 				D07456B429272C660050BE10 /* QiNiu_IMSDK */,
 				D0D68D4B2890DC8300600C5C /* ZHLineChart */,
@@ -9660,6 +9698,7 @@
 				D0295CB4243F0B8B00B46AB1 /* 1-1-35.jpg in Resources */,
 				D0EF8FF3288930B000CC4F96 /* RQExerciseExamAlertHudView.xib in Resources */,
 				D0295CAD243F0B8B00B46AB1 /* 1-3-24.jpg in Resources */,
+				90626F3D2A204BC400C8FA05 /* kt_jq.db in Resources */,
 				D0295C9F243F0B8B00B46AB1 /* 1-6-16.jpg in Resources */,
 				D0295D0C243F0B8C00B46AB1 /* 1-2-11.jpg in Resources */,
 				D0295B6F243F0B8A00B46AB1 /* 1-4-69.jpg in Resources */,
@@ -10324,6 +10363,7 @@
 			inputPaths = (
 				"${PODS_ROOT}/Target Support Files/Pods-jiaPei/Pods-jiaPei-frameworks.sh",
 				"${PODS_XCFRAMEWORKS_BUILD_DIR}/KSAdSDK/KSAdSDK.framework/KSAdSDK",
+				"${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenSSL-Universal/OpenSSL.framework/OpenSSL",
 			);
 			name = "[CP] Embed Pods Frameworks";
 			outputPaths = (
@@ -10556,6 +10596,7 @@
 				D0870D702701A6B9004EC94E /* UIPopoverController+BlocksKit.m in Sources */,
 				D0D1F6B8283F84E00086C6AE /* DZMCoverController.m in Sources */,
 				D0536B922930AE7B0042AED6 /* RQTimeSingleCell.m in Sources */,
+				900A2DE42A1FA89700395C1F /* RQAppEventModuleManager.m in Sources */,
 				D0870D772701A6B9004EC94E /* A2BlockInvocation.m in Sources */,
 				D0870D742701A6B9004EC94E /* UIControl+BlocksKit.m in Sources */,
 				D00A15F92754B86F00793046 /* RQMusicManager.m in Sources */,
@@ -10810,6 +10851,7 @@
 				D0F9E8222824F0AF0073A7D1 /* RQBottomBtnView.m in Sources */,
 				D0F8F1272929C8AF0008019C /* OrbitVC.m in Sources */,
 				D09C56D8285350E200088A2E /* RQHomePageOneOrFourSmallCell.m in Sources */,
+				900A2DE62A1FA89700395C1F /* RQBaseAppEventModule.m in Sources */,
 				D0870E562701B5A0004EC94E /* RQPhoneView.m in Sources */,
 				D0870DB42701AA85004EC94E /* MainModule.m in Sources */,
 				D09E5D5B25E3AA260099E87C /* BDFaceImageUtils.m in Sources */,
@@ -11184,6 +11226,7 @@
 				D0294804243F07E300B46AB1 /* RGCardViewLayout.m in Sources */,
 				D02010C029373AE8001B9F4D /* SLAvEditExport.m in Sources */,
 				D05CB3B12763216A006895F3 /* RQHomeSubPageViewModel.m in Sources */,
+				900A2DE32A1FA89700395C1F /* RQAppDelegate.m in Sources */,
 				D0EA1DAA28C02DAE00C27563 /* RQSynchronizationViewController.m in Sources */,
 				D04A765C24A0AD30009B58BA /* SMSDemoPolicyManager.m in Sources */,
 				D0870D6F2701A6B9004EC94E /* UIGestureRecognizer+BlocksKit.m in Sources */,
@@ -11243,6 +11286,8 @@
 				D0294815243F07E300B46AB1 /* RatingBar.m in Sources */,
 				D0870DB52701AA85004EC94E /* RQMainTabBarViewController.m in Sources */,
 				D02010CC29373AE8001B9F4D /* SLDelayPerform.m in Sources */,
+				90626F402A20540600C8FA05 /* YNYDTJQQuestionModule.m in Sources */,
+				900A2DE52A1FA89700395C1F /* RQAppEventAnnotation.m in Sources */,
 				D0870D6C2701A6B9004EC94E /* UIBarButtonItem+BlocksKit.m in Sources */,
 				D074573B29272C670050BE10 /* QMLeaveMessageCell.m in Sources */,
 				D074574029272C680050BE10 /* QMChatRoomMp3Cell.m in Sources */,
@@ -11400,7 +11445,7 @@
 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
 				"CODE_SIGN_RESOURCE_RULES_PATH[sdk=*]" = "";
 				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 2.0.0;
+				CURRENT_PROJECT_VERSION = 1942023052601;
 				DEBUG_INFORMATION_FORMAT = dwarf;
 				DEVELOPMENT_TEAM = K7T6CU5SW5;
 				ENABLE_BITCODE = NO;
@@ -11436,7 +11481,7 @@
 					"$(PROJECT_DIR)/jiaPei/Vendor/BaiDuFaceSDK/BDFaceSDK/lib",
 					"$(PROJECT_DIR)/jiaPei/Vendor/QiNiu_IMSDK/Vendors/Voice",
 				);
-				MARKETING_VERSION = 1.9.3;
+				MARKETING_VERSION = 1.9.4;
 				ONLY_ACTIVE_ARCH = YES;
 				OTHER_CFLAGS = (
 					"$(inherited)",
@@ -11481,7 +11526,7 @@
 				CODE_SIGN_IDENTITY = "iPhone Developer";
 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
 				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 2.0.0;
+				CURRENT_PROJECT_VERSION = 1942023052601;
 				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
 				DEVELOPMENT_TEAM = K7T6CU5SW5;
 				ENABLE_BITCODE = NO;
@@ -11517,7 +11562,7 @@
 					"$(PROJECT_DIR)/jiaPei/Vendor/BaiDuFaceSDK/BDFaceSDK/lib",
 					"$(PROJECT_DIR)/jiaPei/Vendor/QiNiu_IMSDK/Vendors/Voice",
 				);
-				MARKETING_VERSION = 1.9.3;
+				MARKETING_VERSION = 1.9.4;
 				ONLY_ACTIVE_ARCH = NO;
 				OTHER_CFLAGS = (
 					"$(inherited)",

+ 4 - 2
jiaPei/Modules/OtherModules/ExerciseModule/ViewModel/ExercisePage/itemViewModel/RQExerciseAnswerItemViewModel.m

@@ -34,13 +34,15 @@
                 [answerOptionArr addObject:[allOptionsArr objectAtIndex:indexStr.integerValue - 1]];
             }
             self.ydtJSModel = [RQ_YDT_JS_Question_Module getQuestionJSWithQuestionId:exerciseModel.ydtQuestionModel.ID];
+            //ning 2023-5-24 一点通db 解题答案数据有异常-新整jq库进行修正。
+            self.ydtJSModel.qb_read_analyse = [YN_YDT_JQ_Question_Module getQuestionKTJQWithQuestionId:exerciseModel.ydtQuestionModel.ID];
             self.answerString = [NSString stringWithFormat:@"答案 %@",[answerOptionArr.mutableCopy componentsJoinedByString:@" "]];
             __block CGFloat space = 0.f;
             if (RQObjectIsNil(self.ydtJSModel)) {
                 self.skillHeight = 0.f;
                 space = 0.f;
             } else {
-                NSMutableAttributedString *text = [[NSMutableAttributedString alloc] initWithString:self.ydtJSModel.qb_read_analyse];
+                NSMutableAttributedString *text = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"解题技巧讲解:%@",self.ydtJSModel.qb_read_analyse]];
                 text.yy_font = [UIFont boldSystemFontOfSize:RQ_Exercise_Module.exerciseFontSize];
                 text.yy_lineSpacing = 8;
                 text.yy_color = RQ_MAIN_TEXT_COLOR_1;
@@ -64,7 +66,7 @@
     CGSize introSize = CGSizeMake(RQ_SCREEN_WIDTH - (16 * 2) - (8 * 2), CGFLOAT_MAX);
     YYTextLayout *layout = [YYTextLayout layoutWithContainerSize:introSize text:attributedStr];
     lb.textLayout = layout;
-    CGFloat introHeight = layout.textBoundingSize.height;
+    CGFloat introHeight = layout.textBoundingSize.height+10;
     return introHeight;
 }
 

+ 1 - 0
jiaPei/Modules/OtherModules/YDTQuestionModule/RQYDTQuestionModule.h

@@ -42,6 +42,7 @@ typedef NS_ENUM(NSUInteger, RQQuestionUpdateViewType) {
 #import "RQExerciseModule.h"
 #import "RQYDTUserQuestionModule.h"
 #import "RQYDTJSQuestionModule.h"
+#import "YNYDTJQQuestionModule.h"
 
 /// RQCarTypeChangeNotification
 FOUNDATION_EXTERN NSString * const RQCarTypeChangeNotification;

+ 40 - 6
jiaPei/Modules/OtherModules/YDTQuestionModule/RQYDTQuestionModule.m

@@ -30,7 +30,7 @@ static NSString * const RQYDTQuestionCarTypeKey = @"RQYDTQuestionCarTypeKey";
 @property (nonatomic, readwrite, copy) NSArray *subjectFourArr;
 @property (nonatomic, readwrite, strong) NSString *downloadUrl;
 @property (nonatomic, readwrite, strong) NSString *jsDownloadUrl;
-
+@property (nonatomic, readwrite, strong) NSString *jqDownloadUrl;
 @end
 
 @implementation RQYDTQuestionModule
@@ -96,7 +96,7 @@ static id rq_ydtQuestionModule = nil;
     @weakify(self)
     [[[RQ_HTTP_Service getUpdateQuestion] deliverOnMainThread] subscribeNext:^(NSArray *arr) {
         [[arr.rac_sequence.signal filter:^BOOL(RQDictInfoModel *dictInfoModel) {
-                    return [dictInfoModel.dictLabel isEqualToString:[RQ_YDTQuestion_Module getCarTypeCNTiKuUpdateNameWithCarType:RQ_YDTQuestion_Module.carType]];
+            return [dictInfoModel.dictLabel isEqualToString:[RQ_YDTQuestion_Module getCarTypeCNTiKuUpdateNameWithCarType:RQ_YDTQuestion_Module.carType]];
         }] subscribeNext:^(RQDictInfoModel *dictInfoModel) {
             @strongify(self)
             NSInteger netVersion = dictInfoModel.remark.integerValue;
@@ -124,6 +124,21 @@ static id rq_ydtQuestionModule = nil;
                 NSLog(@"解释题库不需要更新!");
             }
         }];
+        
+        [[arr.rac_sequence.signal filter:^BOOL(RQDictInfoModel *dictInfoModel) {
+            return [dictInfoModel.dictLabel isEqualToString:@"快通解释"];
+        }] subscribeNext:^(RQDictInfoModel *dictInfoModel) {
+            @strongify(self)
+            NSInteger netVersion = dictInfoModel.remark.integerValue;
+            NSInteger localVersion = [YN_YDT_JQ_Question_Module getQuestionVersion];
+            self.jqDownloadUrl = dictInfoModel.dictValue;
+            if (netVersion > localVersion) {
+                NSLog(@"快通解释题库需要更新!");
+                [self rq_showJQUpdateView];
+            } else {
+                NSLog(@"快通解释题库不需要更新!");
+            }
+        }];
     }];
 }
 
@@ -917,11 +932,11 @@ static id rq_ydtQuestionModule = nil;
 - (void)rq_showDBUpdateView {
     @weakify(self)
     dispatch_async(dispatch_get_main_queue(), ^{
-       @strongify(self)
+        @strongify(self)
         RQUpdateView *dbUpdateView = [RQUpdateView updateView];
         dbUpdateView.questionUpdateViewType = RQQuestionUpdateViewType_LibDownload;
         dbUpdateView.downloadUrl = self.downloadUrl;
-
+        
         QMUIModalPresentationViewController *dbModalViewController = [[QMUIModalPresentationViewController alloc] init];
         dbModalViewController.contentView = dbUpdateView;
         dbModalViewController.contentViewMargins = UIEdgeInsetsMake(0, 0, 0, 0);
@@ -929,7 +944,7 @@ static id rq_ydtQuestionModule = nil;
         
         dbUpdateView.modalViewController = dbModalViewController;
         [dbModalViewController showWithAnimated:YES completion:nil];
-
+        
     });
 }
 
@@ -937,10 +952,29 @@ static id rq_ydtQuestionModule = nil;
 - (void)rq_showJSUpdateView {
     @weakify(self)
     dispatch_async(dispatch_get_main_queue(), ^{
-       @strongify(self)
+        @strongify(self)
         RQUpdateView *dbUpdateView = [RQUpdateView updateView];
         dbUpdateView.questionUpdateViewType = RQQuestionUpdateViewType_ExplainDownload;
         dbUpdateView.jsDownloadUrl = self.jsDownloadUrl;
+        
+        QMUIModalPresentationViewController *dbModalViewController = [[QMUIModalPresentationViewController alloc] init];
+        dbModalViewController.contentView = dbUpdateView;
+        dbModalViewController.contentViewMargins = UIEdgeInsetsMake(0, 0, 0, 0);
+        dbModalViewController.modal = YES;
+        
+        dbUpdateView.modalViewController = dbModalViewController;
+        [dbModalViewController showWithAnimated:YES completion:nil];
+        
+    });
+}
+
+- (void)rq_showJQUpdateView {
+    @weakify(self)
+    dispatch_async(dispatch_get_main_queue(), ^{
+       @strongify(self)
+        RQUpdateView *dbUpdateView = [RQUpdateView updateView];
+        dbUpdateView.questionUpdateViewType = RQQuestionUpdateViewType_ExplainDownload;
+        dbUpdateView.jsDownloadUrl = self.jqDownloadUrl;
 
         QMUIModalPresentationViewController *dbModalViewController = [[QMUIModalPresentationViewController alloc] init];
         dbModalViewController.contentView = dbUpdateView;

+ 6 - 1
jiaPei/Modules/OtherModules/YDTQuestionModule/View/RQUpdateView.m

@@ -379,7 +379,12 @@
             if (!error) {
                 /// 下载完成的存储路径
                 NSString *resourcePath1 = filePath.path;
-                [RQ_YDT_JS_Question_Module initDatabaseQueueWithResourcePath:resourcePath1];
+                if([resourcePath1 containsString:@"kt_jq"]){
+                    [YN_YDT_JQ_Question_Module
+                     initDatabaseQueueWithResourcePath:resourcePath1];
+                }else {
+                    [RQ_YDT_JS_Question_Module initDatabaseQueueWithResourcePath:resourcePath1];
+                }
                 self.questionUpdateViewType = RQQuestionUpdateViewType_ExplainDownloaded;
                 
             } else {

+ 17 - 0
jiaPei/Vendor/RQAPPEventModuleComponent/RQAppDelegate.h

@@ -0,0 +1,17 @@
+//
+//  RQAppDelegate.h
+//  jiaPei
+//
+//  Created by 张嵘 on 2020/4/8.
+//  Copyright © 2020 JCZ. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface RQAppDelegate : UIResponder <UIApplicationDelegate>
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 141 - 0
jiaPei/Vendor/RQAPPEventModuleComponent/RQAppDelegate.m

@@ -0,0 +1,141 @@
+//
+//  RQAppDelegate.m
+//  jiaPei
+//
+//  Created by 张嵘 on 2020/4/8.
+//  Copyright © 2020 JCZ. All rights reserved.
+//
+
+#import "RQAppDelegate.h"
+#import "RQAppEventModuleManager.h"
+
+@implementation RQAppDelegate
+
++ (void)load {
+    [[RQAppEventModuleManager sharedInstance] registedAllModules];
+}
+
+- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
+    
+    [[RQAppEventModuleManager sharedInstance] handleApplicationEvent:@selector(application:didFinishLaunchingWithOptions:)
+                                                              Complete:^(id  _Nonnull module, SEL  _Nonnull sel) {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
+        [module performSelector:sel
+                     withObject:application
+                     withObject:launchOptions];
+#pragma clang diagnostic pop
+    }];
+    return YES;
+}
+
+- (void)applicationDidEnterBackground:(UIApplication *)application {
+    
+    [[RQAppEventModuleManager sharedInstance] handleApplicationEvent:@selector(applicationDidEnterBackground:)
+                                                              Complete:^(id  _Nonnull module, SEL  _Nonnull sel) {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
+        [module performSelector:sel
+                     withObject:application];
+#pragma clang diagnostic pop
+    }];
+}
+
+- (void)applicationWillEnterForeground:(UIApplication *)application {
+    [[RQAppEventModuleManager sharedInstance] handleApplicationEvent:@selector(applicationWillEnterForeground:)
+                                                              Complete:^(id  _Nonnull module, SEL  _Nonnull sel) {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
+        [module performSelector:sel withObject:application];
+#pragma clang diagnostic pop
+    }];
+}
+
+- (void)applicationWillTerminate:(UIApplication *)application {
+	[[RQAppEventModuleManager sharedInstance] handleApplicationEvent:@selector(applicationWillTerminate:)
+															  Complete:^(id  _Nonnull module, SEL  _Nonnull sel) {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
+																  [module performSelector:sel withObject:application];
+#pragma clang diagnostic pop
+															  }];
+}
+
+- (void)applicationWillResignActive:(UIApplication *)application {
+	[[RQAppEventModuleManager sharedInstance] handleApplicationEvent:@selector(applicationWillResignActive:)
+															  Complete:^(id  _Nonnull module, SEL  _Nonnull sel) {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
+																  [module performSelector:sel withObject:application];
+#pragma clang diagnostic pop
+															  }];
+}
+
+- (void)applicationDidBecomeActive:(UIApplication *)application {
+	[[RQAppEventModuleManager sharedInstance] handleApplicationEvent:@selector(applicationDidBecomeActive:)
+															  Complete:^(id  _Nonnull module, SEL  _Nonnull sel) {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
+																  [module performSelector:sel withObject:application];
+#pragma clang diagnostic pop
+															  }];
+}
+
+- (void)application:(UIApplication *)application handleEventsForBackgroundURLSession:(NSString *)identifier completionHandler:(void (^)(void))completionHandler {
+	[[RQAppEventModuleManager sharedInstance] handleApplicationEvent:@selector(application:handleEventsForBackgroundURLSession:completionHandler:)
+															  Complete:^(id  _Nonnull module, SEL  _Nonnull sel) {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
+																  [module performSelector:sel
+																			   withObject:identifier withObject:completionHandler];
+#pragma clang diagnostic pop
+															  }];
+}
+
+
+- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings {
+	[[RQAppEventModuleManager sharedInstance] handleApplicationEvent:@selector(application:didRegisterUserNotificationSettings:)
+															  Complete:^(id  _Nonnull module, SEL  _Nonnull sel) {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
+																  [module performSelector:sel
+																			   withObject:application withObject:notificationSettings];
+#pragma clang diagnostic pop
+															  }];
+}
+
+- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
+	[[RQAppEventModuleManager sharedInstance] handleApplicationEvent:@selector(application:didRegisterForRemoteNotificationsWithDeviceToken:)
+															  Complete:^(id  _Nonnull module, SEL  _Nonnull sel) {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
+																  [module performSelector:sel
+																			   withObject:application withObject:deviceToken];
+#pragma clang diagnostic pop
+															  }];
+}
+
+
+- (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
+	[[RQAppEventModuleManager sharedInstance] handleApplicationEvent:@selector(application:performFetchWithCompletionHandler:)
+															  Complete:^(id  _Nonnull module, SEL  _Nonnull sel) {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
+																  [module performSelector:sel
+																			   withObject:application withObject:completionHandler];
+#pragma clang diagnostic pop
+															  }];
+}
+
+- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
+	[[RQAppEventModuleManager sharedInstance] handleApplicationEvent:@selector(application:didReceiveRemoteNotification:fetchCompletionHandler:)
+															  Complete:^(id  _Nonnull module, SEL  _Nonnull sel) {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
+																  [module performSelector:sel
+																			   withObject:userInfo withObject:completionHandler];
+#pragma clang diagnostic pop
+															  }];
+}
+
+@end

+ 26 - 0
jiaPei/Vendor/RQAPPEventModuleComponent/RQAppEventAnnotation.h

@@ -0,0 +1,26 @@
+//
+//  RQAppEventAnnotation.h
+//  jiaPei
+//
+//  Created by 张嵘 on 2020/4/8.
+//  Copyright © 2020 JCZ. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#ifndef RQAppEventModSectName
+#define RQAppEventModSectName "RQAppEventMods"
+#endif
+
+#define RQAppEventDATA(sectname) __attribute((used, section("__DATA,"#sectname" ")))
+
+#define RQAppEventMod(name) \
+char * k##name##_mod RQAppEventDATA(RQAppEventMods) = ""#name"";
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface RQAppEventAnnotation : NSObject
++ (NSArray<NSString *> *)AnnotationModules;
+@end
+
+NS_ASSUME_NONNULL_END

+ 59 - 0
jiaPei/Vendor/RQAPPEventModuleComponent/RQAppEventAnnotation.m

@@ -0,0 +1,59 @@
+//
+//  RQAppEventAnnotation.m
+//  jiaPei
+//
+//  Created by 张嵘 on 2020/4/8.
+//  Copyright © 2020 JCZ. All rights reserved.
+//
+
+#import "RQAppEventAnnotation.h"
+#include <mach-o/getsect.h>
+#include <mach-o/loader.h>
+#include <mach-o/dyld.h>
+#include <dlfcn.h>
+
+static NSArray<NSString *>* FFReadConfiguration(char *section)
+{
+    NSMutableArray *configs = [NSMutableArray array];
+    
+    Dl_info info;
+    dladdr(FFReadConfiguration, &info);
+    
+#ifndef __LP64__
+    //        const struct mach_header *mhp = _dyld_get_image_header(0); // both works as below line
+    const struct mach_header *mhp = (struct mach_header*)info.dli_fbase;
+    unsigned long size = 0;
+    uint32_t *memory = (uint32_t*)getsectiondata(mhp, "__DATA", section, & size);
+#else /* defined(__LP64__) */
+    const struct mach_header_64 *mhp = (struct mach_header_64*)info.dli_fbase;
+    unsigned long size = 0;
+    uint64_t *memory = (uint64_t*)getsectiondata(mhp, "__DATA", section, & size);
+#endif /* defined(__LP64__) */
+    
+    for(int idx = 0; idx < size/sizeof(void*); ++idx){
+        char *string = (char*)memory[idx];
+        
+        NSString *str = [NSString stringWithUTF8String:string];
+        if(!str)continue;
+        
+        if(str) [configs addObject:str];
+    }
+    
+    return configs;
+    
+}
+
+@implementation RQAppEventAnnotation
+
++ (NSArray<NSString *> *)AnnotationModules
+{
+    static NSArray<NSString *> *mods = nil;
+    static dispatch_once_t onceToken;
+    dispatch_once(&onceToken, ^{
+        mods = FFReadConfiguration(RQAppEventModSectName);
+    });
+    return mods;
+}
+
+@end
+

+ 44 - 0
jiaPei/Vendor/RQAPPEventModuleComponent/RQAppEventModuleManager.h

@@ -0,0 +1,44 @@
+//
+//  RQAppEventModuleManager.h
+//  jiaPei
+//
+//  Created by 张嵘 on 2020/4/8.
+//  Copyright © 2020 JCZ. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface RQAppEventModuleManager : NSObject
+/**
+ 当前需要执行的AppEventModule容器
+ */
+@property (nonatomic, strong) NSMutableArray *appEventModules;
+
++ (instancetype)sharedInstance;
+
+/**
+ 初始化所有的AppDelegate相关的Event Modules
+ */
+- (void)registedAllModules;
+
+/**
+ 触发evetn module处理AppDelegate回调事件
+ 
+ @param eventSel AppDelegate 回调事件消息
+ @param complete module处理handle
+ */
+- (void)handleApplicationEvent:(SEL)eventSel
+                      Complete:(void(^)(id module,SEL sel))complete;
+
+/**
+ 移除module对象
+ 
+ @param moduleID module ID
+ */
+- (void)removeModule:(NSString *)moduleID;
+@end
+
+NS_ASSUME_NONNULL_END
+

+ 110 - 0
jiaPei/Vendor/RQAPPEventModuleComponent/RQAppEventModuleManager.m

@@ -0,0 +1,110 @@
+//
+//  RQAppEventModuleManager.m
+//  jiaPei
+//
+//  Created by 张嵘 on 2020/4/8.
+//  Copyright © 2020 JCZ. All rights reserved.
+//
+
+#import "RQAppEventModuleManager.h"
+#import "RQAppEventAnnotation.h"
+#import "RQAppEventModuleProtocol.h"
+
+#define kModuleInfoNameKey  @"moduleClass"
+#define kModuleInfoLevelKey @"moduleLevel"
+
+@implementation RQAppEventModuleManager
+
++ (instancetype)sharedInstance {
+    static id sharedInstance = nil;
+    static dispatch_once_t onceToken = 0;
+    dispatch_once(&onceToken, ^{
+        sharedInstance = [[self alloc] init];
+    });
+    return sharedInstance;
+}
+
+#pragma mark - public methods
+
+- (void)registedAllModules {
+    NSArray<NSString *>*mods = [RQAppEventAnnotation AnnotationModules];
+    for (NSString *modName in mods)
+    {
+        if (modName)
+        {
+            Class moduleCls = NSClassFromString(modName);
+            if (moduleCls && [moduleCls conformsToProtocol:@protocol(RQAppEventModuleProtocol)])
+            {
+                NSMutableDictionary *moduleInfo = [NSMutableDictionary dictionary];
+                id<RQAppEventModuleProtocol> moduleInstance = [[moduleCls alloc] init];
+                NSInteger levelInt = (NSInteger)[moduleInstance performSelector:@selector(moduleLevel)];
+                [moduleInfo setObject:@(levelInt) forKey:kModuleInfoLevelKey];
+                [moduleInfo setObject:moduleInstance forKey:kModuleInfoNameKey];
+                [self.appEventModules addObject:moduleInfo];
+            }
+        }
+    }
+    
+    [self.appEventModules sortUsingComparator:^NSComparisonResult(NSDictionary *module1, NSDictionary *module2) {
+        NSNumber *module1Level = (NSNumber *)[module1 objectForKey:kModuleInfoLevelKey];
+        NSNumber *module2Level =  (NSNumber *)[module2 objectForKey:kModuleInfoLevelKey];
+        return [module1Level intValue] > [module2Level intValue];
+    }];
+    
+    NSMutableArray *tmpArray = [NSMutableArray array];
+    [self.appEventModules enumerateObjectsUsingBlock:^(NSDictionary *module, NSUInteger idx, BOOL * _Nonnull stop) {
+        id<RQAppEventModuleProtocol> moduleInstance = [module objectForKey:kModuleInfoNameKey];
+        [tmpArray addObject:moduleInstance];
+    }];
+    
+    [self.appEventModules removeAllObjects];
+    [self.appEventModules addObjectsFromArray:tmpArray];
+}
+
+- (void)handleApplicationEvent:(SEL)eventSel
+                      Complete:(void(^)(id module,SEL sel))complete {
+    // appEventModules遍历Event过程中,module执行完可以将自己移除
+    // 这里赋值为临时array,防止array遍历过程中移除自己导致出错
+    NSMutableArray *tmpAppEventModules = [[NSMutableArray alloc] initWithArray:self.appEventModules];
+    for (id<RQAppEventModuleProtocol>module in tmpAppEventModules)
+    {
+        if ([module conformsToProtocol:@protocol(RQAppEventModuleProtocol)])
+        {
+            if ([module respondsToSelector:eventSel]) {
+                if (complete) {
+                    complete(module,eventSel);
+                }
+            }
+        }
+    }
+}
+
+- (void)removeModule:(NSString *)moduleID {
+    NSInteger index = NSNotFound;
+    NSInteger resIndex = 0;
+    for (id<RQAppEventModuleProtocol>module in self.appEventModules)
+    {
+        if ([[module moduleID] isEqualToString:moduleID])
+        {
+            index = resIndex;
+            break;
+        }
+        resIndex++;
+    }
+    
+    if (index != NSNotFound) {
+        [self.appEventModules removeObjectAtIndex:index];
+    }
+}
+
+#pragma mark - getter
+
+- (NSMutableArray *)appEventModules {
+    if (!_appEventModules) {
+        _appEventModules = [NSMutableArray array];
+    }
+    return _appEventModules;
+}
+
+@end
+

+ 39 - 0
jiaPei/Vendor/RQAPPEventModuleComponent/RQAppEventModuleProtocol.h

@@ -0,0 +1,39 @@
+//
+//  RQAppEventModuleProtocol.h
+//  jiaPei
+//
+//  Created by 张嵘 on 2020/4/8.
+//  Copyright © 2020 JCZ. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@protocol RQAppEventModuleProtocol <UIApplicationDelegate>
+
+/**
+ mudule执行优先级
+
+ @return return value description
+ */
+- (NSInteger)moduleLevel;
+
+
+/**
+ 执行完成释放module
+ */
+- (void)destroyModule;
+
+
+/**
+ 获取module id
+
+ @return id
+ */
+- (NSString *)moduleID;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 18 - 0
jiaPei/Vendor/RQAPPEventModuleComponent/RQBaseAppEventModule.h

@@ -0,0 +1,18 @@
+//
+//  RQBaseAppEventModule.h
+//  jiaPei
+//
+//  Created by 张嵘 on 2020/4/8.
+//  Copyright © 2020 JCZ. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import "RQAppEventModuleProtocol.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface RQBaseAppEventModule : NSObject <RQAppEventModuleProtocol>
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 30 - 0
jiaPei/Vendor/RQAPPEventModuleComponent/RQBaseAppEventModule.m

@@ -0,0 +1,30 @@
+//
+//  RQBaseAppEventModule.m
+//  jiaPei
+//
+//  Created by 张嵘 on 2020/4/8.
+//  Copyright © 2020 JCZ. All rights reserved.
+//
+
+#import "RQBaseAppEventModule.h"
+#import "RQAppEventModuleManager.h"
+
+#define MODULE_LEVEL_DEFAULT 100
+
+@implementation RQBaseAppEventModule
+
+- (NSInteger)moduleLevel {
+    return MODULE_LEVEL_DEFAULT;
+}
+
+- (void)destroyModule {
+    [[RQAppEventModuleManager sharedInstance] removeModule:[self moduleID]];
+    NSLog(@"%@ destroy",NSStringFromClass([self class]));
+}
+
+- (NSString *)moduleID {
+    return NSStringFromClass([self class]);
+}
+
+@end
+