openlockPPP 10 месяцев назад
Родитель
Сommit
4b37bf34ce
100 измененных файлов с 6646 добавлено и 6592 удалено
  1. 1 2
      Podfile
  2. 71 71
      Podfile.lock
  3. 7 7
      Pods/ADSuyiSDK/ADSuyiSDK/Classes/core/ADSuyiSDK.xcframework/Info.plist
  4. BIN
      Pods/ADSuyiSDK/ADSuyiSDK/Classes/core/ADSuyiSDK.xcframework/ios-arm64_armv7/ADSuyiSDK.framework/ADSuyiSDK
  5. 1 1
      Pods/ADSuyiSDK/ADSuyiSDK/Classes/core/ADSuyiSDK.xcframework/ios-arm64_armv7/ADSuyiSDK.framework/Headers/ADSuyiSDK.h
  6. BIN
      Pods/ADSuyiSDK/ADSuyiSDK/Classes/core/ADSuyiSDK.xcframework/ios-arm64_i386_x86_64-simulator/ADSuyiSDK.framework/ADSuyiSDK
  7. 1 1
      Pods/ADSuyiSDK/ADSuyiSDK/Classes/core/ADSuyiSDK.xcframework/ios-arm64_i386_x86_64-simulator/ADSuyiSDK.framework/Headers/ADSuyiSDK.h
  8. 5 5
      Pods/Ads-CN/SDK/BUAdSDK.xcframework/Info.plist
  9. BIN
      Pods/Ads-CN/SDK/CSJAdSDK.bundle/Info.plist
  10. 1 1
      Pods/Ads-CN/SDK/CSJAdSDK.bundle/version.txt
  11. BIN
      Pods/BMKLocationKit/BMKLocationKit/BMKLocationKit.framework/BMKLocationKit
  12. 2 2
      Pods/BMKLocationKit/BMKLocationKit/BMKLocationKit.framework/Headers/BMKLocationKitVersion.h
  13. BIN
      Pods/GDTMobSDK/lib/libGDTMobSDK.a
  14. 2 0
      Pods/GKPhotoBrowser/GKPhotoBrowser/AVPlayer/GKAVPlayerManager.m
  15. 1 0
      Pods/GKPhotoBrowser/GKPhotoBrowser/Core/GKLoadingView.h
  16. 30 2
      Pods/GKPhotoBrowser/GKPhotoBrowser/Core/GKLoadingView.m
  17. 89 27
      Pods/GKPhotoBrowser/GKPhotoBrowser/Core/GKPhotoBrowser.h
  18. 113 60
      Pods/GKPhotoBrowser/GKPhotoBrowser/Core/GKPhotoBrowser.m
  19. 2 0
      Pods/GKPhotoBrowser/GKPhotoBrowser/Core/GKPhotoBrowserConfigure.h
  20. 9 10
      Pods/GKPhotoBrowser/GKPhotoBrowser/Core/GKPhotoBrowserHandler.m
  21. 2 0
      Pods/GKPhotoBrowser/GKPhotoBrowser/Core/GKPhotoGestureHandler.h
  22. 1 0
      Pods/GKPhotoBrowser/GKPhotoBrowser/Core/GKPhotoGestureHandler.m
  23. 12 5
      Pods/GKPhotoBrowser/GKPhotoBrowser/Core/GKPhotoManager.h
  24. 8 1
      Pods/GKPhotoBrowser/GKPhotoBrowser/Core/GKPhotoManager.m
  25. 5 6
      Pods/GKPhotoBrowser/GKPhotoBrowser/Core/GKPhotoRotationHandler.m
  26. 24 32
      Pods/GKPhotoBrowser/GKPhotoBrowser/Core/GKPhotoView.h
  27. 112 465
      Pods/GKPhotoBrowser/GKPhotoBrowser/Core/GKPhotoView.m
  28. 3 1
      Pods/GKPhotoBrowser/GKPhotoBrowser/Core/GKVideoPlayerProtocol.h
  29. 3 12
      Pods/GKPhotoBrowser/GKPhotoBrowser/SDWebImage/GKSDWebImageManager.m
  30. 60 24
      Pods/GKPhotoBrowser/README.md
  31. 27 1
      Pods/GKSliderView/GKSliderView/Classes/GKSliderView.m
  32. 2 0
      Pods/GKSliderView/README.md
  33. 7 7
      Pods/GTCommonSDK/GTCommonSDK.xcframework/Info.plist
  34. BIN
      Pods/GTCommonSDK/GTCommonSDK.xcframework/ios-arm64_x86_64-maccatalyst/GTCommonSDK.framework/GTCommonSDK
  35. 1 1
      Pods/GTCommonSDK/GTCommonSDK.xcframework/ios-arm64_x86_64-maccatalyst/GTCommonSDK.framework/Headers/GTCommonSDK.h
  36. 5 5
      Pods/GTSDK/GTSDK.xcframework/Info.plist
  37. BIN
      Pods/GTSDK/GTSDK.xcframework/ios-arm64_x86_64-maccatalyst/GTSDK.framework/GTSDK
  38. 1 1
      Pods/GTSDK/GTSDK.xcframework/ios-arm64_x86_64-maccatalyst/GTSDK.framework/Headers/GeTuiSdk.h
  39. 8 1
      Pods/HWPanModal/Sources/Controller/HWPanModalPresentationController.m
  40. 1 1
      Pods/HWPanModal/Sources/Presentable/HWPanModalPresentationUpdateProtocol.h
  41. 30 7
      Pods/HWPanModal/Sources/View/PanModal/HWPanModalContainerView.m
  42. 5 2
      Pods/IQKeyboardManager/README.md
  43. 13 3
      Pods/JXCategoryView/Sources/Base/JXCategoryBaseView.m
  44. 13 2
      Pods/JXCategoryView/Sources/Common/JXCategoryListContainerView.m
  45. 1 1
      Pods/JXCategoryView/Sources/RLTManager/RTLManager.h
  46. 7 0
      Pods/KSAdSDK/KSAdSDK.xcframework/ios-arm64_armv7/KSAdSDK.framework/Headers/KSAdInteractionType.h
  47. 24 0
      Pods/KSAdSDK/KSAdSDK.xcframework/ios-arm64_armv7/KSAdSDK.framework/Headers/KSAdSDK.h
  48. 0 2
      Pods/KSAdSDK/KSAdSDK.xcframework/ios-arm64_armv7/KSAdSDK.framework/Headers/KSAdSDKManager.h
  49. 9 0
      Pods/KSAdSDK/KSAdSDK.xcframework/ios-arm64_armv7/KSAdSDK.framework/Headers/KSNativeAd.h
  50. 3 0
      Pods/KSAdSDK/KSAdSDK.xcframework/ios-arm64_armv7/KSAdSDK.framework/Headers/KSSplashAdView.h
  51. BIN
      Pods/KSAdSDK/KSAdSDK.xcframework/ios-arm64_armv7/KSAdSDK.framework/Info.plist
  52. BIN
      Pods/KSAdSDK/KSAdSDK.xcframework/ios-arm64_armv7/KSAdSDK.framework/KSAdSDK
  53. BIN
      Pods/KSAdSDK/KSAdSDK.xcframework/ios-arm64_armv7/KSAdSDK.framework/KSUAdDebugToolResource.bundle/Info.plist
  54. 7 0
      Pods/KSAdSDK/KSAdSDK.xcframework/ios-arm64_x86_64-simulator/KSAdSDK.framework/Headers/KSAdInteractionType.h
  55. 24 0
      Pods/KSAdSDK/KSAdSDK.xcframework/ios-arm64_x86_64-simulator/KSAdSDK.framework/Headers/KSAdSDK.h
  56. 0 2
      Pods/KSAdSDK/KSAdSDK.xcframework/ios-arm64_x86_64-simulator/KSAdSDK.framework/Headers/KSAdSDKManager.h
  57. 9 0
      Pods/KSAdSDK/KSAdSDK.xcframework/ios-arm64_x86_64-simulator/KSAdSDK.framework/Headers/KSNativeAd.h
  58. 3 0
      Pods/KSAdSDK/KSAdSDK.xcframework/ios-arm64_x86_64-simulator/KSAdSDK.framework/Headers/KSSplashAdView.h
  59. BIN
      Pods/KSAdSDK/KSAdSDK.xcframework/ios-arm64_x86_64-simulator/KSAdSDK.framework/Info.plist
  60. BIN
      Pods/KSAdSDK/KSAdSDK.xcframework/ios-arm64_x86_64-simulator/KSAdSDK.framework/KSAdSDK
  61. BIN
      Pods/KSAdSDK/KSAdSDK.xcframework/ios-arm64_x86_64-simulator/KSAdSDK.framework/KSUAdDebugToolResource.bundle/Info.plist
  62. 4 4
      Pods/KSAdSDK/KSAdSDK.xcframework/ios-arm64_x86_64-simulator/KSAdSDK.framework/_CodeSignature/CodeResources
  63. 71 71
      Pods/Manifest.lock
  64. 5595 5583
      Pods/Pods.xcodeproj/project.pbxproj
  65. 5 10
      Pods/Pods.xcodeproj/xcuserdata/mimasigeling.xcuserdatad/xcschemes/xcschememanagement.plist
  66. 33 1
      Pods/SDWebImage/README.md
  67. 1 1
      Pods/SDWebImage/SDWebImage/Core/SDAnimatedImage.h
  68. 23 3
      Pods/SDWebImage/SDWebImage/Core/SDAnimatedImage.m
  69. 2 2
      Pods/SDWebImage/SDWebImage/Core/SDAnimatedImageView.m
  70. 1 1
      Pods/SDWebImage/SDWebImage/Core/SDImageCache.h
  71. 7 7
      Pods/SDWebImage/SDWebImage/Core/SDImageCache.m
  72. 3 3
      Pods/SDWebImage/SDWebImage/Core/SDImageCacheDefine.m
  73. 11 10
      Pods/SDWebImage/SDWebImage/Core/SDImageCoderHelper.m
  74. 6 6
      Pods/SDWebImage/SDWebImage/Core/SDImageLoader.m
  75. 1 1
      Pods/SDWebImage/SDWebImage/Core/SDWebImageDefine.h
  76. 9 6
      Pods/SDWebImage/SDWebImage/Core/SDWebImageDefine.m
  77. 2 2
      Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloader.h
  78. 2 2
      Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloader.m
  79. 2 2
      Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderOperation.h
  80. 2 2
      Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderOperation.m
  81. 10 1
      Pods/SDWebImage/SDWebImage/Core/UIImage+Metadata.h
  82. 3 1
      Pods/SDWebImage/SDWebImage/Core/UIImage+Metadata.m
  83. 14 13
      Pods/TZImagePickerController/README.md
  84. 2 2
      Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImageManager.m
  85. 1 1
      Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.h
  86. 2 2
      Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.m
  87. 11 6
      Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZPhotoPickerController.m
  88. 1 0
      Pods/Target Support Files/Ads-CN/Ads-CN.debug.xcconfig
  89. 1 0
      Pods/Target Support Files/Ads-CN/Ads-CN.release.xcconfig
  90. 1 1
      Pods/Target Support Files/GKPhotoBrowser/GKPhotoBrowser.debug.xcconfig
  91. 1 1
      Pods/Target Support Files/GKPhotoBrowser/GKPhotoBrowser.release.xcconfig
  92. 23 30
      Pods/Target Support Files/Pods-jiaPei/Pods-jiaPei-acknowledgements.markdown
  93. 29 42
      Pods/Target Support Files/Pods-jiaPei/Pods-jiaPei-acknowledgements.plist
  94. 0 2
      Pods/Target Support Files/Pods-jiaPei/Pods-jiaPei-resources.sh
  95. 0 0
      Pods/Target Support Files/Pods-jiaPei/Pods-jiaPei.debug.xcconfig
  96. 0 0
      Pods/Target Support Files/Pods-jiaPei/Pods-jiaPei.release.xcconfig
  97. 1 1
      Pods/TianmuSDK/TianmuSDK/Classes/TianmuSDK.xcframework/ios-arm64_armv7/TianmuSDK.framework/Headers/TianmuSDK.h
  98. BIN
      Pods/TianmuSDK/TianmuSDK/Classes/TianmuSDK.xcframework/ios-arm64_armv7/TianmuSDK.framework/TianmuSDK
  99. 1 1
      Pods/TianmuSDK/TianmuSDK/Classes/TianmuSDK.xcframework/ios-arm64_i386_x86_64-simulator/TianmuSDK.framework/Headers/TianmuSDK.h
  100. BIN
      Pods/TianmuSDK/TianmuSDK/Classes/TianmuSDK.xcframework/ios-arm64_i386_x86_64-simulator/TianmuSDK.framework/TianmuSDK

+ 1 - 2
Podfile

@@ -88,8 +88,7 @@ target  'jiaPei'  do
     pod 'CGXVerticalMenuView-OC'                      # 分类菜单
     pod 'HWPanModal'                                  # 弹出方式
     pod 'KTVHTTPCache'                                # 缓存
-    pod 'AlipaySDK-iOS'
-    pod 'WechatOpenSDK'
+#    pod 'WechatOpenSDK'
     pod 'OpenSSL-Universal'
     pod 'GKPhotoBrowser'
     pod 'SGQRCode'

+ 71 - 71
Podfile.lock

@@ -1,41 +1,41 @@
 PODS:
-  - Ads-CN (5.9.1.6):
-    - Ads-CN/BUAdSDK (= 5.9.1.6)
-  - Ads-CN/BUAdSDK (5.9.1.6)
+  - Ads-CN (6.1.1.0):
+    - Ads-CN/BUAdSDK (= 6.1.1.0)
+  - Ads-CN/BUAdSDK (6.1.1.0)
   - ADSuyiKit (0.7.2.01301)
   - ADSuyiLocationManager (0.2.1.01301)
   - ADSuyiNetwork (0.2.1.06291):
     - ADSuyiKit (~> 0.7.0)
-  - ADSuyiSDK (3.9.1.03142):
+  - ADSuyiSDK (3.9.1.03144):
     - ADSuyiKit (~> 0.7.2.01301)
     - ADSuyiLocationManager (~> 0.2.1.01301)
     - ADSuyiNetwork (~> 0.2.1.0)
-    - ADSuyiSDK/core (= 3.9.1.03142)
-  - ADSuyiSDK/ADSuyiSDKPlatforms/bu (3.9.1.03142):
-    - Ads-CN (= 5.9.1.6)
+    - ADSuyiSDK/core (= 3.9.1.03144)
+  - ADSuyiSDK/ADSuyiSDKPlatforms/bu (3.9.1.03144):
+    - Ads-CN (= 6.1.1.0)
     - ADSuyiKit (~> 0.7.2.01301)
     - ADSuyiLocationManager (~> 0.2.1.01301)
     - ADSuyiNetwork (~> 0.2.1.0)
     - ADSuyiSDK/core
-  - ADSuyiSDK/ADSuyiSDKPlatforms/gdt (3.9.1.03142):
+  - ADSuyiSDK/ADSuyiSDKPlatforms/gdt (3.9.1.03144):
     - ADSuyiKit (~> 0.7.2.01301)
     - ADSuyiLocationManager (~> 0.2.1.01301)
     - ADSuyiNetwork (~> 0.2.1.0)
     - ADSuyiSDK/core
-    - GDTMobSDK (= 4.14.70)
-  - ADSuyiSDK/ADSuyiSDKPlatforms/ks (3.9.1.03142):
+    - GDTMobSDK (= 4.14.76)
+  - ADSuyiSDK/ADSuyiSDKPlatforms/ks (3.9.1.03144):
     - ADSuyiKit (~> 0.7.2.01301)
     - ADSuyiLocationManager (~> 0.2.1.01301)
     - ADSuyiNetwork (~> 0.2.1.0)
     - ADSuyiSDK/core
-    - KSAdSDK (= 3.3.61)
-  - ADSuyiSDK/ADSuyiSDKPlatforms/tianmu (3.9.1.03142):
+    - KSAdSDK (= 3.3.65)
+  - ADSuyiSDK/ADSuyiSDKPlatforms/tianmu (3.9.1.03144):
     - ADSuyiKit (~> 0.7.2.01301)
     - ADSuyiLocationManager (~> 0.2.1.01301)
     - ADSuyiNetwork (~> 0.2.1.0)
     - ADSuyiSDK/core
-    - TianmuSDK (= 2.2.1.2)
-  - ADSuyiSDK/core (3.9.1.03142):
+    - TianmuSDK (= 2.2.1.3)
+  - ADSuyiSDK/core (3.9.1.03144):
     - ADSuyiKit (~> 0.7.2.01301)
     - ADSuyiLocationManager (~> 0.2.1.01301)
     - ADSuyiNetwork (~> 0.2.1.0)
@@ -54,7 +54,6 @@ PODS:
   - AFNetworking/Serialization (4.0.1)
   - AFNetworking/UIKit (4.0.1):
     - AFNetworking/NSURLSession
-  - AlipaySDK-iOS (15.8.16)
   - BaiduMapKit (6.6.2):
     - BaiduMapKit/Base (= 6.6.2)
     - BaiduMapKit/Map (= 6.6.2)
@@ -67,7 +66,7 @@ PODS:
     - BaiduMapKit/Base
   - BaiduMapKit/Utils (6.6.2):
     - BaiduMapKit/Base
-  - BMKLocationKit (2.1.1)
+  - BMKLocationKit (2.1.2)
   - Bugly (2.6.1)
   - CGXVerticalMenuView-OC (1.2.2):
     - CGXVerticalMenuView-OC/CustomCollectionView (= 1.2.2)
@@ -123,44 +122,50 @@ PODS:
     - UICKeyChainStore (~> 2.1.0)
   - FDFullscreenPopGesture (1.1)
   - FLAnimatedImage (1.0.17)
-  - FMDB (2.7.10):
-    - FMDB/standard (= 2.7.10)
-  - FMDB/standard (2.7.10)
-  - GDTMobSDK (4.14.70):
-    - GDTMobSDK/GDTMobSDK (= 4.14.70)
-  - GDTMobSDK/GDTMobSDK (4.14.70)
-  - GKPhotoBrowser (2.7.6):
-    - GKPhotoBrowser/Default (= 2.7.6)
-  - GKPhotoBrowser/AVPlayer (2.7.6):
+  - FMDB (2.7.11):
+    - FMDB/standard (= 2.7.11)
+  - FMDB/standard (2.7.11)
+  - GDTMobSDK (4.14.76):
+    - GDTMobSDK/GDTMobSDK (= 4.14.76)
+  - GDTMobSDK/GDTMobSDK (4.14.76)
+  - GKLivePhotoManager (1.0.2)
+  - GKPhotoBrowser (3.0.2):
+    - GKPhotoBrowser/Default (= 3.0.2)
+  - GKPhotoBrowser/AF (3.0.2):
+    - AFNetworking
+    - GKLivePhotoManager
+    - GKPhotoBrowser/Core
+  - GKPhotoBrowser/AVPlayer (3.0.2):
     - GKPhotoBrowser/Core
-  - GKPhotoBrowser/Core (2.7.6)
-  - GKPhotoBrowser/Default (2.7.6):
+  - GKPhotoBrowser/Core (3.0.2)
+  - GKPhotoBrowser/Default (3.0.2):
+    - GKPhotoBrowser/AF
     - GKPhotoBrowser/AVPlayer
     - GKPhotoBrowser/Progress
     - GKPhotoBrowser/SD
-  - GKPhotoBrowser/Progress (2.7.6):
+  - GKPhotoBrowser/Progress (3.0.2):
     - GKPhotoBrowser/Core
     - GKSliderView
-  - GKPhotoBrowser/SD (2.7.6):
+  - GKPhotoBrowser/SD (3.0.2):
     - GKPhotoBrowser/Core
     - SDWebImage (~> 5.0)
-  - GKSliderView (1.2.0)
-  - GTCommonSDK (3.1.2.0):
+  - GKSliderView (1.2.2)
+  - GTCommonSDK (3.1.5.0):
     - ZXSDK
-  - GTSDK (3.0.5.0):
+  - GTSDK (3.0.6.0):
     - GTCommonSDK (> 3.0.9.0)
   - HappyDNS (1.0.4)
-  - HWPanModal (0.9.8)
+  - HWPanModal (0.9.9)
   - IDMPhotoBrowser (1.10.2):
     - DACircularProgress
     - pop
     - SDWebImage
   - IJKMediaFramework (0.1.5)
-  - IQKeyboardManager (6.5.18)
+  - IQKeyboardManager (6.5.19)
   - JSONModel (1.8.0)
-  - JXCategoryView (1.6.3)
+  - JXCategoryView (1.6.8)
   - JXPagingView/Pager (2.1.3)
-  - KSAdSDK (3.3.61)
+  - KSAdSDK (3.3.65)
   - KTVCocoaHTTPServer (1.0.0):
     - CocoaAsyncSocket
   - KTVHTTPCache (2.0.1):
@@ -503,31 +508,30 @@ PODS:
   - SCLAlertView-Objective-C (1.3.0)
   - SDCycleScrollView (1.82):
     - SDWebImage (>= 5.0.0)
-  - SDWebImage (5.19.1):
-    - SDWebImage/Core (= 5.19.1)
-  - SDWebImage/Core (5.19.1)
+  - SDWebImage (5.19.4):
+    - SDWebImage/Core (= 5.19.4)
+  - SDWebImage/Core (5.19.4)
   - SDWebImageWebPCoder (0.8.3):
     - libwebp (~> 1.0)
     - SDWebImage/Core (~> 5.10)
   - SGQRCode (4.1.0)
   - SocketRocket (0.6.1)
-  - TianmuSDK (2.2.1.2):
+  - TianmuSDK (2.2.1.3):
     - ADSuyiKit (~> 0.7.2.01301)
     - ADSuyiLocationManager (~> 0.2.1.01301)
     - ADSuyiNetwork (~> 0.2.1.0)
   - TTTAttributedLabel (1.13.4)
-  - TZImagePickerController (3.8.4):
-    - TZImagePickerController/Basic (= 3.8.4)
-    - TZImagePickerController/Location (= 3.8.4)
-  - TZImagePickerController/Basic (3.8.4)
-  - TZImagePickerController/Location (3.8.4)
+  - TZImagePickerController (3.8.6):
+    - TZImagePickerController/Basic (= 3.8.6)
+    - TZImagePickerController/Location (= 3.8.6)
+  - TZImagePickerController/Basic (3.8.6)
+  - TZImagePickerController/Location (3.8.6)
   - UICKeyChainStore (2.1.2)
   - UMCCommonLog (2.0.2)
-  - UMCommon (7.4.6):
+  - UMCommon (7.4.7):
     - UMDevice
   - UMDevice (3.4.0)
   - WebViewJavascriptBridge (6.0.3)
-  - WechatOpenSDK (2.0.4)
   - XHLaunchAd (3.9.12):
     - FLAnimatedImage (~> 1.0.12)
   - YYCache (1.0.4)
@@ -560,7 +564,6 @@ DEPENDENCIES:
   - ADSuyiSDK/ADSuyiSDKPlatforms/ks
   - ADSuyiSDK/ADSuyiSDKPlatforms/tianmu
   - AFNetworking
-  - AlipaySDK-iOS
   - BaiduMapKit
   - BMKLocationKit
   - Bugly
@@ -606,7 +609,6 @@ DEPENDENCIES:
   - UMCommon
   - UMDevice
   - WebViewJavascriptBridge
-  - WechatOpenSDK
   - XHLaunchAd
   - YYImage/WebP
   - YYModel
@@ -625,7 +627,6 @@ SPEC REPOS:
     - ADSuyiNetwork
     - ADSuyiSDK
     - AFNetworking
-    - AlipaySDK-iOS
     - BaiduMapKit
     - BMKLocationKit
     - Bugly
@@ -643,6 +644,7 @@ SPEC REPOS:
     - FLAnimatedImage
     - FMDB
     - GDTMobSDK
+    - GKLivePhotoManager
     - GKPhotoBrowser
     - GKSliderView
     - GTCommonSDK
@@ -688,7 +690,6 @@ SPEC REPOS:
     - UMCommon
     - UMDevice
     - WebViewJavascriptBridge
-    - WechatOpenSDK
     - XHLaunchAd
     - YYCache
     - YYImage
@@ -708,15 +709,14 @@ CHECKOUT OPTIONS:
     :git: https://github.com/Tencent/MLeaksFinder.git
 
 SPEC CHECKSUMS:
-  Ads-CN: 3ff100f798812f564a68bddeb6a0b19fe88999c6
+  Ads-CN: 2a056c03dffbfcc51c13a237bc8c877cbf2ba8f1
   ADSuyiKit: c2eb0f56ff335a13193c13c7f5d6182fdd71bc13
   ADSuyiLocationManager: 498421794430a1554dd85beac729221487e8394b
   ADSuyiNetwork: e3cd29320932f9a6d523a561357a2f38de83189d
-  ADSuyiSDK: c1a01dd6b592376c50e8ae1ac897ff7be2d18c03
+  ADSuyiSDK: 021920393e01d8de58040cc6cb80c257f90d6b32
   AFNetworking: 3bd23d814e976cd148d7d44c3ab78017b744cd58
-  AlipaySDK-iOS: 5e6011fbd546e7db6b43c1f527d164ee63f3d7cb
   BaiduMapKit: 4d550ad25eca16aa49586c736456984125b92d8a
-  BMKLocationKit: 32a981ceb683790f732e5df3ab1f25652557a5b1
+  BMKLocationKit: 7048cb9f9e6cd21d803a71013d175fce57db7f77
   Bugly: 217ac2ce5f0f2626d43dbaa4f70764c953a26a31
   CGXVerticalMenuView-OC: 1f743edca2b085953dd64aaf154d6baa45125c38
   CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99
@@ -730,21 +730,22 @@ SPEC CHECKSUMS:
   FCUUID: bb054fc90cd7cd99320f9f6ff8e130fe607fba05
   FDFullscreenPopGesture: a8a620179e3d9c40e8e00256dcee1c1a27c6d0f0
   FLAnimatedImage: bbf914596368867157cc71b38a8ec834b3eeb32b
-  FMDB: eae540775bf7d0c87a5af926ae37af69effe5a19
-  GDTMobSDK: fb811b374943e502e5ae4e91fc7c6ef13472424e
-  GKPhotoBrowser: aa57bfcbcdba825927a22f5d7bfcb5b51a73fd0e
-  GKSliderView: 49480065d2155bbc219bde5f9136f785757ed8d4
-  GTCommonSDK: c9f2637a4dacb8ae05e18301ccdbdac8f88756c2
-  GTSDK: cc04d169c5c6cb8f8884849153eaac9e6ccfdd7c
+  FMDB: 57486c1117fd8e0e6b947b2f54c3f42bf8e57a4e
+  GDTMobSDK: 037a4e91a91d277d7864fa0f413599acecc6e8f4
+  GKLivePhotoManager: 203a3fc08563511b961c686e543d5560fa801331
+  GKPhotoBrowser: 4562b54681e118e5237631a8cffb0932ad480789
+  GKSliderView: 94fab41465f2ba543200f04bee401020beab4041
+  GTCommonSDK: 02831526860276875f9fc582d15905b7c4d937ae
+  GTSDK: b002384999146d5b86f1c9b56e20882ffbfd2796
   HappyDNS: aefbd28cdcda93cffac64013dfe3342a2f87ed0a
-  HWPanModal: 6951685ca7bdf147ff8a68e7d93d61f08a06dead
+  HWPanModal: b57a6717d3cdcd666bff44f9dd2a5be9f4d6f5d2
   IDMPhotoBrowser: 4bb459b1faffc228e92bccdf7c54ad6d6b7e8c37
   IJKMediaFramework: f1119f6324c96bc4654f3045a5beaa95ba0596c0
-  IQKeyboardManager: 67f92bb29b650c094c40bd11c0545b47bdd25c5b
+  IQKeyboardManager: c8665b3396bd0b79402b4c573eac345a31c7d485
   JSONModel: 02ab723958366a3fd27da57ea2af2113658762e9
-  JXCategoryView: 99cbbab7ed3fd2cb2484208c9f39461820d10a13
+  JXCategoryView: 262d503acea0b1278c79a1c25b7332ffaef4d518
   JXPagingView: afdd2e9af09c90160dd232b970d603cc6e7ddd0e
-  KSAdSDK: 7754afd132df893c0c7a493fa878cbee7af6ff3c
+  KSAdSDK: b7f90537041c6dbff0f1f8de52ea222e01149a3d
   KTVCocoaHTTPServer: df8d7b861e603ff8037e9b2138aca2563a6b768d
   KTVHTTPCache: 588c3eb16f6bd1e6fde1e230dabfb7bd4e490a4d
   libwebp: 1786c9f4ff8a279e4dac1e8f385004d5fc253009
@@ -766,19 +767,18 @@ SPEC CHECKSUMS:
   SAMKeychain: 483e1c9f32984d50ca961e26818a534283b4cd5c
   SCLAlertView-Objective-C: c17253cf0ce7543de3f9e4c7bd9341c1dd55c175
   SDCycleScrollView: a0d74c3384caa72bdfc81470bdbc8c14b3e1fbcf
-  SDWebImage: 40b0b4053e36c660a764958bff99eed16610acbb
+  SDWebImage: 066c47b573f408f18caa467d71deace7c0f8280d
   SDWebImageWebPCoder: bbf46e29fb8d1980a78ad3d5e9b4123c77f10ebc
   SGQRCode: 6ad664d63f38f2842503bc5087812c5a3136d924
   SocketRocket: f32cd54efbe0f095c4d7594881e52619cfe80b17
-  TianmuSDK: 7ed66176103dfaf298e0820603396a49678f336b
+  TianmuSDK: d814a2c5cef2a8f07e5c084aba528fe029509aa9
   TTTAttributedLabel: 0a2ac7b2dd726d32a070dafb01446026b11e624f
-  TZImagePickerController: f1c9f1cae6ac0e30b31aaa9698f9bf4a7cf5b84f
+  TZImagePickerController: a013c186415f6044914bb0d0dd960a884cff46ec
   UICKeyChainStore: 85db518bb1d294366d15ec9b92a416c4e670518f
   UMCCommonLog: bea707e50c85cef4b0eb47cc5c7226bb843245ca
-  UMCommon: 9399105b64e099c3c66aad21fc85ae695567a1f1
+  UMCommon: 8b4cd0423297c39bca6eea1ec896558b40e5bcf7
   UMDevice: dcdf7ec167387837559d149fbc7d793d984faf82
   WebViewJavascriptBridge: 7f5bc4d3581e672e8f32bd0f812d54bc69bb8e29
-  WechatOpenSDK: 290989072e87b79d52225a01bb4e5e58f6f88593
   XHLaunchAd: 6320f9c68732667323072fc3a5f104e40fbe9cfe
   YYCache: 8105b6638f5e849296c71f331ff83891a4942952
   YYImage: 1e1b62a9997399593e4b9c4ecfbbabbf1d3f3b54
@@ -788,6 +788,6 @@ SPEC CHECKSUMS:
   ZFPlayer: 5cf39e8d9f0c2394a014b0db4767b5b5a6bffe13
   ZXSDK: 414bed508b670437a9bdf7c75d49816b8cb7b2d4
 
-PODFILE CHECKSUM: 3290c259bb61e0c21a10cf2274d2abf844cbc917
+PODFILE CHECKSUM: dac5e05a926072932c01dfefe297d192489d3c43
 
 COCOAPODS: 1.12.1

+ 7 - 7
Pods/ADSuyiSDK/ADSuyiSDK/Classes/core/ADSuyiSDK.xcframework/Info.plist

@@ -6,32 +6,32 @@
 	<array>
 		<dict>
 			<key>LibraryIdentifier</key>
-			<string>ios-arm64_armv7</string>
+			<string>ios-arm64_i386_x86_64-simulator</string>
 			<key>LibraryPath</key>
 			<string>ADSuyiSDK.framework</string>
 			<key>SupportedArchitectures</key>
 			<array>
 				<string>arm64</string>
-				<string>armv7</string>
+				<string>i386</string>
+				<string>x86_64</string>
 			</array>
 			<key>SupportedPlatform</key>
 			<string>ios</string>
+			<key>SupportedPlatformVariant</key>
+			<string>simulator</string>
 		</dict>
 		<dict>
 			<key>LibraryIdentifier</key>
-			<string>ios-arm64_i386_x86_64-simulator</string>
+			<string>ios-arm64_armv7</string>
 			<key>LibraryPath</key>
 			<string>ADSuyiSDK.framework</string>
 			<key>SupportedArchitectures</key>
 			<array>
 				<string>arm64</string>
-				<string>i386</string>
-				<string>x86_64</string>
+				<string>armv7</string>
 			</array>
 			<key>SupportedPlatform</key>
 			<string>ios</string>
-			<key>SupportedPlatformVariant</key>
-			<string>simulator</string>
 		</dict>
 	</array>
 	<key>CFBundlePackageType</key>

BIN
Pods/ADSuyiSDK/ADSuyiSDK/Classes/core/ADSuyiSDK.xcframework/ios-arm64_armv7/ADSuyiSDK.framework/ADSuyiSDK


+ 1 - 1
Pods/ADSuyiSDK/ADSuyiSDK/Classes/core/ADSuyiSDK.xcframework/ios-arm64_armv7/ADSuyiSDK.framework/Headers/ADSuyiSDK.h

@@ -1,7 +1,7 @@
 //
 //  ADSuyiSDK.h
 //  ADSuyiSDK
-//  3.9.1.03142
+//  3.9.1.03144
 //  Created by 陈坤 on 2020/3/24.
 //  Updated by suancai on 2024/03/14 09:17.
 //

BIN
Pods/ADSuyiSDK/ADSuyiSDK/Classes/core/ADSuyiSDK.xcframework/ios-arm64_i386_x86_64-simulator/ADSuyiSDK.framework/ADSuyiSDK


+ 1 - 1
Pods/ADSuyiSDK/ADSuyiSDK/Classes/core/ADSuyiSDK.xcframework/ios-arm64_i386_x86_64-simulator/ADSuyiSDK.framework/Headers/ADSuyiSDK.h

@@ -1,7 +1,7 @@
 //
 //  ADSuyiSDK.h
 //  ADSuyiSDK
-//  3.9.1.03142
+//  3.9.1.03144
 //  Created by 陈坤 on 2020/3/24.
 //  Updated by suancai on 2024/03/14 09:17.
 //

+ 5 - 5
Pods/Ads-CN/SDK/BUAdSDK.xcframework/Info.plist

@@ -6,30 +6,30 @@
 	<array>
 		<dict>
 			<key>LibraryIdentifier</key>
-			<string>ios-arm64_x86_64-simulator</string>
+			<string>ios-arm64</string>
 			<key>LibraryPath</key>
 			<string>BUAdSDK.framework</string>
 			<key>SupportedArchitectures</key>
 			<array>
 				<string>arm64</string>
-				<string>x86_64</string>
 			</array>
 			<key>SupportedPlatform</key>
 			<string>ios</string>
-			<key>SupportedPlatformVariant</key>
-			<string>simulator</string>
 		</dict>
 		<dict>
 			<key>LibraryIdentifier</key>
-			<string>ios-arm64</string>
+			<string>ios-arm64_x86_64-simulator</string>
 			<key>LibraryPath</key>
 			<string>BUAdSDK.framework</string>
 			<key>SupportedArchitectures</key>
 			<array>
 				<string>arm64</string>
+				<string>x86_64</string>
 			</array>
 			<key>SupportedPlatform</key>
 			<string>ios</string>
+			<key>SupportedPlatformVariant</key>
+			<string>simulator</string>
 		</dict>
 	</array>
 	<key>CFBundlePackageType</key>

BIN
Pods/Ads-CN/SDK/CSJAdSDK.bundle/Info.plist


+ 1 - 1
Pods/Ads-CN/SDK/CSJAdSDK.bundle/version.txt

@@ -1 +1 @@
-5.9.1.6
+6.1.1.0

BIN
Pods/BMKLocationKit/BMKLocationKit/BMKLocationKit.framework/BMKLocationKit


+ 2 - 2
Pods/BMKLocationKit/BMKLocationKit/BMKLocationKit.framework/Headers/BMKLocationKitVersion.h

@@ -13,14 +13,14 @@
 
 /**
  *获取当前定位sdk 的版本号
- *当前定位sdk版本 : 2.1.1
+ *当前定位sdk版本 : 2.1.2
  *@return  返回当前定位sdk 的版本号
  */
 UIKIT_EXTERN NSString* BMKLocationKitVersion();
 
 /**
  *获取当前定位sdk 的float版本号
- *当前定位sdk版本 : 2.11
+ *当前定位sdk版本 : 2.12
  *@return  返回当前定位sdk 的float版本号
  */
 UIKIT_EXTERN float BMKLocationKitFloatVersion();

BIN
Pods/GDTMobSDK/lib/libGDTMobSDK.a


+ 2 - 0
Pods/GKPhotoBrowser/GKPhotoBrowser/AVPlayer/GKAVPlayerManager.m

@@ -52,6 +52,7 @@
 @synthesize playerStatusChange = _playerStatusChange;
 @synthesize playerPlayTimeChange = _playerPlayTimeChange;
 @synthesize playerGetVideoSize = _playerGetVideoSize;
+@synthesize error = _error;
 
 - (void)initPlayer {
     if (self.player) [self gk_stop];
@@ -211,6 +212,7 @@
                     }
                 } break;
                 case AVPlayerItemStatusFailed: {
+                    self.error = self.player.currentItem.error;
                     self.status = GKVideoPlayerStatusFailed;
                 } break;
                 default:

+ 1 - 0
Pods/GKPhotoBrowser/GKPhotoBrowser/Core/GKLoadingView.h

@@ -13,6 +13,7 @@ typedef NS_ENUM(NSUInteger, GKLoadingStyle) {
     GKLoadingStyleIndeterminate,      // 不明确的加载方式
     GKLoadingStyleIndeterminateMask,  // 不明确的加载方式带阴影
     GKLoadingStyleDeterminate,        // 明确的加载方式--进度条
+    GKLoadingStyleDeterminateSector,  // 明确的加载方式--扇形进度
     GKLoadingStyleCustom              // 自定义
 };
 

+ 30 - 2
Pods/GKPhotoBrowser/GKPhotoBrowser/Core/GKLoadingView.m

@@ -162,7 +162,9 @@
             case GKLoadingStyleDeterminate:
                 [self setupDeterminateAnim:_animatedLayer];
                 break;
-                
+            case GKLoadingStyleDeterminateSector:
+                [self setupDeterminateFullAnim:_animatedLayer];
+                break;
             default:
                 break;
         }
@@ -260,6 +262,24 @@
     layer.strokeEnd = 0.0f;
 }
 
+- (void)setupDeterminateFullAnim:(CAShapeLayer *)layer {
+    CGPoint arcCenter = [self layerCenter];
+    
+    layer.anchorPoint = CGPointMake(0.5, 0.5);
+    layer.fillColor = UIColor.clearColor.CGColor;
+    
+    CGFloat radius = self.radius - 3;
+    layer.lineWidth = radius;
+    layer.strokeStart = 0;
+    layer.strokeEnd = 0;
+    layer.lineCap = kCALineCapButt;
+    layer.lineJoin = kCALineJoinMiter;
+    
+    CGRect pathRect = CGRectMake((arcCenter.x * 2 - radius)/2, (arcCenter.y * 2 - radius)/2, radius, radius);
+    UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:pathRect cornerRadius:radius];
+    layer.path = path.CGPath;
+}
+
 - (void)setFrame:(CGRect)frame {
     if (!CGRectEqualToRect(frame, super.frame)) {
         [super setFrame:frame];
@@ -269,7 +289,9 @@
 - (void)setLineWidth:(CGFloat)lineWidth {
     _lineWidth = lineWidth;
     
-    self.animatedLayer.lineWidth   = lineWidth;
+    if (self.loadingStyle != GKLoadingStyleDeterminateSector) {
+        self.animatedLayer.lineWidth   = lineWidth;
+    }
     self.backgroundLayer.lineWidth = lineWidth;
     
     [self layoutIfNeeded];
@@ -304,6 +326,10 @@
 - (void)setProgress:(CGFloat)progress {
     _progress = progress;
     
+    if (progress) {
+        self.backgroundLayer.hidden = NO;
+    }
+    
     [CATransaction begin];
     [CATransaction setDisableActions:YES];
     self.animatedLayer.strokeEnd = progress;
@@ -393,6 +419,8 @@
         
         animationGroup.animations = @[strokeStartAnimation, strokeEndAnimation];
         [self.animatedLayer addAnimation:animationGroup forKey:@"progress"];
+    }else if (self.loadingStyle == GKLoadingStyleDeterminateSector) {
+        self.backgroundLayer.hidden = YES;
     }
 }
 

+ 89 - 27
Pods/GKPhotoBrowser/GKPhotoBrowser/Core/GKPhotoBrowser.h

@@ -8,7 +8,38 @@
 
 #import <UIKit/UIKit.h>
 #import "GKPhotoView.h"
-#import "GKProgressViewProtocol.h"
+
+#if __has_include(<GKPhotoBrowser/GKPhotoBrowser-Swift.h>)
+#import <GKPhotoBrowser/GKPhotoBrowser-Swift.h>
+#endif
+
+#if __has_include(<GKPhotoBrowser/GKSDWebImageManager.h>)
+#import <GKPhotoBrowser/GKSDWebImageManager.h>
+#endif
+
+#if __has_include(<GKPhotoBrowser/GKYYWebImageManager.h>)
+#import <GKPhotoBrowser/GKYYWebImageManager.h>
+#endif
+
+#if __has_include(<GKPhotoBrowser/GKAVPlayerManager.h>)
+#import <GKPhotoBrowser/GKAVPlayerManager.h>
+#endif
+
+#if __has_include(<GKPhotoBrowser/GKZFPlayerManager.h>)
+#import <GKPhotoBrowser/GKZFPlayerManager.h>
+#endif
+
+#if __has_include(<GKPhotoBrowser/GKIJKPlayerManager.h>)
+#import <GKPhotoBrowser/GKIJKPlayerManager.h>
+#endif
+
+#if __has_include(<GKPhotoBrowser/GKAFLivePhotoManager.h>)
+#import <GKPhotoBrowser/GKAFLivePhotoManager.h>
+#endif
+
+#if __has_include(<GKPhotoBrowser/GKProgressView.h>)
+#import <GKPhotoBrowser/GKProgressView.h>
+#endif
 
 NS_ASSUME_NONNULL_BEGIN
 
@@ -66,18 +97,23 @@ typedef void(^layoutBlock)(GKPhotoBrowser *photoBrowser, CGRect superFrame);
 // browser加载失败自定义弹窗
 - (void)photoBrowser:(GKPhotoBrowser *)browser loadFailedAtIndex:(NSInteger)index error:(NSError *)error;
 
-// 自定义单个图片的加载失败文字,优先级高于failureText
+// 自定义单个图片或视频的加载失败文字,优先级高于failureText
 - (NSString *)photoBrowser:(GKPhotoBrowser *)browser failedTextAtIndex:(NSInteger)index;
 
-// 自定义单个图片的加载失败图片,优先级高于failureImage
+// 自定义单个图片或视频的加载失败图片,优先级高于failureImage
 - (UIImage *)photoBrowser:(GKPhotoBrowser *)browser failedImageAtIndex:(NSInteger)index;
 
+// 视频相关
 // 视频播放状态回调
 - (void)photoBrowser:(GKPhotoBrowser *)browser videoStateChangeWithPhotoView:(GKPhotoView *)photoView status:(GKVideoPlayerStatus)status;
 
 // 视频播放进度回调
 - (void)photoBrowser:(GKPhotoBrowser *)browser videoTimeChangeWithPhotoView:(GKPhotoView *)photoView currentTime:(NSTimeInterval)currentTime totalTime:(NSTimeInterval)totalTime;
 
+// 视频加载回调,用于自定义加载方式
+// isStart: 是否开始加载  success:加载是否成功
+- (void)photoBrowser:(GKPhotoBrowser *)browser videoLoadStart:(BOOL)isStart success:(BOOL)success;
+
 // browser UIScrollViewDelegate
 - (void)photoBrowser:(GKPhotoBrowser *)browser scrollViewWillBeginDragging:(UIScrollView *)scrollView;
 - (void)photoBrowser:(GKPhotoBrowser *)browser scrollViewDidScroll:(UIScrollView *)scrollView;
@@ -108,19 +144,16 @@ typedef void(^layoutBlock)(GKPhotoBrowser *photoBrowser, CGRect superFrame);
 @property (nonatomic, assign, readonly) BOOL          isLandscape;
 /** 当前设备的方向 */
 @property (nonatomic, assign, readonly) UIDeviceOrientation currentOrientation;
-/** 视频播放器 */
-@property (nonatomic, strong, readonly) id<GKVideoPlayerProtocol> player;
-/** 视频进度试图 */
-@property (nonatomic, weak, readonly, nullable) UIView *progressView;
-/** 显示方式 */
+
+/** 显示方式,默认GKPhotoBrowserShowStyleZoom */
 @property (nonatomic, assign) GKPhotoBrowserShowStyle showStyle;
-/** 隐藏方式 */
+/** 隐藏方式,默认GKPhotoBrowserHideStyleZoom */
 @property (nonatomic, assign) GKPhotoBrowserHideStyle hideStyle;
-/** 图片加载方式 */
+/** 图片加载方式,默认GKPhotoBrowserLoadStyleIndeterminate */
 @property (nonatomic, assign) GKPhotoBrowserLoadStyle loadStyle;
-/** 原图加载加载方式 */
+/** 原图加载加载方式,默认GKPhotoBrowserLoadStyleIndeterminate */
 @property (nonatomic, assign) GKPhotoBrowserLoadStyle originLoadStyle;
-/** 图片加载失败显示方式 */
+/** 图片加载失败显示方式,默认GKPhotoBrowserFailStyleOnlyText */
 @property (nonatomic, assign) GKPhotoBrowserFailStyle failStyle;
 /** 代理 */
 @property (nonatomic, weak) id<GKPhotoBrowserDelegate> delegate;
@@ -171,9 +204,6 @@ typedef void(^layoutBlock)(GKPhotoBrowser *photoBrowser, CGRect superFrame);
 /// 是否隐藏saveBtn,默认YES
 @property (nonatomic, assign) BOOL hidesSavedBtn;
 
-/// 是否隐藏进度条,默认NO,内容为视频时有效
-@property (nonatomic, assign) BOOL hidesVideoSlider;
-
 /// 图片最大放大倍数
 @property (nonatomic, assign) CGFloat maxZoomScale;
 
@@ -202,22 +232,14 @@ typedef void(^layoutBlock)(GKPhotoBrowser *photoBrowser, CGRect superFrame);
 @property (nonatomic, copy) NSString    *failureText;
 @property (nonatomic, strong) UIImage   *failureImage;
 
+/// 视频播放失败显示的文字或图片
+@property (nonatomic, copy) NSString *videoFailureText;
+@property (nonatomic, strong) UIImage *videoFailureImage;
+
 /// 是否添加导航控制器,默认NO,添加后会默认隐藏导航栏
 /// showStyle = GKPhotoBrowserShowStylePush时无效
 @property (nonatomic, assign, getter=isAddNavigationController) BOOL addNavigationController;
 
-/// 视频暂停或停止时是否显示播放图标,默认YES
-@property (nonatomic, assign) BOOL showPlayImage;
-
-/// 视频暂停或停止时显示的播放图
-@property (nonatomic, strong) UIImage *videoPlayImage;
-
-/// 视频播放结束后是否自动重播,默认YES
-@property (nonatomic, assign) BOOL isVideoReplay;
-
-/// 拖拽时是否暂停播放,默认YES
-@property (nonatomic, assign) BOOL isVideoPausedWhenDragged;
-
 /// 浏览器消失时是否清除缓存,默认NO
 /// 如果设置为YES,则结束显示时会调用GKWebImageProtocol协议的clearMemory方法
 @property (nonatomic, assign) BOOL isClearMemoryWhenDisappear;
@@ -226,6 +248,42 @@ typedef void(^layoutBlock)(GKPhotoBrowser *photoBrowser, CGRect superFrame);
 /// 如果设置为YES,则视图放入重用池时会调用GKWebImageProtocol协议的clearMemoryForURL:方法
 @property (nonatomic, assign) BOOL isClearMemoryWhenViewReuse;
 
+#pragma mark - 视频相关
+/** 视频播放处理 */
+@property (nonatomic, strong, readonly) id<GKVideoPlayerProtocol> player;
+/** 视频进度试图 */
+@property (nonatomic, weak, readonly, nullable) UIView *progressView;
+/// 是否隐藏进度视频进度视图,默认NO,内容为视频时有效
+@property (nonatomic, assign) BOOL hidesVideoSlider;
+/** 视频加载方式,默认GKPhotoBrowserLoadStyleIndeterminate */
+@property (nonatomic, assign) GKPhotoBrowserLoadStyle videoLoadStyle;
+/** 视频播放失败显示方式,默认GKPhotoBrowserFailStyleOnlyText */
+@property (nonatomic, assign) GKPhotoBrowserFailStyle videoFailStyle;
+/// 视频暂停或停止时是否显示播放图标,默认YES
+@property (nonatomic, assign) BOOL showPlayImage;
+/// 视频暂停或停止时显示的播放图
+@property (nonatomic, strong) UIImage *videoPlayImage;
+/// 视频播放结束后是否自动重播,默认YES
+@property (nonatomic, assign) BOOL isVideoReplay;
+/// 拖拽消失时是否暂停播放,默认YES
+@property (nonatomic, assign) BOOL isVideoPausedWhenDragged;
+/// 左右滑动开始时是否暂停播放视频,默认NO
+@property (nonatomic, assign) BOOL isVideoPausedWhenScrollBegan;
+
+#pragma mark - livePhoto相关
+/** livePhoto处理 */
+@property (nonatomic, strong, readonly) id<GKLivePhotoProtocol> livePhoto;
+/** livePhoto加载方式,默认GKPhotoBrowserLoadStyleDeterminateSector*/
+@property (nonatomic, assign) GKPhotoBrowserLoadStyle liveLoadStyle;
+/// 拖拽消失时是否暂停播放livePhoto,默认YES
+@property (nonatomic, assign) BOOL isLivePhotoPausedWhenDragged;
+/// 左右滑动开始时是否暂停播放livePhoto,默认NO
+@property (nonatomic, assign) BOOL isLivePhotoPausedWhenScrollBegan;
+// 是否显示livePhoto标识,默认NO
+@property (nonatomic, assign) BOOL isShowLivePhotoMark;
+// 是否清理livePhoto缓存,默认YES
+@property (nonatomic, assign) BOOL isClearMemoryForLivePhoto;
+
 // 初始化方法
 /// 创建图片浏览器
 ///   - photos: 包含GKPhoto对象的数组
@@ -245,6 +303,10 @@ typedef void(^layoutBlock)(GKPhotoBrowser *photoBrowser, CGRect superFrame);
 /// @param protocol 需实现GKVideoPlayerProtocol协议
 - (void)setupVideoPlayerProtocol:(id<GKVideoPlayerProtocol>)protocol;
 
+/// 自定义livePhoto加载处理类
+/// @param protocol 需实现GKLivePhotoProtocol协议
+- (void)setupLivePhotoProtocol:(id<GKLivePhotoProtocol>)protocol;
+
 /// 自定义视频播放进度条
 /// @param protocol 需实现GKProgressViewProtocol协议
 - (void)setupVideoProgressProtocol:(id<GKProgressViewProtocol>)protocol;

+ 113 - 60
Pods/GKPhotoBrowser/GKPhotoBrowser/Core/GKPhotoBrowser.m

@@ -9,6 +9,7 @@
 #import "GKPhotoBrowser.h"
 #import "GKPhotoGestureHandler.h"
 #import "GKPhotoRotationHandler.h"
+#import "GKPhotoView+Image.h"
 
 #if __has_include(<GKYYWebImageManager.h>)
 #import "GKYYWebImageManager.h"
@@ -25,6 +26,7 @@
 static Class imageManagerClass = nil;
 static Class videoManagerClass = nil;
 static Class progressClass = nil;
+static Class livePhotoClass = nil;
 
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wdeprecated-declarations"
@@ -65,6 +67,9 @@ static Class progressClass = nil;
 // 进度条
 @property (nonatomic, strong) id<GKProgressViewProtocol> progress;
 
+// livePhoto
+@property (nonatomic, strong) id<GKLivePhotoProtocol> livePhoto;
+
 @end
 
 @implementation GKPhotoBrowser
@@ -75,43 +80,60 @@ static Class progressClass = nil;
 
 - (instancetype)initWithPhotos:(NSArray<GKPhoto *> *)photos currentIndex:(NSInteger)currentIndex {
     if (self = [super init]) {
-        self.photos       = photos;
+        self.photos = photos;
         self.currentIndex = currentIndex;
-        self.isStatusBarShow         = NO;
-        self.isHideSourceView        = YES;
-        self.statusBarStyle          = UIStatusBarStyleLightContent;
-        self.isFullWidthForLandScape = YES;
-        self.maxZoomScale            = kMaxZoomScale;
-        self.doubleZoomScale         = self.maxZoomScale;
-        self.animDuration            = kAnimationDuration;
-        self.photoViewPadding        = kPhotoViewPadding;
-        self.hidesSavedBtn           = YES;
-        self.showPlayImage           = YES;
-        self.isVideoReplay           = YES;
-        self.isVideoPausedWhenDragged = YES;
-        
-        _visiblePhotoViews  = [NSMutableArray new];
-        _reusablePhotoViews = [NSMutableSet new];
-        
-        imageManagerClass = NSClassFromString(@"GKSDWebImageManager");
-        if (!imageManagerClass) {
-            imageManagerClass = NSClassFromString(@"GKYYWebImageManager");
-        }
-        if (imageManagerClass) {
-            [self setupWebImageProtocol:[imageManagerClass new]];
-        }
-        videoManagerClass = NSClassFromString(@"GKAVPlayerManager");
-        if (videoManagerClass) {
-            [self setupVideoPlayerProtocol:[videoManagerClass new]];
-        }
-        progressClass = NSClassFromString(@"GKProgressView");
-        if (progressClass) {
-            [self setupVideoProgressProtocol:[progressClass new]];
-        }
+        [self initialize];
     }
     return self;
 }
 
+- (void)initialize {
+    self.isStatusBarShow         = NO;
+    self.isHideSourceView        = YES;
+    self.statusBarStyle          = UIStatusBarStyleLightContent;
+    self.isFullWidthForLandScape = YES;
+    self.maxZoomScale            = kMaxZoomScale;
+    self.doubleZoomScale         = self.maxZoomScale;
+    self.animDuration            = kAnimationDuration;
+    self.photoViewPadding        = kPhotoViewPadding;
+    self.hidesSavedBtn           = YES;
+    self.showPlayImage           = YES;
+    self.isVideoReplay           = YES;
+    self.isVideoPausedWhenDragged = YES;
+    self.isLivePhotoPausedWhenDragged = YES;
+    self.isClearMemoryForLivePhoto = YES;
+    self.showStyle = GKPhotoBrowserShowStyleZoom;
+    self.hideStyle = GKPhotoBrowserHideStyleZoom;
+    self.loadStyle = GKPhotoBrowserLoadStyleIndeterminate;
+    self.originLoadStyle = GKPhotoBrowserLoadStyleIndeterminate;
+    self.videoLoadStyle = GKPhotoBrowserLoadStyleIndeterminate;
+    self.failStyle = GKPhotoBrowserFailStyleOnlyText;
+    self.liveLoadStyle = GKPhotoBrowserLoadStyleDeterminateSector;
+    
+    _visiblePhotoViews  = [NSMutableArray new];
+    _reusablePhotoViews = [NSMutableSet new];
+    
+    imageManagerClass = NSClassFromString(@"GKSDWebImageManager");
+    if (!imageManagerClass) {
+        imageManagerClass = NSClassFromString(@"GKYYWebImageManager");
+    }
+    if (imageManagerClass) {
+        [self setupWebImageProtocol:[imageManagerClass new]];
+    }
+    videoManagerClass = NSClassFromString(@"GKAVPlayerManager");
+    if (videoManagerClass) {
+        [self setupVideoPlayerProtocol:[videoManagerClass new]];
+    }
+    progressClass = NSClassFromString(@"GKProgressView");
+    if (progressClass) {
+        [self setupVideoProgressProtocol:[progressClass new]];
+    }
+    livePhotoClass = NSClassFromString(@"GKAFLivePhotoManager");
+    if (livePhotoClass) {
+        [self setupLivePhotoProtocol:[livePhotoClass new]];
+    }
+}
+
 - (void)setupWebImageProtocol:(id<GKWebImageProtocol>)protocol {
     protocol.browser = self;
     self.imageProtocol = protocol;
@@ -143,7 +165,8 @@ static Class progressClass = nil;
                 }
             } break;
             case GKVideoPlayerStatusFailed: {
-                [self.curPhotoView showFailure];
+                [self.curPhotoView showFailure:self.player.error];
+                self.progressView.hidden = YES;
             } break;
             default: break;
         }
@@ -202,6 +225,21 @@ static Class progressClass = nil;
     };
 }
 
+- (void)setupLivePhotoProtocol:(id<GKLivePhotoProtocol>)protocol {
+    protocol.browser = self;
+    self.livePhoto = protocol;
+    __weak __typeof(self) weakSelf = self;
+    self.livePhoto.liveStatusChanged = ^(id<GKLivePhotoProtocol> mgr, GKLivePlayStatus status) {
+        __strong __typeof(weakSelf) self = weakSelf;
+        if (!self.isShowLivePhotoMark) return;
+        if (status == GKLivePlayStatusBegin) {
+            self.curPhotoView.liveMarkView.hidden = YES;
+        }else {
+            self.curPhotoView.liveMarkView.hidden = NO;
+        }
+    };
+}
+
 - (void)setupVideoProgressProtocol:(id<GKProgressViewProtocol>)protocol {
     protocol.browser = self;
     self.progress = protocol;
@@ -216,7 +254,6 @@ static Class progressClass = nil;
 
 - (void)dealloc {
     [self.rotationHandler delDeviceOrientationObserver];
-    [self.player gk_stop];
 }
 
 - (void)loadView {
@@ -275,6 +312,13 @@ static Class progressClass = nil;
             [self.imageProtocol clearMemory];
         }
     }
+    // 手动释放,防止某些情况下释放不了
+    self.imageProtocol = nil;
+    [self.player gk_stop];
+    self.player = nil;
+    [self.livePhoto gk_stop];
+    self.livePhoto = nil;
+    self.progress = nil;
 }
 
 - (void)didReceiveMemoryWarning {
@@ -597,23 +641,10 @@ static Class progressClass = nil;
         
         GKPhotoView *photoView = [self photoViewForIndex:i];
         if (photoView == nil) {
-            photoView                 = [self dequeueReusablePhotoView];
-            photoView.delegate        = self;
-            photoView.player          = self.player;
-            photoView.loadStyle       = self.loadStyle;
-            photoView.originLoadStyle = self.originLoadStyle;
-            photoView.failStyle       = self.failStyle;
-            photoView.isFollowSystemRotation = self.isFollowSystemRotation;
-            photoView.isFullWidthForLandScape = self.isFullWidthForLandScape;
-            photoView.isAdaptiveSafeArea = self.isAdaptiveSafeArea;
-            photoView.failureText     = self.failureText;
-            photoView.failureImage    = self.failureImage;
-            photoView.maxZoomScale    = self.maxZoomScale;
+            photoView = [self dequeueReusablePhotoView];
+            photoView.delegate = self;
+            photoView.browser = self;
             photoView.doubleZoomScale = self.doubleZoomScale;
-            photoView.showPlayImage   = self.showPlayImage;
-            photoView.videoPlayImage  = self.videoPlayImage;
-            photoView.isVideoPausedWhenDragged = self.isVideoPausedWhenDragged;
-            photoView.isClearMemoryWhenViewReuse = self.isClearMemoryWhenViewReuse;
             
             CGRect frame = self.photoScrollView.bounds;
             
@@ -633,7 +664,7 @@ static Class progressClass = nil;
             [photoView resetFrame];
         }
         
-        if (photoView.photo == nil && self.handler.isShow) {
+        if (photoView.photo == nil && self.handler.isShow && !self.gestureHandler.isClickDismiss) {
             [photoView setupPhoto:self.photos[i]];
         }
         if ([self.delegate respondsToSelector:@selector(photoBrowser:reuseAtIndex:photoView:)]) {
@@ -725,16 +756,29 @@ static Class progressClass = nil;
     if ([self.delegate respondsToSelector:@selector(photoBrowser:loadFailedAtIndex:error:)]) {
         [self.delegate photoBrowser:self loadFailedAtIndex:index error:error];
     }
-    NSString *failText = self.failureText ?: @"图片加载失败";
-    if ([self.delegate respondsToSelector:@selector(photoBrowser:failedTextAtIndex:)]) {
-        failText = [self.delegate photoBrowser:self failedTextAtIndex:index];
-    }
-    UIImage *failImage = self.failureImage ?: GKPhotoBrowserImage(@"loading_error");
-    if ([self.delegate respondsToSelector:@selector(photoBrowser:failedImageAtIndex:)]) {
-        failImage = [self.delegate photoBrowser:self failedImageAtIndex:index];
+    if (photoView.photo.isVideo) {
+        NSString *failText = self.failureText ?: @"视频播放失败";
+        if ([self.delegate respondsToSelector:@selector(photoBrowser:failedTextAtIndex:)]) {
+            failText = [self.delegate photoBrowser:self failedTextAtIndex:index];
+        }
+        UIImage *failImage = self.failureImage ?: GKPhotoBrowserImage(@"loading_error");
+        if ([self.delegate respondsToSelector:@selector(photoBrowser:failedImageAtIndex:)]) {
+            failImage = [self.delegate photoBrowser:self failedImageAtIndex:index];
+        }
+        photoView.videoLoadingView.failText = failText;
+        photoView.videoLoadingView.failImage = failImage;
+    }else {
+        NSString *failText = self.failureText ?: @"图片加载失败";
+        if ([self.delegate respondsToSelector:@selector(photoBrowser:failedTextAtIndex:)]) {
+            failText = [self.delegate photoBrowser:self failedTextAtIndex:index];
+        }
+        UIImage *failImage = self.failureImage ?: GKPhotoBrowserImage(@"loading_error");
+        if ([self.delegate respondsToSelector:@selector(photoBrowser:failedImageAtIndex:)]) {
+            failImage = [self.delegate photoBrowser:self failedImageAtIndex:index];
+        }
+        photoView.loadingView.failText = failText;
+        photoView.loadingView.failImage = failImage;
     }
-    photoView.loadingView.failText = failText;
-    photoView.loadingView.failImage = failImage;
 }
 
 - (void)photoView:(GKPhotoView *)photoView loadProgress:(float)progress isOriginImage:(BOOL)isOriginImage {
@@ -746,6 +790,15 @@ static Class progressClass = nil;
     }
 }
 
+- (void)photoView:(GKPhotoView *)photoView loadStart:(BOOL)isStart success:(BOOL)success {
+    GKPhotoView *curPhotoView = self.curPhotoView;
+    if (curPhotoView.tag == photoView.tag) {
+        if ([self.delegate respondsToSelector:@selector(photoBrowser:videoLoadStart:success:)]) {
+            [self.delegate photoBrowser:self videoLoadStart:isStart success:success];
+        }
+    }
+}
+
 #pragma mark - GKPhotoGestureDelegate
 - (void)browserWillDisappear {
     [self.curPhotoView willDismissDisappear];

+ 2 - 0
Pods/GKPhotoBrowser/GKPhotoBrowser/Core/GKPhotoBrowserConfigure.h

@@ -34,6 +34,7 @@ typedef NS_ENUM(NSUInteger, GKPhotoBrowserShowStyle) {
 
 // 图片浏览器的隐藏方式
 typedef NS_ENUM(NSUInteger, GKPhotoBrowserHideStyle) {
+    GKPhotoBrowserHideStyleNone,           // 无动画
     GKPhotoBrowserHideStyleZoom,           // 点击缩放消失
     GKPhotoBrowserHideStyleZoomScale,      // 点击缩放消失、滑动缩小后消失
     GKPhotoBrowserHideStyleZoomSlide       // 点击缩放消失、滑动平移后消失
@@ -44,6 +45,7 @@ typedef NS_ENUM(NSUInteger, GKPhotoBrowserLoadStyle) {
     GKPhotoBrowserLoadStyleIndeterminate,        // 不明确的加载方式
     GKPhotoBrowserLoadStyleIndeterminateMask,    // 不明确的加载方式带阴影
     GKPhotoBrowserLoadStyleDeterminate,          // 明确的加载方式带进度条
+    GKPhotoBrowserLoadStyleDeterminateSector,    // 明确的加载方式扇形进度
     GKPhotoBrowserLoadStyleCustom                // 自定义加载方式
 };
 

+ 9 - 10
Pods/GKPhotoBrowser/GKPhotoBrowser/Core/GKPhotoBrowserHandler.m

@@ -33,8 +33,7 @@
 
 - (void)showFromVC:(UIViewController *)vc {
     if (self.browser.showStyle == GKPhotoBrowserShowStylePush) {
-        UIImage *image = [self getCaptureWithView:vc.view.window];
-        self.captureImage = image;
+        self.captureImage = [self getCaptureWithView:vc.view.window];
         self.browser.hidesBottomBarWhenPushed = YES;
         [vc.navigationController pushViewController:self.browser animated:YES];
     }else {
@@ -140,9 +139,6 @@
 
 #pragma mark - BrowserDismiss
 - (void)browserDismiss {
-    GKPhotoView *photoView = self.browser.curPhotoView;
-    photoView.isLayoutSubViews = YES;
-    
     if (!self.browser.isFollowSystemRotation) {
         // 状态栏恢复到竖屏
         if (@available(iOS 13.0, *)) {} else {
@@ -157,11 +153,14 @@
     }else {
         // 显示状态栏
         self.browser.isStatusBarShow = YES;
-        
-        // 防止返回时跳动
-        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
-            [self recoverAnimation];
-        });
+        if (self.browser.hideStyle == GKPhotoBrowserHideStyleNone) {
+            [self browserDismissNone];
+        }else {
+            // 防止返回时跳动
+            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+                [self recoverAnimation];
+            });
+        }
     }
 }
 

+ 2 - 0
Pods/GKPhotoBrowser/GKPhotoBrowser/Core/GKPhotoGestureHandler.h

@@ -44,6 +44,8 @@ typedef NS_ENUM(NSUInteger, GKPanGestureRecognizerDirection) {
 @property (nonatomic, strong) UILongPressGestureRecognizer *longPressGesture;
 @property (nonatomic, strong) GKPanGestureRecognizer *panGesture;
 
+@property (nonatomic, assign) BOOL isClickDismiss;
+
 - (void)addGestureRecognizer;
 - (void)addPanGesture:(BOOL)isFirst;
 - (void)removePanGesture;

+ 1 - 0
Pods/GKPhotoBrowser/GKPhotoBrowser/Core/GKPhotoGestureHandler.m

@@ -151,6 +151,7 @@ int const static kDirectionPanThreshold = 5;
     
     // 禁止默认单击事件
     if (self.browser.isSingleTapDisabled) return;
+    self.isClickDismiss = YES;
     [self browserDismiss];
 }
 

+ 12 - 5
Pods/GKPhotoBrowser/GKPhotoBrowser/Core/GKPhotoManager.h

@@ -15,16 +15,16 @@ NS_ASSUME_NONNULL_BEGIN
 @interface GKPhoto : NSObject
 
 /** 图片地址 */
-@property (nonatomic, strong) NSURL              *url;
+@property (nonatomic, strong, nullable) NSURL *url;
 
 /** 原图地址 */
-@property (nonatomic, strong) NSURL              *originUrl;
+@property (nonatomic, strong, nullable) NSURL *originUrl;
 
 /** 来源imageView */
-@property (nonatomic, strong) UIImageView        *sourceImageView;
+@property (nonatomic, strong, nullable) UIImageView *sourceImageView;
 
 /** 来源frame */
-@property (nonatomic, assign) CGRect             sourceFrame;
+@property (nonatomic, assign) CGRect sourceFrame;
 
 /** 图片(静态) */
 @property (nonatomic, strong, nullable) UIImage  *image;
@@ -37,7 +37,7 @@ NS_ASSUME_NONNULL_BEGIN
 
 #pragma mark - 以下属性播放视频时使用
 /** 视频地址 */
-@property (nonatomic, strong) NSURL              *videoUrl;
+@property (nonatomic, strong, nullable) NSURL    *videoUrl;
 /** 视频相册资源 */
 @property (nonatomic, strong, nullable) PHAsset  *videoAsset;
 /** 视频尺寸 */
@@ -46,6 +46,9 @@ NS_ASSUME_NONNULL_BEGIN
 // 是否自动播放视频,默认YES
 @property (nonatomic, assign, getter=isAutoPlay) BOOL autoPlay;
 
+#pragma mark - LivePhoto
+// 是否是livePhoto,需从外部传入
+@property (nonatomic, assign) BOOL              isLivePhoto;
 
 /************************内部使用,无需关心 ********************/
 /** 图片是否加载完成 */
@@ -73,8 +76,12 @@ NS_ASSUME_NONNULL_BEGIN
 /** 视频手动点击播放 */
 @property (nonatomic, assign) BOOL               isVideoClicked;
 
+/// 根据相册资源获取图片
+/// - Parameter completion: 完成回调
 - (void)getImage:(nullable void(^)(NSData *_Nullable data, UIImage *_Nullable image, NSError *_Nullable error))completion;
 
+/// 根据相册资源获取视频
+/// - Parameter completion: 完成回调
 - (void)getVideo:(nullable void(^)(NSURL *_Nullable url, NSError *_Nullable error))completion;
 
 @end

+ 8 - 1
Pods/GKPhotoBrowser/GKPhotoBrowser/Core/GKPhotoManager.m

@@ -25,7 +25,7 @@
 }
 
 - (BOOL)isVideo {
-    return self.videoUrl || self.videoAsset;
+    return !self.isLivePhoto && (self.videoUrl || self.videoAsset);
 }
 
 - (void)getImage:(void (^)(NSData * _Nullable, UIImage * _Nullable, NSError * _Nullable))completion {
@@ -98,6 +98,13 @@
     }
 }
 
+- (BOOL)isLivePhoto {
+    if (self.imageAsset) {
+        return self.imageAsset.mediaSubtypes == PHAssetMediaSubtypePhotoLive;
+    }
+    return _isLivePhoto;
+}
+
 @end
 
 @implementation GKPhotoManager

+ 5 - 6
Pods/GKPhotoBrowser/GKPhotoBrowser/Core/GKPhotoRotationHandler.m

@@ -8,6 +8,9 @@
 #import "GKPhotoRotationHandler.h"
 #import "GKPhotoBrowser.h"
 
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+
 @interface GKPhotoRotationHandler()
 
 // 在浏览器显示前是否已经添加过屏幕旋转监测
@@ -119,10 +122,7 @@
         [UIView animateWithDuration:duration delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
             // 旋转状态栏
             if (@available(iOS 13.0, *)) {} else {
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"
                 [[UIApplication sharedApplication] setStatusBarOrientation:(UIInterfaceOrientation)currentOrientation animated:YES];
-#pragma clang diagnostic pop
             }
             
             float rotation = currentOrientation == UIDeviceOrientationLandscapeRight ? 1.5 : 0.5;
@@ -161,10 +161,7 @@
         [UIView animateWithDuration:duration delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
             // 旋转状态栏
             if (@available(iOS 13.0, *)) {} else {
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"
                 [[UIApplication sharedApplication] setStatusBarOrientation:(UIInterfaceOrientation)currentOrientation animated:YES];
-#pragma clang diagnostic pop
             }
             
             // 旋转view
@@ -228,3 +225,5 @@
 }
 
 @end
+
+#pragma clang diagnostic pop

+ 24 - 32
Pods/GKPhotoBrowser/GKPhotoBrowser/Core/GKPhotoView.h

@@ -10,6 +10,8 @@
 #import "GKPhotoManager.h"
 #import "GKWebImageProtocol.h"
 #import "GKVideoPlayerProtocol.h"
+#import "GKLivePhotoProtocol.h"
+#import "GKProgressViewProtocol.h"
 #import "GKLoadingView.h"
 
 NS_ASSUME_NONNULL_BEGIN
@@ -31,8 +33,13 @@ NS_ASSUME_NONNULL_BEGIN
 // 加载进度,isOriginImage:是否是原图
 - (void)photoView:(GKPhotoView *)photoView loadProgress:(float)progress isOriginImage:(BOOL)isOriginImage;
 
+// 视频加载
+- (void)photoView:(GKPhotoView *)photoView loadStart:(BOOL)isStart success:(BOOL)success;
+
 @end
 
+@class GKPhotoBrowser;
+
 @interface GKPhotoView : UIView<UIScrollViewDelegate>
 
 @property (nonatomic, strong, readonly) GKScrollView *scrollView;
@@ -43,60 +50,43 @@ NS_ASSUME_NONNULL_BEGIN
 
 @property (nonatomic, strong, readonly) GKLoadingView *loadingView;
 
+@property (nonatomic, strong, readonly) GKLoadingView *videoLoadingView;
+
+@property (nonatomic, strong, readonly) GKLoadingView *liveLoadingView;
+@property (nonatomic, strong, readonly) UIView *liveMarkView;
+
 @property (nonatomic, strong, readonly) GKPhoto *photo;
 
-@property (nonatomic, weak) id<GKVideoPlayerProtocol> player;
+@property (nonatomic, weak) GKPhotoBrowser *browser;
 
-@property (nonatomic, weak) id<GKPhotoViewDelegate> delegate;
+@property (nonatomic, weak, readonly) id<GKWebImageProtocol> imageProtocol;
 
-/// 是否跟随系统旋转,默认是NO,如果设置为YES,isScreenRotateDisabled属性将失效
-@property (nonatomic, assign) BOOL isFollowSystemRotation;
+@property (nonatomic, weak) id<GKVideoPlayerProtocol> player;
 
-/** 横屏时是否充满屏幕宽度,默认YES,为NO时图片自动填充屏幕 */
-@property (nonatomic, assign) BOOL isFullWidthForLandScape;
+@property (nonatomic, weak) id<GKLivePhotoProtocol> livePhoto;
 
-/// 是否适配安全区域,默认NO,为YES时图片会自动适配iPhone X的安全区域
-@property (nonatomic, assign) BOOL isAdaptiveSafeArea;
+@property (nonatomic, weak) id<GKPhotoViewDelegate> delegate;
 
-/** 图片最大放大倍数 */
-@property (nonatomic, assign) CGFloat maxZoomScale;
+@property (nonatomic, assign) CGSize imageSize;
 
 /** 双击放大倍数 */
 @property (nonatomic, assign) CGFloat doubleZoomScale;
 
-/** 是否重新布局 */
-@property (nonatomic, assign) BOOL isLayoutSubViews;
-
-@property (nonatomic, assign) GKPhotoBrowserLoadStyle loadStyle;
-@property (nonatomic, assign) GKPhotoBrowserLoadStyle originLoadStyle;
-@property (nonatomic, assign) GKPhotoBrowserFailStyle failStyle;
-
-@property (nonatomic, copy) NSString    *failureText;
-@property (nonatomic, strong) UIImage   *failureImage;
-
-@property (nonatomic, assign) BOOL      showPlayImage;
-@property (nonatomic, strong) UIImage   *videoPlayImage;
-/// 拖拽开始时是否暂停播放,默认YES
-@property (nonatomic, assign) BOOL isVideoPausedWhenDragged;
-
-/// 视图重用时是否清除对应url的换成,默认NO
-/// 如果设置为YES,则视图放入重用池时回调用GKWebImageProtocol协议的clearMemoryForURL:方法
-@property (nonatomic, assign) BOOL isClearMemoryWhenViewReuse;
+@property (nonatomic, assign) CGFloat realZoomScale;
 
 - (instancetype)initWithFrame:(CGRect)frame imageProtocol:(id<GKWebImageProtocol>)imageProtocol;
 
 // 准备复用
 - (void)prepareForReuse;
 
+- (void)resetImageView;
+
 // 设置数据
 - (void)setupPhoto:(GKPhoto *)photo;
 
 // 设置放大倍数
 - (void)setScrollMaxZoomScale:(CGFloat)scale;
 
-// 加载原图(必须传originUrl)
-- (void)loadOriginImage;
-
 // 缩放
 - (void)zoomToRect:(CGRect)rect animated:(BOOL)animated;
 
@@ -112,7 +102,7 @@ NS_ASSUME_NONNULL_BEGIN
 // 加载
 - (void)showLoading;
 - (void)hideLoading;
-- (void)showFailure;
+- (void)showFailure:(NSError *)error;
 - (void)showPlayBtn;
 
 // 左右滑动
@@ -127,6 +117,8 @@ NS_ASSUME_NONNULL_BEGIN
 
 - (void)updateFrame;
 
+- (void)loadFailedWithError:(NSError *)error;
+
 @end
 
 NS_ASSUME_NONNULL_END

+ 112 - 465
Pods/GKPhotoBrowser/GKPhotoBrowser/Core/GKPhotoView.m

@@ -7,6 +7,10 @@
 //
 
 #import "GKPhotoView.h"
+#import "GKPhotoView+Image.h"
+#import "GKPhotoView+Video.h"
+#import "GKPhotoView+LivePhoto.h"
+#import "GKPhotoBrowser.h"
 
 @implementation GKScrollView
 
@@ -39,23 +43,22 @@
 
 @interface GKPhotoView()
 
-@property (nonatomic, strong, readwrite) GKScrollView   *scrollView;
+@property (nonatomic, strong) GKScrollView   *scrollView;
 
-@property (nonatomic, strong, readwrite) UIImageView    *imageView;
+@property (nonatomic, strong) UIImageView    *imageView;
 
-@property (nonatomic, strong, readwrite) UIButton       *playBtn;
+@property (nonatomic, strong) UIButton       *playBtn;
 
-@property (nonatomic, strong, readwrite) GKLoadingView  *loadingView;
+@property (nonatomic, strong) GKLoadingView  *loadingView;
 
-@property (nonatomic, strong, readwrite) GKLoadingView  *videoLoadingView;
+@property (nonatomic, strong) GKLoadingView  *videoLoadingView;
 
-@property (nonatomic, strong, readwrite) GKPhoto        *photo;
+@property (nonatomic, strong) GKLoadingView  *liveLoadingView;
+@property (nonatomic, strong) GKLivePhotoMarkView *liveMarkView;
 
-@property (nonatomic, strong) id<GKWebImageProtocol>    imageProtocol;
+@property (nonatomic, strong) GKPhoto        *photo;
 
-@property (nonatomic, assign) CGFloat realZoomScale;
-
-@property (nonatomic, assign) CGSize imageSize;
+@property (nonatomic, weak) id<GKWebImageProtocol>    imageProtocol;
 
 @end
 
@@ -73,6 +76,10 @@
     return self;
 }
 
+- (void)dealloc {
+    [self cancelImageLoad];
+}
+
 - (void)prepareForReuse {
     self.imageSize = CGSizeZero;
     [self.loadingView stopLoading];
@@ -80,12 +87,29 @@
     [self.playBtn removeFromSuperview];
     [self.videoLoadingView stopLoading];
     [self.videoLoadingView removeFromSuperview];
-    [self cancelCurrentImageLoad];
-    if (self.isClearMemoryWhenViewReuse && [self.imageProtocol respondsToSelector:@selector(clearMemoryForURL:)]) {
+    [self.liveLoadingView stopLoading];
+    [self.liveLoadingView removeFromSuperview];
+    [self cancelImageLoad];
+    if (self.browser.isClearMemoryWhenViewReuse && [self.imageProtocol respondsToSelector:@selector(clearMemoryForURL:)]) {
         [self.imageProtocol clearMemoryForURL:self.photo.url];
     }
     [self.imageView removeFromSuperview];
     self.imageView = nil;
+    [self.liveMarkView removeFromSuperview];
+    self.liveMarkView = nil;
+}
+
+- (void)resetImageView {
+    [self.imageView removeFromSuperview];
+    self.imageView = nil;
+    [self.scrollView addSubview:self.imageView];
+}
+
+- (void)setBrowser:(GKPhotoBrowser *)browser {
+    _browser = browser;
+    
+    self.player = browser.player;
+    self.livePhoto = browser.livePhoto;
 }
 
 - (void)setupPhoto:(GKPhoto *)photo {
@@ -100,373 +124,96 @@
     }
 }
 
-- (void)loadOriginImage {
-    // 恢复数据
-    self.photo.image    = nil;
-    self.photo.finished = NO;
-    self.photo.failed   = NO;
-    
-    [self loadImageWithPhoto:self.photo isOrigin:YES];
-}
-
 - (void)showLoading {
-    if (!self.photo.isVideo) return;
-    if (!self.photo.isAutoPlay && !self.photo.isVideoClicked) return;
-    if (!self.player) return;
-    if (self.player.assetURL != self.photo.videoUrl) return;
-    self.videoLoadingView.frame = self.bounds;
-    [self addSubview:self.videoLoadingView];
-    [self.videoLoadingView startLoading];
+    if (self.photo.isLivePhoto) {
+        [self showLiveLoading];
+    }else {
+        [self showVideoLoading];
+    }
 }
 
 - (void)hideLoading {
-    if (!self.photo.isVideo) return;
-    if (!self.photo.isAutoPlay && !self.photo.isVideoClicked) return;
-    if (!self.player) return;
-    if (self.player.assetURL != self.photo.videoUrl) return;
-    [self.videoLoadingView stopLoading];
+    if (self.photo.isLivePhoto) {
+        [self hideLiveLoading];
+    }else{
+        [self hideVideoLoading];
+    }
 }
 
-- (void)showFailure {
-    if (!self.photo.isVideo) return;
-    if (!self.photo.isAutoPlay && !self.photo.isVideoClicked) return;
-    if (!self.player) return;
-    if (self.player.assetURL != self.photo.videoUrl) return;
-    [self.videoLoadingView showFailure];
+- (void)showFailure:(NSError *)error {
+    if (self.photo.isLivePhoto) {
+        [self showLiveFailure:error];
+    }else {
+        [self showVideoFailure:error];
+    }
 }
 
 - (void)showPlayBtn {
-    if (!self.photo.isVideo) return;
-    if (!self.photo.isAutoPlay && !self.photo.isVideoClicked) return;
-    if (!self.player) return;
-    if (self.player.assetURL != self.photo.videoUrl) return;
-    if (!self.showPlayImage) return;
-    self.playBtn.hidden = NO;
+    [self showVideoPlayBtn];
 }
 
 - (void)didScrollAppear {
-    if (!self.photo.isVideo) return;
-    if (!self.photo.isAutoPlay && !self.photo.isVideoClicked) {
-        if (!self.playBtn.superview) {
-            [self addSubview:self.playBtn];
-            [self.playBtn sizeToFit];
-            self.playBtn.center = CGPointMake(self.bounds.size.width * 0.5, self.bounds.size.height * 0.5);
-        }
-        self.playBtn.hidden = NO;
-        return;
-    }
-    if (!self.player) return;
-    
-    // 如果没有设置,则设置播放内容
-    if (!self.player.assetURL || self.player.assetURL != self.photo.videoUrl) {
-        __weak __typeof(self) weakSelf = self;
-        [self.photo getVideo:^(NSURL * _Nullable url, NSError * _Nullable error) {
-            __strong __typeof(weakSelf) self = weakSelf;
-            if (!self) return;
-            if (!self.player) return;
-            if (error) {
-                [self loadFailedWithError:error];
-            }else {
-                self.player.coverImage = self.imageView.image;
-                self.player.assetURL = url;
-                dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.01 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
-                    [self.player gk_prepareToPlay];
-                    [self updateFrame];
-                    [self.player gk_play];
-                });
-            }
-        }];
+    if (self.photo.isLivePhoto) {
+        [self liveDidScrollAppear];
     }else {
-        [self.player gk_play];
+        [self videoDidScrollAppear];
     }
-    
-    if (!self.showPlayImage) return;
-    if (!self.playBtn.superview) {
-        [self addSubview:self.playBtn];
-    }
-    self.playBtn.hidden = YES;
 }
 
 - (void)willScrollDisappear {
-    if (!self.photo.isVideo) return;
-    if (!self.photo.isAutoPlay && !self.photo.isVideoClicked) {
-        if (self.player.isPlaying) {
-            [self.player gk_pause];
-        }
-        return;
+    if (self.photo.isLivePhoto) {
+        [self liveWillScrollDisappear];
+    }else {
+        [self videoWillScrollDisappear];
     }
-    if (!self.player) return;
-    [self.player gk_pause];
 }
 
 - (void)didScrollDisappear {
-    if (!self.photo.isVideo) return;
-    if (!self.photo.isAutoPlay) {
-        if (self.photo.isVideoClicked) {
-            self.photo.isVideoClicked = NO;
-        }
-        [self.player gk_stop];
-        self.player.assetURL = nil;
-        self.playBtn.hidden = NO;
-        return;
+    if (self.photo.isLivePhoto) {
+        [self liveDidScrollDisappear];
+    }else {
+        [self videoDidScrollDisappear];
     }
-    if (!self.player) return;
-    if (!self.showPlayImage) return;
-    self.playBtn.hidden = NO;
 }
 
 - (void)didDismissAppear {
-    if (!self.photo.isVideo) return;
-    if (!self.player) return;
-    if (self.player.status == GKVideoPlayerStatusEnded) {
-        [self.player gk_replay];
+    if (self.photo.isLivePhoto) {
+        [self liveDidDismissAppear];
     }else {
-        [self.player gk_play];
+        [self videoDidDismissAppear];
     }
-    if (!self.showPlayImage) return;
-    self.playBtn.hidden = YES;
 }
 
 - (void)willDismissDisappear {
-    if (!self.photo.isVideo) return;
-    if (!self.player) return;
-    if (!self.isVideoPausedWhenDragged) return;
-    if (self.player.status == GKVideoPlayerStatusEnded) {
-        if (!self.showPlayImage) return;
-        self.playBtn.hidden = YES;
+    if (self.photo.isLivePhoto) {
+        [self liveWillDismissDisappear];
     }else {
-        [self.player gk_pause];
+        [self videoWillDismissDisappear];
     }
 }
 
 - (void)didDismissDisappear {
-    if (!self.photo.isVideo) return;
-    if (!self.player) return;
-    [self.player gk_stop];
-    self.player.assetURL = nil;
+    if (self.photo.isLivePhoto) {
+        [self liveDidDismissDisappear];
+    }else {
+        [self videoDidDismissDisappear];
+    }
 }
 
 - (void)updateFrame {
-    if (!self.photo.isVideo) return;
-    if (!self.photo.isAutoPlay && !self.photo.isVideoClicked) return;
-    if (!self.player) return;
-    if (self.player.assetURL != self.photo.videoUrl) return;
-    if (self.player.videoPlayView.superview != self.imageView) {
-        [self.imageView addSubview:self.player.videoPlayView];
+    if (self.photo.isLivePhoto) {
+        [self liveUpdateFrame];
+    }else {
+        [self videoUpdateFrame];
     }
-    [self.imageView bringSubviewToFront:self.player.videoPlayView];
-    [self.player gk_updateFrame:self.imageView.bounds];
 }
 
 - (void)playAction {
-    if (!self.photo.isVideo) return;
-    self.photo.isVideoClicked = YES;
-    [self didScrollAppear];
+    [self videoPlay];
 }
 
 - (void)pauseAction {
-    if (!self.photo.isVideo) return;
-    if (!self.player) return;
-    self.photo.isVideoClicked = NO;
-    self.playBtn.hidden = NO;
-    [self.player gk_pause];
-}
-
-#pragma mark - 加载图片
-- (void)loadImageWithPhoto:(GKPhoto *)photo isOrigin:(BOOL)isOrigin {
-    // 取消以前的加载
-    [_imageProtocol cancelImageRequestWithImageView:self.imageView];
-    
-    if (photo) {
-        [self.imageView removeFromSuperview];
-        self.imageView = nil;
-        [self.scrollView addSubview:self.imageView];
-        if (!photo.isVideo && self.showPlayImage) {
-            self.playBtn.hidden = YES;
-        }else if (photo.isVideo && !photo.isAutoPlay && !photo.isVideoClicked) {
-            [self addSubview:self.playBtn];
-            self.playBtn.hidden = NO;
-        }
-        
-        // 每次设置数据时,恢复缩放
-        [self.scrollView setZoomScale:1.0 animated:NO];
-        
-        // 优先加载缓存图片
-        UIImage *placeholderImage = nil;
-        UIImage *image = [_imageProtocol imageFromMemoryForURL:photo.url];
-        if (image) {
-            photo.finished = YES;
-            placeholderImage = image;
-        }
-        
-        UIImage *originImage = [_imageProtocol imageFromMemoryForURL:photo.originUrl];
-        if (originImage) {
-            photo.originFinished = YES;
-            placeholderImage = originImage;
-            isOrigin = YES;
-        }
-        
-        // 如果没有就加载sourceImageView的image
-        if (!placeholderImage) {
-            placeholderImage = photo.sourceImageView.image;
-        }
-        // 如果还没有就加载传入的站位图
-        if (!placeholderImage) {
-            placeholderImage = photo.placeholderImage;
-        }
-        
-        self.imageView.image          = placeholderImage;
-        self.imageView.contentMode    = photo.sourceImageView.contentMode;
-        self.scrollView.scrollEnabled = NO;
-        
-        if (photo.image) {
-            [self setupImageView:photo.image];
-            return;
-        }else if (photo.imageAsset) {
-            [self addSubview:self.loadingView];
-            if (!photo.failed) {
-                [self.loadingView hideFailure];
-            }
-            [self adjustFrame];
-            
-            if (!photo.failed && !placeholderImage) {
-                if (isOrigin && self.originLoadStyle != GKPhotoBrowserLoadStyleCustom) {
-                    [self.loadingView startLoading];
-                }else if (!isOrigin && self.loadStyle != GKPhotoBrowserLoadStyleCustom) {
-                    [self.loadingView startLoading];
-                }
-            }
-            
-            __weak __typeof(self) weakSelf = self;
-            [photo getImage:^(NSData * _Nullable data, UIImage * _Nullable image, NSError * _Nullable error) {
-                __strong __typeof(weakSelf) self = weakSelf;
-                UIImage *newImage = nil;
-                if (data) {
-                    if ([self.imageProtocol respondsToSelector:@selector(imageWithData:)]) {
-                        newImage = [self.imageProtocol imageWithData:data];
-                    }
-                    if (!newImage) {
-                        newImage = [UIImage imageWithData:data];
-                    }
-                }else if (image) {
-                    newImage = image;
-                }
-                if (newImage) {
-                    [self setupImageView:newImage];
-                }else {
-                    [self loadFailedWithError:error];
-                    if (self.failStyle != GKPhotoBrowserFailStyleCustom) {
-                        [self addSubview:self.loadingView];
-                        [self.loadingView showFailure];
-                    }
-                }
-            }];
-            return;
-        }
-        
-        // 进度条
-        [self addSubview:self.loadingView];
-        if (!photo.failed) {
-            [self.loadingView hideFailure];
-        }
-        
-        if (self.imageView.image) {
-            [self adjustFrame];
-        }else if (!CGRectEqualToRect(photo.sourceFrame, CGRectZero)) {
-            [self adjustFrame];
-        }
-        
-        NSURL *url = nil;
-        if (photo.originFinished) {
-            url = photo.originUrl;
-        }else {
-            url = isOrigin ? photo.originUrl : photo.url;
-        }
-        
-        if (url.absoluteString.length > 0) {
-            if (!photo.failed && !placeholderImage) {
-                if (isOrigin && self.originLoadStyle != GKPhotoBrowserLoadStyleCustom) {
-                    [self.loadingView startLoading];
-                }else if (!isOrigin && self.loadStyle != GKPhotoBrowserLoadStyleCustom) {
-                    [self.loadingView startLoading];
-                }
-            }
-            
-            __weak __typeof(self) weakSelf = self;
-            GKWebImageProgressBlock progressBlock = ^(NSInteger receivedSize, NSInteger expectedSize) {
-                __strong __typeof(weakSelf) self = weakSelf;
-                if (expectedSize <= 0) return;
-                float progress = (float)receivedSize / expectedSize;
-                if (progress <= 0) progress = 0;
-                
-                // 图片加载中,回调进度
-                dispatch_async(dispatch_get_main_queue(), ^{
-                    if (isOrigin && self.originLoadStyle == GKLoadingStyleCustom) {
-                        [self loadProgress:progress isOriginImage:YES];
-                    }else if (!isOrigin && self.loadStyle == GKLoadingStyleCustom) {
-                        [self loadProgress:progress isOriginImage:NO];
-                    }else if (self.loadStyle == GKLoadingStyleDeterminate || self.originLoadStyle == GKLoadingStyleDeterminate) {
-                        self.loadingView.progress = progress;
-                    }
-                });
-            };
-            
-            GKWebImageCompletionBlock completionBlock = ^(UIImage *image, NSURL *url, BOOL finished, NSError *error) {
-                __strong __typeof(weakSelf) self = weakSelf;
-                dispatch_async(dispatch_get_main_queue(), ^{
-                    if (error) {
-                        photo.failed = YES;
-                        [self.loadingView stopLoading];
-                        
-                        if ([photo.url.absoluteString isEqualToString:url.absoluteString]) {
-                            [self loadFailedWithError:error];
-                            if (self.failStyle != GKPhotoBrowserFailStyleCustom) {
-                                [self addSubview:self.loadingView];
-                                [self.loadingView showFailure];
-                            }
-                        }
-                    }else {
-                        self.imageSize = image.size;
-                        photo.finished = YES;
-                        if (isOrigin) {
-                            photo.originFinished = YES;
-                        }
-                        
-                        // 图片加载完成,回调进度
-                        if (isOrigin && self.originLoadStyle == GKLoadingStyleCustom) {
-                            [self loadProgress:1.0 isOriginImage:YES];
-                        }else if (!isOrigin && self.loadStyle == GKLoadingStyleCustom) {
-                            [self loadProgress:1.0 isOriginImage:NO];
-                        }
-                        
-                        self.scrollView.scrollEnabled = YES;
-                        [self.loadingView stopLoading];
-                    }
-                    if (!isOrigin) {
-                        [self adjustFrame];
-                    }
-                    if (self.imageView.image && CGSizeEqualToSize(self.imageView.frame.size, CGSizeZero)) {
-                        [self adjustFrame];
-                    }
-                    if (!self.imageView.image && !CGSizeEqualToSize(self.imageSize, CGSizeZero)) {
-                        [self adjustFrame];
-                    }
-                });
-            };
-            
-            [_imageProtocol setImageForImageView:self.imageView url:url placeholderImage:placeholderImage progress:progressBlock completion:completionBlock];
-        }else {
-            if (self.imageView.image) {
-                photo.finished = YES;
-                self.scrollView.scrollEnabled = YES;
-                [self.loadingView stopLoading];
-            }
-            [self adjustFrame];
-        }
-    }else {
-        self.imageView.image = nil;
-        [self adjustFrame];
-    }
+    [self videoPause];
 }
 
 - (void)resetFrame {
@@ -474,9 +221,9 @@
     CGFloat height = self.bounds.size.height;
     BOOL isLandscape = width > height;
     
-    if (self.isAdaptiveSafeArea) {
+    if (self.browser.isAdaptiveSafeArea) {
         if (isLandscape) {
-            if (self.isFollowSystemRotation) {
+            if (self.browser.isFollowSystemRotation) {
                 CGFloat safeAreaLeft = GKPhotoBrowserConfigure.gk_safeAreaInsets.left;
                 CGFloat safeAreaRight = GKPhotoBrowserConfigure.gk_safeAreaInsets.right;
                 width -= (safeAreaLeft + safeAreaRight);
@@ -491,120 +238,16 @@
     self.scrollView.center = CGPointMake(self.bounds.size.width * 0.5, self.bounds.size.height * 0.5);
     self.loadingView.frame = self.bounds;
     self.videoLoadingView.frame = self.bounds;
+    self.liveLoadingView.frame = self.bounds;
     
     if (self.photo) {
         [self adjustFrame];
     }
 }
 
-- (void)setupImageView:(UIImage *)image {
-    self.photo.finished = YES;
-    self.imageView.image = image;
-    self.scrollView.scrollEnabled = YES;
-    [self.loadingView stopLoading];
-    [self.loadingView hideFailure];
-    [self.loadingView removeFromSuperview];
-    [self adjustFrame];
-}
-
 #pragma mark - 调整frame
 - (void)adjustFrame {
-    CGRect frame = self.scrollView.frame;
-    if (frame.size.width == 0 || frame.size.height == 0) return;
-    
-    if (self.imageView.image || !CGSizeEqualToSize(self.imageSize, CGSizeZero)) {
-        CGSize imageSize = self.imageView.image.size;
-        if (CGSizeEqualToSize(imageSize, CGSizeZero)) {
-            imageSize = self.imageSize;
-        }
-        // 视频处理,保证视频可以完全显示
-        if (self.photo.isVideo && !CGSizeEqualToSize(self.photo.videoSize, CGSizeZero)) {
-            imageSize = self.photo.videoSize;
-            self.imageView.contentMode = UIViewContentModeScaleAspectFit;
-        }
-        
-        if (imageSize.width == 0) imageSize.width = self.scrollView.frame.size.width;
-        if (imageSize.height == 0) imageSize.height = self.scrollView.frame.size.height;
-        
-        CGRect imageF = (CGRect){{0, 0}, imageSize};
-        
-        // 图片的宽度 = 屏幕的宽度
-        CGFloat ratio = frame.size.width / imageF.size.width;
-        imageF.size.width  = frame.size.width;
-        imageF.size.height = ratio * imageF.size.height;
-        
-        // 默认情况下,显示出的图片的宽度 = 屏幕的宽度
-        // 如果kIsFullWidthForLandScape = NO,需要把图片全部显示在屏幕上
-        // 此时由于图片的宽度已经等于屏幕的宽度,所以只需判断图片显示的高度>屏幕高度时,将图片的高度缩小到屏幕的高度即可
-        
-        if (!self.isFullWidthForLandScape || self.photo.isVideo) {
-            // 图片的高度 > 屏幕的高度
-            if (imageF.size.height > frame.size.height) {
-                CGFloat scale = imageF.size.width / imageF.size.height;
-                imageF.size.height = frame.size.height;
-                imageF.size.width  = imageF.size.height * scale;
-            }
-        }
-        
-        // 设置图片的frame
-        self.imageView.bounds = imageF;
-        self.scrollView.contentSize = self.imageView.frame.size;
-        
-        if (imageF.size.height <= self.scrollView.bounds.size.height) {
-            self.imageView.center = CGPointMake(self.scrollView.bounds.size.width * 0.5, self.scrollView.bounds.size.height * 0.5);
-        }else {
-            self.imageView.center = CGPointMake(self.scrollView.bounds.size.width * 0.5, imageF.size.height * 0.5);
-        }
-        
-        // 根据图片大小找到最大缩放等级,保证最大缩放时候,不会有黑边
-        // 找到最大的缩放比例
-        CGFloat scaleH = frame.size.height / imageF.size.height;
-        CGFloat scaleW = frame.size.width / imageF.size.width;
-        self.realZoomScale = MAX(MAX(scaleH, scaleW), self.maxZoomScale);
-        
-        if (self.doubleZoomScale == self.maxZoomScale) {
-            self.doubleZoomScale = self.realZoomScale;
-        }else if (self.doubleZoomScale > self.realZoomScale) {
-            self.doubleZoomScale = self.realZoomScale;
-        }
-        // 初始化
-        self.scrollView.minimumZoomScale = 1.0;
-        self.scrollView.maximumZoomScale = self.realZoomScale;
-    }else if (!CGRectEqualToRect(self.photo.sourceFrame, CGRectZero)) {
-        if (self.photo.sourceFrame.size.width == 0 || self.photo.sourceFrame.size.height == 0) return;
-        CGFloat width = frame.size.width;
-        CGFloat height = width * self.photo.sourceFrame.size.height / self.photo.sourceFrame.size.width;
-        self.imageView.bounds = CGRectMake(0, 0, width, height);
-        self.imageView.center = CGPointMake(frame.size.width * 0.5, frame.size.height * 0.5);
-        self.scrollView.contentSize = self.imageView.frame.size;
-    }else {
-        self.imageView.bounds = CGRectMake(0, 0, frame.size.width, frame.size.height);
-        self.imageView.center = CGPointMake(frame.size.width * 0.5, frame.size.height * 0.5);
-        self.scrollView.contentSize = self.imageView.frame.size;
-    }
-    
-    // frame调整完毕,重新设置缩放
-    if (self.photo.isZooming) {
-        [self.scrollView setZoomScale:1.0f animated:NO];
-        [self setScrollMaxZoomScale:self.photo.zoomScale];
-        [self zoomToRect:self.photo.zoomRect animated:NO];
-        self.scrollView.contentOffset = self.photo.zoomOffset;
-        [self setScrollMaxZoomScale:self.realZoomScale];
-    }else {
-        if (self.scrollView.contentSize.height < self.scrollView.frame.size.height) {
-            self.scrollView.contentOffset = CGPointZero;
-        }else {
-            self.scrollView.contentOffset = self.photo.offset;
-        }
-    }
-    
-    self.loadingView.frame = self.bounds;
-    self.videoLoadingView.frame = self.bounds;
-    if (self.showPlayImage) {
-        [self.playBtn sizeToFit];
-        self.playBtn.center = CGPointMake(self.bounds.size.width * 0.5, self.bounds.size.height * 0.5);
-    }
-    [self updateFrame];
+    [self adjustImageFrame];
 }
 
 - (CGPoint)centerOfScrollViewContent:(UIScrollView *)scrollView {
@@ -646,14 +289,6 @@
     [self setScrollMaxZoomScale:self.realZoomScale];
 }
 
-- (void)cancelCurrentImageLoad {
-    [_imageProtocol cancelImageRequestWithImageView:self.imageView];
-}
-
-- (void)dealloc {
-    [self cancelCurrentImageLoad];
-}
-
 #pragma mark - Private
 - (void)zoomEndedWithScale:(CGFloat)scale {
     if ([self.delegate respondsToSelector:@selector(photoView:zoomEndedWithScale:)]) {
@@ -667,12 +302,6 @@
     }
 }
 
-- (void)loadProgress:(float)progress isOriginImage:(BOOL)isOriginImage {
-    if ([self.delegate respondsToSelector:@selector(photoView:loadProgress:isOriginImage:)]) {
-        [self.delegate photoView:self loadProgress:progress isOriginImage:isOriginImage];
-    }
-}
-
 #pragma mark - 懒加载
 - (GKScrollView *)scrollView {
     if (!_scrollView) {
@@ -701,7 +330,7 @@
 - (UIButton *)playBtn {
     if (!_playBtn) {
         _playBtn = [[UIButton alloc] init];
-        [_playBtn setImage:self.videoPlayImage ?: GKPhotoBrowserImage(@"gk_video_play") forState:UIControlStateNormal];
+        [_playBtn setImage:self.browser.videoPlayImage ?: GKPhotoBrowserImage(@"gk_video_play") forState:UIControlStateNormal];
         [_playBtn addTarget:self action:@selector(playAction) forControlEvents:UIControlEventTouchUpInside];
         _playBtn.hidden = YES;
         [_playBtn sizeToFit];
@@ -712,30 +341,48 @@
 
 - (GKLoadingView *)loadingView {
     if (!_loadingView) {
-        _loadingView = [GKLoadingView loadingViewWithFrame:self.bounds style:(GKLoadingStyle)self.loadStyle];
-        _loadingView.failStyle   = self.failStyle;
+        _loadingView = [GKLoadingView loadingViewWithFrame:self.bounds style:(GKLoadingStyle)self.browser.loadStyle];
+        _loadingView.failStyle   = self.browser.failStyle;
         _loadingView.lineWidth   = 3;
         _loadingView.radius      = 12;
         _loadingView.bgColor     = [UIColor blackColor];
         _loadingView.strokeColor = [UIColor whiteColor];
-        _loadingView.failText    = self.failureText;
-        _loadingView.failImage   = self.failureImage;
     }
     return _loadingView;
 }
 
 - (GKLoadingView *)videoLoadingView {
     if (!_videoLoadingView) {
-        _videoLoadingView = [GKLoadingView loadingViewWithFrame:self.bounds style:(GKLoadingStyle)self.loadStyle];
-        _videoLoadingView.failStyle = self.failStyle;
+        _videoLoadingView = [GKLoadingView loadingViewWithFrame:self.bounds style:(GKLoadingStyle)self.browser.videoLoadStyle];
+        _videoLoadingView.failStyle = self.browser.videoFailStyle;
         _videoLoadingView.lineWidth = 3;
         _videoLoadingView.radius = 12;
         _videoLoadingView.bgColor = UIColor.blackColor;
         _videoLoadingView.strokeColor = UIColor.whiteColor;
-        _videoLoadingView.failText = self.failureText;
-        _videoLoadingView.failImage = self.failureImage;
     }
     return _videoLoadingView;
 }
 
+- (GKLoadingView *)liveLoadingView {
+    if (!_liveLoadingView) {
+        _liveLoadingView = [GKLoadingView loadingViewWithFrame:self.bounds style:(GKLoadingStyle)self.browser.liveLoadStyle];
+        _liveLoadingView.radius = 30;
+        _liveLoadingView.lineWidth = 1;
+        _liveLoadingView.bgColor = [UIColor whiteColor];
+        _liveLoadingView.strokeColor = [UIColor whiteColor];
+    }
+    return _liveLoadingView;
+}
+
+- (UIView *)liveMarkView {
+    if (!_liveMarkView) {
+        _liveMarkView = [[GKLivePhotoMarkView alloc] init];
+        _liveMarkView.backgroundColor = [UIColor.whiteColor colorWithAlphaComponent:0.5];
+        _liveMarkView.hidden = YES;
+        _liveMarkView.layer.cornerRadius = 2;
+        _liveMarkView.layer.masksToBounds = YES;
+    }
+    return _liveMarkView;
+}
+
 @end

+ 3 - 1
Pods/GKPhotoBrowser/GKPhotoBrowser/Core/GKVideoPlayerProtocol.h

@@ -1,6 +1,6 @@
 //
 //  GKVideoPlayerProtocol.h
-//  GKPhotoBrowserDemo
+//  GKPhotoBrowser
 //
 //  Created by QuintGao on 2023/3/1.
 //  Copyright © 2023 QuintGao. All rights reserved.
@@ -45,6 +45,8 @@ typedef NS_ENUM(NSUInteger, GKVideoPlayerStatus) {
 
 @property (nonatomic, copy) void(^playerGetVideoSize)(id<GKVideoPlayerProtocol> mgr, CGSize size);
 
+@property (nonatomic, strong, nullable) NSError *error;
+
 // 准备视频资源
 - (void)gk_prepareToPlay;
 

+ 3 - 12
Pods/GKPhotoBrowser/GKPhotoBrowser/SDWebImage/GKSDWebImageManager.m

@@ -8,19 +8,10 @@
 
 #import "GKSDWebImageManager.h"
 
-#if __has_include(<SDWebImage/SDImageCache.h>)
-#import <SDWebImage/UIImageView+WebCache.h>
-#import <SDWebImage/UIView+WebCache.h>
-#import <SDWebImage/SDWebImageDownloader.h>
-#import <SDWebImage/SDImageCache.h>
-#import <SDWebImage/SDAnimatedImageView.h>
-#import <SDWebImage/UIImage+GIF.h>
+#if __has_include(<SDWebImage/SDWebImage.h>)
+#import <SDWebImage/SDWebImage.h>
 #else
-#import "UIImageView+WebCache.h"
-#import "UIView+WebCache.h"
-#import "SDWebImageDownloader.h"
-#import "SDImageCache.h"
-#import "SDAnimatedImageView.h"
+#import "SDWebImage.h"
 #endif
 
 @implementation GKSDWebImageManager

+ 60 - 24
Pods/GKPhotoBrowser/README.md

@@ -29,15 +29,17 @@ GKPhotoBrowser是一个可高度自定义的图片、视频浏览器,支持多
 - 支持多种显示方式(none,zoom,push)
 - 支持多种隐藏方式(zoom,zoomScale,zoomSlide)
 - 支持多种加载方式(不明确、不明确带阴影、明确进度)
-- 支持自定义遮罩视图(支持SDAutoLayout,不支持Masonry)
+- 支持自定义遮罩视图
 - 支持屏幕旋转
 - 支持gif图片加载
-- 支持自定义图片加载、视频播放、进度显示等功能
+- 支持livePhoto加载播放
+- 支持自定义图片加载、视频播放、livePhoto下载、进度显示等功能
+- 支持Swift
 
 ## 安装
-默认安装,支持图片(SDWebImage加载)和视频(AVPlayer播放)
+默认安装,支持图片(SDWebImage加载)、视频(AVPlayer播放)、livePhoto(AFNetworking下载)
 ```objc
-pod 'GKPhotoBrowser'
+pod 'GKPhotoBrowser'  或  pod 'GKPhotoBrowser/Default'
 ```
 基础库
 ```objc
@@ -51,10 +53,31 @@ YYWebImage加载图片
 ```objc
 pod 'GKPhotoBrowser/YY'
 ```
+Kingfisher加载图片
+```objc
+pod 'GKPhotoBrowser/KF'
+```
 AVPlayer播放视频
 ```objc
 pod 'GKPhotoBrowser/AVPlayer'
 ```
+ZFPlayer播放视频
+```objc
+pod 'GKPhotoBrowser/ZFPlayer'
+```
+IJKPlayer播放视频
+```objc
+pod 'GKPhotoBrowser/IJKPlayer'
+```
+
+AFNetworking下载livePhoto
+```objc
+pod 'GKPhotoBrowser/AF'
+```
+Alamofire下载livePhoto
+```objc
+pod 'GKPhotoBrowser/Alamofire'
+```
 
 视频播放进度条
 ```objc
@@ -139,11 +162,23 @@ photo.image = [YYImage imageNamed:obj];
  
  ![jianshu.gif](https://upload-images.jianshu.io/upload_images/1598505-dbc0b13eb87ecd75.gif?imageMogr2/auto-orient/strip)
  
+ ## 发布
+ 
+ ```
+ pod trunk push --allow-warnings --skip-import-validation
+ ```
+ 
  ## 版本记录
 
  <details open>
      <summary><font size=4>最近更新</font></summary>
 
+ * 3.0.2 - 2024.07.26 1、livePhoto优化,增加是否清理缓存属性
+ * 3.0.1 - 2024.07.03 1、修复bug #193 2、livePhoto进度优化及增加标识
+ * 3.0.0 - 2024.07.01 1、支持livePhoto播放(本地、网络、相册)2、修复某些情况下浏览器不能释放的问题
+ * 2.8.2 - 2024.06.04 1、视频加载优化,增加播放失败处理 2、视频播放支持IJKPlayer
+ * 2.8.1 - 2024.05.24 头文件导入优化,pod优化
+ * 2.8.0 - 2024.05.21 1、网络加载支持Kingfisher 2、视频播放支持ZFPlayer 3、增加SwiftDemo
  * 2.7.6 - 2024.03.20 privacy fix
  * 2.7.4 - 2024.03.19 1、修复pageControl可点击的问题 2、添加隐私清单文件
  * 2.7.3 - 2023.10.12 修复问题 #188 #189
@@ -160,44 +195,44 @@ photo.image = [YYImage imageNamed:obj];
     - 2、新增内存清理相关属性,可在适当的时候清理内存
     - 3、增加视频进度视图协议,可自定义视频进度view
     - 4、新增大图加载demo,通过CATiledLayer显示
- * 2.5.9 - 2023.05.30 视频播放优化,新增微信聊天demo #173
- * 2.5.8 - 2023.05.16 修复手势向上滑动时不缩放问题
- * 2.5.7 - 2023.04.17
+ </details>
+
+ <details>
+     <summary><font size=4>历史更新</font></summary>
+     
+* 2.5.9 - 2023.05.30 视频播放优化,新增微信聊天demo #173
+* 2.5.8 - 2023.05.16 修复手势向上滑动时不缩放问题
+* 2.5.7 - 2023.04.17
     - 1、修复崩溃bug #170
     - 2、新增属性可修改图片间距
     - 3、修复放大状态下快速左右滑动显示异常问题
     - 4、安全区域适配优化
- * 2.5.6 - 2023.04.11
+* 2.5.6 - 2023.04.11
     - 1、修复bug #168 #169
     - 2、视频加载优化,增加获取视频尺寸方法
     - 3、修复视频显示后立即滑动隐藏崩溃的问题
     - 4、隐藏动画优化,修复放大状态下的隐藏闪动问题
- * 2.5.4 - 2023.04.06 
+* 2.5.4 - 2023.04.06 
     - 1、视频播放优化,修复bug #168
     - 2、安全区域适配优化,修复横屏时切换问题
     - 3、横屏显示及隐藏动画优化
- * 2.5.3 - 2023.03.28 部分方法增加前缀,修复审核警告问题 #165 #166
- * 2.5.2 - 2023.03.16 修复调用selectedPhoto和removePhoto方法后视频播放未停止的问题,视频播放优化
- * 2.5.1 - 2023.03.15 修复使用videoView出现审核被拒的问题 #165,消除警告
- * 2.5.0 - 2023.03.06 
+* 2.5.3 - 2023.03.28 部分方法增加前缀,修复审核警告问题 #165 #166
+* 2.5.2 - 2023.03.16 修复调用selectedPhoto和removePhoto方法后视频播放未停止的问题,视频播放优化
+* 2.5.1 - 2023.03.15 修复使用videoView出现审核被拒的问题 #165,消除警告
+* 2.5.0 - 2023.03.06 
     - 1、支持视频播放
     - 2、代码拆分、优化
     - 3、push显示支持滑动缩放返回
- * 2.4.6 - 2023.02.20 修复问题 #154 #162
- * 2.4.4 - 2022.10.18 新增isDoubleTapDisabled属性,禁止双击放大功能,可提高单击的响应时间
- * 2.4.3 - 2022.10.08 
+* 2.4.6 - 2023.02.20 修复问题 #154 #162
+* 2.4.4 - 2022.10.18 新增isDoubleTapDisabled属性,禁止双击放大功能,可提高单击的响应时间
+* 2.4.3 - 2022.10.08 
     - 1、修复图片宽高可能为0的问题 #151 
     - 2、优化加载原图时可能闪动的问题 #152
- * 2.4.2 - 2022.09.20 适配iPhone 14 Pro屏幕,#150
- * 2.4.1 - 2022.08.19 
+* 2.4.2 - 2022.09.20 适配iPhone 14 Pro屏幕,#150
+* 2.4.1 - 2022.08.19 
     - 1、修复屏幕旋转bug #149 
     - 2、新增addNavigationController,可在显示图片浏览器后push到新的控制器
- * 2.4.0 - 2022.07.27 修复横屏后屏幕朝上自动变为竖屏的问题 #147
- </details>
-
- <details>
-     <summary><font size=4>历史更新</font></summary>
-
+* 2.4.0 - 2022.07.27 修复横屏后屏幕朝上自动变为竖屏的问题 #147
 * 2.3.8 - 2022.04.07 优化代码,修复bug #138
 * 2.3.7 - 2022.03.25 新增animDuration属性,可自定义动画时间
 * 2.3.6 - 2022.02.28 隐藏效果优化
@@ -223,6 +258,7 @@ photo.image = [YYImage imageNamed:obj];
 * 2.0.1 - 2020.06.10 优化图片单击的处理,支持自定义图片加载类
 * 2.0.0 - 2020.04.28 优化GIF图片显示,支持SDWebImage 5.x 和 YYWebImage 
 * 1.6.0 - 2020.03.14 增加双击放大倍数
+
 * 2020.03.12  修复crash #67,#71 感谢chimingzi,解决编译报错#65
 * 2019.10.20  优化长图闪动问题,适配iOS13
 * 2019.10.12  优化长图放大后点击隐藏时的闪动问题

+ 27 - 1
Pods/GKSliderView/GKSliderView/Classes/GKSliderView.m

@@ -76,7 +76,9 @@
 
 @end
 
-@implementation GKLineLoadingView
+@implementation GKLineLoadingView {
+    CGFloat _lineHeight;
+}
 
 + (void)showLoadingInView:(UIView *)view lineHeight:(CGFloat)lineHeight {
     GKLineLoadingView *loadingView = [[GKLineLoadingView alloc] initWithFrame:view.frame lineHeight:lineHeight];
@@ -97,6 +99,7 @@
 
 - (instancetype)initWithFrame:(CGRect)frame lineHeight:(CGFloat)lineHeight {
     if (self = [super initWithFrame:frame]) {
+        _lineHeight = lineHeight;
         self.backgroundColor = kLineLoadingColor;
         self.center = CGPointMake(frame.size.width * 0.5, frame.size.height * 0.5);
         self.bounds = CGRectMake(0, 0, 1.0f, lineHeight);
@@ -104,6 +107,20 @@
     return self;
 }
 
+- (void)layoutSubviews {
+    [super layoutSubviews];
+    
+    CGRect frame = self.superview.frame;
+    self.center = CGPointMake(frame.size.width * 0.5, frame.size.height * 0.5);
+    self.bounds = CGRectMake(0, 0, 1.0f, _lineHeight);
+    
+    CAAnimationGroup *animationGroup = [self.layer animationForKey:@"lineLoading"];
+    CABasicAnimation *scaleAnimation = (CABasicAnimation *)animationGroup.animations.firstObject;
+    if (!scaleAnimation) return;
+    if ([scaleAnimation.toValue isEqual: @(1.0 * frame.size.width)]) return;
+    scaleAnimation.toValue = @(1.0 * frame.size.width);
+}
+
 - (void)startLoading {
     [self stopLoading];
     
@@ -207,6 +224,15 @@
 - (void)layoutSubviews {
     [super layoutSubviews];
     
+    [self.subviews enumerateObjectsUsingBlock:^(__kindof UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
+        if ([obj isKindOfClass:GKLineLoadingView.class]) {
+            CGPoint center = CGPointMake(self.bounds.size.width * 0.5, self.bounds.size.height * 0.5);
+            if (!CGPointEqualToPoint(obj.center, center)) {
+                obj.frame = self.bounds;
+            }
+        }
+    }];
+    
     if (self.sliderBtn.hidden) {
         self.bgProgressView.gk_width   = self.gk_width;
     }else {

+ 2 - 0
Pods/GKSliderView/README.md

@@ -30,6 +30,8 @@ GKSliderView is available under the MIT license. See the LICENSE file for more i
 
 ## 版本记录
 
+2024.06.03  1.2.2:修复滑动滑杆可能出现CPU暴涨问题
+2024.05.28  1.2.1:滑杆加载动画优化
 2023.09.04  1.2.0:滑杆拖拽功能优化
 2023.03.23  1.1.0:1.修复点击范围失效问题 2.新增支持滑杆拖拽
 2023.03.20  1.0.9:1.新增属性控制预览视图是否跟随滑块移动 2.新增属性控制滑块点击范围

+ 7 - 7
Pods/GTCommonSDK/GTCommonSDK.xcframework/Info.plist

@@ -6,22 +6,19 @@
 	<array>
 		<dict>
 			<key>LibraryIdentifier</key>
-			<string>ios-arm64_x86_64-maccatalyst</string>
+			<string>ios-arm64</string>
 			<key>LibraryPath</key>
 			<string>GTCommonSDK.framework</string>
 			<key>SupportedArchitectures</key>
 			<array>
 				<string>arm64</string>
-				<string>x86_64</string>
 			</array>
 			<key>SupportedPlatform</key>
 			<string>ios</string>
-			<key>SupportedPlatformVariant</key>
-			<string>maccatalyst</string>
 		</dict>
 		<dict>
 			<key>LibraryIdentifier</key>
-			<string>ios-arm64_x86_64-simulator</string>
+			<string>ios-arm64_x86_64-maccatalyst</string>
 			<key>LibraryPath</key>
 			<string>GTCommonSDK.framework</string>
 			<key>SupportedArchitectures</key>
@@ -32,19 +29,22 @@
 			<key>SupportedPlatform</key>
 			<string>ios</string>
 			<key>SupportedPlatformVariant</key>
-			<string>simulator</string>
+			<string>maccatalyst</string>
 		</dict>
 		<dict>
 			<key>LibraryIdentifier</key>
-			<string>ios-arm64</string>
+			<string>ios-arm64_x86_64-simulator</string>
 			<key>LibraryPath</key>
 			<string>GTCommonSDK.framework</string>
 			<key>SupportedArchitectures</key>
 			<array>
 				<string>arm64</string>
+				<string>x86_64</string>
 			</array>
 			<key>SupportedPlatform</key>
 			<string>ios</string>
+			<key>SupportedPlatformVariant</key>
+			<string>simulator</string>
 		</dict>
 	</array>
 	<key>CFBundlePackageType</key>

BIN
Pods/GTCommonSDK/GTCommonSDK.xcframework/ios-arm64_x86_64-maccatalyst/GTCommonSDK.framework/GTCommonSDK


+ 1 - 1
Pods/GTCommonSDK/GTCommonSDK.xcframework/ios-arm64_x86_64-maccatalyst/GTCommonSDK.framework/Headers/GTCommonSDK.h

@@ -3,7 +3,7 @@
 //  GTCommonSDK
 //
 //  Created by Getui on 2020/11/16.
-//  GTCommonSDK-Version: 3.1.2.0
+//  GTCommonSDK-Version: 3.1.5.0
 
 #import <Foundation/Foundation.h>
 

+ 5 - 5
Pods/GTSDK/GTSDK.xcframework/Info.plist

@@ -6,30 +6,30 @@
 	<array>
 		<dict>
 			<key>LibraryIdentifier</key>
-			<string>ios-arm64</string>
+			<string>ios-arm64_x86_64-simulator</string>
 			<key>LibraryPath</key>
 			<string>GTSDK.framework</string>
 			<key>SupportedArchitectures</key>
 			<array>
 				<string>arm64</string>
+				<string>x86_64</string>
 			</array>
 			<key>SupportedPlatform</key>
 			<string>ios</string>
+			<key>SupportedPlatformVariant</key>
+			<string>simulator</string>
 		</dict>
 		<dict>
 			<key>LibraryIdentifier</key>
-			<string>ios-arm64_x86_64-simulator</string>
+			<string>ios-arm64</string>
 			<key>LibraryPath</key>
 			<string>GTSDK.framework</string>
 			<key>SupportedArchitectures</key>
 			<array>
 				<string>arm64</string>
-				<string>x86_64</string>
 			</array>
 			<key>SupportedPlatform</key>
 			<string>ios</string>
-			<key>SupportedPlatformVariant</key>
-			<string>simulator</string>
 		</dict>
 		<dict>
 			<key>LibraryIdentifier</key>

BIN
Pods/GTSDK/GTSDK.xcframework/ios-arm64_x86_64-maccatalyst/GTSDK.framework/GTSDK


+ 1 - 1
Pods/GTSDK/GTSDK.xcframework/ios-arm64_x86_64-maccatalyst/GTSDK.framework/Headers/GeTuiSdk.h

@@ -5,7 +5,7 @@
 //  Created by gexin on 15-5-5.
 //  Copyright (c) 2015年 Gexin Interactive (Beijing) Network Technology Co.,LTD. All rights reserved.
 //
-//  GTSDK-Version: 3.0.5.0
+//  GTSDK-Version: 3.0.6.0
 
 #import <Foundation/Foundation.h>
 #import <UIKit/UIKit.h>

+ 8 - 1
Pods/HWPanModal/Sources/Controller/HWPanModalPresentationController.m

@@ -83,11 +83,18 @@
 	}
 
 	__weak  typeof(self) wkSelf = self;
+	__block BOOL isAnimated = NO;
 	[self.presentedViewController.transitionCoordinator animateAlongsideTransition:^(id <UIViewControllerTransitionCoordinatorContext> context) {
 		wkSelf.backgroundView.dimState = DimStateMax;
 		[wkSelf.presentedViewController setNeedsStatusBarAppearanceUpdate];
+		isAnimated = YES;
     } completion:^(id<UIViewControllerTransitionCoordinatorContext>  _Nonnull context) {
-        
+		if (!isAnimated) {
+			/// In some cases, for example, present a `hw` when a navigation controller is pushing a new vc, `animateAlongsideTransition` will not call.
+			/// If not called, call it here.
+			wkSelf.backgroundView.dimState = DimStateMax;
+			[wkSelf.presentedViewController setNeedsStatusBarAppearanceUpdate];
+		}
         if ([[wkSelf presentable] allowsTouchEventsPassingThroughTransitionView]) {
             // hack TransitionView
             [wkSelf.containerView setValue:@(YES) forKey:@"ignoreDirectTouchEvents"];

+ 1 - 1
Pods/HWPanModal/Sources/Presentable/HWPanModalPresentationUpdateProtocol.h

@@ -58,6 +58,6 @@
 /**
  * call this method to dismiss your presented VC directly
  */
-- (void)hw_dismissAnimated:(BOOL)animated completion:(void (^)(void))completion NS_SWIFT_NAME(dismissAnimated(animated:completion:));
+- (void)hw_dismissAnimated:(BOOL)animated completion:(void (^)(void))completion NS_SWIFT_NAME(panModalDismissAnimated(animated:completion:));
 
 @end

+ 30 - 7
Pods/HWPanModal/Sources/View/PanModal/HWPanModalContainerView.m

@@ -87,6 +87,25 @@
     }
 }
 
+- (void)willMoveToSuperview:(UIView *)newSuperview {
+	[super willMoveToSuperview:newSuperview];
+	if (UIDevice.currentDevice.userInterfaceIdiom == UIUserInterfaceIdiomPad) {
+		[self.superview removeObserver:self forKeyPath:@"frame"];
+		[newSuperview addObserver:self forKeyPath:@"frame" options:NSKeyValueObservingOptionNew context:nil];
+	}
+}
+
+- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
+	if (object == self.presentingView && [keyPath isEqualToString:@"frame"]) {
+		self.frame = self.presentingView.bounds;
+		[self setNeedsLayoutUpdate];
+		[self updateDragIndicatorViewFrame];
+		[self.contentView hw_panModalTransitionTo:self.contentView.hw_presentationState animated:NO];
+	} else {
+		[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
+	}
+}
+
 - (void)presentAnimationWillBegin {
     [[self presentable] panModalTransitionWillBegin];
     [self layoutBackgroundView];
@@ -251,31 +270,35 @@
 
 - (void)updateDragIndicatorView {
     if ([self.presentable showDragIndicator]) {
-        [self addDragIndicatorViewToView:self.panContainerView];
+        [self addDragIndicatorView];
     } else {
         self.dragIndicatorView.hidden = YES;
     }
 }
 
-- (void)addDragIndicatorViewToView:(UIView *)view {
+- (void)addDragIndicatorView {
     // if has been add, won't update it.
     self.dragIndicatorView.hidden = NO;
 
-    if (self.dragIndicatorView.superview == view) {
+    if (self.dragIndicatorView.superview == self.panContainerView) {
+		[self updateDragIndicatorViewFrame];
         [self.dragIndicatorView didChangeToState:HWIndicatorStateNormal];
         return;
     }
 
     self.handler.dragIndicatorView = self.dragIndicatorView;
-    [view addSubview:self.dragIndicatorView];
-    CGSize indicatorSize = [self.dragIndicatorView indicatorSize];
-
-    self.dragIndicatorView.frame = CGRectMake((view.hw_width - indicatorSize.width) / 2, -kIndicatorYOffset - indicatorSize.height, indicatorSize.width, indicatorSize.height);
+    [self.panContainerView addSubview:self.dragIndicatorView];
+	[self updateDragIndicatorViewFrame];
 
     [self.dragIndicatorView setupSubviews];
     [self.dragIndicatorView didChangeToState:HWIndicatorStateNormal];
 }
 
+- (void)updateDragIndicatorViewFrame {
+	CGSize indicatorSize = [self.dragIndicatorView indicatorSize];
+	self.dragIndicatorView.frame = CGRectMake((self.panContainerView.hw_width - indicatorSize.width) / 2, -kIndicatorYOffset - indicatorSize.height, indicatorSize.width, indicatorSize.height);
+}
+
 - (void)updateContainerViewShadow {
     HWPanModalShadow *shadow = [[self presentable] contentShadow];
     if (shadow.shadowColor) {

+ 5 - 2
Pods/IQKeyboardManager/README.md

@@ -31,8 +31,11 @@ While developing iOS apps, we often run into issues where the iPhone keyboard sl
 
 
 ## Screenshot
-[![IQKeyboardManager](https://raw.githubusercontent.com/hackiftekhar/IQKeyboardManager/v3.3.0/Screenshot/IQKeyboardManagerScreenshot.png)](http://youtu.be/6nhLw6hju2A)
-[![Settings](https://raw.githubusercontent.com/hackiftekhar/IQKeyboardManager/v3.3.0/Screenshot/IQKeyboardManagerSettings.png)](http://youtu.be/6nhLw6hju2A)
+[![Screenshot 1](https://raw.githubusercontent.com/hackiftekhar/IQKeyboardManager/master/Screenshot/README_Screenshot1.png)](http://youtu.be/6nhLw6hju2A)
+[![Screenshot 2](https://raw.githubusercontent.com/hackiftekhar/IQKeyboardManager/master/Screenshot/README_Screenshot2.png)](http://youtu.be/6nhLw6hju2A)
+[![Screenshot 3](https://raw.githubusercontent.com/hackiftekhar/IQKeyboardManager/master/Screenshot/README_Screenshot3.png)](http://youtu.be/6nhLw6hju2A)
+[![Screenshot 4](https://raw.githubusercontent.com/hackiftekhar/IQKeyboardManager/master/Screenshot/README_Screenshot4.png)](http://youtu.be/6nhLw6hju2A)
+[![Screenshot 5](https://raw.githubusercontent.com/hackiftekhar/IQKeyboardManager/master/Screenshot/README_Screenshot5.png)](http://youtu.be/6nhLw6hju2A)
 
 ## GIF animation
 [![IQKeyboardManager](https://raw.githubusercontent.com/hackiftekhar/IQKeyboardManager/v3.3.0/Screenshot/IQKeyboardManager.gif)](http://youtu.be/6nhLw6hju2A)

+ 13 - 3
Pods/JXCategoryView/Sources/Base/JXCategoryBaseView.m

@@ -462,7 +462,11 @@ struct DelegateFlags {
     CGFloat minX = 0;
     CGFloat maxX = totalItemWidth - self.bounds.size.width;
     CGFloat targetX = frameXOfSelectedCell - self.bounds.size.width/2.0 + selectedCellWidth/2.0;
-    [self.collectionView setContentOffset:CGPointMake(MAX(MIN(maxX, targetX), minX), 0) animated:NO];
+    CGPoint collectionViewContentOffset = self.collectionView.contentOffset;
+    collectionViewContentOffset.x = MAX(MIN(maxX, targetX), minX);
+    
+    [self.collectionView setContentOffset:collectionViewContentOffset
+                                 animated:NO];
     //---------------------定位collectionView到当前选中的位置----------------------
 
     if (CGRectEqualToRect(self.contentScrollView.frame, CGRectZero) && self.contentScrollView.superview != nil) {
@@ -476,7 +480,9 @@ struct DelegateFlags {
         [parentView layoutIfNeeded];
     }
     //将contentScrollView的contentOffset定位到当前选中index的位置
-    [self.contentScrollView setContentOffset:CGPointMake(self.selectedIndex*self.contentScrollView.bounds.size.width, 0) animated:NO];
+    CGPoint contentScrollViewContentOffset = self.contentScrollView.contentOffset;
+    contentScrollViewContentOffset.x = self.selectedIndex*self.contentScrollView.bounds.size.width;
+    [self.contentScrollView setContentOffset:contentScrollViewContentOffset animated:NO];
 }
 
 - (BOOL)selectCellAtIndex:(NSInteger)targetIndex selectedType:(JXCategoryCellSelectedType)selectedType {
@@ -540,7 +546,11 @@ struct DelegateFlags {
 
     if (selectedType == JXCategoryCellSelectedTypeClick ||
         selectedType == JXCategoryCellSelectedTypeCode) {
-        [self.contentScrollView setContentOffset:CGPointMake(targetIndex*self.contentScrollView.bounds.size.width, 0) animated:self.isContentScrollViewClickTransitionAnimationEnabled];
+        CGPoint offset = self.contentScrollView.contentOffset;
+        offset.x =
+        targetIndex*self.contentScrollView.bounds.size.width;
+        [self.contentScrollView setContentOffset:offset
+                                        animated:self.isContentScrollViewClickTransitionAnimationEnabled];
     }
 
     self.selectedIndex = targetIndex;

+ 13 - 2
Pods/JXCategoryView/Sources/Common/JXCategoryListContainerView.m

@@ -172,7 +172,9 @@
             [_validListDict enumerateKeysAndObjectsUsingBlock:^(NSNumber * _Nonnull index, id<JXCategoryListContentViewDelegate>  _Nonnull list, BOOL * _Nonnull stop) {
                 [list listView].frame = CGRectMake(index.intValue*self.scrollView.bounds.size.width, 0, self.scrollView.bounds.size.width, self.scrollView.bounds.size.height);
             }];
-            self.scrollView.contentOffset = CGPointMake(self.currentIndex*self.scrollView.bounds.size.width, 0);
+            CGPoint scrollViewContentOffset = self.scrollView.contentOffset;
+            scrollViewContentOffset.x = self.currentIndex*self.scrollView.bounds.size.width;
+            self.scrollView.contentOffset = scrollViewContentOffset;
         }else {
             self.scrollView.frame = self.bounds;
             self.scrollView.contentSize = CGSizeMake(self.scrollView.bounds.size.width*[self.delegate numberOfListsInlistContainerView:self], self.scrollView.bounds.size.height);
@@ -182,7 +184,10 @@
             [self.collectionView.collectionViewLayout invalidateLayout];
             self.collectionView.frame = self.bounds;
             [self.collectionView reloadData];
-            [self.collectionView setContentOffset:CGPointMake(self.collectionView.bounds.size.width*self.currentIndex, 0) animated:NO];
+            CGPoint collectionViewContentOffset = self.collectionView.contentOffset;
+            collectionViewContentOffset.x =
+            self.collectionView.bounds.size.width*self.currentIndex;
+            [self.collectionView setContentOffset:collectionViewContentOffset animated:NO];
         }else {
             self.collectionView.frame = self.bounds;
         }
@@ -241,6 +246,12 @@
         [cell.contentView addSubview:listView];
     }
     
+    // 针对 RTL 布局
+    if ([UIView userInterfaceLayoutDirectionForSemanticContentAttribute:self.semanticContentAttribute]
+        == UIUserInterfaceLayoutDirectionRightToLeft) {
+        cell.contentView.transform = CGAffineTransformMakeScale(-1, 1);
+    }
+    
     return cell;
 }
 

+ 1 - 1
Pods/JXCategoryView/Sources/RLTManager/RTLManager.h

@@ -5,7 +5,7 @@
 //  Created by jiaxin on 2020/7/3.
 //
 
-#import <Foundation/Foundation.h>
+#import <UIKit/UIKit.h>
 
 NS_ASSUME_NONNULL_BEGIN
 

+ 7 - 0
Pods/KSAdSDK/KSAdSDK.xcframework/ios-arm64_armv7/KSAdSDK.framework/Headers/KSAdInteractionType.h

@@ -20,4 +20,11 @@ typedef NS_ENUM(NSInteger, KSAdMaterialType) {
     KSAdMaterialTypeAtlas       =       5,      // multiple image
 };
 
+typedef NS_ENUM(NSInteger, KSAdDerivativeMaterialType) {
+    KSAdDerivativeMaterialTypeVerticalVideo          = 1,  //竖版视频
+    KSAdDerivativeMaterialTypeHorizontalVideo        = 2,  //横版视频
+    KSAdDerivativeMaterialTypeVerticalImage          = 5,  //竖版图片
+    KSAdDerivativeMaterialTypeHorizontalImage        = 6,  //横版图片
+};
+
 

+ 24 - 0
Pods/KSAdSDK/KSAdSDK.xcframework/ios-arm64_armv7/KSAdSDK.framework/Headers/KSAdSDK.h

@@ -135,3 +135,27 @@
 #elif __has_include(<KSAdSDK/KSAdInfoData.h>)
     #import <KSAdSDK/KSAdInfoData.h>
 #endif
+
+#if __has_include(<KSUModel/KSAdLiveInfoData.h>)
+#import <KSUModel/KSAdLiveInfoData.h>
+#else
+#import <KSAdSDK/KSAdLiveInfoData.h>
+#endif
+
+#if __has_include(<KSUModel/KSAdLiveBaseData.h>)
+    #import <KSUModel/KSAdLiveBaseData.h>
+#elif __has_include(<KSAdSDK/KSAdLiveBaseData.h>)
+    #import <KSAdSDK/KSAdLiveBaseData.h>
+#endif
+
+#if __has_include(<KSUModel/KSAdLiveShopData.h>)
+    #import <KSUModel/KSAdLiveShopData.h>
+#elif __has_include(<KSAdSDK/KSAdLiveShopData.h>)
+    #import <KSAdSDK/KSAdLiveShopData.h>
+#endif
+
+#if __has_include(<KSUModel/KSAdCouponData.h>)
+    #import <KSUModel/KSAdCouponData.h>
+#elif __has_include(<KSAdSDK/KSAdCouponData.h>)
+    #import <KSAdSDK/KSAdCouponData.h>
+#endif

+ 0 - 2
Pods/KSAdSDK/KSAdSDK.xcframework/ios-arm64_armv7/KSAdSDK.framework/Headers/KSAdSDKManager.h

@@ -106,8 +106,6 @@ typedef NS_ENUM(NSInteger, KSAdFeedVideoAutoPlayType) {
 // optional
 + (void)setLoglevel:(KSAdSDKLogLevel)level;
 
-+ (void)setAutoHideUIRemoteKeyboardWindow:(BOOL)autoHideUIRemoteKeyboardWindow;
-
 // optional, disable use location status, default is NO
 + (void)setDisableUseLocationStatus:(BOOL)disable;
 

+ 9 - 0
Pods/KSAdSDK/KSAdSDK.xcframework/ios-arm64_armv7/KSAdSDK.framework/Headers/KSNativeAd.h

@@ -10,6 +10,11 @@
 
 #import "KSAd.h"
 #import "KSMaterialMeta.h"
+#if __has_include(<KSUModel/KSAdLiveInfoData.h>)
+#import <KSUModel/KSAdLiveInfoData.h>
+#else
+#import "KSAdLiveInfoData.h"
+#endif
 
 NS_ASSUME_NONNULL_BEGIN
 
@@ -21,6 +26,10 @@ NS_ASSUME_NONNULL_BEGIN
  Ad material.
  */
 @property (nonatomic, strong, readonly, nullable) KSMaterialMeta *data;
+/**
+ Live Ad Info.
+ */
+@property (nonatomic, strong, readonly, nullable) KSAdLiveInfoData *adLiveInfoData;
 
 /**
  The delegate for receiving state change messages.

+ 3 - 0
Pods/KSAdSDK/KSAdSDK.xcframework/ios-arm64_armv7/KSAdSDK.framework/Headers/KSSplashAdView.h

@@ -10,6 +10,7 @@
 #import "KSAd.h"
 #import "KSAdInteractionType.h"
 #import "KSAdSplashAdExtraDataModel.h"
+#import "KSAdShowDirection.h"
 #if __has_include(<KSUModel/KSAdInfoData.h>)
 #import <KSUModel/KSAdInfoData.h>
 #else
@@ -86,6 +87,8 @@ NS_ASSUME_NONNULL_BEGIN
 @property (nonatomic, assign, readonly) KSAdMaterialType materialType;
 @property (nonatomic, strong, readonly, nullable) KSAdInfoData *adInfoData;
 
+@property (nonatomic, assign) KSAdShowDirection direction;
+
 - (id)initWithPosId:(NSString *)posId;
 - (void)setExtraData:(KSAdSplashAdExtraDataModel *)extraDataModel;
 /// load ad data

BIN
Pods/KSAdSDK/KSAdSDK.xcframework/ios-arm64_armv7/KSAdSDK.framework/Info.plist


BIN
Pods/KSAdSDK/KSAdSDK.xcframework/ios-arm64_armv7/KSAdSDK.framework/KSAdSDK


BIN
Pods/KSAdSDK/KSAdSDK.xcframework/ios-arm64_armv7/KSAdSDK.framework/KSUAdDebugToolResource.bundle/Info.plist


+ 7 - 0
Pods/KSAdSDK/KSAdSDK.xcframework/ios-arm64_x86_64-simulator/KSAdSDK.framework/Headers/KSAdInteractionType.h

@@ -20,4 +20,11 @@ typedef NS_ENUM(NSInteger, KSAdMaterialType) {
     KSAdMaterialTypeAtlas       =       5,      // multiple image
 };
 
+typedef NS_ENUM(NSInteger, KSAdDerivativeMaterialType) {
+    KSAdDerivativeMaterialTypeVerticalVideo          = 1,  //竖版视频
+    KSAdDerivativeMaterialTypeHorizontalVideo        = 2,  //横版视频
+    KSAdDerivativeMaterialTypeVerticalImage          = 5,  //竖版图片
+    KSAdDerivativeMaterialTypeHorizontalImage        = 6,  //横版图片
+};
+
 

+ 24 - 0
Pods/KSAdSDK/KSAdSDK.xcframework/ios-arm64_x86_64-simulator/KSAdSDK.framework/Headers/KSAdSDK.h

@@ -135,3 +135,27 @@
 #elif __has_include(<KSAdSDK/KSAdInfoData.h>)
     #import <KSAdSDK/KSAdInfoData.h>
 #endif
+
+#if __has_include(<KSUModel/KSAdLiveInfoData.h>)
+#import <KSUModel/KSAdLiveInfoData.h>
+#else
+#import <KSAdSDK/KSAdLiveInfoData.h>
+#endif
+
+#if __has_include(<KSUModel/KSAdLiveBaseData.h>)
+    #import <KSUModel/KSAdLiveBaseData.h>
+#elif __has_include(<KSAdSDK/KSAdLiveBaseData.h>)
+    #import <KSAdSDK/KSAdLiveBaseData.h>
+#endif
+
+#if __has_include(<KSUModel/KSAdLiveShopData.h>)
+    #import <KSUModel/KSAdLiveShopData.h>
+#elif __has_include(<KSAdSDK/KSAdLiveShopData.h>)
+    #import <KSAdSDK/KSAdLiveShopData.h>
+#endif
+
+#if __has_include(<KSUModel/KSAdCouponData.h>)
+    #import <KSUModel/KSAdCouponData.h>
+#elif __has_include(<KSAdSDK/KSAdCouponData.h>)
+    #import <KSAdSDK/KSAdCouponData.h>
+#endif

+ 0 - 2
Pods/KSAdSDK/KSAdSDK.xcframework/ios-arm64_x86_64-simulator/KSAdSDK.framework/Headers/KSAdSDKManager.h

@@ -106,8 +106,6 @@ typedef NS_ENUM(NSInteger, KSAdFeedVideoAutoPlayType) {
 // optional
 + (void)setLoglevel:(KSAdSDKLogLevel)level;
 
-+ (void)setAutoHideUIRemoteKeyboardWindow:(BOOL)autoHideUIRemoteKeyboardWindow;
-
 // optional, disable use location status, default is NO
 + (void)setDisableUseLocationStatus:(BOOL)disable;
 

+ 9 - 0
Pods/KSAdSDK/KSAdSDK.xcframework/ios-arm64_x86_64-simulator/KSAdSDK.framework/Headers/KSNativeAd.h

@@ -10,6 +10,11 @@
 
 #import "KSAd.h"
 #import "KSMaterialMeta.h"
+#if __has_include(<KSUModel/KSAdLiveInfoData.h>)
+#import <KSUModel/KSAdLiveInfoData.h>
+#else
+#import "KSAdLiveInfoData.h"
+#endif
 
 NS_ASSUME_NONNULL_BEGIN
 
@@ -21,6 +26,10 @@ NS_ASSUME_NONNULL_BEGIN
  Ad material.
  */
 @property (nonatomic, strong, readonly, nullable) KSMaterialMeta *data;
+/**
+ Live Ad Info.
+ */
+@property (nonatomic, strong, readonly, nullable) KSAdLiveInfoData *adLiveInfoData;
 
 /**
  The delegate for receiving state change messages.

+ 3 - 0
Pods/KSAdSDK/KSAdSDK.xcframework/ios-arm64_x86_64-simulator/KSAdSDK.framework/Headers/KSSplashAdView.h

@@ -10,6 +10,7 @@
 #import "KSAd.h"
 #import "KSAdInteractionType.h"
 #import "KSAdSplashAdExtraDataModel.h"
+#import "KSAdShowDirection.h"
 #if __has_include(<KSUModel/KSAdInfoData.h>)
 #import <KSUModel/KSAdInfoData.h>
 #else
@@ -86,6 +87,8 @@ NS_ASSUME_NONNULL_BEGIN
 @property (nonatomic, assign, readonly) KSAdMaterialType materialType;
 @property (nonatomic, strong, readonly, nullable) KSAdInfoData *adInfoData;
 
+@property (nonatomic, assign) KSAdShowDirection direction;
+
 - (id)initWithPosId:(NSString *)posId;
 - (void)setExtraData:(KSAdSplashAdExtraDataModel *)extraDataModel;
 /// load ad data

BIN
Pods/KSAdSDK/KSAdSDK.xcframework/ios-arm64_x86_64-simulator/KSAdSDK.framework/Info.plist


BIN
Pods/KSAdSDK/KSAdSDK.xcframework/ios-arm64_x86_64-simulator/KSAdSDK.framework/KSAdSDK


BIN
Pods/KSAdSDK/KSAdSDK.xcframework/ios-arm64_x86_64-simulator/KSAdSDK.framework/KSUAdDebugToolResource.bundle/Info.plist


+ 4 - 4
Pods/KSAdSDK/KSAdSDK.xcframework/ios-arm64_x86_64-simulator/KSAdSDK.framework/_CodeSignature/CodeResources

@@ -10,11 +10,11 @@
 		</data>
 		<key>Headers/KSAdSDK.h</key>
 		<data>
-		NzPkxyjz6+PSJshy8UTVWsWgRqo=
+		pqQbQSn6i92BimyEGkliFgSFxxo=
 		</data>
 		<key>Info.plist</key>
 		<data>
-		/Sdn1Vh1XsCC2vKx32lmX1zYVK4=
+		DGOnggpddZjXHL+QuQC29GrzIAU=
 		</data>
 		<key>Modules/module.modulemap</key>
 		<data>
@@ -38,11 +38,11 @@
 		<dict>
 			<key>hash</key>
 			<data>
-			NzPkxyjz6+PSJshy8UTVWsWgRqo=
+			pqQbQSn6i92BimyEGkliFgSFxxo=
 			</data>
 			<key>hash2</key>
 			<data>
-			byk/9m1ds1/SSdA3074o1q7Lznzuig/fyeHcdFJ8aq0=
+			KWRv/mLf2LzAuO4NoPLwwdwixn7mHvqf92Ac7jRGFGs=
 			</data>
 		</dict>
 		<key>Modules/module.modulemap</key>

+ 71 - 71
Pods/Manifest.lock

@@ -1,41 +1,41 @@
 PODS:
-  - Ads-CN (5.9.1.6):
-    - Ads-CN/BUAdSDK (= 5.9.1.6)
-  - Ads-CN/BUAdSDK (5.9.1.6)
+  - Ads-CN (6.1.1.0):
+    - Ads-CN/BUAdSDK (= 6.1.1.0)
+  - Ads-CN/BUAdSDK (6.1.1.0)
   - ADSuyiKit (0.7.2.01301)
   - ADSuyiLocationManager (0.2.1.01301)
   - ADSuyiNetwork (0.2.1.06291):
     - ADSuyiKit (~> 0.7.0)
-  - ADSuyiSDK (3.9.1.03142):
+  - ADSuyiSDK (3.9.1.03144):
     - ADSuyiKit (~> 0.7.2.01301)
     - ADSuyiLocationManager (~> 0.2.1.01301)
     - ADSuyiNetwork (~> 0.2.1.0)
-    - ADSuyiSDK/core (= 3.9.1.03142)
-  - ADSuyiSDK/ADSuyiSDKPlatforms/bu (3.9.1.03142):
-    - Ads-CN (= 5.9.1.6)
+    - ADSuyiSDK/core (= 3.9.1.03144)
+  - ADSuyiSDK/ADSuyiSDKPlatforms/bu (3.9.1.03144):
+    - Ads-CN (= 6.1.1.0)
     - ADSuyiKit (~> 0.7.2.01301)
     - ADSuyiLocationManager (~> 0.2.1.01301)
     - ADSuyiNetwork (~> 0.2.1.0)
     - ADSuyiSDK/core
-  - ADSuyiSDK/ADSuyiSDKPlatforms/gdt (3.9.1.03142):
+  - ADSuyiSDK/ADSuyiSDKPlatforms/gdt (3.9.1.03144):
     - ADSuyiKit (~> 0.7.2.01301)
     - ADSuyiLocationManager (~> 0.2.1.01301)
     - ADSuyiNetwork (~> 0.2.1.0)
     - ADSuyiSDK/core
-    - GDTMobSDK (= 4.14.70)
-  - ADSuyiSDK/ADSuyiSDKPlatforms/ks (3.9.1.03142):
+    - GDTMobSDK (= 4.14.76)
+  - ADSuyiSDK/ADSuyiSDKPlatforms/ks (3.9.1.03144):
     - ADSuyiKit (~> 0.7.2.01301)
     - ADSuyiLocationManager (~> 0.2.1.01301)
     - ADSuyiNetwork (~> 0.2.1.0)
     - ADSuyiSDK/core
-    - KSAdSDK (= 3.3.61)
-  - ADSuyiSDK/ADSuyiSDKPlatforms/tianmu (3.9.1.03142):
+    - KSAdSDK (= 3.3.65)
+  - ADSuyiSDK/ADSuyiSDKPlatforms/tianmu (3.9.1.03144):
     - ADSuyiKit (~> 0.7.2.01301)
     - ADSuyiLocationManager (~> 0.2.1.01301)
     - ADSuyiNetwork (~> 0.2.1.0)
     - ADSuyiSDK/core
-    - TianmuSDK (= 2.2.1.2)
-  - ADSuyiSDK/core (3.9.1.03142):
+    - TianmuSDK (= 2.2.1.3)
+  - ADSuyiSDK/core (3.9.1.03144):
     - ADSuyiKit (~> 0.7.2.01301)
     - ADSuyiLocationManager (~> 0.2.1.01301)
     - ADSuyiNetwork (~> 0.2.1.0)
@@ -54,7 +54,6 @@ PODS:
   - AFNetworking/Serialization (4.0.1)
   - AFNetworking/UIKit (4.0.1):
     - AFNetworking/NSURLSession
-  - AlipaySDK-iOS (15.8.16)
   - BaiduMapKit (6.6.2):
     - BaiduMapKit/Base (= 6.6.2)
     - BaiduMapKit/Map (= 6.6.2)
@@ -67,7 +66,7 @@ PODS:
     - BaiduMapKit/Base
   - BaiduMapKit/Utils (6.6.2):
     - BaiduMapKit/Base
-  - BMKLocationKit (2.1.1)
+  - BMKLocationKit (2.1.2)
   - Bugly (2.6.1)
   - CGXVerticalMenuView-OC (1.2.2):
     - CGXVerticalMenuView-OC/CustomCollectionView (= 1.2.2)
@@ -123,44 +122,50 @@ PODS:
     - UICKeyChainStore (~> 2.1.0)
   - FDFullscreenPopGesture (1.1)
   - FLAnimatedImage (1.0.17)
-  - FMDB (2.7.10):
-    - FMDB/standard (= 2.7.10)
-  - FMDB/standard (2.7.10)
-  - GDTMobSDK (4.14.70):
-    - GDTMobSDK/GDTMobSDK (= 4.14.70)
-  - GDTMobSDK/GDTMobSDK (4.14.70)
-  - GKPhotoBrowser (2.7.6):
-    - GKPhotoBrowser/Default (= 2.7.6)
-  - GKPhotoBrowser/AVPlayer (2.7.6):
+  - FMDB (2.7.11):
+    - FMDB/standard (= 2.7.11)
+  - FMDB/standard (2.7.11)
+  - GDTMobSDK (4.14.76):
+    - GDTMobSDK/GDTMobSDK (= 4.14.76)
+  - GDTMobSDK/GDTMobSDK (4.14.76)
+  - GKLivePhotoManager (1.0.2)
+  - GKPhotoBrowser (3.0.2):
+    - GKPhotoBrowser/Default (= 3.0.2)
+  - GKPhotoBrowser/AF (3.0.2):
+    - AFNetworking
+    - GKLivePhotoManager
+    - GKPhotoBrowser/Core
+  - GKPhotoBrowser/AVPlayer (3.0.2):
     - GKPhotoBrowser/Core
-  - GKPhotoBrowser/Core (2.7.6)
-  - GKPhotoBrowser/Default (2.7.6):
+  - GKPhotoBrowser/Core (3.0.2)
+  - GKPhotoBrowser/Default (3.0.2):
+    - GKPhotoBrowser/AF
     - GKPhotoBrowser/AVPlayer
     - GKPhotoBrowser/Progress
     - GKPhotoBrowser/SD
-  - GKPhotoBrowser/Progress (2.7.6):
+  - GKPhotoBrowser/Progress (3.0.2):
     - GKPhotoBrowser/Core
     - GKSliderView
-  - GKPhotoBrowser/SD (2.7.6):
+  - GKPhotoBrowser/SD (3.0.2):
     - GKPhotoBrowser/Core
     - SDWebImage (~> 5.0)
-  - GKSliderView (1.2.0)
-  - GTCommonSDK (3.1.2.0):
+  - GKSliderView (1.2.2)
+  - GTCommonSDK (3.1.5.0):
     - ZXSDK
-  - GTSDK (3.0.5.0):
+  - GTSDK (3.0.6.0):
     - GTCommonSDK (> 3.0.9.0)
   - HappyDNS (1.0.4)
-  - HWPanModal (0.9.8)
+  - HWPanModal (0.9.9)
   - IDMPhotoBrowser (1.10.2):
     - DACircularProgress
     - pop
     - SDWebImage
   - IJKMediaFramework (0.1.5)
-  - IQKeyboardManager (6.5.18)
+  - IQKeyboardManager (6.5.19)
   - JSONModel (1.8.0)
-  - JXCategoryView (1.6.3)
+  - JXCategoryView (1.6.8)
   - JXPagingView/Pager (2.1.3)
-  - KSAdSDK (3.3.61)
+  - KSAdSDK (3.3.65)
   - KTVCocoaHTTPServer (1.0.0):
     - CocoaAsyncSocket
   - KTVHTTPCache (2.0.1):
@@ -503,31 +508,30 @@ PODS:
   - SCLAlertView-Objective-C (1.3.0)
   - SDCycleScrollView (1.82):
     - SDWebImage (>= 5.0.0)
-  - SDWebImage (5.19.1):
-    - SDWebImage/Core (= 5.19.1)
-  - SDWebImage/Core (5.19.1)
+  - SDWebImage (5.19.4):
+    - SDWebImage/Core (= 5.19.4)
+  - SDWebImage/Core (5.19.4)
   - SDWebImageWebPCoder (0.8.3):
     - libwebp (~> 1.0)
     - SDWebImage/Core (~> 5.10)
   - SGQRCode (4.1.0)
   - SocketRocket (0.6.1)
-  - TianmuSDK (2.2.1.2):
+  - TianmuSDK (2.2.1.3):
     - ADSuyiKit (~> 0.7.2.01301)
     - ADSuyiLocationManager (~> 0.2.1.01301)
     - ADSuyiNetwork (~> 0.2.1.0)
   - TTTAttributedLabel (1.13.4)
-  - TZImagePickerController (3.8.4):
-    - TZImagePickerController/Basic (= 3.8.4)
-    - TZImagePickerController/Location (= 3.8.4)
-  - TZImagePickerController/Basic (3.8.4)
-  - TZImagePickerController/Location (3.8.4)
+  - TZImagePickerController (3.8.6):
+    - TZImagePickerController/Basic (= 3.8.6)
+    - TZImagePickerController/Location (= 3.8.6)
+  - TZImagePickerController/Basic (3.8.6)
+  - TZImagePickerController/Location (3.8.6)
   - UICKeyChainStore (2.1.2)
   - UMCCommonLog (2.0.2)
-  - UMCommon (7.4.6):
+  - UMCommon (7.4.7):
     - UMDevice
   - UMDevice (3.4.0)
   - WebViewJavascriptBridge (6.0.3)
-  - WechatOpenSDK (2.0.4)
   - XHLaunchAd (3.9.12):
     - FLAnimatedImage (~> 1.0.12)
   - YYCache (1.0.4)
@@ -560,7 +564,6 @@ DEPENDENCIES:
   - ADSuyiSDK/ADSuyiSDKPlatforms/ks
   - ADSuyiSDK/ADSuyiSDKPlatforms/tianmu
   - AFNetworking
-  - AlipaySDK-iOS
   - BaiduMapKit
   - BMKLocationKit
   - Bugly
@@ -606,7 +609,6 @@ DEPENDENCIES:
   - UMCommon
   - UMDevice
   - WebViewJavascriptBridge
-  - WechatOpenSDK
   - XHLaunchAd
   - YYImage/WebP
   - YYModel
@@ -625,7 +627,6 @@ SPEC REPOS:
     - ADSuyiNetwork
     - ADSuyiSDK
     - AFNetworking
-    - AlipaySDK-iOS
     - BaiduMapKit
     - BMKLocationKit
     - Bugly
@@ -643,6 +644,7 @@ SPEC REPOS:
     - FLAnimatedImage
     - FMDB
     - GDTMobSDK
+    - GKLivePhotoManager
     - GKPhotoBrowser
     - GKSliderView
     - GTCommonSDK
@@ -688,7 +690,6 @@ SPEC REPOS:
     - UMCommon
     - UMDevice
     - WebViewJavascriptBridge
-    - WechatOpenSDK
     - XHLaunchAd
     - YYCache
     - YYImage
@@ -708,15 +709,14 @@ CHECKOUT OPTIONS:
     :git: https://github.com/Tencent/MLeaksFinder.git
 
 SPEC CHECKSUMS:
-  Ads-CN: 3ff100f798812f564a68bddeb6a0b19fe88999c6
+  Ads-CN: 2a056c03dffbfcc51c13a237bc8c877cbf2ba8f1
   ADSuyiKit: c2eb0f56ff335a13193c13c7f5d6182fdd71bc13
   ADSuyiLocationManager: 498421794430a1554dd85beac729221487e8394b
   ADSuyiNetwork: e3cd29320932f9a6d523a561357a2f38de83189d
-  ADSuyiSDK: c1a01dd6b592376c50e8ae1ac897ff7be2d18c03
+  ADSuyiSDK: 021920393e01d8de58040cc6cb80c257f90d6b32
   AFNetworking: 3bd23d814e976cd148d7d44c3ab78017b744cd58
-  AlipaySDK-iOS: 5e6011fbd546e7db6b43c1f527d164ee63f3d7cb
   BaiduMapKit: 4d550ad25eca16aa49586c736456984125b92d8a
-  BMKLocationKit: 32a981ceb683790f732e5df3ab1f25652557a5b1
+  BMKLocationKit: 7048cb9f9e6cd21d803a71013d175fce57db7f77
   Bugly: 217ac2ce5f0f2626d43dbaa4f70764c953a26a31
   CGXVerticalMenuView-OC: 1f743edca2b085953dd64aaf154d6baa45125c38
   CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99
@@ -730,21 +730,22 @@ SPEC CHECKSUMS:
   FCUUID: bb054fc90cd7cd99320f9f6ff8e130fe607fba05
   FDFullscreenPopGesture: a8a620179e3d9c40e8e00256dcee1c1a27c6d0f0
   FLAnimatedImage: bbf914596368867157cc71b38a8ec834b3eeb32b
-  FMDB: eae540775bf7d0c87a5af926ae37af69effe5a19
-  GDTMobSDK: fb811b374943e502e5ae4e91fc7c6ef13472424e
-  GKPhotoBrowser: aa57bfcbcdba825927a22f5d7bfcb5b51a73fd0e
-  GKSliderView: 49480065d2155bbc219bde5f9136f785757ed8d4
-  GTCommonSDK: c9f2637a4dacb8ae05e18301ccdbdac8f88756c2
-  GTSDK: cc04d169c5c6cb8f8884849153eaac9e6ccfdd7c
+  FMDB: 57486c1117fd8e0e6b947b2f54c3f42bf8e57a4e
+  GDTMobSDK: 037a4e91a91d277d7864fa0f413599acecc6e8f4
+  GKLivePhotoManager: 203a3fc08563511b961c686e543d5560fa801331
+  GKPhotoBrowser: 4562b54681e118e5237631a8cffb0932ad480789
+  GKSliderView: 94fab41465f2ba543200f04bee401020beab4041
+  GTCommonSDK: 02831526860276875f9fc582d15905b7c4d937ae
+  GTSDK: b002384999146d5b86f1c9b56e20882ffbfd2796
   HappyDNS: aefbd28cdcda93cffac64013dfe3342a2f87ed0a
-  HWPanModal: 6951685ca7bdf147ff8a68e7d93d61f08a06dead
+  HWPanModal: b57a6717d3cdcd666bff44f9dd2a5be9f4d6f5d2
   IDMPhotoBrowser: 4bb459b1faffc228e92bccdf7c54ad6d6b7e8c37
   IJKMediaFramework: f1119f6324c96bc4654f3045a5beaa95ba0596c0
-  IQKeyboardManager: 67f92bb29b650c094c40bd11c0545b47bdd25c5b
+  IQKeyboardManager: c8665b3396bd0b79402b4c573eac345a31c7d485
   JSONModel: 02ab723958366a3fd27da57ea2af2113658762e9
-  JXCategoryView: 99cbbab7ed3fd2cb2484208c9f39461820d10a13
+  JXCategoryView: 262d503acea0b1278c79a1c25b7332ffaef4d518
   JXPagingView: afdd2e9af09c90160dd232b970d603cc6e7ddd0e
-  KSAdSDK: 7754afd132df893c0c7a493fa878cbee7af6ff3c
+  KSAdSDK: b7f90537041c6dbff0f1f8de52ea222e01149a3d
   KTVCocoaHTTPServer: df8d7b861e603ff8037e9b2138aca2563a6b768d
   KTVHTTPCache: 588c3eb16f6bd1e6fde1e230dabfb7bd4e490a4d
   libwebp: 1786c9f4ff8a279e4dac1e8f385004d5fc253009
@@ -766,19 +767,18 @@ SPEC CHECKSUMS:
   SAMKeychain: 483e1c9f32984d50ca961e26818a534283b4cd5c
   SCLAlertView-Objective-C: c17253cf0ce7543de3f9e4c7bd9341c1dd55c175
   SDCycleScrollView: a0d74c3384caa72bdfc81470bdbc8c14b3e1fbcf
-  SDWebImage: 40b0b4053e36c660a764958bff99eed16610acbb
+  SDWebImage: 066c47b573f408f18caa467d71deace7c0f8280d
   SDWebImageWebPCoder: bbf46e29fb8d1980a78ad3d5e9b4123c77f10ebc
   SGQRCode: 6ad664d63f38f2842503bc5087812c5a3136d924
   SocketRocket: f32cd54efbe0f095c4d7594881e52619cfe80b17
-  TianmuSDK: 7ed66176103dfaf298e0820603396a49678f336b
+  TianmuSDK: d814a2c5cef2a8f07e5c084aba528fe029509aa9
   TTTAttributedLabel: 0a2ac7b2dd726d32a070dafb01446026b11e624f
-  TZImagePickerController: f1c9f1cae6ac0e30b31aaa9698f9bf4a7cf5b84f
+  TZImagePickerController: a013c186415f6044914bb0d0dd960a884cff46ec
   UICKeyChainStore: 85db518bb1d294366d15ec9b92a416c4e670518f
   UMCCommonLog: bea707e50c85cef4b0eb47cc5c7226bb843245ca
-  UMCommon: 9399105b64e099c3c66aad21fc85ae695567a1f1
+  UMCommon: 8b4cd0423297c39bca6eea1ec896558b40e5bcf7
   UMDevice: dcdf7ec167387837559d149fbc7d793d984faf82
   WebViewJavascriptBridge: 7f5bc4d3581e672e8f32bd0f812d54bc69bb8e29
-  WechatOpenSDK: 290989072e87b79d52225a01bb4e5e58f6f88593
   XHLaunchAd: 6320f9c68732667323072fc3a5f104e40fbe9cfe
   YYCache: 8105b6638f5e849296c71f331ff83891a4942952
   YYImage: 1e1b62a9997399593e4b9c4ecfbbabbf1d3f3b54
@@ -788,6 +788,6 @@ SPEC CHECKSUMS:
   ZFPlayer: 5cf39e8d9f0c2394a014b0db4767b5b5a6bffe13
   ZXSDK: 414bed508b670437a9bdf7c75d49816b8cb7b2d4
 
-PODFILE CHECKSUM: 3290c259bb61e0c21a10cf2274d2abf844cbc917
+PODFILE CHECKSUM: dac5e05a926072932c01dfefe297d192489d3c43
 
 COCOAPODS: 1.12.1

Разница между файлами не показана из-за своего большого размера
+ 5595 - 5583
Pods/Pods.xcodeproj/project.pbxproj


+ 5 - 10
Pods/Pods.xcodeproj/xcuserdata/mimasigeling.xcuserdatad/xcschemes/xcschememanagement.plist

@@ -34,11 +34,6 @@
 			<key>isShown</key>
 			<false/>
 		</dict>
-		<key>AlipaySDK-iOS.xcscheme</key>
-		<dict>
-			<key>isShown</key>
-			<false/>
-		</dict>
 		<key>BMKLocationKit.xcscheme</key>
 		<dict>
 			<key>isShown</key>
@@ -129,6 +124,11 @@
 			<key>isShown</key>
 			<false/>
 		</dict>
+		<key>GKLivePhotoManager.xcscheme</key>
+		<dict>
+			<key>isShown</key>
+			<false/>
+		</dict>
 		<key>GKPhotoBrowser-GKPhotoBrowser.Privacy.xcscheme</key>
 		<dict>
 			<key>isShown</key>
@@ -389,11 +389,6 @@
 			<key>isShown</key>
 			<false/>
 		</dict>
-		<key>WechatOpenSDK.xcscheme</key>
-		<dict>
-			<key>isShown</key>
-			<false/>
-		</dict>
 		<key>XHLaunchAd.xcscheme</key>
 		<dict>
 			<key>isShown</key>

+ 33 - 1
Pods/SDWebImage/README.md

@@ -207,10 +207,11 @@ In order to clean up things and make our core project do less things, we decided
 
 ## Installation
 
-There are four ways to use SDWebImage in your project:
+There are 5 ways to use SDWebImage in your project:
 - using CocoaPods
 - using Carthage
 - using Swift Package Manager
+- download binary XCFramework
 - manual install (build frameworks or embed Xcode Project)
 
 ### Installation with CocoaPods
@@ -270,6 +271,12 @@ If this is your first time using Carthage in the project, you'll need to go thro
 
 > NOTE: At this time, Carthage does not provide a way to build only specific repository subcomponents (or equivalent of CocoaPods's subspecs). All components and their dependencies will be built with the above command. However, you don't need to copy frameworks you aren't using into your project. For instance, if you aren't using `SDWebImageMapKit`, feel free to delete that framework from the Carthage Build directory after `carthage update` completes.
 
+> NOTE: [Apple requires SDWebImage contains signatures](https://developer.apple.com/support/third-party-SDK-requirements/). So, by default the `carthage build` binary framework does not do codesign, this will cause validation error. You can sign yourself with the Apple Developer Program identity, or using the binary framework:
+
+```
+binary "https://github.com/SDWebImage/SDWebImage/raw/master/SDWebImage.json"
+```
+
 ### Installation with Swift Package Manager (Xcode 11+)
 
 [Swift Package Manager](https://swift.org/package-manager/) (SwiftPM) is a tool for managing the distribution of Swift code as well as C-family dependency. From Xcode 11, SwiftPM got natively integrated with Xcode.
@@ -290,6 +297,31 @@ let package = Package(
 )
 ```
 
+### Download binary XCFramework
+
+From 5.19.2, SDWebImage provide the canonical official binary XCFramework on [GitHub release pages](https://github.com/SDWebImage/SDWebImage/releases).
+
++ Download XCFramework
+
+You can choose to download `SDWebImage-dynamic.xcframework.zip` for dynamic linked one, or `SDWebImage-static.xcframework.zip` for static-linked one.
+
++ Integrate to Xcode Project
+
+Drag the unzipped `.xcframework` into your Xcode Project's Framework tab.
+
++ Verify signature of binary XCFramework
+
+From Xcode 15 Apple will verify the signature of binary XCFramework, to avoid supply chain attack.
+
+The fingerprint currently should be `FC 3B 10 13 86 34 4C 50 DB 70 2A 9A D1 01 6F B5 1A 3E CC 8B 9D A9 B7 AE 47 A0 48 D4 D0 63 39 83`
+
+The certificate is stored in the repo [here](https://github.com/SDWebImage/SDWebImage/blob/master/Certificate/SDWebImage%20Signing%20Certificate.cer)
+
+The public key is stored in the repo [here](https://github.com/SDWebImage/SDWebImage/blob/master/Certificate/SDWebImage%20Signing%20Certificate.pem)
+
+See more: [Verifying the origin of your XCFrameworks](https://developer.apple.com/documentation/Xcode/verifying-the-origin-of-your-xcframeworks)
+
+
 ### Manual Installation Guide
 
 + Check your command line Xcode version

+ 1 - 1
Pods/SDWebImage/SDWebImage/Core/SDAnimatedImage.h

@@ -72,7 +72,7 @@
 
 // This class override these methods from UIImage(NSImage), and it supports NSSecureCoding.
 // You should use these methods to create a new animated image. Use other methods just call super instead.
-// @note Before 5.19, these initializer will return nil for static image (when all candidate SDAnimatedImageCoder returns nil instance), like JPEG data. After 5.19, these initializer will retry for static image as well, so JPEG data will return non-nil instance.
+// @note Before 5.19, these initializer will return nil for static image (when all candidate SDAnimatedImageCoder returns nil instance), like JPEG data. After 5.19, these initializer will retry for static image as well, so JPEG data will return non-nil instance. For vector image(PDF/SVG), always return nil.
 // @note When the animated image frame count <= 1, all the `SDAnimatedImageProvider` protocol methods will return nil or 0 value, you'd better check the frame count before usage and keep fallback.
 + (nullable instancetype)imageNamed:(nonnull NSString *)name; // Cache in memory, no Asset Catalog support
 #if __has_include(<UIKit/UITraitCollection.h>)

+ 23 - 3
Pods/SDWebImage/SDWebImage/Core/SDAnimatedImage.m

@@ -141,6 +141,12 @@ static CGFloat SDImageScaleFromPath(NSString *string) {
     if (!data || data.length == 0) {
         return nil;
     }
+    // Vector image does not supported, guard firstly
+    SDImageFormat format = [NSData sd_imageFormatForImageData:data];
+    if (format == SDImageFormatSVG || format == SDImageFormatPDF) {
+        return nil;
+    }
+    
     id<SDAnimatedImageCoder> animatedCoder = nil;
     SDImageCoderMutableOptions *mutableCoderOptions;
     if (options != nil) {
@@ -167,6 +173,10 @@ static CGFloat SDImageScaleFromPath(NSString *string) {
         if (!image) {
             return nil;
         }
+        // Vector image does not supported, guard secondly
+        if (image.sd_isVector) {
+            return nil;
+        }
 #if SD_MAC
         self = [super initWithCGImage:image.CGImage scale:MAX(scale, 1) orientation:kCGImagePropertyOrientationUp];
 #else
@@ -335,7 +345,7 @@ static CGFloat SDImageScaleFromPath(NSString *string) {
 @implementation SDAnimatedImage (Metadata)
 
 - (BOOL)sd_isAnimated {
-    return YES;
+    return self.animatedImageFrameCount > 1;
 }
 
 - (NSUInteger)sd_imageLoopCount {
@@ -347,11 +357,21 @@ static CGFloat SDImageScaleFromPath(NSString *string) {
 }
 
 - (NSUInteger)sd_imageFrameCount {
-    return self.animatedImageFrameCount;
+    NSUInteger frameCount = self.animatedImageFrameCount;
+    if (frameCount > 1) {
+        return frameCount;
+    } else {
+        return 1;
+    }
 }
 
 - (SDImageFormat)sd_imageFormat {
-    return self.animatedImageFormat;
+    NSData *animatedImageData = self.animatedImageData;
+    if (animatedImageData) {
+        return [NSData sd_imageFormatForImageData:animatedImageData];
+    } else {
+        return [super sd_imageFormat];
+    }
 }
 
 - (void)setSd_imageFormat:(SDImageFormat)sd_imageFormat {

+ 2 - 2
Pods/SDWebImage/SDWebImage/Core/SDAnimatedImageView.m

@@ -129,12 +129,12 @@
     
     // We need call super method to keep function. This will impliedly call `setNeedsDisplay`. But we have no way to avoid this when using animated image. So we call `setNeedsDisplay` again at the end.
     super.image = image;
-    if ([image.class conformsToProtocol:@protocol(SDAnimatedImage)]) {
+    if ([image.class conformsToProtocol:@protocol(SDAnimatedImage)] && [(id<SDAnimatedImage>)image animatedImageFrameCount] > 1) {
         if (!self.player) {
             id<SDAnimatedImageProvider> provider;
             // Check progressive loading
             if (self.isProgressive) {
-                provider = [self progressiveAnimatedCoderForImage:image];
+                provider = [(id<SDAnimatedImage>)image animatedCoder];
             } else {
                 provider = (id<SDAnimatedImage>)image;
             }

+ 1 - 1
Pods/SDWebImage/SDWebImage/Core/SDImageCache.h

@@ -38,7 +38,7 @@ typedef NS_OPTIONS(NSUInteger, SDImageCacheOptions) {
      * By default, we will decode the image in the background during cache query and download from the network. This can help to improve performance because when rendering image on the screen, it need to be firstly decoded. But this happen on the main queue by Core Animation.
      * However, this process may increase the memory usage as well. If you are experiencing a issue due to excessive memory consumption, This flag can prevent decode the image.
      * @note 5.14.0 introduce `SDImageCoderDecodeUseLazyDecoding`, use that for better control from codec, instead of post-processing. Which acts the similar like this option but works for SDAnimatedImage as well (this one does not)
-     * @deprecated Deprecated in v5.17.0, if you don't want force-decode, pass [.imageForceDecodePolicy] = [SDImageForceDecodePolicy.never] in context option
+     * @deprecated Deprecated in v5.17.0, if you don't want force-decode, pass [.imageForceDecodePolicy] = SDImageForceDecodePolicy.never.rawValue in context option
      */
     SDImageCacheAvoidDecodeImage API_DEPRECATED("Use SDWebImageContextImageForceDecodePolicy instead", macos(10.10, 10.10), ios(8.0, 8.0), tvos(9.0, 9.0), watchos(2.0, 2.0)) = 1 << 4,
     /**

+ 7 - 7
Pods/SDWebImage/SDWebImage/Core/SDImageCache.m

@@ -435,12 +435,12 @@ static NSString * _defaultDiskCacheDirectory;
     NSData *data = [self diskImageDataForKey:key];
     UIImage *diskImage = [self diskImageForKey:key data:data options:options context:context];
     
-    BOOL shouldCacheToMomery = YES;
+    BOOL shouldCacheToMemory = YES;
     if (context[SDWebImageContextStoreCacheType]) {
         SDImageCacheType cacheType = [context[SDWebImageContextStoreCacheType] integerValue];
-        shouldCacheToMomery = (cacheType == SDImageCacheTypeAll || cacheType == SDImageCacheTypeMemory);
+        shouldCacheToMemory = (cacheType == SDImageCacheTypeAll || cacheType == SDImageCacheTypeMemory);
     }
-    if (shouldCacheToMomery) {
+    if (shouldCacheToMemory) {
         // check if we need sync logic
         [self _syncDiskToMemoryWithImage:diskImage forKey:key];
     }
@@ -683,20 +683,20 @@ static NSString * _defaultDiskCacheDirectory;
             // the image is from in-memory cache, but need image data
             diskImage = image;
         } else if (diskData) {
-            BOOL shouldCacheToMomery = YES;
+            BOOL shouldCacheToMemory = YES;
             if (context[SDWebImageContextStoreCacheType]) {
                 SDImageCacheType cacheType = [context[SDWebImageContextStoreCacheType] integerValue];
-                shouldCacheToMomery = (cacheType == SDImageCacheTypeAll || cacheType == SDImageCacheTypeMemory);
+                shouldCacheToMemory = (cacheType == SDImageCacheTypeAll || cacheType == SDImageCacheTypeMemory);
             }
             // Special case: If user query image in list for the same URL, to avoid decode and write **same** image object into disk cache multiple times, we query and check memory cache here again.
-            if (shouldCacheToMomery && self.config.shouldCacheImagesInMemory) {
+            if (shouldCacheToMemory && self.config.shouldCacheImagesInMemory) {
                 diskImage = [self.memoryCache objectForKey:key];
             }
             // decode image data only if in-memory cache missed
             if (!diskImage) {
                 diskImage = [self diskImageForKey:key data:diskData options:options context:context];
                 // check if we need sync logic
-                if (shouldCacheToMomery) {
+                if (shouldCacheToMemory) {
                     [self _syncDiskToMemoryWithImage:diskImage forKey:key];
                 }
             }

+ 3 - 3
Pods/SDWebImage/SDWebImage/Core/SDImageCacheDefine.m

@@ -124,9 +124,9 @@ UIImage * _Nullable SDImageCacheDecodeImageData(NSData * _Nonnull imageData, NSS
     }
     if (image) {
         SDImageForceDecodePolicy policy = SDImageForceDecodePolicyAutomatic;
-        NSNumber *polivyValue = context[SDWebImageContextImageForceDecodePolicy];
-        if (polivyValue != nil) {
-            policy = polivyValue.unsignedIntegerValue;
+        NSNumber *policyValue = context[SDWebImageContextImageForceDecodePolicy];
+        if (policyValue != nil) {
+            policy = policyValue.unsignedIntegerValue;
         }
         // TODO: Deprecated, remove in SD 6.0...
 #pragma clang diagnostic push

+ 11 - 10
Pods/SDWebImage/SDWebImage/Core/SDImageCoderHelper.m

@@ -290,22 +290,23 @@ static const CGFloat kDestSeemOverlap = 2.0f;   // the numbers of pixels to over
 }
 
 + (CGColorSpaceRef)colorSpaceGetDeviceRGB {
+#if SD_MAC
+    NSScreen *mainScreen = nil;
+    if (@available(macOS 10.12, *)) {
+        mainScreen = [NSScreen mainScreen];
+    } else {
+        mainScreen = [NSScreen screens].firstObject;
+    }
+    CGColorSpaceRef colorSpace = mainScreen.colorSpace.CGColorSpace;
+    return colorSpace;
+#else
     static CGColorSpaceRef colorSpace;
     static dispatch_once_t onceToken;
     dispatch_once(&onceToken, ^{
-#if SD_MAC
-        NSScreen *mainScreen = nil;
-        if (@available(macOS 10.12, *)) {
-            mainScreen = [NSScreen mainScreen];
-        } else {
-            mainScreen = [NSScreen screens].firstObject;
-        }
-        colorSpace = mainScreen.colorSpace.CGColorSpace;
-#else
         colorSpace = CGColorSpaceCreateWithName(kCGColorSpaceSRGB);
-#endif
     });
     return colorSpace;
+#endif
 }
 
 + (SDImagePixelFormat)preferredPixelFormat:(BOOL)containsAlpha {

+ 6 - 6
Pods/SDWebImage/SDWebImage/Core/SDImageLoader.m

@@ -75,9 +75,9 @@ UIImage * _Nullable SDImageLoaderDecodeImageData(NSData * _Nonnull imageData, NS
     }
     if (image) {
         SDImageForceDecodePolicy policy = SDImageForceDecodePolicyAutomatic;
-        NSNumber *polivyValue = context[SDWebImageContextImageForceDecodePolicy];
-        if (polivyValue != nil) {
-            policy = polivyValue.unsignedIntegerValue;
+        NSNumber *policyValue = context[SDWebImageContextImageForceDecodePolicy];
+        if (policyValue != nil) {
+            policy = policyValue.unsignedIntegerValue;
         }
         // TODO: Deprecated, remove in SD 6.0...
 #pragma clang diagnostic push
@@ -156,9 +156,9 @@ UIImage * _Nullable SDImageLoaderDecodeProgressiveImageData(NSData * _Nonnull im
     }
     if (image) {
         SDImageForceDecodePolicy policy = SDImageForceDecodePolicyAutomatic;
-        NSNumber *polivyValue = context[SDWebImageContextImageForceDecodePolicy];
-        if (polivyValue != nil) {
-            policy = polivyValue.unsignedIntegerValue;
+        NSNumber *policyValue = context[SDWebImageContextImageForceDecodePolicy];
+        if (policyValue != nil) {
+            policy = policyValue.unsignedIntegerValue;
         }
         // TODO: Deprecated, remove in SD 6.0...
 #pragma clang diagnostic push

+ 1 - 1
Pods/SDWebImage/SDWebImage/Core/SDWebImageDefine.h

@@ -175,7 +175,7 @@ typedef NS_OPTIONS(NSUInteger, SDWebImageOptions) {
      * By default, we will decode the image in the background during cache query and download from the network. This can help to improve performance because when rendering image on the screen, it need to be firstly decoded. But this happen on the main queue by Core Animation.
      * However, this process may increase the memory usage as well. If you are experiencing an issue due to excessive memory consumption, This flag can prevent decode the image.
      * @note 5.14.0 introduce `SDImageCoderDecodeUseLazyDecoding`, use that for better control from codec, instead of post-processing. Which acts the similar like this option but works for SDAnimatedImage as well (this one does not)
-     * @deprecated Deprecated in v5.17.0, if you don't want force-decode, pass [.imageForceDecodePolicy] = [SDImageForceDecodePolicy.never] in context option
+     * @deprecated Deprecated in v5.17.0, if you don't want force-decode, pass [.imageForceDecodePolicy] = SDImageForceDecodePolicy.never.rawValue in context option
      */
     SDWebImageAvoidDecodeImage API_DEPRECATED("Use SDWebImageContextImageForceDecodePolicy instead", macos(10.10, 10.10), ios(8.0, 8.0), tvos(9.0, 9.0), watchos(2.0, 2.0)) = 1 << 18,
     

+ 9 - 6
Pods/SDWebImage/SDWebImage/Core/SDWebImageDefine.m

@@ -83,9 +83,10 @@ inline UIImage * _Nullable SDScaledImageForScaleFactor(CGFloat scale, UIImage *
                 scaledImage = [[image.class alloc] initWithData:data scale:scale];
             }
         }
-        if (scaledImage) {
-            return scaledImage;
-        }
+    }
+    if (scaledImage) {
+        SDImageCopyAssociatedObject(image, scaledImage);
+        return scaledImage;
     }
     if (image.sd_isAnimated) {
         UIImage *animatedImage;
@@ -100,7 +101,6 @@ inline UIImage * _Nullable SDScaledImageForScaleFactor(CGFloat scale, UIImage *
         }
         
         animatedImage = [UIImage animatedImageWithImages:scaledImages duration:image.duration];
-        animatedImage.sd_imageLoopCount = image.sd_imageLoopCount;
 #else
         // Animated GIF for `NSImage` need to grab `NSBitmapImageRep`;
         NSRect imageRect = NSMakeRect(0, 0, image.size.width, image.size.height);
@@ -124,9 +124,12 @@ inline UIImage * _Nullable SDScaledImageForScaleFactor(CGFloat scale, UIImage *
         scaledImage = [[UIImage alloc] initWithCGImage:image.CGImage scale:scale orientation:kCGImagePropertyOrientationUp];
 #endif
     }
-    SDImageCopyAssociatedObject(image, scaledImage);
+    if (scaledImage) {
+        SDImageCopyAssociatedObject(image, scaledImage);
+        return scaledImage;
+    }
     
-    return scaledImage;
+    return nil;
 }
 
 #pragma mark - Context option

+ 2 - 2
Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloader.h

@@ -75,7 +75,7 @@ typedef NS_OPTIONS(NSUInteger, SDWebImageDownloaderOptions) {
      * By default, we will decode the image in the background during cache query and download from the network. This can help to improve performance because when rendering image on the screen, it need to be firstly decoded. But this happen on the main queue by Core Animation.
      * However, this process may increase the memory usage as well. If you are experiencing a issue due to excessive memory consumption, This flag can prevent decode the image.
      * @note 5.14.0 introduce `SDImageCoderDecodeUseLazyDecoding`, use that for better control from codec, instead of post-processing. Which acts the similar like this option but works for SDAnimatedImage as well (this one does not)
-     * @deprecated Deprecated in v5.17.0, if you don't want force-decode, pass [.imageForceDecodePolicy] = [SDImageForceDecodePolicy.never] in context option
+     * @deprecated Deprecated in v5.17.0, if you don't want force-decode, pass [.imageForceDecodePolicy] = SDImageForceDecodePolicy.never.rawValue in context option
      */
     SDWebImageDownloaderAvoidDecodeImage API_DEPRECATED("Use SDWebImageContextImageForceDecodePolicy instead", macos(10.10, 10.10), ios(8.0, 8.0), tvos(9.0, 9.0), watchos(2.0, 2.0)) = 1 << 9,
     
@@ -137,7 +137,7 @@ typedef SDImageLoaderCompletedBlock SDWebImageDownloaderCompletedBlock;
 /**
  The download's metrics. This will be nil if download operation does not support metrics.
  */
-@property (nonatomic, strong, nullable, readonly) NSURLSessionTaskMetrics *metrics API_AVAILABLE(macosx(10.12), ios(10.0), watchos(3.0), tvos(10.0));
+@property (nonatomic, strong, nullable, readonly) NSURLSessionTaskMetrics *metrics API_AVAILABLE(macos(10.12), ios(10.0), watchos(3.0), tvos(10.0));
 
 @end
 

+ 2 - 2
Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloader.m

@@ -27,7 +27,7 @@ static void * SDWebImageDownloaderContext = &SDWebImageDownloaderContext;
 @property (nonatomic, strong, nullable, readwrite) NSURL *url;
 @property (nonatomic, strong, nullable, readwrite) NSURLRequest *request;
 @property (nonatomic, strong, nullable, readwrite) NSURLResponse *response;
-@property (nonatomic, strong, nullable, readwrite) NSURLSessionTaskMetrics *metrics API_AVAILABLE(macosx(10.12), ios(10.0), watchos(3.0), tvos(10.0));
+@property (nonatomic, strong, nullable, readwrite) NSURLSessionTaskMetrics *metrics API_AVAILABLE(macos(10.12), ios(10.0), watchos(3.0), tvos(10.0));
 @property (nonatomic, weak, nullable, readwrite) id downloadOperationCancelToken;
 @property (nonatomic, weak, nullable) NSOperation<SDWebImageDownloaderOperation> *downloadOperation;
 @property (nonatomic, assign, getter=isCancelled) BOOL cancelled;
@@ -534,7 +534,7 @@ didReceiveResponse:(NSURLResponse *)response
     }
 }
 
-- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didFinishCollectingMetrics:(NSURLSessionTaskMetrics *)metrics API_AVAILABLE(macosx(10.12), ios(10.0), watchos(3.0), tvos(10.0)) {
+- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didFinishCollectingMetrics:(NSURLSessionTaskMetrics *)metrics API_AVAILABLE(macos(10.12), ios(10.0), watchos(3.0), tvos(10.0)) {
     
     // Identify the operation that runs this task and pass it the delegate method
     NSOperation<SDWebImageDownloaderOperation> *dataOperation = [self operationWithTask:task];

+ 2 - 2
Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderOperation.h

@@ -40,7 +40,7 @@
 
 @optional
 @property (strong, nonatomic, readonly, nullable) NSURLSessionTask *dataTask;
-@property (strong, nonatomic, readonly, nullable) NSURLSessionTaskMetrics *metrics API_AVAILABLE(macosx(10.12), ios(10.0), watchos(3.0), tvos(10.0));
+@property (strong, nonatomic, readonly, nullable) NSURLSessionTaskMetrics *metrics API_AVAILABLE(macos(10.12), ios(10.0), watchos(3.0), tvos(10.0));
 
 // These operation-level config was inherited from downloader. See `SDWebImageDownloaderConfig` for documentation.
 @property (strong, nonatomic, nullable) NSURLCredential *credential;
@@ -75,7 +75,7 @@
  * The collected metrics from `-URLSession:task:didFinishCollectingMetrics:`.
  * This can be used to collect the network metrics like download duration, DNS lookup duration, SSL handshake duration, etc. See Apple's documentation: https://developer.apple.com/documentation/foundation/urlsessiontaskmetrics
  */
-@property (strong, nonatomic, readonly, nullable) NSURLSessionTaskMetrics *metrics API_AVAILABLE(macosx(10.12), ios(10.0), watchos(3.0), tvos(10.0));
+@property (strong, nonatomic, readonly, nullable) NSURLSessionTaskMetrics *metrics API_AVAILABLE(macos(10.12), ios(10.0), watchos(3.0), tvos(10.0));
 
 /**
  * The credential used for authentication challenges in `-URLSession:task:didReceiveChallenge:completionHandler:`.

+ 2 - 2
Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderOperation.m

@@ -73,7 +73,7 @@
 
 @property (strong, nonatomic, readwrite, nullable) NSURLSessionTask *dataTask;
 
-@property (strong, nonatomic, readwrite, nullable) NSURLSessionTaskMetrics *metrics API_AVAILABLE(macosx(10.12), ios(10.0), watchos(3.0), tvos(10.0));
+@property (strong, nonatomic, readwrite, nullable) NSURLSessionTaskMetrics *metrics API_AVAILABLE(macos(10.12), ios(10.0), watchos(3.0), tvos(10.0));
 
 @property (strong, nonatomic, nonnull) NSOperationQueue *coderQueue; // the serial operation queue to do image decoding
 
@@ -697,7 +697,7 @@ didReceiveResponse:(NSURLResponse *)response
     }
 }
 
-- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didFinishCollectingMetrics:(NSURLSessionTaskMetrics *)metrics API_AVAILABLE(macosx(10.12), ios(10.0), watchos(3.0), tvos(10.0)) {
+- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didFinishCollectingMetrics:(NSURLSessionTaskMetrics *)metrics API_AVAILABLE(macos(10.12), ios(10.0), watchos(3.0), tvos(10.0)) {
     self.metrics = metrics;
 }
 

+ 10 - 1
Pods/SDWebImage/SDWebImage/Core/UIImage+Metadata.h

@@ -24,6 +24,8 @@
  * NSImage currently only support animated via `NSBitmapImageRep`(GIF) or `SDAnimatedImageRep`(APNG/GIF/WebP) unlike UIImage.
  * The getter of this property will get the loop count from animated imageRep
  * The setter of this property will set the loop count from animated imageRep
+ * SDAnimatedImage:
+ * Returns `animatedImageLoopCount`
  */
 @property (nonatomic, assign) NSUInteger sd_imageLoopCount;
 
@@ -35,6 +37,8 @@
  * AppKit:
  * Returns the underlaying `NSBitmapImageRep` or `SDAnimatedImageRep` frame count.
  * Returns 1 for static image.
+ * SDAnimatedImage:
+ * Returns `animatedImageFrameCount` for animated image, 1 for static image.
  */
 @property (nonatomic, assign, readonly) NSUInteger sd_imageFrameCount;
 
@@ -42,7 +46,9 @@
  * UIKit:
  * Check the `images` array property.
  * AppKit:
- * NSImage currently only support animated via GIF imageRep unlike UIImage. It will check the imageRep's frame count.
+ * NSImage currently only support animated via GIF imageRep unlike UIImage. It will check the imageRep's frame count > 1.
+ * SDAnimatedImage:
+ * Check `animatedImageFrameCount` > 1
  */
 @property (nonatomic, assign, readonly) BOOL sd_isAnimated;
 
@@ -51,6 +57,8 @@
  * Check the `isSymbolImage` property. Also check the system PDF(iOS 11+) && SVG(iOS 13+) support.
  * AppKit:
  * NSImage supports PDF && SVG && EPS imageRep, check the imageRep class.
+ * SDAnimatedImage:
+ * Returns `NO`
  */
 @property (nonatomic, assign, readonly) BOOL sd_isVector;
 
@@ -58,6 +66,7 @@
  * The image format represent the original compressed image data format.
  * If you don't manually specify a format, this information is retrieve from CGImage using `CGImageGetUTType`, which may return nil for non-CG based image. At this time it will return `SDImageFormatUndefined` as default value.
  * @note Note that because of the limitations of categories this property can get out of sync if you create another instance with CGImage or other methods.
+ * @note For `SDAnimatedImage`, returns `animatedImageFormat` when animated, or fallback when static.
  */
 @property (nonatomic, assign) SDImageFormat sd_imageFormat;
 

+ 3 - 1
Pods/SDWebImage/SDWebImage/Core/UIImage+Metadata.m

@@ -143,6 +143,7 @@
 
 - (BOOL)sd_isVector {
     NSRect imageRect = NSMakeRect(0, 0, self.size.width, self.size.height);
+    // This may returns a NSProxy, so don't use `class` to check
     NSImageRep *imageRep = [self bestRepresentationForRect:imageRect context:nil hints:nil];
     if ([imageRep isKindOfClass:[NSPDFImageRep class]]) {
         return YES;
@@ -150,7 +151,8 @@
     if ([imageRep isKindOfClass:[NSEPSImageRep class]]) {
         return YES;
     }
-    if ([NSStringFromClass(imageRep.class) hasSuffix:@"NSSVGImageRep"]) {
+    Class NSSVGImageRepClass = NSClassFromString([NSString stringWithFormat:@"_%@", SD_NSSTRING(NSSVGImageRep)]);
+    if ([imageRep isKindOfClass:NSSVGImageRepClass]) {
         return YES;
     }
     return NO;

+ 14 - 13
Pods/TZImagePickerController/README.md

@@ -3,12 +3,12 @@
 [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)
 
 
- A clone of UIImagePickerController, support picking multiple photos、original photo、video, also allow preview photo and video, support iOS6+.   
- 一个支持多选、选原图和视频的图片选择器,同时有预览功能,支持iOS6+。
+ A clone of UIImagePickerController, support picking multiple photos、original photo、video, also allow preview photo and video, support iOS10+.   
+ 一个支持多选、选原图和视频的图片选择器,同时有预览功能,支持iOS10+。
  
 ## 重要提示1:提issue前,请先对照Demo、常见问题自查!Demo正常说明你可以升级下新版试试。          
  
-## 重要提示2:3.7.5版本修复了iOS15.2下初次授权相册权限时的长时间卡顿&白屏问题,强烈建议尽快更新   
+## 重要提示2:3.8.6版本修复了iOS18下无照片的问题       
      关于iOS14模拟器的问题
  PHAuthorizationStatusLimited授权模式下,iOS14模拟器有bug,未授权照片无法显示,真机正常,暂可忽略:https://github.com/banchichen/TZImagePickerController/issues/1347 
  
@@ -43,14 +43,9 @@
     [self presentViewController:imagePickerVc animated:YES completion:nil];
   
 ## 三. Requirements 要求
-   iOS 6 or later. Requires ARC  
-   iOS6及以上系统可使用. ARC环境.
-   
-   When system version is iOS6 or iOS7,  Using AssetsLibrary.  
-   When system version is iOS8 or later, Using PhotoKit.  
-   如果运行在iOS6或7系统上,用的是AssetsLibrary库获取照片资源。  
-   如果运行在iOS8及以上系统上,用的是PhotoKit库获取照片资源。
-   
+   iOS 10 or later.      
+   支持iOS10及以上系统。      
+  
    TZImagePickerController uses Camera、Location、Microphone、Photo Library,you need add these properties to info.plist like Demo:       
    TZImagePickerController使用了相机、定位、麦克风、相册,请参考Demo添加下列属性到info.plist文件:        
    	`Privacy - Camera Usage Description`     
@@ -128,9 +123,11 @@ A:不要去拿PHImageFileURLKey,没用的,只有通过Photos框架才能
 
 ## 六. Release Notes 最近更新     
 
+**3.8.6 支持iOS18** [#1686](https://github.com/banchichen/TZImagePickerController/issues/1686)               
+**3.8.5 新增隐私清单文件** [#1675](https://github.com/banchichen/TZImagePickerController/pull/1675)               
 **3.8.4 支持使用不带定位代码的版本** [#1606](https://github.com/banchichen/TZImagePickerController/pull/1606)               
-**3.8.1 iOS14下可添加访问更多照片,详见PR内的评论** [#1526](https://github.com/banchichen/TZImagePickerController/pull/1526)               
-**3.7.6 修复iOS15.2下初次授权相册权限时的长时间卡顿&白屏问题** [#1547](https://github.com/banchichen/TZImagePickerController/issues/1547)               
+3.8.1 iOS14下可添加访问更多照片,详见PR内的评论 [#1526](https://github.com/banchichen/TZImagePickerController/pull/1526)               
+3.7.6 修复iOS15.2下初次授权相册权限时的长时间卡顿&白屏问题 [#1547](https://github.com/banchichen/TZImagePickerController/issues/1547)               
 **3.6.7 修复Xcode13&iOS15下导航栏颜色异常问题**        
 3.6.2 新增allowEditVideo,单选视频时支持裁剪        
 3.6.0 修复iOS14下iCloud视频导出失败问题        
@@ -173,3 +170,7 @@ A:不要去拿PHImageFileURLKey,没用的,只有通过Photos框架才能
 ...      
 1.4.5  性能大幅提升(性能测试截图请去博客查看);可在照片列表页拍照;Demo大幅优化;   
 ...        
+
+## 七. Common links 常用链接    
+1. Json diff online: https://www.jsondiffonline.com/       
+

+ 2 - 2
Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImageManager.m

@@ -127,7 +127,7 @@ static dispatch_once_t onceToken;
     if (!self.sortAscendingByModificationDate) {
         option.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:self.sortAscendingByModificationDate]];
     }
-    PHFetchResult *smartAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];
+    PHFetchResult *smartAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAny options:nil];
     for (PHAssetCollection *collection in smartAlbums) {
         // 有可能是PHCollectionList类的的对象,过滤掉
         if (![collection isKindOfClass:[PHAssetCollection class]]) continue;
@@ -162,7 +162,7 @@ static dispatch_once_t onceToken;
     }
     // 我的照片流 1.6.10重新加入..
     PHFetchResult *myPhotoStreamAlbum = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumMyPhotoStream options:nil];
-    PHFetchResult *smartAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];
+    PHFetchResult *smartAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAny options:nil];
     PHFetchResult *topLevelUserCollections = [PHCollectionList fetchTopLevelUserCollectionsWithOptions:nil];
     PHFetchResult *syncedAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumSyncedAlbum options:nil];
     PHFetchResult *sharedAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumCloudShared options:nil];

+ 1 - 1
Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.h

@@ -4,7 +4,7 @@
 //
 //  Created by 谭真 on 15/12/24.
 //  Copyright © 2015年 谭真. All rights reserved.
-//  version 3.8.4 - 2023.11.21
+//  version 3.8.6 - 2024.06.27
 //  更多信息,请前往项目的github地址:https://github.com/banchichen/TZImagePickerController
 
 /*

+ 2 - 2
Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZImagePickerController.m

@@ -4,7 +4,7 @@
 //
 //  Created by 谭真 on 15/12/24.
 //  Copyright © 2015年 谭真. All rights reserved.
-//  version 3.8.4 - 2023.11.21
+//  version 3.8.6 - 2024.06.27
 //  更多信息,请前往项目的github地址:https://github.com/banchichen/TZImagePickerController
 
 #import "TZImagePickerController.h"
@@ -193,7 +193,6 @@
         self.allowTakeVideo = YES;
         self.videoMaximumDuration = 10 * 60;
         self.sortAscendingByModificationDate = YES;
-        self.autoDismiss = YES;
         self.columnNumber = columnNumber;
         [self configDefaultSetting];
         
@@ -289,6 +288,7 @@
 }
 
 - (void)configDefaultSetting {
+    self.autoDismiss = YES;
     self.autoSelectCurrentWhenDone = YES;
     self.timeout = 30;
     self.photoWidth = 828.0;

+ 11 - 6
Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZPhotoPickerController.m

@@ -204,18 +204,23 @@ static CGFloat itemMargin = 5;
     
     _collectionView.contentSize = CGSizeMake(self.view.tz_width, (([self getAllCellCount] + self.columnNumber - 1) / self.columnNumber) * self.view.tz_width);
     if (_models.count == 0) {
-        _noDataLabel = [UILabel new];
+        [_collectionView addSubview:self.noDataLabel];
+    } else if (_noDataLabel) {
+        [_noDataLabel removeFromSuperview];
+        _noDataLabel = nil;
+    }
+}
+
+- (UILabel *)noDataLabel {
+    if (!_noDataLabel) {
+        _noDataLabel = [[UILabel alloc] initWithFrame:_collectionView.bounds];
         _noDataLabel.textAlignment = NSTextAlignmentCenter;
         _noDataLabel.text = [NSBundle tz_localizedStringForKey:@"No Photos or Videos"];
         CGFloat rgb = 153 / 256.0;
         _noDataLabel.textColor = [UIColor colorWithRed:rgb green:rgb blue:rgb alpha:1.0];
         _noDataLabel.font = [UIFont boldSystemFontOfSize:20];
-        _noDataLabel.frame = _collectionView.bounds;
-        [_collectionView addSubview:_noDataLabel];
-    } else if (_noDataLabel) {
-        [_noDataLabel removeFromSuperview];
-        _noDataLabel = nil;
     }
+    return _noDataLabel;
 }
 
 - (void)viewWillAppear:(BOOL)animated {

+ 1 - 0
Pods/Target Support Files/Ads-CN/Ads-CN.debug.xcconfig

@@ -3,6 +3,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
 CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Ads-CN
 FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Ads-CN/SDK" "${PODS_XCFRAMEWORKS_BUILD_DIR}/Ads-CN/BUAdSDK"
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
+OTHER_LDFLAGS = $(inherited) -ObjC
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
 PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}

+ 1 - 0
Pods/Target Support Files/Ads-CN/Ads-CN.release.xcconfig

@@ -3,6 +3,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
 CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Ads-CN
 FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Ads-CN/SDK" "${PODS_XCFRAMEWORKS_BUILD_DIR}/Ads-CN/BUAdSDK"
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
+OTHER_LDFLAGS = $(inherited) -ObjC
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
 PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}

+ 1 - 1
Pods/Target Support Files/GKPhotoBrowser/GKPhotoBrowser.debug.xcconfig

@@ -2,7 +2,7 @@ BUILD_LIBRARY_FOR_DISTRIBUTION = YES
 CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
 CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/GKPhotoBrowser
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/GKPhotoBrowser" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/GKPhotoBrowser" "${PODS_ROOT}/Headers/Public/GKSliderView" "${PODS_ROOT}/Headers/Public/SDWebImage"
+HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/GKPhotoBrowser" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/GKLivePhotoManager" "${PODS_ROOT}/Headers/Public/GKPhotoBrowser" "${PODS_ROOT}/Headers/Public/GKSliderView" "${PODS_ROOT}/Headers/Public/SDWebImage"
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
 PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}

+ 1 - 1
Pods/Target Support Files/GKPhotoBrowser/GKPhotoBrowser.release.xcconfig

@@ -2,7 +2,7 @@ BUILD_LIBRARY_FOR_DISTRIBUTION = YES
 CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
 CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/GKPhotoBrowser
 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
-HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/GKPhotoBrowser" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/GKPhotoBrowser" "${PODS_ROOT}/Headers/Public/GKSliderView" "${PODS_ROOT}/Headers/Public/SDWebImage"
+HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/GKPhotoBrowser" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AFNetworking" "${PODS_ROOT}/Headers/Public/GKLivePhotoManager" "${PODS_ROOT}/Headers/Public/GKPhotoBrowser" "${PODS_ROOT}/Headers/Public/GKSliderView" "${PODS_ROOT}/Headers/Public/SDWebImage"
 PODS_BUILD_DIR = ${BUILD_DIR}
 PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
 PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}

+ 23 - 30
Pods/Target Support Files/Pods-jiaPei/Pods-jiaPei-acknowledgements.markdown

@@ -149,31 +149,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.
 
 
-## AlipaySDK-iOS
-
-MIT License
-
-Copyright (c) 2023 Antfin
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-
 ## BMKLocationKit
 
 Copyright (c) 2020 BaiduLBS
@@ -508,6 +483,29 @@ THE SOFTWARE.
 
 Copyright 2017 Tencent Inc. All Rights Reserved.
 
+## GKLivePhotoManager
+
+Copyright (c) 2024 QuintGao <1094887059@qq.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+
 ## GKPhotoBrowser
 
 MIT License
@@ -1765,11 +1763,6 @@ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 OTHER DEALINGS IN THE SOFTWARE.
 
 
-## WechatOpenSDK
-
-Copyright 2020 tencent.com. All rights reserved.
-
-
 ## XHLaunchAd
 
 The MIT License (MIT)

+ 29 - 42
Pods/Target Support Files/Pods-jiaPei/Pods-jiaPei-acknowledgements.plist

@@ -196,37 +196,6 @@ SOFTWARE.
 			<key>Type</key>
 			<string>PSGroupSpecifier</string>
 		</dict>
-		<dict>
-			<key>FooterText</key>
-			<string>MIT License
-
-Copyright (c) 2023 Antfin
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-</string>
-			<key>License</key>
-			<string>MIT</string>
-			<key>Title</key>
-			<string>AlipaySDK-iOS</string>
-			<key>Type</key>
-			<string>PSGroupSpecifier</string>
-		</dict>
 		<dict>
 			<key>FooterText</key>
 			<string>Copyright (c) 2020 BaiduLBS</string>
@@ -663,6 +632,35 @@ THE SOFTWARE.</string>
 			<key>Type</key>
 			<string>PSGroupSpecifier</string>
 		</dict>
+		<dict>
+			<key>FooterText</key>
+			<string>Copyright (c) 2024 QuintGao &lt;1094887059@qq.com&gt;
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+</string>
+			<key>License</key>
+			<string>MIT</string>
+			<key>Title</key>
+			<string>GKLivePhotoManager</string>
+			<key>Type</key>
+			<string>PSGroupSpecifier</string>
+		</dict>
 		<dict>
 			<key>FooterText</key>
 			<string>MIT License
@@ -2178,17 +2176,6 @@ OTHER DEALINGS IN THE SOFTWARE.
 			<key>Type</key>
 			<string>PSGroupSpecifier</string>
 		</dict>
-		<dict>
-			<key>FooterText</key>
-			<string>Copyright 2020 tencent.com. All rights reserved.
-</string>
-			<key>License</key>
-			<string>Copyright</string>
-			<key>Title</key>
-			<string>WechatOpenSDK</string>
-			<key>Type</key>
-			<string>PSGroupSpecifier</string>
-		</dict>
 		<dict>
 			<key>FooterText</key>
 			<string>The MIT License (MIT)

+ 0 - 2
Pods/Target Support Files/Pods-jiaPei/Pods-jiaPei-resources.sh

@@ -98,7 +98,6 @@ EOM
 }
 if [[ "$CONFIGURATION" == "Debug" ]]; then
   install_resource "${PODS_ROOT}/Ads-CN/SDK/CSJAdSDK.bundle"
-  install_resource "${PODS_ROOT}/AlipaySDK-iOS/AlipaySDK.bundle"
   install_resource "${PODS_ROOT}/BaiduMapKit/BaiduMapKit/BaiduMapAPI_Map.framework/mapapi.bundle"
   install_resource "${PODS_CONFIGURATION_BUILD_DIR}/FMDB/FMDB.bundle"
   install_resource "${PODS_ROOT}/GKPhotoBrowser/GKPhotoBrowser/GKPhotoBrowser.bundle"
@@ -125,7 +124,6 @@ if [[ "$CONFIGURATION" == "Debug" ]]; then
 fi
 if [[ "$CONFIGURATION" == "Release" ]]; then
   install_resource "${PODS_ROOT}/Ads-CN/SDK/CSJAdSDK.bundle"
-  install_resource "${PODS_ROOT}/AlipaySDK-iOS/AlipaySDK.bundle"
   install_resource "${PODS_ROOT}/BaiduMapKit/BaiduMapKit/BaiduMapAPI_Map.framework/mapapi.bundle"
   install_resource "${PODS_CONFIGURATION_BUILD_DIR}/FMDB/FMDB.bundle"
   install_resource "${PODS_ROOT}/GKPhotoBrowser/GKPhotoBrowser/GKPhotoBrowser.bundle"

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
Pods/Target Support Files/Pods-jiaPei/Pods-jiaPei.debug.xcconfig


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
Pods/Target Support Files/Pods-jiaPei/Pods-jiaPei.release.xcconfig


+ 1 - 1
Pods/TianmuSDK/TianmuSDK/Classes/TianmuSDK.xcframework/ios-arm64_armv7/TianmuSDK.framework/Headers/TianmuSDK.h

@@ -1,7 +1,7 @@
 //
 //  TianmuSDK.h
 //  TianmuSDK
-//  2.2.1.2
+//  2.2.1.3
 //  Created by Erik on 2021/9/11.
 //  Updated by Wosun on 2024/01/19 09:24.
 //

BIN
Pods/TianmuSDK/TianmuSDK/Classes/TianmuSDK.xcframework/ios-arm64_armv7/TianmuSDK.framework/TianmuSDK


+ 1 - 1
Pods/TianmuSDK/TianmuSDK/Classes/TianmuSDK.xcframework/ios-arm64_i386_x86_64-simulator/TianmuSDK.framework/Headers/TianmuSDK.h

@@ -1,7 +1,7 @@
 //
 //  TianmuSDK.h
 //  TianmuSDK
-//  2.2.1.2
+//  2.2.1.3
 //  Created by Erik on 2021/9/11.
 //  Updated by Wosun on 2024/01/19 09:24.
 //

BIN
Pods/TianmuSDK/TianmuSDK/Classes/TianmuSDK.xcframework/ios-arm64_i386_x86_64-simulator/TianmuSDK.framework/TianmuSDK


Некоторые файлы не были показаны из-за большого количества измененных файлов