Pārlūkot izejas kodu

商品Write功能完成,form-data表单 请求封装完成

wangmeng 1 gadu atpakaļ
vecāks
revīzija
6a849a16be
47 mainītis faili ar 1247 papildinājumiem un 197 dzēšanām
  1. 98 0
      Asteria.xcodeproj/project.pbxproj
  2. 5 3
      Asteria/Base/RYNetWork/RYBaseVM.h
  3. 11 5
      Asteria/Base/RYNetWork/RYBaseVM.m
  4. 23 0
      Asteria/Fuction/Goods/Assets/Goods.xcassets/goods_wirte_upload.imageset/Contents.json
  5. BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/goods_wirte_upload.imageset/上传图片.png
  6. BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/goods_wirte_upload.imageset/上传图片@2x.png
  7. BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/goods_wirte_upload.imageset/上传图片@3x.png
  8. 23 0
      Asteria/Fuction/Goods/Assets/Goods.xcassets/goos_zan_normal.imageset/Contents.json
  9. BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/goos_zan_normal.imageset/thumb-up-line.png
  10. BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/goos_zan_normal.imageset/thumb-up-line@2x.png
  11. BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/goos_zan_normal.imageset/thumb-up-line@3x.png
  12. 23 0
      Asteria/Fuction/Goods/Assets/Goods.xcassets/goos_zan_select.imageset/Contents.json
  13. BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/goos_zan_select.imageset/thumb-up-fill.png
  14. BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/goos_zan_select.imageset/thumb-up-fill@2x.png
  15. BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/goos_zan_select.imageset/thumb-up-fill@3x.png
  16. 23 0
      Asteria/Fuction/Goods/Assets/Goods.xcassets/reviews_empty_star.imageset/Contents.json
  17. BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/reviews_empty_star.imageset/star-NUMORAL.png
  18. BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/reviews_empty_star.imageset/star-NUMORAL@2x.png
  19. BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/reviews_empty_star.imageset/star-NUMORAL@3x.png
  20. 23 0
      Asteria/Fuction/Goods/Assets/Goods.xcassets/reviews_full_star.imageset/Contents.json
  21. BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/reviews_full_star.imageset/star-fill.png
  22. BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/reviews_full_star.imageset/star-fill@2x.png
  23. BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/reviews_full_star.imageset/star-fill@3x.png
  24. 66 30
      Asteria/Fuction/Goods/Revies/AS_GoodsReviewsListC.m
  25. 23 0
      Asteria/Fuction/Goods/Revies/Base/QDSingleImagePickerPreviewViewController.h
  26. 66 0
      Asteria/Fuction/Goods/Revies/Base/QDSingleImagePickerPreviewViewController.m
  27. 19 0
      Asteria/Fuction/Goods/Revies/GoodsReviewsWriteC.h
  28. 442 0
      Asteria/Fuction/Goods/Revies/GoodsReviewsWriteC.m
  29. 18 0
      Asteria/Fuction/Goods/Revies/V/GoodWritUpImgV.h
  30. 55 0
      Asteria/Fuction/Goods/Revies/V/GoodWritUpImgV.m
  31. 1 0
      Asteria/Fuction/Goods/Revies/V/GoodsReviewsListTableV.m
  32. 1 1
      Asteria/Fuction/Goods/Revies/V/ReviewsTableHearV.h
  33. 80 21
      Asteria/Fuction/Goods/Revies/V/ReviewsTableHearV.m
  34. 24 3
      Asteria/Fuction/Goods/Revies/cell/GoodsReviewsCell.m
  35. 1 3
      Asteria/Fuction/Goods/V/GoodsDetailSrcView.m
  36. 2 2
      Asteria/Fuction/Goods/VC/AS_GoodsDetailsC.m
  37. 8 0
      Asteria/Fuction/Goods/VM/ASGoodsDetailsVM.h
  38. 3 0
      Asteria/Fuction/Goods/VM/ASGoodsDetailsVM.m
  39. 1 1
      Asteria/Fuction/Login/VC/AS_SignUpC.m
  40. 10 0
      Asteria/Info.plist
  41. 1 0
      Asteria/NetTools/ASNetApis.h
  42. 2 0
      Asteria/NetTools/ASNetTools.h
  43. 65 0
      Asteria/NetTools/ASNetTools.m
  44. 2 0
      Podfile
  45. 1 1
      Podfile.lock
  46. 1 1
      Pods/Manifest.lock
  47. 126 126
      Pods/Pods.xcodeproj/project.pbxproj

+ 98 - 0
Asteria.xcodeproj/project.pbxproj

@@ -202,6 +202,25 @@
 		9A788C442A08A663003E0025 /* Target_Goods.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A788C432A08A663003E0025 /* Target_Goods.m */; };
 		9A7DA6A12A0CE33500136974 /* Asteria.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 9A7DA6A02A0CE33500136974 /* Asteria.xcassets */; };
 		9A8DD8C52A0B8F1700573324 /* As_GoodsSizeC.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A8DD8C42A0B8F1700573324 /* As_GoodsSizeC.m */; };
+		9A98E5072B5A15A500E8C5C1 /* QDSingleImagePickerPreviewViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A98E5052B5A15A400E8C5C1 /* QDSingleImagePickerPreviewViewController.m */; };
+		9A98E50A2B5A1EB700E8C5C1 /* Photos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A98E5092B5A1EB700E8C5C1 /* Photos.framework */; };
+		9A98E50C2B5A1EC500E8C5C1 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A98E50B2B5A1EC500E8C5C1 /* Security.framework */; };
+		9A98E50E2B5A1ED300E8C5C1 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A98E50D2B5A1ED300E8C5C1 /* SystemConfiguration.framework */; };
+		9A98E5102B5A1EFE00E8C5C1 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A98E50F2B5A1EF000E8C5C1 /* libz.tbd */; };
+		9A98E5122B5A248D00E8C5C1 /* AssetsLibrary.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A98E5112B5A248D00E8C5C1 /* AssetsLibrary.framework */; };
+		9A98E5142B5A258A00E8C5C1 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A98E5132B5A258900E8C5C1 /* CoreFoundation.framework */; };
+		9A98E5162B5A25A100E8C5C1 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A98E5152B5A25A100E8C5C1 /* CoreGraphics.framework */; };
+		9A98E5182B5A25AD00E8C5C1 /* CoreImage.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A98E5172B5A25AD00E8C5C1 /* CoreImage.framework */; };
+		9A98E51A2B5A25D600E8C5C1 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A98E5192B5A25D600E8C5C1 /* ImageIO.framework */; };
+		9A98E51D2B5A275400E8C5C1 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A98E51C2B5A275400E8C5C1 /* UIKit.framework */; };
+		9A98E51E2B5A276A00E8C5C1 /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A98E51B2B5A25E900E8C5C1 /* libc++.tbd */; };
+		9A98E5202B5A278A00E8C5C1 /* libsqlite3.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A98E51F2B5A277B00E8C5C1 /* libsqlite3.tbd */; };
+		9A98E5222B5A27A900E8C5C1 /* libz.1.2.5.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A98E5212B5A279D00E8C5C1 /* libz.1.2.5.tbd */; };
+		9A98E5242B5A27C500E8C5C1 /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A98E5232B5A27C500E8C5C1 /* Accelerate.framework */; };
+		9A98E5262B5A27EA00E8C5C1 /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A98E5252B5A27EA00E8C5C1 /* MobileCoreServices.framework */; };
+		9A98E5282B5A280700E8C5C1 /* SafariServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A98E5272B5A280700E8C5C1 /* SafariServices.framework */; };
+		9A98E52A2B5A281600E8C5C1 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A98E5292B5A281600E8C5C1 /* QuartzCore.framework */; };
+		9A98E52C2B5A282800E8C5C1 /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A98E52B2B5A282800E8C5C1 /* CoreText.framework */; };
 		9AC2CC222B3A673B005187BD /* ASGoodsDetailsVM.m in Sources */ = {isa = PBXBuildFile; fileRef = 9AC2CC212B3A673B005187BD /* ASGoodsDetailsVM.m */; };
 		9ACBEC212A14585300A8F97A /* CTMediator+ASTargerts.m in Sources */ = {isa = PBXBuildFile; fileRef = 9ACBEC202A14585300A8F97A /* CTMediator+ASTargerts.m */; };
 		9ACBEC252A14707400A8F97A /* AS_SignUpC.m in Sources */ = {isa = PBXBuildFile; fileRef = 9ACBEC242A14707400A8F97A /* AS_SignUpC.m */; };
@@ -256,6 +275,8 @@
 		9AD6A5442A1218E8001DE3D9 /* PassWordSecureBtnV.m in Sources */ = {isa = PBXBuildFile; fileRef = 9AD6A5422A1218E7001DE3D9 /* PassWordSecureBtnV.m */; };
 		9AD6A5452A1218E8001DE3D9 /* EamilTFmatchV.m in Sources */ = {isa = PBXBuildFile; fileRef = 9AD6A5432A1218E7001DE3D9 /* EamilTFmatchV.m */; };
 		9AD6A5492A1237D0001DE3D9 /* Target_Login.m in Sources */ = {isa = PBXBuildFile; fileRef = 9AD6A5482A1237D0001DE3D9 /* Target_Login.m */; };
+		9ADA8A1E2B4E481E00BACDEA /* GoodsReviewsWriteC.m in Sources */ = {isa = PBXBuildFile; fileRef = 9ADA8A1D2B4E481E00BACDEA /* GoodsReviewsWriteC.m */; };
+		9ADA8A212B4E96C900BACDEA /* GoodWritUpImgV.m in Sources */ = {isa = PBXBuildFile; fileRef = 9ADA8A1F2B4E96C800BACDEA /* GoodWritUpImgV.m */; };
 		9AF9085C2B397320008AC2D2 /* UIViewController+RY_configNet.m in Sources */ = {isa = PBXBuildFile; fileRef = 9AF9085B2B397320008AC2D2 /* UIViewController+RY_configNet.m */; };
 		9AF9085F2B3976F3008AC2D2 /* RYBaseVM.m in Sources */ = {isa = PBXBuildFile; fileRef = 9AF9085E2B3976F3008AC2D2 /* RYBaseVM.m */; };
 /* End PBXBuildFile section */
@@ -659,6 +680,26 @@
 		9A7DA6A02A0CE33500136974 /* Asteria.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Asteria.xcassets; sourceTree = "<group>"; };
 		9A8DD8C32A0B8F1700573324 /* As_GoodsSizeC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = As_GoodsSizeC.h; sourceTree = "<group>"; };
 		9A8DD8C42A0B8F1700573324 /* As_GoodsSizeC.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = As_GoodsSizeC.m; sourceTree = "<group>"; };
+		9A98E5052B5A15A400E8C5C1 /* QDSingleImagePickerPreviewViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QDSingleImagePickerPreviewViewController.m; sourceTree = "<group>"; };
+		9A98E5062B5A15A400E8C5C1 /* QDSingleImagePickerPreviewViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QDSingleImagePickerPreviewViewController.h; sourceTree = "<group>"; };
+		9A98E5092B5A1EB700E8C5C1 /* Photos.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Photos.framework; path = System/Library/Frameworks/Photos.framework; sourceTree = SDKROOT; };
+		9A98E50B2B5A1EC500E8C5C1 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; };
+		9A98E50D2B5A1ED300E8C5C1 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };
+		9A98E50F2B5A1EF000E8C5C1 /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; };
+		9A98E5112B5A248D00E8C5C1 /* AssetsLibrary.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AssetsLibrary.framework; path = System/Library/Frameworks/AssetsLibrary.framework; sourceTree = SDKROOT; };
+		9A98E5132B5A258900E8C5C1 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; };
+		9A98E5152B5A25A100E8C5C1 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
+		9A98E5172B5A25AD00E8C5C1 /* CoreImage.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreImage.framework; path = System/Library/Frameworks/CoreImage.framework; sourceTree = SDKROOT; };
+		9A98E5192B5A25D600E8C5C1 /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = System/Library/Frameworks/ImageIO.framework; sourceTree = SDKROOT; };
+		9A98E51B2B5A25E900E8C5C1 /* libc++.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libc++.tbd"; path = "usr/lib/libc++.tbd"; sourceTree = SDKROOT; };
+		9A98E51C2B5A275400E8C5C1 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
+		9A98E51F2B5A277B00E8C5C1 /* libsqlite3.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libsqlite3.tbd; path = usr/lib/libsqlite3.tbd; sourceTree = SDKROOT; };
+		9A98E5212B5A279D00E8C5C1 /* libz.1.2.5.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.1.2.5.tbd; path = usr/lib/libz.1.2.5.tbd; sourceTree = SDKROOT; };
+		9A98E5232B5A27C500E8C5C1 /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; };
+		9A98E5252B5A27EA00E8C5C1 /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = System/Library/Frameworks/MobileCoreServices.framework; sourceTree = SDKROOT; };
+		9A98E5272B5A280700E8C5C1 /* SafariServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SafariServices.framework; path = System/Library/Frameworks/SafariServices.framework; sourceTree = SDKROOT; };
+		9A98E5292B5A281600E8C5C1 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
+		9A98E52B2B5A282800E8C5C1 /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = System/Library/Frameworks/CoreText.framework; sourceTree = SDKROOT; };
 		9AC2CC202B3A673B005187BD /* ASGoodsDetailsVM.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ASGoodsDetailsVM.h; sourceTree = "<group>"; };
 		9AC2CC212B3A673B005187BD /* ASGoodsDetailsVM.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ASGoodsDetailsVM.m; sourceTree = "<group>"; };
 		9ACBEC1F2A14585300A8F97A /* CTMediator+ASTargerts.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "CTMediator+ASTargerts.h"; sourceTree = "<group>"; };
@@ -769,6 +810,10 @@
 		9AD6A5432A1218E7001DE3D9 /* EamilTFmatchV.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EamilTFmatchV.m; sourceTree = "<group>"; };
 		9AD6A5472A1237D0001DE3D9 /* Target_Login.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Target_Login.h; sourceTree = "<group>"; };
 		9AD6A5482A1237D0001DE3D9 /* Target_Login.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Target_Login.m; sourceTree = "<group>"; };
+		9ADA8A1C2B4E481E00BACDEA /* GoodsReviewsWriteC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GoodsReviewsWriteC.h; sourceTree = "<group>"; };
+		9ADA8A1D2B4E481E00BACDEA /* GoodsReviewsWriteC.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = GoodsReviewsWriteC.m; sourceTree = "<group>"; };
+		9ADA8A1F2B4E96C800BACDEA /* GoodWritUpImgV.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GoodWritUpImgV.m; sourceTree = "<group>"; };
+		9ADA8A202B4E96C900BACDEA /* GoodWritUpImgV.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GoodWritUpImgV.h; sourceTree = "<group>"; };
 		9AF9085A2B397320008AC2D2 /* UIViewController+RY_configNet.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIViewController+RY_configNet.h"; sourceTree = "<group>"; };
 		9AF9085B2B397320008AC2D2 /* UIViewController+RY_configNet.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIViewController+RY_configNet.m"; sourceTree = "<group>"; };
 		9AF9085D2B3976F3008AC2D2 /* RYBaseVM.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RYBaseVM.h; sourceTree = "<group>"; };
@@ -782,7 +827,25 @@
 			buildActionMask = 2147483647;
 			files = (
 				9A2027F52A137B8600FF4DAF /* AuthenticationServices.framework in Frameworks */,
+				9A98E51D2B5A275400E8C5C1 /* UIKit.framework in Frameworks */,
+				9A98E5202B5A278A00E8C5C1 /* libsqlite3.tbd in Frameworks */,
+				9A98E5102B5A1EFE00E8C5C1 /* libz.tbd in Frameworks */,
+				9A98E51E2B5A276A00E8C5C1 /* libc++.tbd in Frameworks */,
+				9A98E5122B5A248D00E8C5C1 /* AssetsLibrary.framework in Frameworks */,
+				9A98E5162B5A25A100E8C5C1 /* CoreGraphics.framework in Frameworks */,
+				9A98E5222B5A27A900E8C5C1 /* libz.1.2.5.tbd in Frameworks */,
+				9A98E50E2B5A1ED300E8C5C1 /* SystemConfiguration.framework in Frameworks */,
+				9A98E5242B5A27C500E8C5C1 /* Accelerate.framework in Frameworks */,
+				9A98E5142B5A258A00E8C5C1 /* CoreFoundation.framework in Frameworks */,
 				8C24ECE114420CDEE7B9B22B /* Pods_Asteria.framework in Frameworks */,
+				9A98E52C2B5A282800E8C5C1 /* CoreText.framework in Frameworks */,
+				9A98E51A2B5A25D600E8C5C1 /* ImageIO.framework in Frameworks */,
+				9A98E5182B5A25AD00E8C5C1 /* CoreImage.framework in Frameworks */,
+				9A98E5282B5A280700E8C5C1 /* SafariServices.framework in Frameworks */,
+				9A98E52A2B5A281600E8C5C1 /* QuartzCore.framework in Frameworks */,
+				9A98E5262B5A27EA00E8C5C1 /* MobileCoreServices.framework in Frameworks */,
+				9A98E50C2B5A1EC500E8C5C1 /* Security.framework in Frameworks */,
+				9A98E50A2B5A1EB700E8C5C1 /* Photos.framework in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -800,6 +863,24 @@
 		5A5FFF81F369698EFECBFE81 /* Frameworks */ = {
 			isa = PBXGroup;
 			children = (
+				9A98E52B2B5A282800E8C5C1 /* CoreText.framework */,
+				9A98E5292B5A281600E8C5C1 /* QuartzCore.framework */,
+				9A98E5272B5A280700E8C5C1 /* SafariServices.framework */,
+				9A98E5252B5A27EA00E8C5C1 /* MobileCoreServices.framework */,
+				9A98E5232B5A27C500E8C5C1 /* Accelerate.framework */,
+				9A98E5212B5A279D00E8C5C1 /* libz.1.2.5.tbd */,
+				9A98E51F2B5A277B00E8C5C1 /* libsqlite3.tbd */,
+				9A98E51C2B5A275400E8C5C1 /* UIKit.framework */,
+				9A98E51B2B5A25E900E8C5C1 /* libc++.tbd */,
+				9A98E5192B5A25D600E8C5C1 /* ImageIO.framework */,
+				9A98E5172B5A25AD00E8C5C1 /* CoreImage.framework */,
+				9A98E5152B5A25A100E8C5C1 /* CoreGraphics.framework */,
+				9A98E5132B5A258900E8C5C1 /* CoreFoundation.framework */,
+				9A98E5112B5A248D00E8C5C1 /* AssetsLibrary.framework */,
+				9A98E50F2B5A1EF000E8C5C1 /* libz.tbd */,
+				9A98E50D2B5A1ED300E8C5C1 /* SystemConfiguration.framework */,
+				9A98E50B2B5A1EC500E8C5C1 /* Security.framework */,
+				9A98E5092B5A1EB700E8C5C1 /* Photos.framework */,
 				9A2027F42A137B8600FF4DAF /* AuthenticationServices.framework */,
 				54DCE8001991D89B696E7D44 /* Pods_Asteria.framework */,
 				51AF3B78609F55449DF09609 /* Pods_Asteria_NotificationServiceExtension.framework */,
@@ -1621,6 +1702,9 @@
 		9A32A2252B4BEB2D005A5831 /* Revies */ = {
 			isa = PBXGroup;
 			children = (
+				9A98E5042B5A159500E8C5C1 /* Base */,
+				9ADA8A1C2B4E481E00BACDEA /* GoodsReviewsWriteC.h */,
+				9ADA8A1D2B4E481E00BACDEA /* GoodsReviewsWriteC.m */,
 				9A31EDFE2B469A73009F11EE /* AS_GoodsReviewsListC.h */,
 				9A31EDFF2B469A73009F11EE /* AS_GoodsReviewsListC.m */,
 				9A32A2262B4BEB5F005A5831 /* V */,
@@ -1632,6 +1716,8 @@
 		9A32A2262B4BEB5F005A5831 /* V */ = {
 			isa = PBXGroup;
 			children = (
+				9ADA8A202B4E96C900BACDEA /* GoodWritUpImgV.h */,
+				9ADA8A1F2B4E96C800BACDEA /* GoodWritUpImgV.m */,
 				9A35203C2B47FF2300D097CB /* GoodsReviewsListTableV.h */,
 				9A35203D2B47FF2300D097CB /* GoodsReviewsListTableV.m */,
 				9AD4D3952B48E8780086D6FB /* ReviewsTableHearV.h */,
@@ -1780,6 +1866,15 @@
 			path = Assets;
 			sourceTree = "<group>";
 		};
+		9A98E5042B5A159500E8C5C1 /* Base */ = {
+			isa = PBXGroup;
+			children = (
+				9A98E5062B5A15A400E8C5C1 /* QDSingleImagePickerPreviewViewController.h */,
+				9A98E5052B5A15A400E8C5C1 /* QDSingleImagePickerPreviewViewController.m */,
+			);
+			path = Base;
+			sourceTree = "<group>";
+		};
 		9ACBEC1E2A1457E800A8F97A /* CTMediatoaTargets */ = {
 			isa = PBXGroup;
 			children = (
@@ -2395,6 +2490,7 @@
 				81717D3A2A3D322700648139 /* KWHisAndHotWordsView.m in Sources */,
 				81DFA5592A4681E900DA708B /* ASPointEranCell.m in Sources */,
 				81354BE72A28786C0082C93A /* ASProductBaseModel.m in Sources */,
+				9ADA8A212B4E96C900BACDEA /* GoodWritUpImgV.m in Sources */,
 				9A8DD8C52A0B8F1700573324 /* As_GoodsSizeC.m in Sources */,
 				9A3F5CB82B3BF90100DDB6A7 /* GoodsDetailsIntroduceV.m in Sources */,
 				8134C1BD2A1372D5006EB0EC /* ASUserCenterTableHeadView.m in Sources */,
@@ -2452,6 +2548,7 @@
 				81E5EE902A498FC90075695F /* ASVipCenterViewController.m in Sources */,
 				81C7963F2A551FB0003083B8 /* ASInfomationSetController.m in Sources */,
 				8131A27C2B365F7700A191BE /* ASProductListCategoryModel.m in Sources */,
+				9A98E5072B5A15A500E8C5C1 /* QDSingleImagePickerPreviewViewController.m in Sources */,
 				9AD346062A08D60F005CA070 /* ZFReachabilityManager.m in Sources */,
 				81717CA52A3C0A5000648139 /* KWProductFilterItemCell.m in Sources */,
 				812021252B185A610026B8B5 /* ASCouponsListViewModel.m in Sources */,
@@ -2491,6 +2588,7 @@
 				9AD3460E2A08D60F005CA070 /* ZFNetworkSpeedMonitor.m in Sources */,
 				81AA11DC2B23FF71008EB5C7 /* ASCurrencyManager.m in Sources */,
 				9AD346052A08D60F005CA070 /* ZFLandscapeViewController.m in Sources */,
+				9ADA8A1E2B4E481E00BACDEA /* GoodsReviewsWriteC.m in Sources */,
 				9A32A2212B4BEA5C005A5831 /* GoodsReviewsCell.m in Sources */,
 				81717D222A3C4AE000648139 /* KWSearchMainTypeCell.m in Sources */,
 				81DFA5672A46D60900DA708B /* ASPointDetailViewController.m in Sources */,

+ 5 - 3
Asteria/Base/RYNetWork/RYBaseVM.h

@@ -10,8 +10,8 @@
 NS_ASSUME_NONNULL_BEGIN
 @protocol RY_baseVMprotocol <NSObject>
 ///获取网络请求的回调
--(void)ry_respnsData:(id)data
-            parseAry:(NSMutableArray *)arry
+-(void)ry_respnsData:(nullable id)data
+            parseAry:(nullable NSMutableArray *)arry
               sucess:(BOOL)sucessOrFail
                 mark:(NSString *)mark;
 
@@ -30,9 +30,11 @@ NS_ASSUME_NONNULL_BEGIN
 
 
 -(void)ry_requestPostApi:(NSString *)mark param:(NSDictionary *)param;
--(void)ry_requestGetApi:(NSString *)mark param:(NSDictionary *)param;
+-(void)ry_formDataRequestPostApi:(NSString *)mark param:(NSDictionary *)param;
 
+-(void)ry_requestGetApi:(NSString *)mark param:(NSDictionary *)param;
 
+ 
 
 //重写的方法 解析之后再传给 VC
 -(void)ry_respnsSucessWithPath:(NSString *)mark data:(id)data;

+ 11 - 5
Asteria/Base/RYNetWork/RYBaseVM.m

@@ -20,11 +20,21 @@
     return self;
 }
 
+-(void)ry_formDataRequestPostApi:(NSString *)mark param:(NSDictionary *)param{
+    [ASNetTools.shared formData_postWithPath:mark param:param success:^(id _Nonnull json) {
+        NSLog(@"mark--%@--param-%@\n-json--%@",mark,param,json);
+        [self ry_respnsSucessWithPath:mark data:json];
+    } faild:^(NSString * _Nonnull code, NSString * _Nonnull msg) {
+        NSLog(@"mark--%@--param-%@\n-Error--%@",mark,param,msg);
+        [self ry_reponsFaildWithPath:mark code:code msg:msg];
+    }];
+}
 -(void)ry_requestPostApi:(NSString *)mark param:(NSDictionary *)param{
     [ASNetTools.shared postWithPath:mark param:param success:^(id _Nonnull json) {
         NSLog(@"mark--%@--param-%@\n-json--%@",mark,param,json);
         [self ry_respnsSucessWithPath:mark data:json];
     } faild:^(NSString * _Nonnull code, NSString * _Nonnull msg) {
+        NSLog(@"mark--%@--param-%@\n-Error--%@",mark,param,msg);
         [self ry_reponsFaildWithPath:mark code:code msg:msg];
     }];
 }
@@ -33,6 +43,7 @@
         NSLog(@"mark--%@--param-%@\n-json--%@",mark,param,json);
         [self ry_respnsSucessWithPath:mark data:json];
     } faild:^(NSString * _Nonnull code, NSString * _Nonnull msg) {
+        NSLog(@"mark--%@--param-%@\n-Error--%@",mark,param,msg);
         [self ry_reponsFaildWithPath:mark code:code msg:msg];
     }];
 }
@@ -62,9 +73,4 @@
     
  }
 
-
-
-
-
-
 @end

+ 23 - 0
Asteria/Fuction/Goods/Assets/Goods.xcassets/goods_wirte_upload.imageset/Contents.json

@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "上传图片.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "上传图片@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "上传图片@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
Asteria/Fuction/Goods/Assets/Goods.xcassets/goods_wirte_upload.imageset/上传图片.png


BIN
Asteria/Fuction/Goods/Assets/Goods.xcassets/goods_wirte_upload.imageset/上传图片@2x.png


BIN
Asteria/Fuction/Goods/Assets/Goods.xcassets/goods_wirte_upload.imageset/上传图片@3x.png


+ 23 - 0
Asteria/Fuction/Goods/Assets/Goods.xcassets/goos_zan_normal.imageset/Contents.json

@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "thumb-up-line.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "thumb-up-line@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "thumb-up-line@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
Asteria/Fuction/Goods/Assets/Goods.xcassets/goos_zan_normal.imageset/thumb-up-line.png


BIN
Asteria/Fuction/Goods/Assets/Goods.xcassets/goos_zan_normal.imageset/thumb-up-line@2x.png


BIN
Asteria/Fuction/Goods/Assets/Goods.xcassets/goos_zan_normal.imageset/thumb-up-line@3x.png


+ 23 - 0
Asteria/Fuction/Goods/Assets/Goods.xcassets/goos_zan_select.imageset/Contents.json

@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "thumb-up-fill.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "thumb-up-fill@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "thumb-up-fill@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
Asteria/Fuction/Goods/Assets/Goods.xcassets/goos_zan_select.imageset/thumb-up-fill.png


BIN
Asteria/Fuction/Goods/Assets/Goods.xcassets/goos_zan_select.imageset/thumb-up-fill@2x.png


BIN
Asteria/Fuction/Goods/Assets/Goods.xcassets/goos_zan_select.imageset/thumb-up-fill@3x.png


+ 23 - 0
Asteria/Fuction/Goods/Assets/Goods.xcassets/reviews_empty_star.imageset/Contents.json

@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "star-NUMORAL.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "star-NUMORAL@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "star-NUMORAL@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
Asteria/Fuction/Goods/Assets/Goods.xcassets/reviews_empty_star.imageset/star-NUMORAL.png


BIN
Asteria/Fuction/Goods/Assets/Goods.xcassets/reviews_empty_star.imageset/star-NUMORAL@2x.png


BIN
Asteria/Fuction/Goods/Assets/Goods.xcassets/reviews_empty_star.imageset/star-NUMORAL@3x.png


+ 23 - 0
Asteria/Fuction/Goods/Assets/Goods.xcassets/reviews_full_star.imageset/Contents.json

@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "star-fill.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "star-fill@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "star-fill@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
Asteria/Fuction/Goods/Assets/Goods.xcassets/reviews_full_star.imageset/star-fill.png


BIN
Asteria/Fuction/Goods/Assets/Goods.xcassets/reviews_full_star.imageset/star-fill@2x.png


BIN
Asteria/Fuction/Goods/Assets/Goods.xcassets/reviews_full_star.imageset/star-fill@3x.png


+ 66 - 30
Asteria/Fuction/Goods/Revies/AS_GoodsReviewsListC.m

@@ -9,8 +9,11 @@
 #import "ASGoodsDetailsVM.h"
 #import "RadioButton.h"
 #import "GoodsReviewsListTableV.h"
+#import "GoodsReviewsWriteC.h"
+#import "ReviewsTableHearV.h"
 
-@interface AS_GoodsReviewsListC ()<RY_baseVMprotocol>
+
+@interface AS_GoodsReviewsListC ()<RY_baseVMprotocol,TT_BaseTableVDelegate>
 @property (nonatomic, strong) ASGoodsDetailsVM *VM;
 @property (nonatomic, strong) UIView *topBgV;
 @property (nonatomic, strong) UIImageView *topImgV;
@@ -19,12 +22,13 @@
 @property (nonatomic, strong) QMUILabel *soldLab;
 
 @property (nonatomic, strong) NSMutableArray *radioBtnAry;
-@property (nonatomic, strong) UIView *tableHeadV;
+@property (nonatomic, strong) ReviewsTableHearV *tableHeadV;
 
 @property (nonatomic, strong) QMUILabel *reviewsLab;
 
-
 @property (nonatomic, strong) GoodsReviewsListTableV *TableV;
+@property (nonatomic, strong) NSMutableArray *sortreTypeAry;
+@property (nonatomic, strong) NSString *sortreType;
 
 
 @end
@@ -34,22 +38,28 @@
 - (void)viewDidLoad {
     [super viewDidLoad];
     self.title = [NSString stringWithFormat:@"Reviews (%@)",self.goodsM.review_nums];
-    [self reqNet_Goods_productGetProductsReview];
+    self.TableV.Page = 1;
+    self.sortreType = [self.sortreTypeAry firstObject];
+    [MBProgressHUD showHUDAddedTo:self.view animated:YES];
+    [self reqNet_Goods_productGetProductsReview:self.sortreType];
+    [self sub_veiwTapBlock];
 }
 
 - (void)initSubviews {
     [super initSubviews];
     [self.view addSubview:self.topBgV];
-    NSArray *segAry = @[@"All",@"Newest",@"Pictures"];
-    for (int i=0; i<segAry.count; i++) {
+    self.sortreTypeAry = [NSMutableArray arrayWithArray:@[@"All",@"Newest",@"Pictures"]];
+    self.sortreType = [self.sortreTypeAry firstObject];
+    for (int i=0; i<self.sortreTypeAry.count; i++) {
         RadioButton *radBtn= [[RadioButton alloc]init];
-        radBtn.backgroundColor = [UIColor colorWithHexString:@"#FFFFFF"];
+        radBtn.backgroundColor = [UIColor colorWithHexString:@"#F8F8F8"];
         radBtn.titleLabel.font = [UIFont fontWithName:Rob_Regular size:14];
         radBtn.layer.cornerRadius = 4;
         radBtn.clipsToBounds = YES;
         radBtn.tag = i;
-        [radBtn setTitle:segAry[i] forState:UIControlStateNormal];
+        [radBtn setTitle:self.sortreTypeAry[i] forState:UIControlStateNormal];
         [radBtn setTitleColor:[UIColor colorWithHexString:@"#000000"] forState:UIControlStateNormal];
+        [radBtn setTitleColor:[UIColor colorWithHexString:@"#FFFFFF"] forState:UIControlStateSelected];
         [radBtn addTarget:self action:@selector(handle_onRadioButtonValueChanged:) forControlEvents:UIControlEventValueChanged];
         [self.view addSubview:radBtn];
         CGFloat btnWidth =  (KScreenWidth-40)/3;
@@ -58,7 +68,8 @@
     }
     RadioButton *firstBtn = self.radioBtnAry[0];
     [firstBtn setGroupButtons:self.radioBtnAry];
-    firstBtn.selected = YES;
+    [firstBtn setSelected:YES];
+    firstBtn.backgroundColor = [UIColor colorWithHexString:@"#113632"];
     
     [self setupTableV:[GoodsReviewsListTableV class] Frame:CGRectMake(0, CGRectGetMaxY(firstBtn.frame)+10, KScreenWidth, KScreenHeight- CGRectGetMaxY(firstBtn.frame)-10)];
     self.TableV.backgroundColor = [UIColor clearColor];
@@ -66,36 +77,52 @@
     self.TableV.Page = 1;
     self.TableV.is_refreshHeader = YES;
     self.TableV.is_refreshfoot = YES;
-}
-- (void)viewDidLayoutSubviews {
-    [super viewDidLayoutSubviews];
     
 }
+- (void)sub_veiwTapBlock{
+    @weakify(self)
+    self.tableHeadV.ViewtapClose = ^(NSInteger num, id  _Nonnull data) {
+        @strongify(self)
+        if(num == 0){
+            GoodsReviewsWriteC *vc = [[GoodsReviewsWriteC alloc]init];
+            vc.goodsM = self.goodsM;
+            vc.topBgV = self.topBgV;
+            vc.nav_title = [NSString stringWithFormat:@"REVIEWS (%@)",self.goodsM.review_nums];
+            [self.navigationController pushViewController:vc animated:YES];
+        }
+    };
+}
 
 - (void)ucm_changedefault{
     [self.topImgV sd_setImageWithURL:[NSURL URLWithString:self.goodsM.gooodsImgUrl] placeholderImage:UIImageDefaultImg_SD];
     self.goodsTitleLab.text = self.goodsM.name;
     self.priceLab.attributedText = self.goodsM.priceAtr;
     self.soldLab.text =  [NSString stringWithFormat:@"SOLD: %@",self.goodsM.sold];
+    [self.tableHeadV tt_confignewdata:self.goodsM];
 }
 
 - (void)ucm_bindvmmodel{
     self.VM = [[ASGoodsDetailsVM alloc]initDelegate:self];
 }
-#pragma mark - **************** reqNet ****************
 
--(void)reqNet_Goods_productGetProductsReview{
+#pragma mark - **************** TT_BaseTableVDelegate ****************
+- (void)refreshDataType:(NSInteger)type{
+    [self reqNet_Goods_productGetProductsReview:self.sortreType];
+}
+
+
+#pragma mark - **************** reqNet ****************
+-(void)reqNet_Goods_productGetProductsReview:(NSString *)sortreType{
     NSMutableDictionary *params = [[NSMutableDictionary alloc]init];
     [params setObject:self.goodsM.Id forKey:@"pid"];
     [params setObject:@1 forKey:@"img"];
-    [params setObject:@"All" forKey:@"sortreview"];
-    [params setObject:@1 forKey:@"p"];
+    [params setObject:sortreType forKey:@"sortreview"];
+    [params setObject:@(self.TableV.Page) forKey:@"p"];
     [params setObject:@10 forKey:@"limit"];
-
     [self.VM ry_requestGetApi:Goods_productGetProductsReview param:params];
 }
--(void)ry_respnsData:(id)data
-            parseAry:(NSMutableArray *)arry
+-(void)ry_respnsData:(nullable id)data
+            parseAry:(nullable NSMutableArray *)arry
               sucess:(BOOL)sucessOrFail
                 mark:(NSString *)mark{
     [MBProgressHUD hideHUDForView:self.view animated:YES];
@@ -110,14 +137,21 @@
 #pragma mark - **************** handle ****************
 -(void)handle_onRadioButtonValueChanged:(RadioButton *)btn{
     if (btn.selected) {
-        
+        btn.backgroundColor = [UIColor colorWithHexString:@"#113632"];
+        self.TableV.Page = 1;
+        self.sortreType = self.sortreTypeAry[btn.tag];
+        [MBProgressHUD showHUDAddedTo:self.view animated:YES];
+        [self reqNet_Goods_productGetProductsReview:self.sortreType];
+        [self.TableV setContentOffset:CGPointMake(0, 0) animated:YES];
     }else{
-        
+        btn.backgroundColor = [UIColor colorWithHexString:@"#F8F8F8"];
     }
 }
 
 
 
+
+
 #pragma mark - **************** lazy ****************
 - (UIView *)topBgV {
     if (!_topBgV) {
@@ -179,7 +213,6 @@
 - (QMUILabel *)priceLab {
     if (!_priceLab) {
         _priceLab = [[QMUILabel alloc] initWithFrame:CGRectZero];
-     
     }
     return  _priceLab;
 }
@@ -192,12 +225,10 @@
         _soldLab.textAlignment = NSTextAlignmentRight;
         _soldLab.textColor = [UIColor colorWithHexString:@"#000000"];
         _soldLab.font = [UIFont fontWithName:Rob_Regular size:12];
-        
     }
     return  _soldLab;
 }
 
-
 - (NSMutableArray *)radioBtnAry {
     if (!_radioBtnAry) {
         _radioBtnAry = [[NSMutableArray alloc] init];
@@ -205,13 +236,10 @@
     return _radioBtnAry;
 }
 
-
-
-
-- (UIView *)tableHeadV {
+- (ReviewsTableHearV *)tableHeadV {
     if (!_tableHeadV) {
-        _tableHeadV = [[UIView alloc] initWithFrame:CGRectFlatMake(10, 0, KScreenHeight-20, 86)];
-        _tableHeadV.backgroundColor = [UIColor colorWithHexString:@"#F8F8F8"];
+        _tableHeadV = [[ReviewsTableHearV alloc] initWithFrame:CGRectFlatMake(0, 0, KScreenHeight, [ReviewsTableHearV xxx_viewHeight])];
+        _tableHeadV.backgroundColor = [UIColor colorWithHexString:@"#FFFFFF"];
     }
     return _tableHeadV;
 }
@@ -228,4 +256,12 @@
 }
 
 
+
+- (NSMutableArray *)sortreTypeAry {
+    if (!_sortreTypeAry) {
+        _sortreTypeAry = [[NSMutableArray alloc] init];
+    }
+    return _sortreTypeAry;
+}
+
 @end

+ 23 - 0
Asteria/Fuction/Goods/Revies/Base/QDSingleImagePickerPreviewViewController.h

@@ -0,0 +1,23 @@
+//
+//  QDSingleImagePickerPreviewViewController.h
+//  qmuidemo
+//
+//  Created by QMUI Team on 15/5/17.
+//  Copyright (c) 2015年 QMUI Team. All rights reserved.
+//
+
+@class QDSingleImagePickerPreviewViewController;
+
+@protocol QDSingleImagePickerPreviewViewControllerDelegate <QMUIImagePickerPreviewViewControllerDelegate>
+
+@required
+- (void)imagePickerPreviewViewController:(QDSingleImagePickerPreviewViewController *)imagePickerPreviewViewController didSelectImageWithImagesAsset:(QMUIAsset *)imageAsset;
+
+@end
+
+@interface QDSingleImagePickerPreviewViewController : QMUIImagePickerPreviewViewController
+
+@property(nonatomic, weak) id<QDSingleImagePickerPreviewViewControllerDelegate> delegate;
+@property(nonatomic, strong) QMUIAssetsGroup *assetsGroup;
+
+@end

+ 66 - 0
Asteria/Fuction/Goods/Revies/Base/QDSingleImagePickerPreviewViewController.m

@@ -0,0 +1,66 @@
+//
+//  QDSingleImagePickerPreviewViewController.m
+//  qmuidemo
+//
+//  Created by QMUI Team on 15/5/17.
+//  Copyright (c) 2015年 QMUI Team. All rights reserved.
+//
+
+#import "QDSingleImagePickerPreviewViewController.h"
+
+@implementation QDSingleImagePickerPreviewViewController {
+    QMUIButton *_confirmButton;
+}
+
+@dynamic delegate;
+
+- (void)initSubviews {
+    [super initSubviews];
+    _confirmButton = [[QMUIButton alloc] init];
+    _confirmButton.qmui_outsideEdge = UIEdgeInsetsMake(-6, -6, -6, -6);
+    [_confirmButton setTitleColor:self.toolBarTintColor forState:UIControlStateNormal];
+    [_confirmButton setTitle:@"USE" forState:UIControlStateNormal];
+    [_confirmButton addTarget:self action:@selector(handleUserAvatarButtonClick:) forControlEvents:UIControlEventTouchUpInside];
+    [_confirmButton sizeToFit];
+    [self.topToolBarView addSubview:_confirmButton];
+}
+
+- (void)setDownloadStatus:(QMUIAssetDownloadStatus)downloadStatus {
+    [super setDownloadStatus:downloadStatus];
+    switch (downloadStatus) {
+        case QMUIAssetDownloadStatusSucceed:
+            _confirmButton.hidden = NO;
+            break;
+            
+        case QMUIAssetDownloadStatusDownloading:
+            _confirmButton.hidden = YES;
+            break;
+            
+        case QMUIAssetDownloadStatusCanceled:
+            _confirmButton.hidden = NO;
+            break;
+            
+        case QMUIAssetDownloadStatusFailed:
+            _confirmButton.hidden = YES;
+            break;
+            
+        default:
+            break;
+    }
+}
+
+- (void)viewDidLayoutSubviews {
+    [super viewDidLayoutSubviews];
+    _confirmButton.frame = CGRectSetXY(_confirmButton.frame, CGRectGetWidth(self.topToolBarView.frame) - CGRectGetWidth(_confirmButton.frame) - 10, CGRectGetMinY(self.backButton.frame) + CGFloatGetCenter(CGRectGetHeight(self.backButton.frame), CGRectGetHeight(_confirmButton.frame)));
+}
+
+- (void)handleUserAvatarButtonClick:(id)sender {
+    [self.navigationController dismissViewControllerAnimated:YES completion:^(void) {
+        if (self.delegate && [self.delegate respondsToSelector:@selector(imagePickerPreviewViewController:didSelectImageWithImagesAsset:)]) {
+            QMUIAsset *imageAsset = [self.imagesAssetArray objectAtIndex:self.imagePreviewView.currentImageIndex];
+            [self.delegate imagePickerPreviewViewController:self didSelectImageWithImagesAsset:imageAsset];
+        }
+    }];
+}
+
+@end

+ 19 - 0
Asteria/Fuction/Goods/Revies/GoodsReviewsWriteC.h

@@ -0,0 +1,19 @@
+//
+//  GoodsReviewsWriteC.h
+//  Asteria
+//
+//  Created by 王猛 on 2024/1/10.
+//
+
+#import <WMBase/WMBase.h>
+#import "GoodsInformationM.h"
+NS_ASSUME_NONNULL_BEGIN
+
+@interface GoodsReviewsWriteC : UCMBaseC
+@property (nonatomic, strong) UIView *topBgV;
+@property (nonatomic, strong) NSString *nav_title;
+@property (nonatomic, strong) GoodsInformationM *goodsM;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 442 - 0
Asteria/Fuction/Goods/Revies/GoodsReviewsWriteC.m

@@ -0,0 +1,442 @@
+//
+//  GoodsReviewsWriteC.m
+//  Asteria
+//
+//  Created by 王猛 on 2024/1/10.
+//
+
+#import "GoodsReviewsWriteC.h"
+#import "AS_GoodsDetailsC.h"
+#import "HCSStarRatingView.h"
+#import "GoodWritUpImgV.h"
+#import <QMUIKit/QMUIImagePickerPreviewViewController.h>
+#import "ASGoodsDetailsVM.h"
+#import "QDSingleImagePickerPreviewViewController.h"
+
+
+#define kWriteUpimgWdith  (KScreenWidth-40)/3
+static QMUIAlbumContentType const kAlbumContentType = QMUIAlbumContentTypeOnlyPhoto;
+
+
+@interface GoodsReviewsWriteC ()
+<QMUITextViewDelegate,
+QMUIAlbumViewControllerDelegate,
+QMUIImagePickerViewControllerDelegate,
+QDSingleImagePickerPreviewViewControllerDelegate,
+RY_baseVMprotocol>
+@property (nonatomic, strong) TT_CustonTF *buyernameTF;
+@property (nonatomic, strong) TT_CustonTF *orderlengthTF;
+@property (nonatomic, strong) NSMutableArray *starValueAry;
+@property (nonatomic, strong) UIButton *bootomBtn;
+@property (nonatomic, strong) QMUITextView *writeTextV;
+@property (nonatomic, strong) NSMutableArray *xxx_upLoadImgAry;
+@property (nonatomic, assign) NSInteger xxx_tapImgIndex;
+
+@property (nonatomic, strong) NSMutableArray *xxx_imgUrlAry;
+@property (nonatomic, strong) NSMutableArray *xxx_selectImgAry;
+@property (nonatomic, strong) ASGoodsDetailsVM *VM;
+
+@end
+
+@implementation GoodsReviewsWriteC
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    self.title = self.nav_title;
+
+}
+- (void)ucm_bindvmmodel{
+    self.VM = [[ASGoodsDetailsVM alloc]initDelegate:self];
+}
+- (void)initSubviews {
+    [super initSubviews];
+    [self.view addSubview:self.topBgV];
+    [self.view addSubview:self.buyernameTF];
+    [self.view addSubview:self.orderlengthTF];
+    IPhoneXHeigh
+    self.topBgV.frame = CGRectMake(0, securitytop_Y, KScreenWidth, 60);
+    self.buyernameTF.mj_y = CGRectGetMaxY(self.topBgV.frame)+20;
+    self.orderlengthTF.mj_y = CGRectGetMaxY(self.buyernameTF.frame)+20;
+    NSArray *titileAry = @[@"QUALITY",@"SHIPPING",@"SERVICE"];
+    self.starValueAry = [NSMutableArray arrayWithArray:@[@"0.0",@"0.0",@"0.0"]];
+    UIView *lastView = nil;
+    for (int i = 0; i<titileAry.count; i++) {
+        UILabel *tipslab = [UILabel new];
+        tipslab.text = titileAry[i];
+        tipslab.font = [UIFont fontWithName:Rob_Regular size:14];
+        tipslab.textColor = [UIColor colorWithHexString:@"#B2B2B2"];
+        [self.view addSubview:tipslab];
+        tipslab.frame = CGRectMake(10, CGRectGetMaxY(self.orderlengthTF.frame)+20+i*40, 70, 40);
+        
+        HCSStarRatingView *reviews_startV = [[HCSStarRatingView alloc]initWithFrame:CGRectMake(10+70+10, CGRectGetMaxY(self.orderlengthTF.frame)+20+i*40,160, 40)];
+        reviews_startV.value =0;
+        reviews_startV.filledStarImage = IMAGE(@"reviews_full_star");
+        reviews_startV.emptyStarImage = IMAGE(@"reviews_empty_star");
+        reviews_startV.maximumValue = 5;
+        reviews_startV.backgroundColor = [UIColor clearColor];
+        reviews_startV.tag = i;
+        [reviews_startV addTarget:self action:@selector(didChangeValue:) forControlEvents:UIControlEventValueChanged];
+        [self.view addSubview:reviews_startV];
+        if(i == titileAry.count-1){
+            lastView = reviews_startV;
+        }
+    }
+    [self.view addSubview:self.writeTextV];
+    self.writeTextV.mj_y = CGRectGetMaxY(lastView.frame)+30;
+    
+    self.xxx_upLoadImgAry = [NSMutableArray arrayWithCapacity:3];
+    for (int i = 0; i<3; i++) {
+        GoodWritUpImgV *upImgV = [[GoodWritUpImgV alloc]initWithFrame:CGRectMake(10+i*(kWriteUpimgWdith+10),CGRectGetMaxY(self.writeTextV.frame)+30, kWriteUpimgWdith, kWriteUpimgWdith)];
+        upImgV.tag = i;
+        upImgV.closeBtn.tag = i;
+        upImgV.isCanTap = YES;
+        [upImgV.closeBtn addTarget:self action:@selector(handle_closeDeleteImgBtn:) forControlEvents:UIControlEventTouchUpInside];
+        upImgV.hidden = YES;
+        upImgV.image = [UIImage imageNamed:@"goods_wirte_upload"];
+        [self.view addSubview:upImgV];
+        UITapGestureRecognizer  *tap= [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handle_TapUpImgLoad:)];
+        [upImgV addGestureRecognizer:tap];
+        if(i == 0 ){
+            upImgV.hidden = NO;
+        }
+        [self.xxx_upLoadImgAry addObject:upImgV];
+    }
+    [self.view addSubview:self.bootomBtn];
+}
+#pragma mark - **************** handle ****************
+-(void)didChangeValue:(HCSStarRatingView *)starV{
+    NSLog(@"Changed rating to %.1f", starV.value);
+    [self.starValueAry replaceObjectAtIndex:starV.tag withObject:[NSString stringWithFormat:@"%f",starV.value]];
+}
+/// upLoad Img 相关内容
+-(void)handle_closeDeleteImgBtn:(UIButton *)btn{
+    [FTT_Helper CreateTitle:@"Whether to delete the current photo" message:nil CantionTitle:@"Cancel" Sure:@"Sure" preferredStyle:UIAlertControllerStyleAlert SureAC:^{
+        [self tool_deleteImgChange:btn.tag];
+    } NoAC:nil ViewController:self];
+}
+-(void)tool_deleteImgChange:(NSInteger )index{
+    [self.xxx_imgUrlAry removeObjectAtIndex:index];
+    [self.xxx_selectImgAry removeObjectAtIndex:index];
+    for (int i = 0; i<self.xxx_upLoadImgAry.count; i++) {
+        GoodWritUpImgV * imgV =  self.xxx_upLoadImgAry[i];
+        imgV.hidden = NO;
+        if(self.xxx_selectImgAry.count > i){
+            imgV.image = self.xxx_selectImgAry[i];
+            imgV.isCanTap = NO;
+        }else if (self.xxx_selectImgAry.count == i){
+            imgV.image = [UIImage imageNamed:@"goods_wirte_upload"];
+            imgV.isCanTap = YES;
+        }else{
+            imgV.hidden = YES;
+        }
+    }
+}
+//点击添加图片
+-(void)handle_TapUpImgLoad:(UITapGestureRecognizer *)tap{
+    GoodWritUpImgV * imgV =(GoodWritUpImgV *_Nullable )tap.view;
+    if(imgV.isCanTap){//调用相片
+        self.xxx_tapImgIndex = imgV.tag;
+        [self tool_presentAlbumViewControllerWith:imgV.tag];
+    }
+}
+
+#pragma mark - **************** 选择照片上传 ****************
+-(void)tool_presentAlbumViewControllerWith:(NSInteger )index{
+    QMUIAlbumViewController *albumViewController = [[QMUIAlbumViewController alloc] init];
+    albumViewController.albumViewControllerDelegate = self;
+    albumViewController.contentType = QMUIAlbumContentTypeOnlyPhoto;
+    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:albumViewController];
+    // 获取最近发送图片时使用过的相簿,如果有则直接进入该相簿
+    [albumViewController pickLastAlbumGroupDirectlyIfCan];
+    [self presentViewController:navigationController animated:YES completion:NULL];
+}
+
+#pragma mark - **************** QMUIAlbumViewControllerDelegate ****************
+- (QMUIImagePickerViewController *)imagePickerViewControllerForAlbumViewController:(QMUIAlbumViewController *)albumViewController {
+    QMUIImagePickerViewController *imagePickerViewController = [[QMUIImagePickerViewController alloc] init];
+    imagePickerViewController.imagePickerViewControllerDelegate = self;
+    imagePickerViewController.maximumSelectImageCount = 3;
+    imagePickerViewController.view.tag = albumViewController.view.tag;
+    imagePickerViewController.allowsMultipleSelection = NO;
+    return imagePickerViewController;
+}
+#pragma mark - **************** QMUIImagePickerViewControllerDelegate ****************
+- (void)imagePickerViewController:(QMUIImagePickerViewController *)imagePickerViewController didFinishPickingImageWithImagesAssetArray:(NSMutableArray<QMUIAsset *> *)imagesAssetArray {
+    // 储存最近选择了图片的相册,方便下次直接进入该相册
+    [QMUIImagePickerHelper updateLastestAlbumWithAssetsGroup:imagePickerViewController.assetsGroup ablumContentType:kAlbumContentType userIdentify:nil];
+}
+- (QMUIImagePickerPreviewViewController *)imagePickerPreviewViewControllerForImagePickerViewController:(QMUIImagePickerViewController *)imagePickerViewController {
+    QDSingleImagePickerPreviewViewController *imagePickerPreviewViewController = [[QDSingleImagePickerPreviewViewController alloc] init];
+    imagePickerPreviewViewController.delegate = self;
+    imagePickerPreviewViewController.assetsGroup = imagePickerViewController.assetsGroup;
+    imagePickerPreviewViewController.view.tag = imagePickerViewController.view.tag;
+    return imagePickerPreviewViewController;
+}
+#pragma mark - <QDSingleImagePickerPreviewViewControllerDelegate>
+
+- (void)imagePickerPreviewViewController:(QDSingleImagePickerPreviewViewController *)imagePickerPreviewViewController didSelectImageWithImagesAsset:(QMUIAsset *)imageAsset {
+    // 储存最近选择了图片的相册,方便下次直接进入该相册
+    [QMUIImagePickerHelper updateLastestAlbumWithAssetsGroup:imagePickerPreviewViewController.assetsGroup ablumContentType:kAlbumContentType userIdentify:nil];
+    // 显示 loading
+    [MBProgressHUD showHUDAddedTo:self.view animated:YES];
+    [imageAsset requestImageData:^(NSData *imageData, NSDictionary<NSString *,id> *info, BOOL isGif, BOOL isHEIC) {
+        UIImage *targetImage = nil;
+        if (isGif) {
+            targetImage = [UIImage qmui_animatedImageWithData:imageData];
+        } else {
+            targetImage = [UIImage imageWithData:imageData];
+//            if (isHEIC) {
+//                // iOS 11 中新增 HEIF/HEVC 格式的资源,直接发送新格式的照片到不支持新格式的设备,照片可能会无法识别,可以先转换为通用的 JPEG 格式再进行使用。
+//                // 详细请浏览:https://github.com/Tencent/QMUI_iOS/issues/224
+//                targetImage = [UIImage imageWithData:UIImageJPEGRepresentation(targetImage, 1)];
+//            }
+        }
+        [self performSelector:@selector(tool_setAvatarWithAvatarImage:) withObject:targetImage afterDelay:1.8];
+    }];
+}
+///执行相关的网络请求
+-(void)tool_setAvatarWithAvatarImage:(UIImage *)avatarImage{
+    [MBProgressHUD hideHUDForView:self.view animated:YES];
+    if(self.xxx_tapImgIndex<2){
+        GoodWritUpImgV *tempImgV = self.xxx_upLoadImgAry[self.xxx_tapImgIndex+1];
+        tempImgV.hidden = NO;
+    }
+    GoodWritUpImgV *upImgV = self.xxx_upLoadImgAry[self.xxx_tapImgIndex];
+    upImgV.image = avatarImage;
+    upImgV.isCanTap = NO;
+    [self.xxx_selectImgAry addObject:avatarImage];
+    [self reqNet_upload:avatarImage];
+}
+#pragma mark - **************** reqNet ****************
+-(void)reqNet_upload:(UIImage *)img{
+    NSData *imageData = UIImageJPEGRepresentation(img, 0.6);
+    NSString *dataStr = [imageData base64EncodedStringWithOptions:0];
+    NSMutableDictionary *params = [NSMutableDictionary dictionary];
+    [params setObject:dataStr forKey:@"image_video[]"];
+    [MBProgressHUD showHUDAddedTo:self.view animated:YES];
+    NSString *reqUrl = RequestAllUrl(Reivews_rewriteProductAddImg);
+    [PPNetworkHelper uploadImagesWithURL:reqUrl parameters:@{} name:@"image_video[]" images:@[img] fileNames:nil imageScale:0.6 imageType:nil progress:^(NSProgress *progress) {
+        
+    } success:^(id responseObject) {
+        [MBProgressHUD hideHUDForView:self.view animated:YES];
+        if(RequestSuccess){
+            [self.view makeToast:@"Sucess" duration:2 position:CSToastPositionCenter];
+            NSDictionary *dataDic = responseObject[@"data"];
+            [self.xxx_imgUrlAry addObject:dataDic[@"image_video"]];
+        }else{
+            [self.view makeToast:RequestMsg duration:2 position:CSToastPositionCenter];
+        }
+        
+    } failure:^(NSError *error) {
+        [MBProgressHUD hideHUDForView:self.view animated:YES];
+        [self.view makeToast:ReqNetWorkFaild duration:2 position:CSToastPositionCenter];
+    }];
+}
+
+-(void)handle_postCommentEvent:(UIButton *)btn{
+    if(self.writeTextV.text.length == 0 || self.orderlengthTF.text.length == 0 || self.buyernameTF.text.length == 0){
+        [self.view makeToast:@"Please complete the score first" duration:2 position:CSToastPositionCenter];
+        return;
+    }
+    NSMutableString *imageStr= [[NSMutableString alloc]initWithString:@""];
+    for (int i=0; i<self.xxx_imgUrlAry.count; i++) {
+        NSString * imgUrl = self.xxx_imgUrlAry[i];
+        [imageStr appendString:imgUrl];
+    }
+    NSMutableDictionary *params = [NSMutableDictionary dictionary];
+    
+    params[@"id"] = MM_str(self.goodsM.Id) ;
+    params[@"nickname"] = MM_str(self.buyernameTF.text) ;
+    params[@"title"] = MM_str(self.orderlengthTF.text) ;
+    params[@"detail"] = MM_str(self.writeTextV.text) ;
+    params[@"verified_purchase"] = @"0" ;
+    params[@"image_video"] = imageStr;
+    for (int i = 0; i<self.starValueAry.count; i++) {
+        NSString *str = self.starValueAry[i];
+        if([str integerValue] == 0){
+            [self.view makeToast:@"Please complete the score first" duration:2 position:CSToastPositionCenter];
+            return;
+        }
+        NSString *ratingStr = [NSString stringWithFormat:@"%ld",[str integerValue] + i*5];
+        [params setObject:ratingStr forKey:[NSString stringWithFormat:@"ratings[%d]",i+1]];
+    }
+    [self.VM ry_formDataRequestPostApi:Reviews_rewriteProductAddReview param:params];
+}
+- (void)ry_respnsData:(nullable id)data
+             parseAry:(nullable NSMutableArray *)arry
+               sucess:(BOOL)sucessOrFail
+                 mark:(nonnull NSString *)mark {
+    [MBProgressHUD hideHUDForView:self.view animated:YES];
+    if([mark isEqualToString:Reivews_rewriteProductAddImg]){
+        if(sucessOrFail){
+            [self.view makeToast:@"Sucess" duration:2 position:CSToastPositionCenter];
+            [self.xxx_imgUrlAry addObject:(NSDictionary *)data[@"image_video"]];
+            
+        }else{
+            [self.view makeToast:(NSString *)data duration:2 position:CSToastPositionCenter];
+        }
+    }else if ([mark isEqualToString:Reviews_rewriteProductAddReview]){
+        if(sucessOrFail){
+            @weakify(self)
+            [self.view makeToast:@"Your review has been accepted for moderation" duration:2 position:CSToastPositionCenter title:nil image:nil style:nil completion:^(BOOL didTap) {
+                @strongify(self)
+                NSArray *tmpVcAry = self.navigationController.viewControllers;
+                for(UIViewController *vc in tmpVcAry){
+                    if([vc isKindOfClass:[AS_GoodsDetailsC class]]){
+                        [self.navigationController popToViewController:vc animated:YES];
+                        return;
+                    }
+                }
+            }];
+        }else{
+            [self.view makeToast:(NSString *)data duration:2 position:CSToastPositionCenter];
+        }
+    }
+}
+
+#pragma mark - **************** lazy ****************
+-(TT_CustonTF *)buyernameTF{
+    if(!_buyernameTF){
+        _buyernameTF = [TT_ControlTool FTT_ControlToolUITextFieldFrame:CGRectMake(10, 0, KScreenWidth-20, 45)
+                                                             PlaceHolder:@"* BUYER NAME"
+                                                             andLifImage:nil
+                                                           AndRightImage:nil LiftImageFrame:CGRectZero
+                                                         RightImageFrame:CGRectZero
+                                                                  AndTag:0
+                                                         AndKeyboardType:UIKeyboardTypeDefault
+                                                         clearButtonMode:UITextFieldViewModeAlways
+                                                        AndReturnKeyType:UIReturnKeyDone
+                                                           masksToBounds:YES
+                                                            conrenRadius:4
+                                                             BorderColor:[UIColor colorWithHexString:@"#000000"]
+                                                             BorderWidth:1];
+        _buyernameTF.font = [UIFont fontWithName:Rob_Regular size:14];
+        _buyernameTF.backgroundColor = [UIColor colorWithHexString:@"#FFFFFF"];
+    }
+    return _buyernameTF;
+}
+
+-(TT_CustonTF *)orderlengthTF{
+    if(!_orderlengthTF){
+        _orderlengthTF = [TT_ControlTool FTT_ControlToolUITextFieldFrame:CGRectMake(10, 0, KScreenWidth-20, 45)
+                                                             PlaceHolder:@"* ORDER LENGTH"
+                                                             andLifImage:nil
+                                                           AndRightImage:nil LiftImageFrame:CGRectZero
+                                                         RightImageFrame:CGRectZero
+                                                                  AndTag:0
+                                                         AndKeyboardType:UIKeyboardTypeDefault
+                                                         clearButtonMode:UITextFieldViewModeAlways
+                                                        AndReturnKeyType:UIReturnKeyDone
+                                                           masksToBounds:YES
+                                                            conrenRadius:4
+                                                             BorderColor:[UIColor colorWithHexString:@"#000000"]
+                                                             BorderWidth:1];
+        _orderlengthTF.font = [UIFont fontWithName:Rob_Regular size:14];
+        _orderlengthTF.backgroundColor = [UIColor colorWithHexString:@"#FFFFFF"];
+    }
+    return _orderlengthTF;
+}
+
+
+
+
+-(QMUITextView *)writeTextV{
+    if(!_writeTextV){
+        _writeTextV = [[QMUITextView alloc]initWithFrame:CGRectMake(10, 0, KScreenWidth-20, 110)];
+        _writeTextV.textContainerInset = UIEdgeInsetsMake(10, 7, 10, 7);
+        _writeTextV.placeholder = @" * WRITE A REVIEW";
+        _writeTextV.layer.cornerRadius = 4;
+        _writeTextV.layer.borderColor = [UIColor colorWithHexString:@"#0B0B0B"].CGColor;
+        _writeTextV.layer.borderWidth = 1;
+        _writeTextV.clipsToBounds = YES;
+        _writeTextV.font = [UIFont fontWithName:Rob_Regular size:14];
+        _writeTextV.placeholderColor = [UIColor colorWithHexString:@"#999999"];
+    }
+    return _writeTextV;
+}
+
+-(UIButton *)bootomBtn{
+    if(!_bootomBtn){
+        IPhoneXHeigh
+        _bootomBtn = [TT_ControlTool FTT_ControlToolUIButtonFrame:CGRectMake(20, KScreenHeight-45-securityBottom_H, KScreenWidth-40, 45)
+                                                           taeget:self
+                                                              sel:@selector(handle_postCommentEvent:)
+                                                              tag:0
+                                                         AntTitle:@"POST COMMENT"
+                                                        titleFont:16
+                                                       titleColor:[UIColor colorWithHexString:@"#FFFFFF"]
+                                                         andImage:nil
+                                                     AndBackColor:[UIColor colorWithHexString:@"#000000"]
+                                          adjustsFontSizesTowidth:NO
+                                                    masksToBounds:YES
+                                                     conrenRadius:4 BorderColor:nil BorderWidth:0 ContentHorizontalAligment:0];
+    }
+    return _bootomBtn;
+}
+
+
+- (NSMutableArray *)xxx_imgUrlAry {
+    if (!_xxx_imgUrlAry) {
+        _xxx_imgUrlAry = [[NSMutableArray alloc] init];
+    }
+    return _xxx_imgUrlAry;
+}
+
+
+- (NSMutableArray *)xxx_selectImgAry {
+    if (!_xxx_selectImgAry) {
+        _xxx_selectImgAry = [[NSMutableArray alloc] init];
+    }
+    return _xxx_selectImgAry;
+}
+
+
+/**
+ 上传图片
+ [formData appendPartWithFileData:uploadImageData name:@"content_pic" fileName:fileName mimeType:ECGBJKeyJPEG];
+
+
+ @param URLString URL
+ @param content 弹框的内容
+ @param parameters 参数体
+ @param uploadDatas 上传图片NSData
+ @param completeSuccess 成功回调
+ @param completeFailure 失败回调
+ 
+ [manager POST:URLString parameters:parameters constructingBodyWithBlock:^(id< AFMultipartFormData >  _Nonnull formData) {
+
+     NSDateFormatter *formatter=[[NSDateFormatter alloc]init];
+     formatter.dateFormat=@"yyyyMMddHHmmss";
+     NSString *str=[formatter stringFromDate:[NSDate date]];
+     NSString *fileName=[NSString stringWithFormat:@"%@.jpg",str];
+
+    [formData appendPartWithFileData:uploadImageData name:@"content_pic" fileName:fileName mimeType:ECGBJKeyJPEG];
+
+ } progress:^(NSProgress * _Nonnull uploadProgress) {
+    
+ } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
+
+  // 转换responseObject对象
+     NSDictionary *dict = nil;
+     if ([responseObject isKindOfClass:[NSDictionary class]]) {
+         dict = (NSDictionary *)responseObject;
+     } else {
+         dict = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingAllowFragments error:nil];
+     }
+
+     // 成功后弹框处理,回调出去
+     [weakSelf notDismissedWith:dict responseObject:responseObject complete:^(NSDictionary *respinseDic, id responseObject) {
+         completeSuccess(respinseDic,responseObject);
+     } failedComplete:^{
+         completeFailure();
+     }];
+ } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
+// 网络问题,弹框处理
+     [weakSelf notNetconnetNotDismissComplete:^{
+         completeFailure();
+     }];
+ }]
+ */
+
+
+@end

+ 18 - 0
Asteria/Fuction/Goods/Revies/V/GoodWritUpImgV.h

@@ -0,0 +1,18 @@
+//
+//  GoodWritUpImgV.h
+//  westkissMob
+//
+//  Created by 王猛 on 2022/10/6.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface GoodWritUpImgV : UIImageView
+@property (nonatomic, strong)UIButton  *closeBtn;
+@property (nonatomic, assign)BOOL  isCanTap;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 55 - 0
Asteria/Fuction/Goods/Revies/V/GoodWritUpImgV.m

@@ -0,0 +1,55 @@
+//
+//  GoodWritUpImgV.m
+//  westkissMob
+//
+//  Created by 王猛 on 2022/10/6.
+//
+
+#import "GoodWritUpImgV.h"
+
+
+@implementation GoodWritUpImgV
+
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+- (instancetype)initWithFrame:(CGRect)frame{
+    self = [super initWithFrame:frame];
+    if(self){
+        self.layer.cornerRadius = 4;
+        self.userInteractionEnabled = YES;
+        [self addSubview:self.closeBtn];
+        self.closeBtn.frame = CGRectMake(frame.size.width-22,0 , 22, 22);
+    }
+    return self;
+}
+
+-(UIButton *)closeBtn{
+    if(!_closeBtn){
+        _closeBtn = [UIButton buttonWithType:UIButtonTypeCustom];
+        _closeBtn.backgroundColor = [UIColor colorWithHexString:@"#0B0B0B" Alpha:0.6];
+        [_closeBtn setTitle:@"X" forState:UIControlStateNormal];
+        _closeBtn.titleLabel.font = [UIFont systemFontOfSize:16];
+        [_closeBtn setTitleColor:[UIColor colorWithHexString:@"#FFFFFF"] forState:UIControlStateNormal];
+    }
+    return _closeBtn;
+}
+
+
+
+
+- (void)setIsCanTap:(BOOL)isCanTap{
+    _isCanTap = isCanTap;
+    if(isCanTap){
+        self.closeBtn.hidden = YES;
+    }else{
+        self.closeBtn.hidden = NO;
+    }
+}
+
+@end

+ 1 - 0
Asteria/Fuction/Goods/Revies/V/GoodsReviewsListTableV.m

@@ -16,6 +16,7 @@
     @weakify(cell)
     cell.currencyparameterClose = ^(NSInteger type, id Data) {
         @strongify(cell) //图片选择器展示
+        
     };
 
     return cell;

+ 1 - 1
Asteria/Fuction/Goods/Revies/V/ReviewsTableHearV.h

@@ -10,7 +10,7 @@
 NS_ASSUME_NONNULL_BEGIN
 
 @interface ReviewsTableHearV : TT_BaseV
-
++(CGFloat)xxx_viewHeight;
 @end
 
 NS_ASSUME_NONNULL_END

+ 80 - 21
Asteria/Fuction/Goods/Revies/V/ReviewsTableHearV.m

@@ -6,59 +6,112 @@
 //
 
 #import "ReviewsTableHearV.h"
+#import "HCSStarRatingView.h"
+#import "GoodsInformationM.h"
 @interface ReviewsTableHearV ()
+@property (nonatomic, strong) UILabel *customLab;
 @property (nonatomic, strong) QMUILabel *reviewsLab;
-@property (nonatomic, strong) UIView *rateStarV;
+@property (nonatomic, strong) HCSStarRatingView *reviews_startV;
 @property (nonatomic, strong) QMUIButton *writeBtn;
 @property (nonatomic, strong) QMUILabel *tipsLab;
 
 @end
-
 @implementation ReviewsTableHearV
++(CGFloat)xxx_viewHeight{
+    return  10+86+10+34+40;
+}
 
 - (void)tt_setupViews{
     UIView *topBgV = [[UIView alloc]init];
     topBgV.backgroundColor = [UIColor colorWithHexString:@"#F8F8F8"];
+    topBgV.layer.cornerRadius = 8;
+    topBgV.clipsToBounds = YES;
     [self addSubview:topBgV];
+    [topBgV addSubview:self.customLab];
+    [topBgV addSubview:self.reviewsLab];
+    [topBgV addSubview:self.reviews_startV];
+    
+ 
     [topBgV mas_makeConstraints:^(MASConstraintMaker *make) {
         make.left.mas_equalTo(10);
         make.right.mas_equalTo(-10);
         make.top.mas_equalTo(10);
         make.height.mas_equalTo(86);
     }];
+    [self.customLab mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.mas_equalTo(10);
+        make.top.mas_equalTo(20);
+        make.height.mas_equalTo(15);
+    }];
+    [self.reviewsLab mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.equalTo(self.customLab.mas_right);
+        make.top.mas_equalTo(20);
+        make.height.mas_equalTo(15);
+    }];
+    [self.reviews_startV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.mas_equalTo(10);
+        make.top.equalTo(self.reviewsLab.mas_bottom).offset(10);
+        make.height.mas_equalTo(20);
+        make.width.mas_equalTo(120);
+    }];
+     
+    [self addSubview:self.writeBtn];
+    [self addSubview:self.tipsLab];
+    [self.writeBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(topBgV.mas_bottom).offset(10);
+        make.left.mas_equalTo(10);
+        make.height.mas_equalTo(34);
+        make.width.mas_equalTo(105);
+    }];
+    [self.tipsLab mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.writeBtn.mas_bottom);
+        make.left.mas_equalTo(20);
+        make.right.mas_equalTo(-20);
+        //40;
+    }];
+}
 
-    [topBgV addSubview:self.reviewsLab];
-    [topBgV addSubview:self.rateStarV];
-    
-
-    
-
-
-    
+- (void)tt_confignewdata:(id)data{
+    GoodsInformationM *model = (GoodsInformationM *)data;
+    self.reviewsLab.text = [NSString stringWithFormat:@"(%@ Reviews)",model.review_nums];
 }
 #pragma mark - **************** handle ****************
 -(void)handle_writeEvent:(UIButton *)btn{
     [self generaltriggermethodType:0 data:@""];
 }
 
-
+- (UILabel *)customLab {
+    if (!_customLab) {
+        _customLab = [[UILabel alloc] initWithFrame:CGRectZero];
+        _customLab.textAlignment = NSTextAlignmentLeft;
+        _customLab.textColor = [UIColor blackColor];
+        _customLab.font = [UIFont fontWithName:Rob_Bold size:12];
+        _customLab.text = @"CUSTOMER REVIEWS";
+    }
+    return  _customLab;
+}
 - (QMUILabel *)reviewsLab {
     if (!_reviewsLab) {
         _reviewsLab = [[QMUILabel alloc] initWithFrame:CGRectZero];
         _reviewsLab.textAlignment = NSTextAlignmentLeft;
-        _reviewsLab.textColor = [UIColor colorWithHexString:@"#000000"];
-        _reviewsLab.font = [UIFont fontWithName:Rob_Bold size:12];
-        _reviewsLab.text = @"CUSTOMER REVIEWS";
+        _reviewsLab.textColor = [UIColor colorWithHexString:@"#666666"];
+        _reviewsLab.font = [UIFont fontWithName:Rob_Regular size:12];
     }
     return  _reviewsLab;
 }
 
 
-- (UIView *)rateStarV {
-    if (!_rateStarV) {
-        _rateStarV = [[UIView alloc] init];
+-(HCSStarRatingView *)reviews_startV{
+    if(!_reviews_startV){
+        _reviews_startV = [[HCSStarRatingView alloc]initWithFrame:CGRectMake(10, 20,100+20, 30)];
+        _reviews_startV.value =5;
+        _reviews_startV.userInteractionEnabled = NO;
+        _reviews_startV.filledStarImage = IMAGE(@"reviews_full_star");
+        _reviews_startV.emptyStarImage = IMAGE(@"reviews_empty_star");
+        _reviews_startV.maximumValue = 5;
+        _reviews_startV.backgroundColor = [UIColor clearColor];
     }
-    return _rateStarV;
+    return _reviews_startV;
 }
 
 - (QMUIButton *)writeBtn {
@@ -69,6 +122,9 @@
         [_writeBtn setAttributedTitle:atr forState:UIControlStateNormal];
         [_writeBtn addTarget:self action:@selector(handle_writeEvent:) forControlEvents:UIControlEventTouchUpInside];
         _writeBtn.titleLabel.font = [UIFont fontWithName:Rob_Bold size:12];
+        _writeBtn.titleLabel.textColor = [UIColor colorWithHexString:@"#000000"];
+        _writeBtn.frame = CGRectMake(10, 0, 105, 40);
+
      }
     return _writeBtn;
 }
@@ -77,11 +133,14 @@
     if (!_tipsLab) {
         _tipsLab = [[QMUILabel alloc] initWithFrame:CGRectZero];
         _tipsLab.textAlignment = NSTextAlignmentLeft;
-        _tipsLab.textColor = [UIColor blackColor];
-        _tipsLab.font = [UIFont systemFontOfSize:18];
-        _tipsLab.text = @"Only Registered Users Can Write Reviews.please,log In Or Register";
+        _tipsLab.textColor = [UIColor colorWithHexString:@"#666666"];
+        _tipsLab.font = [UIFont fontWithName:Rob_Regular size:12];
+        _tipsLab.text = @"Only Registered Users Can Write Reviews.Please,Log In Or Register";
+        _tipsLab.numberOfLines =2;
     }
     return  _tipsLab;
 }
 
+
+
 @end

+ 24 - 3
Asteria/Fuction/Goods/Revies/cell/GoodsReviewsCell.m

@@ -8,16 +8,19 @@
 #import "GoodsReviewsCell.h"
 #import "GoodsReviewsImgV.h"
 #import "ASGoodsDetailsVM.h"
+#import "HCSStarRatingView.h"
 
 @interface GoodsReviewsCell ()
 @property (nonatomic, strong) UIImageView *headImg;
 @property (nonatomic, strong) UILabel *nicknameLab;
 @property (nonatomic, strong) UILabel *creatLab;
 @property (nonatomic, strong) UIButton *zanBtn;
+@property (nonatomic, strong) HCSStarRatingView *reviews_startV;
 @property (nonatomic, strong) UILabel *sizeTitleLab;
 @property (nonatomic, strong) UILabel *detailLab;
 @property(nonatomic, strong) GoodsReviewsImgV *reviewsImgV;
 
+
 @end
 @implementation GoodsReviewsCell
 
@@ -40,6 +43,7 @@
     self.detailLab.text = model.detail;
     ///wm_todo 点赞本地记录的表
 //    self.zanBtn.selected = [model.thumbsUp integerValue];
+    self.reviews_startV.value =[model.review_value floatValue] ;
     [self.zanBtn setTitle:model.zan forState:UIControlStateNormal];
     if(!isValid(model.image_video) || model.image_video.count == 0 ){
         [self.reviewsImgV mas_updateConstraints:^(MASConstraintMaker *make) {
@@ -58,6 +62,7 @@
     [self.contentView addSubview:self.nicknameLab];
     [self.contentView addSubview:self.creatLab];
     [self.contentView addSubview:self.zanBtn];
+    [self.contentView addSubview:self.reviews_startV];
     [self.contentView addSubview:self.sizeTitleLab];
     [self.contentView addSubview:self.detailLab];
     [self.contentView addSubview:self.reviewsImgV];
@@ -103,11 +108,16 @@
         make.height.mas_equalTo(20);
         make.width.mas_equalTo(60);
     }];
+    [self.reviews_startV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.mas_equalTo(20);
+        make.height.mas_equalTo(15);
+        make.width.mas_equalTo(95);
+        make.top.equalTo(self.headImg.mas_bottom).offset(10);
+    }];
     [self.sizeTitleLab mas_makeConstraints:^(MASConstraintMaker *make) {
         make.left.mas_equalTo(20);
         make.right.mas_equalTo(-20);
-        make.top.equalTo(self.headImg.mas_bottom).offset(20);
-
+        make.top.equalTo(self.reviews_startV.mas_bottom).offset(10);
     }];
     [self.detailLab mas_makeConstraints:^(MASConstraintMaker *make) {
         make.top.equalTo(self.sizeTitleLab.mas_bottom).offset(20);
@@ -225,5 +235,16 @@
     }
     return _reviewsImgV;
 }
-
+-(HCSStarRatingView *)reviews_startV{
+    if(!_reviews_startV){
+        _reviews_startV = [[HCSStarRatingView alloc]initWithFrame:CGRectMake(10, 20,95, 15)];
+        _reviews_startV.value =5;
+        _reviews_startV.userInteractionEnabled = NO;
+        _reviews_startV.filledStarImage = IMAGE(@"reviews_full_star");
+        _reviews_startV.emptyStarImage = IMAGE(@"reviews_empty_star");
+        _reviews_startV.maximumValue = 5;
+        _reviews_startV.backgroundColor = [UIColor clearColor];
+    }
+    return _reviews_startV;
+}
 @end

+ 1 - 3
Asteria/Fuction/Goods/V/GoodsDetailSrcView.m

@@ -146,7 +146,6 @@
     self.infoModel = model;
     [self.goodsBanner tt_confignewdata:self.infoModel];
     self.titleLab.text =MM_str(model.name);
-    //wm_todo  soldLab\ reviewsLab\ coupon 和 size
     self.soldLab.text = [NSString stringWithFormat:@"SOLD: %@",model.sold] ;
     NSMutableAttributedString *reviewsStr = [[NSMutableAttributedString alloc]
                                              initWithString:[NSString stringWithFormat:@"REVIEWS:%@",model.review_nums]];
@@ -257,7 +256,7 @@
     }
 }
 -(void)handle_couponEvent:(UIButton *)btn{
-    //wm_todo
+    //wm_todo  优惠券的展开和合并
     btn.selected = !btn.selected;
 }
 -(void)tap_reviewsClick{
@@ -310,7 +309,6 @@
         _reviewsLab.userInteractionEnabled = YES;
         UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap_reviewsClick)];
         [_reviewsLab addGestureRecognizer:tap];
-
         //    reviewsStr.underlineStyle = NSUnderlineStyleSingle;
     }
     return  _reviewsLab;

+ 2 - 2
Asteria/Fuction/Goods/VC/AS_GoodsDetailsC.m

@@ -56,8 +56,8 @@
     [MBProgressHUD showHUDAddedTo:self.view animated:YES];
     [self.VM ry_requestGetApi:Goods_productGetProductsById param:params];
 }
--(void)ry_respnsData:(id)data
-            parseAry:(NSMutableArray *)arry
+-(void)ry_respnsData:(nullable id)data
+            parseAry:(nullable NSMutableArray *)arry
               sucess:(BOOL)sucessOrFail
                 mark:(NSString *)mark{
     [MBProgressHUD hideHUDForView:self.view animated:YES];

+ 8 - 0
Asteria/Fuction/Goods/VM/ASGoodsDetailsVM.h

@@ -12,6 +12,14 @@
 #define Goods_productGetProductsById  BaseRequestrUrl(@"rewrite/product/getProductsById")
 #define Goods_productGetProductsReview  BaseRequestrUrl(@"rewrite/product/getProductReview")
 
+///评论点赞
+#define Reviews_rewriteProductAddReviewzan BaseRequestrUrl(@"rewrite/product/addReviewzan")
+///添加评论图片
+#define Reivews_rewriteProductAddImg  BaseRequestrUrl(@"rewrite/product/addImg")
+///添加评论
+#define Reviews_rewriteProductAddReview BaseRequestrUrl(@"rewrite/product/addReview")
+
+
 NS_ASSUME_NONNULL_BEGIN
 
 @interface ASGoodsDetailsVM : RYBaseVM

+ 3 - 0
Asteria/Fuction/Goods/VM/ASGoodsDetailsVM.m

@@ -16,6 +16,9 @@
     }else if ([mark isEqualToString:Goods_productGetProductsReview]){
         NSMutableArray <GoodsReviewsListM *>*array = [GoodsReviewsListM mj_objectArrayWithKeyValuesArray:data[@"items"]];
         [self ry_VMconfigDelegateData:data parseAry:array success:YES mark:mark];
+    }else{
+        [self ry_VMconfigDelegateData:data parseAry:nil success:YES mark:mark];
+
     }
 }
 @end

+ 1 - 1
Asteria/Fuction/Login/VC/AS_SignUpC.m

@@ -46,7 +46,7 @@
         [self reqNet_singup:(NSDictionary *)data];
     };
 }
-//wm_todo 注册请求
+//wm_todo 注册请求修改
 -(void)reqNet_singup:(NSDictionary *)dic{
     NSString *urlStr = [NSString stringWithFormat:@"%@V1/customers",AS_Server];
     [MBProgressHUD showHUDAddedTo:self.view animated:YES];

+ 10 - 0
Asteria/Info.plist

@@ -2,6 +2,16 @@
 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 <plist version="1.0">
 <dict>
+	<key>ITSAppUsesNonExemptEncryption</key>
+	<false/>
+	<key>PHPhotoLibraryPreventAutomaticLimitedAccessAlert</key>
+	<true/>
+    <key>NSCameraUsageDescription</key>
+    <string>"Asteria"Your consent is required to access the camera.</string>
+    <key>NSPhotoLibraryAddUsageDescription</key>
+    <string>"Asteria"Your consent is required to access the album.</string>
+    <key>NSPhotoLibraryUsageDescription</key>
+    <string>"Asteria"Your consent is required to access the album.</string>
 	<key>NSAppTransportSecurity</key>
 	<dict>
 		<key>NSAllowsArbitraryLoads</key>

+ 1 - 0
Asteria/NetTools/ASNetApis.h

@@ -9,6 +9,7 @@
 #define ASNetApis_h
 
 
+#define RequestAllUrl(baseUrl) ([NSString stringWithFormat:@"https://%@/%@",HostPath,baseUrl])
 
 #define BaseRequestrUrl(url) ([NSString stringWithFormat:@"%@%@",@"rest/V1/",url])
 #define BaseWebUrl(url) ([NSString stringWithFormat:@"%@%@",@"rest/V1/",url])

+ 2 - 0
Asteria/NetTools/ASNetTools.h

@@ -21,6 +21,8 @@ NS_ASSUME_NONNULL_BEGIN
 
 /// post请求
 - (void)postWithPath:(NSString *)path param:(NSDictionary *)param success:(void(^)(id))success faild:(void(^)(NSString *code, NSString *msg))faild;
+///formData
+- (void)formData_postWithPath:(NSString *)path param:(NSDictionary *)param success:(void(^)(id))success faild:(void(^)(NSString *code, NSString *msg))faild;
 
 /// get请求
 - (void)getWithPath:(NSString *)path param:(NSDictionary *)param success:(void(^)(id))success faild:(void(^)(NSString *code, NSString *msg))faild;

+ 65 - 0
Asteria/NetTools/ASNetTools.m

@@ -130,6 +130,70 @@
     });
 }
 
+// formData的post请求
+- (void)formData_postWithPath:(NSString *)path param:(NSDictionary *)param success:(void(^)(id))success faild:(void(^)(NSString *code, NSString *msg))faild {
+    BOOL isSSL = true;
+    [self checkToken];
+    NSMutableDictionary *tempDic = [[NSMutableDictionary alloc] initWithDictionary:self.defuatParam];
+    [tempDic addEntriesFromDictionary:param];
+    MKNetworkOperation *op = [self.engine operationWithPath:path params:tempDic httpMethod:@"POST" ssl:isSSL];
+    
+    
+    for (NSString *key in param.allKeys) {
+           // 循环拿到所有参数进行拼接
+        NSString * searchStr = [param[key] stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
+        [op addData:[searchStr dataUsingEncoding:NSUTF8StringEncoding] forKey:key];
+       }
+    
+    __weak typeof(self) weakSelf = self;
+    [op onCompletion:^(MKNetworkOperation *completedOperation) {
+        dispatch_async(dispatch_get_main_queue(), ^{
+            NSString *json = [op responseJSON];
+            id temp = [json mj_JSONObject];
+            if ([temp isKindOfClass:[NSDictionary class]]) {
+                NSDictionary *result = (NSDictionary *)temp;
+                NSString *status = [NSString stringWithFormat:@"%@", result[@"status"]];
+                id data = result[@"data"];
+                if ([status isEqualToString:@"1"]) {
+                    success(data);
+                } else {
+                    NSString *msg = result[@"msg"];
+                    faild(status, msg);
+                }
+            }
+            
+        });
+    } onError:^(NSError *error) {
+        dispatch_async(dispatch_get_main_queue(), ^{
+            NSString *json = [op responseJSON];
+            id temp = [json mj_JSONObject];
+            if ([temp isKindOfClass:[NSDictionary class]]) {
+                NSDictionary *result = (NSDictionary *)temp;
+                NSString *status = result[@"status"];
+                NSString *msg = result[@"msg"];
+                if (error.code == 401) {
+                    [DataUtil setLoginToken:@""];
+                    [weakSelf updateEngine];
+                    faild(status, msg);
+                    return;
+                }
+                faild(status, msg);
+                return;
+            }
+            if (error.code == 401) {
+                [DataUtil setLoginToken:@""];
+                [weakSelf updateEngine];
+                faild(@"-1", @"Plase Login");
+                return;
+            }
+            faild([NSString stringWithFormat:@"%ld", error.code], error.localizedDescription);
+        });
+    }];
+    dispatch_async(dispatch_get_global_queue(QOS_CLASS_BACKGROUND, 0), ^{
+        [self.engine enqueueOperation:op];
+    });
+}
+
 // get 请求
 - (void)getWithPath:(NSString *)path param:(NSDictionary *)param success:(void(^)(id))success faild:(void(^)(NSString *code, NSString *msg))faild {
     BOOL isSSL = true;
@@ -363,4 +427,5 @@
     }];
 }
 
+
 @end

+ 2 - 0
Podfile

@@ -52,6 +52,8 @@ target 'Asteria' do
   pod 'GoogleSignIn'
 
   pod 'GKPhotoBrowser'
+  #评价---星星
+  pod 'HCSStarRatingView', '~> 1.5'
   pod 'WMBase', :path =>"../WMBase"
   
   pod 'MKNetworkKit'

+ 1 - 1
Podfile.lock

@@ -1275,6 +1275,6 @@ SPEC CHECKSUMS:
   YTKNetwork: c16be90b06be003de9e9cd0d3b187cc8eaf35c04
   YYCache: 8105b6638f5e849296c71f331ff83891a4942952
 
-PODFILE CHECKSUM: 5d955d5ce86f96810ca16fd7acd16a89ff2750e0
+PODFILE CHECKSUM: d3d8fd7b62f02ea7dd209af8d43c63bea9057689
 
 COCOAPODS: 1.12.1

+ 1 - 1
Pods/Manifest.lock

@@ -1275,6 +1275,6 @@ SPEC CHECKSUMS:
   YTKNetwork: c16be90b06be003de9e9cd0d3b187cc8eaf35c04
   YYCache: 8105b6638f5e849296c71f331ff83891a4942952
 
-PODFILE CHECKSUM: 5d955d5ce86f96810ca16fd7acd16a89ff2750e0
+PODFILE CHECKSUM: d3d8fd7b62f02ea7dd209af8d43c63bea9057689
 
 COCOAPODS: 1.12.1

+ 126 - 126
Pods/Pods.xcodeproj/project.pbxproj

@@ -2025,7 +2025,7 @@
 		4AADBA8E91F13C5FFDA2AF5046D2B851 /* GULHeartbeatDateStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D4108D863E01BCF85C32C737BB5206 /* GULHeartbeatDateStorage.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		4AB30328B4084FA75FB4D85101F42231 /* status_helper.cc in Sources */ = {isa = PBXBuildFile; fileRef = 551C1DBF548D1D1DA993BA7AD2E00576 /* status_helper.cc */; settings = {COMPILER_FLAGS = "-DGRPC_ARES=0 -Wno-comma -DBORINGSSL_PREFIX=GRPC -Wno-unreachable-code -Wno-shorten-64-to-32 -fno-objc-arc"; }; };
 		4ABEF78E18787AA98CFA26104F0F84A3 /* fork_windows.cc in Sources */ = {isa = PBXBuildFile; fileRef = ACEE9C8580E65D9B7B6A44F0AC76033F /* fork_windows.cc */; settings = {COMPILER_FLAGS = "-DGRPC_ARES=0 -Wno-comma -DBORINGSSL_PREFIX=GRPC -Wno-unreachable-code -Wno-shorten-64-to-32 -fno-objc-arc"; }; };
-		4AD589B67443DF0364282CDAB9DB3EE7 /* QMUIKit-QMUIResources in Resources */ = {isa = PBXBuildFile; fileRef = FFDF743B2D7D655F7364FF1154FFEDE6 /* QMUIKit-QMUIResources */; };
+		4AD589B67443DF0364282CDAB9DB3EE7 /* QMUIResources.bundle in Resources */ = {isa = PBXBuildFile; fileRef = FFDF743B2D7D655F7364FF1154FFEDE6 /* QMUIResources.bundle */; };
 		4ADAF4E9FED7D0A79811D47C04073D12 /* url_external_account_credentials.h in Copy src/core/lib/security/credentials/external Private Headers */ = {isa = PBXBuildFile; fileRef = 6CC02EA07B191F84BAF08A17790D3692 /* url_external_account_credentials.h */; };
 		4AEEAF7AF56EAD49BA6880890178E2EC /* interceptor_common.h in Headers */ = {isa = PBXBuildFile; fileRef = AE8863142C5D3858886E53EB3C6D1019 /* interceptor_common.h */; };
 		4B1968B1DA8FA481E7E056EFBD6A28EB /* promise_like.h in Copy src/core/lib/promise/detail Private Headers */ = {isa = PBXBuildFile; fileRef = 97FD9656EBE121EB0B70F81BA24A6B4D /* promise_like.h */; };
@@ -4921,7 +4921,7 @@
 		B9E7415D7016E9F150D74250C3DA9FAB /* status.upbdefs.h in Headers */ = {isa = PBXBuildFile; fileRef = DC3EAA448AC3125B93A068BC78CC5BA3 /* status.upbdefs.h */; };
 		B9F186F5251B8D1C8983E48B2255450D /* grpc_ares_wrapper.h in Copy src/core/ext/filters/client_channel/resolver/dns/c_ares Private Headers */ = {isa = PBXBuildFile; fileRef = A523F83A6B63E196A8E12441E2A68BC4 /* grpc_ares_wrapper.h */; };
 		B9F514D37D83A2B1DA1F815C1583D6D5 /* atm_windows.h in Copy support Public Headers */ = {isa = PBXBuildFile; fileRef = D4785139206F4F2FD0E2450721E58602 /* atm_windows.h */; };
-		B9F978798943AC030B4BF710DE3D99F0 /* gRPC-C++-gRPCCertificates-Cpp in Resources */ = {isa = PBXBuildFile; fileRef = 9C7C87B5D0A6752AFA2642F1BCA967A3 /* gRPC-C++-gRPCCertificates-Cpp */; };
+		B9F978798943AC030B4BF710DE3D99F0 /* gRPCCertificates-Cpp.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 9C7C87B5D0A6752AFA2642F1BCA967A3 /* gRPCCertificates-Cpp.bundle */; };
 		BA027EE1E000DE76837D5995043760E5 /* method_handler_impl.h in Copy impl/codegen Public Headers */ = {isa = PBXBuildFile; fileRef = BA262F73AC7CED24967C00A45E1E13C7 /* method_handler_impl.h */; };
 		BA09FBDF6BA156C96921A7DC9FEFFC9C /* server.h in Headers */ = {isa = PBXBuildFile; fileRef = A2352564063400A03EBE4CF043639F99 /* server.h */; };
 		BA12BBD73CE80B17F279D8CBD755A92F /* range.upb.h in Headers */ = {isa = PBXBuildFile; fileRef = 46C4AF62FB2BF4EC73995854C6E40347 /* range.upb.h */; };
@@ -5294,7 +5294,7 @@
 		C7E0B3D39AE3575BD25155A377F27C35 /* port_def.inc in Copy third_party/upb/upb Private Headers */ = {isa = PBXBuildFile; fileRef = 77D4F886204D89D3513C3755B568CCCB /* port_def.inc */; };
 		C7E7F922A06AE9AD794E4F8E5A0A19D2 /* sync_abseil.cc in Sources */ = {isa = PBXBuildFile; fileRef = E4346AEF78C244ECB6F02A2F4C566D09 /* sync_abseil.cc */; settings = {COMPILER_FLAGS = "-DGRPC_ARES=0 -Wno-comma -DBORINGSSL_PREFIX=GRPC -Wno-unreachable-code -Wno-shorten-64-to-32 -fno-objc-arc"; }; };
 		C7F4B4D8B22CDC4A8F33A166059675B0 /* BRDatePickerView+BR.h in Headers */ = {isa = PBXBuildFile; fileRef = E51DAC2DA671434E0AA084690517E0E9 /* BRDatePickerView+BR.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		C80E6A729D4A289850B7EFF27521998D /* GoogleSignIn-GoogleSignIn in Resources */ = {isa = PBXBuildFile; fileRef = E5BA41B7F2E1FE47F9ABCAC27C9E4281 /* GoogleSignIn-GoogleSignIn */; };
+		C80E6A729D4A289850B7EFF27521998D /* GoogleSignIn.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E5BA41B7F2E1FE47F9ABCAC27C9E4281 /* GoogleSignIn.bundle */; };
 		C8187A9A7CD676ECFA71F4637692A357 /* SDWebImageDownloaderConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D95A038A40D5EDDFFBBB6699AAB649C /* SDWebImageDownloaderConfig.m */; };
 		C81BF6E79EBD6787C83D171D563E210D /* rbac_policy.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E7EFD59BF9E646278412E426889E821 /* rbac_policy.h */; };
 		C82F65803EC129E86BA6681E66C14BC6 /* listener.upbdefs.h in Headers */ = {isa = PBXBuildFile; fileRef = B0D75178E3678F5BD583091D4AD115DF /* listener.upbdefs.h */; };
@@ -14241,7 +14241,7 @@
 		06BB6C1B93AC4C6A070CF1CBC063D52B /* OIDAuthStateChangeDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDAuthStateChangeDelegate.h; path = Source/AppAuthCore/OIDAuthStateChangeDelegate.h; sourceTree = "<group>"; };
 		06F2BEE24E55FBB30ECC4C3B3EA3C2B8 /* abseil.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = abseil.debug.xcconfig; sourceTree = "<group>"; };
 		06F89A6A8F6B930BF6EEB91F4669570D /* SDWeakProxy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWeakProxy.h; path = SDWebImage/Private/SDWeakProxy.h; sourceTree = "<group>"; };
-		06FC5C9CF96D60C50FCD47D339C91951 /* nanopb */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = nanopb; path = nanopb.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		06FC5C9CF96D60C50FCD47D339C91951 /* nanopb.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = nanopb.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		06FE6022BEFB1E076D2B083CD45748F2 /* memory_allocator.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = memory_allocator.cc; path = src/core/lib/event_engine/memory_allocator.cc; sourceTree = "<group>"; };
 		0703E37AAE53B79D605065CCE645E00A /* FBLPromise+Wrap.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Wrap.m"; path = "Sources/FBLPromises/FBLPromise+Wrap.m"; sourceTree = "<group>"; };
 		07043F7113ADBC95A3B05423479AF912 /* crypto.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = crypto.h; path = src/include/openssl/crypto.h; sourceTree = "<group>"; };
@@ -14271,7 +14271,7 @@
 		07FF8D18D81CAA734016C1F89B0FBF1D /* uri_parser.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = uri_parser.cc; path = src/core/lib/uri/uri_parser.cc; sourceTree = "<group>"; };
 		0821ACD7B18833184F50AC109127974D /* internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = internal.h; path = src/crypto/asn1/internal.h; sourceTree = "<group>"; };
 		08276FD888693D70185C4905BBF1EF1B /* AppAuth-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "AppAuth-Info.plist"; sourceTree = "<group>"; };
-		0835B8D86D09F9141590F6E8B418315D /* GKSliderView */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = GKSliderView; path = GKSliderView.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		0835B8D86D09F9141590F6E8B418315D /* GKSliderView.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = GKSliderView.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		083B4599CCFA159B0C7E3D48137031BA /* grpc_service.upbdefs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = grpc_service.upbdefs.h; path = "src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h"; sourceTree = "<group>"; };
 		083C98904433B2194DE4160051B1F0E8 /* QMUIScrollAnimator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QMUIScrollAnimator.m; path = QMUIKit/QMUIComponents/QMUIScrollAnimator/QMUIScrollAnimator.m; sourceTree = "<group>"; };
 		08446DF7ED43603CB01050EC4E99F5FA /* common.upbdefs.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = common.upbdefs.c; path = "src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c"; sourceTree = "<group>"; };
@@ -14333,7 +14333,7 @@
 		0A866BC5848E2962BE4FFC3DB7ED9C75 /* ViewController+MASAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "ViewController+MASAdditions.h"; path = "Masonry/ViewController+MASAdditions.h"; sourceTree = "<group>"; };
 		0A9B04EE993B2F700BA2FE680C87C4AF /* cord_rep_ring.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = cord_rep_ring.cc; path = absl/strings/internal/cord_rep_ring.cc; sourceTree = "<group>"; };
 		0A9E36D316B4D170BA94E92510E5A834 /* block_annotate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = block_annotate.h; path = src/core/lib/iomgr/block_annotate.h; sourceTree = "<group>"; };
-		0A9F46A999C47653013D3AD854352507 /* leveldb-library */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "leveldb-library"; path = leveldb.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		0A9F46A999C47653013D3AD854352507 /* leveldb.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = leveldb.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		0ACD8AC506653F899FC4F7F027AC3F43 /* value.upb.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = value.upb.c; path = "src/core/ext/upb-generated/google/api/expr/v1alpha1/value.upb.c"; sourceTree = "<group>"; };
 		0AED464CC2512A1E1383F23BEED07B82 /* Pods-Asteria.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-Asteria.modulemap"; sourceTree = "<group>"; };
 		0AF529CB2949B6E99F279D56BD26ED50 /* online_state_tracker.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = online_state_tracker.cc; path = Firestore/core/src/remote/online_state_tracker.cc; sourceTree = "<group>"; };
@@ -14399,7 +14399,7 @@
 		0DC8D1519F28588D0C8ECB5702D46541 /* examine_stack.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = examine_stack.cc; path = src/core/lib/gprpp/examine_stack.cc; sourceTree = "<group>"; };
 		0DD5A5F3FF9B0CD07FECF736456A1738 /* NSObject+MJCoding.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+MJCoding.m"; path = "MJExtension/NSObject+MJCoding.m"; sourceTree = "<group>"; };
 		0DD74202B6CC0DCCA841DAE1D2FD26E2 /* e_aesgcmsiv.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = e_aesgcmsiv.c; path = src/crypto/cipher_extra/e_aesgcmsiv.c; sourceTree = "<group>"; };
-		0DE46762C16AFA797BDAAD77C77D762A /* PPBadgeView */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = PPBadgeView; path = PPBadgeView.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		0DE46762C16AFA797BDAAD77C77D762A /* PPBadgeView.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PPBadgeView.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		0DE89D2B7A76AA8232BE26BCFA81B478 /* env_windows.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = env_windows.cc; path = src/core/lib/gpr/env_windows.cc; sourceTree = "<group>"; };
 		0DF6E06DD261DDA9CF0A9E27A500B35F /* array_contains_any_filter.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = array_contains_any_filter.cc; path = Firestore/core/src/core/array_contains_any_filter.cc; sourceTree = "<group>"; };
 		0DFD6FAFF47893F64D965E7C3C91FCBC /* alts_record_protocol_crypter_common.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = alts_record_protocol_crypter_common.h; path = src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h; sourceTree = "<group>"; };
@@ -14523,7 +14523,7 @@
 		13B31725CBB94B55B8AB5FE2EE46FA45 /* firestore_client.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = firestore_client.cc; path = Firestore/core/src/core/firestore_client.cc; sourceTree = "<group>"; };
 		13C08AD7556EFE0C638B41E7711F354A /* binder_auto_utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = binder_auto_utils.h; path = src/core/ext/transport/binder/utils/binder_auto_utils.h; sourceTree = "<group>"; };
 		13C1EA21725DABC6641BDB8F75CA2D3B /* rsa_impl.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = rsa_impl.c; path = src/crypto/fipsmodule/rsa/rsa_impl.c; sourceTree = "<group>"; };
-		13C8C8B254851998F9289F71229B28A2 /* FirebaseInstallations */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FirebaseInstallations; path = FirebaseInstallations.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		13C8C8B254851998F9289F71229B28A2 /* FirebaseInstallations.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FirebaseInstallations.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		13D5F0F7D6685338B75CAE732810339D /* semantic_version.upb.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = semantic_version.upb.c; path = "src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c"; sourceTree = "<group>"; };
 		13FB583C87CD75074528CC1CC8C5CB50 /* json_util.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = json_util.h; path = src/core/lib/json/json_util.h; sourceTree = "<group>"; };
 		1408A893F2B95968D02D9AF5DD1C823C /* varint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = varint.h; path = src/core/ext/transport/chttp2/transport/varint.h; sourceTree = "<group>"; };
@@ -14616,7 +14616,7 @@
 		18BCF5BFF24874F3F081AB689075DE6E /* p256-x86_64.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = "p256-x86_64.c"; path = "src/crypto/fipsmodule/ec/p256-x86_64.c"; sourceTree = "<group>"; };
 		18C79BA611F41422850430E80D0FB6E1 /* internal_errqueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = internal_errqueue.h; path = src/core/lib/iomgr/internal_errqueue.h; sourceTree = "<group>"; };
 		18E8F94E4923B86BC73EE072B69F660E /* duration.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = duration.cc; path = absl/time/duration.cc; sourceTree = "<group>"; };
-		1911113E0FBF13CFF9132E5FF7685228 /* gRPC-C++ */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "gRPC-C++"; path = grpcpp.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		1911113E0FBF13CFF9132E5FF7685228 /* grpcpp.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = grpcpp.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		19222E5BDD9937C432ABD736F5CD0AC2 /* prog.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = prog.h; path = third_party/re2/re2/prog.h; sourceTree = "<group>"; };
 		19234ABAFEDD8F13CC8A00D86528431F /* time_averaged_stats.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = time_averaged_stats.cc; path = src/core/lib/iomgr/time_averaged_stats.cc; sourceTree = "<group>"; };
 		192625D87E93CC197BB7F328821B0C5F /* unix.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = unix.h; path = include/uv/unix.h; sourceTree = "<group>"; };
@@ -14752,7 +14752,7 @@
 		1FDDB52EED463F55A89DD6E305254E67 /* throw_delegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = throw_delegate.h; path = absl/base/internal/throw_delegate.h; sourceTree = "<group>"; };
 		1FE65EB1DAE9BA4EED13163B749A64D9 /* wrap_memcpy.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = wrap_memcpy.cc; path = src/core/lib/gpr/wrap_memcpy.cc; sourceTree = "<group>"; };
 		1FFDE6C9754CD1DBA32D968783C07E6F /* MJExtension-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MJExtension-umbrella.h"; sourceTree = "<group>"; };
-		1FFED36A657123030ABB700256D73F15 /* Masonry */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Masonry; path = Masonry.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		1FFED36A657123030ABB700256D73F15 /* Masonry.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Masonry.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		2013ACC8CD10CD36336CDBF1494AA2F0 /* tls_credentials.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = tls_credentials.h; path = src/core/lib/security/credentials/tls/tls_credentials.h; sourceTree = "<group>"; };
 		202BAE45E9166CA57E950268D860DC27 /* load_system_roots.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = load_system_roots.h; path = src/core/lib/security/security_connector/load_system_roots.h; sourceTree = "<group>"; };
 		20417AB851C6D08A6D052FD40F44392F /* file_external_account_credentials.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = file_external_account_credentials.h; path = src/core/lib/security/credentials/external/file_external_account_credentials.h; sourceTree = "<group>"; };
@@ -14981,7 +14981,7 @@
 		2B1549A8776A954EA3BA53ED6843C435 /* div_extra.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = div_extra.c; path = src/crypto/fipsmodule/bn/div_extra.c; sourceTree = "<group>"; };
 		2B1ABE42C87938D6EC3C2D77462E7CEF /* local_serializer.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = local_serializer.cc; path = Firestore/core/src/local/local_serializer.cc; sourceTree = "<group>"; };
 		2B257BF0A9682E8705425379848107E8 /* QMUITableView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QMUITableView.h; path = QMUIKit/QMUIComponents/QMUITableView.h; sourceTree = "<group>"; };
-		2B276B0A79173A1D6E83C9B4FB9A4A57 /* MJExtension */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = MJExtension; path = MJExtension.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		2B276B0A79173A1D6E83C9B4FB9A4A57 /* MJExtension.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = MJExtension.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		2B3C393BA7D4686C5E368F266AFDDC69 /* MJRefreshGifHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshGifHeader.h; path = MJRefresh/Custom/Header/MJRefreshGifHeader.h; sourceTree = "<group>"; };
 		2B421BB4318113DD3D23F4AAA938640B /* context_params.upbdefs.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = context_params.upbdefs.c; path = "src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c"; sourceTree = "<group>"; };
 		2B49291C9FCCD52A44B6C86C28FCD9B0 /* xds_channel_args.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = xds_channel_args.h; path = src/core/ext/xds/xds_channel_args.h; sourceTree = "<group>"; };
@@ -15127,7 +15127,7 @@
 		332C0D4C8B5F06FF7A7F2AC8734BF6A8 /* UINavigationBar+Transition.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UINavigationBar+Transition.h"; path = "QMUIKit/QMUIComponents/NavigationBarTransition/UINavigationBar+Transition.h"; sourceTree = "<group>"; };
 		3335053BA611CB2673928B5AAB789DF3 /* subchannel_list.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = subchannel_list.h; path = src/core/ext/filters/client_channel/lb_policy/subchannel_list.h; sourceTree = "<group>"; };
 		33452798E1F2A6EFD352A73801046942 /* GIDSignInStrings.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GIDSignInStrings.h; path = GoogleSignIn/Sources/GIDSignInStrings.h; sourceTree = "<group>"; };
-		3347A1AB6546F0A3977529B8F199DC41 /* PromisesObjC */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = PromisesObjC; path = FBLPromises.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		3347A1AB6546F0A3977529B8F199DC41 /* FBLPromises.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FBLPromises.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		334D21F982796549EDF7AE8F4466EFB1 /* FBLPromise+Wrap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FBLPromise+Wrap.h"; path = "Sources/FBLPromises/include/FBLPromise+Wrap.h"; sourceTree = "<group>"; };
 		33526B780987C403458D6E94CA1DC74F /* OIDURLQueryComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDURLQueryComponent.h; path = Source/AppAuthCore/OIDURLQueryComponent.h; sourceTree = "<group>"; };
 		335AC15DAB8492763215C5D008432297 /* FBLPromise+Then.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FBLPromise+Then.m"; path = "Sources/FBLPromises/FBLPromise+Then.m"; sourceTree = "<group>"; };
@@ -15375,7 +15375,7 @@
 		3F95369EA03E3274A40E0C86F3EF872A /* resolve_address_windows.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = resolve_address_windows.h; path = src/core/lib/iomgr/resolve_address_windows.h; sourceTree = "<group>"; };
 		3FB102B947234C6586A1E1701ADDC150 /* http_tracer.upbdefs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = http_tracer.upbdefs.h; path = "src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h"; sourceTree = "<group>"; };
 		3FB36A3FEFA21D5E27B61C475614D4B5 /* no_destructor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = no_destructor.h; path = util/no_destructor.h; sourceTree = "<group>"; };
-		3FD1B4C1246D643E9476438C28048FA8 /* AppAuth */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = AppAuth; path = AppAuth.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		3FD1B4C1246D643E9476438C28048FA8 /* AppAuth.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AppAuth.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		3FDCA95D8A953BB134BF0D45F2DEE4AC /* gethostname.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = gethostname.h; path = src/core/lib/iomgr/gethostname.h; sourceTree = "<group>"; };
 		3FDCB957115AD025E52572C815BCABFA /* MJRefreshBackNormalFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshBackNormalFooter.m; path = MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.m; sourceTree = "<group>"; };
 		3FEACA7B38499137BAFB53496475DA79 /* duration.upb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = duration.upb.h; path = "src/core/ext/upb-generated/google/protobuf/duration.upb.h"; sourceTree = "<group>"; };
@@ -15384,7 +15384,7 @@
 		4001C2712E42BDBB7E45F46D53CF566C /* x_algor.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = x_algor.c; path = src/crypto/x509/x_algor.c; sourceTree = "<group>"; };
 		4006B3035FE71F99ECE72ADE77FCA705 /* inproc_transport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = inproc_transport.h; path = src/core/ext/transport/inproc/inproc_transport.h; sourceTree = "<group>"; };
 		400B65934FC4CA9F6C21BFC91726542E /* executor_std.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = executor_std.cc; path = Firestore/core/src/util/executor_std.cc; sourceTree = "<group>"; };
-		400FF55D0451E7A8F33A3D0D3E11C1B9 /* Reachability */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Reachability; path = Reachability.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		400FF55D0451E7A8F33A3D0D3E11C1B9 /* Reachability.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Reachability.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		401108BB3F5BCD0378CC2F38A554E8AC /* status_util.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = status_util.cc; path = src/core/lib/channel/status_util.cc; sourceTree = "<group>"; };
 		4015A89E302E7A4E72AA61FF2C8531C9 /* event_service_config.upb.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = event_service_config.upb.c; path = "src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c"; sourceTree = "<group>"; };
 		4045021EBD4377E9C0E8D07637FB11B4 /* load_system_roots_fallback.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = load_system_roots_fallback.cc; path = src/core/lib/security/security_connector/load_system_roots_fallback.cc; sourceTree = "<group>"; };
@@ -15416,7 +15416,7 @@
 		4193043E659617A1E27E3F4D876B74ED /* FIRAuthInterop.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRAuthInterop.h; path = FirebaseAuth/Interop/FIRAuthInterop.h; sourceTree = "<group>"; };
 		41A22EECD7F38D1F757105401F621465 /* SDImageGIFCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageGIFCoder.h; path = SDWebImage/Core/SDImageGIFCoder.h; sourceTree = "<group>"; };
 		41ADF8C2F271820BD8ADB0A100B7624A /* p_ec.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = p_ec.c; path = src/crypto/evp/p_ec.c; sourceTree = "<group>"; };
-		41B72F4F981A545809C1EB158DA62C65 /* HCSStarRatingView */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = HCSStarRatingView; path = HCSStarRatingView.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		41B72F4F981A545809C1EB158DA62C65 /* HCSStarRatingView.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = HCSStarRatingView.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		41CC0E5F84BDAF8C936444FB18A63903 /* stacktrace_generic-inl.inc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.pascal; name = "stacktrace_generic-inl.inc"; path = "absl/debugging/internal/stacktrace_generic-inl.inc"; sourceTree = "<group>"; };
 		41CCE055CD4D07ECE19354B47250D8A8 /* MJRefresh.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MJRefresh.release.xcconfig; sourceTree = "<group>"; };
 		41D93DAFCADE705366608AA2CC5B53D8 /* csds.upb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = csds.upb.h; path = "src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h"; sourceTree = "<group>"; };
@@ -15562,7 +15562,7 @@
 		487F19FD7CFE66C91C7BCFE08ED54F0B /* rbac.upb.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = rbac.upb.c; path = "src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c"; sourceTree = "<group>"; };
 		488115CB200DC934C61C0A05A3B0D4CC /* UINavigationBar+Transition.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UINavigationBar+Transition.m"; path = "QMUIKit/QMUIComponents/NavigationBarTransition/UINavigationBar+Transition.m"; sourceTree = "<group>"; };
 		48A16FAC6075A9F63365657701BF18B3 /* http_uri.upbdefs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = http_uri.upbdefs.h; path = "src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h"; sourceTree = "<group>"; };
-		48ACF38225AF5129416A1F090F6D3286 /* YYCache */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = YYCache; path = YYCache.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		48ACF38225AF5129416A1F090F6D3286 /* YYCache.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = YYCache.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		48B321135A823FEF433E4CB71FB99B1A /* charconv.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = charconv.h; path = absl/strings/charconv.h; sourceTree = "<group>"; };
 		48D2AF614C5BF65BD97D6D516AA53FAA /* sockaddr_resolver.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = sockaddr_resolver.cc; path = src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc; sourceTree = "<group>"; };
 		48D49A588DD0EAABE618F1640B52EE09 /* internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = internal.h; path = src/crypto/fipsmodule/bn/internal.h; sourceTree = "<group>"; };
@@ -15755,7 +15755,7 @@
 		512DA299B9BBA6EBFC22D04466BC830A /* FirebaseCoreInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FirebaseCoreInternal.h; path = FirebaseCore/Extension/FirebaseCoreInternal.h; sourceTree = "<group>"; };
 		5135B0B67340879152B805DB6A94CB93 /* gRPC-C++.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "gRPC-C++.modulemap"; sourceTree = "<group>"; };
 		5138BC11F24E508A12B86CDAA7E7F6D8 /* database_info.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = database_info.cc; path = Firestore/core/src/core/database_info.cc; sourceTree = "<group>"; };
-		514D7742C6CBB0BDBD9984AEE97DDFDE /* BoringSSL-GRPC */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "BoringSSL-GRPC"; path = openssl_grpc.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		514D7742C6CBB0BDBD9984AEE97DDFDE /* openssl_grpc.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = openssl_grpc.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		515C01A8BC16CF440F7EEE42386D73EA /* string_apple.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = string_apple.cc; path = Firestore/core/src/util/string_apple.cc; sourceTree = "<group>"; };
 		515D2B61C687CC2B148BEB22254622BA /* t_x509.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = t_x509.c; path = src/crypto/x509/t_x509.c; sourceTree = "<group>"; };
 		516019B4F53DEC7F9355556FEB8C1441 /* discovery.upb.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = discovery.upb.c; path = "src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c"; sourceTree = "<group>"; };
@@ -15793,7 +15793,7 @@
 		538D8038492D76143AE5D92008A49EE7 /* tcp_server_utils_posix.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = tcp_server_utils_posix.h; path = src/core/lib/iomgr/tcp_server_utils_posix.h; sourceTree = "<group>"; };
 		538EFB3C0159B0C48EDF38A836F1C969 /* murmur_hash.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = murmur_hash.cc; path = src/core/lib/gpr/murmur_hash.cc; sourceTree = "<group>"; };
 		53977C78DFAD85B82F61029B54E876D0 /* ber.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = ber.c; path = src/crypto/bytestring/ber.c; sourceTree = "<group>"; };
-		539FECC86006AA99C16C35C45709F2FC /* WMBase */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = WMBase; path = WMBase.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		539FECC86006AA99C16C35C45709F2FC /* WMBase.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = WMBase.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		53AA8E98D174F8BC1C344C536327F867 /* GTMAppAuth.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GTMAppAuth.debug.xcconfig; sourceTree = "<group>"; };
 		53B399C9B2E8EB866A6C600E8E92E0B6 /* aes_nohw.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = aes_nohw.c; path = src/crypto/fipsmodule/aes/aes_nohw.c; sourceTree = "<group>"; };
 		53CC01749F32322A03FF040CF02FB2D8 /* socket_option.upb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = socket_option.upb.h; path = "src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h"; sourceTree = "<group>"; };
@@ -15834,7 +15834,7 @@
 		55D679F769D1E0992BC4BB26AD508CEB /* executor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = executor.h; path = src/core/lib/iomgr/executor.h; sourceTree = "<group>"; };
 		55D707152E094D61221A50AFCF9122A2 /* internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = internal.h; path = src/crypto/fipsmodule/md5/internal.h; sourceTree = "<group>"; };
 		55D979EB9CA031CC846148EE39A2DF7D /* ecdh.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ecdh.h; path = src/include/openssl/ecdh.h; sourceTree = "<group>"; };
-		55E0AFD333353D71ACC2207149E879D6 /* Toast */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Toast; path = Toast.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		55E0AFD333353D71ACC2207149E879D6 /* Toast.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Toast.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		55E3499C1A26FA65291E27ECA6DDFFE8 /* status.upb.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = status.upb.c; path = "src/core/ext/upb-generated/google/rpc/status.upb.c"; sourceTree = "<group>"; };
 		55EA3FF98DD8587A3D8FF458B00FF1B9 /* OIDServiceConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIDServiceConfiguration.m; path = Source/AppAuthCore/OIDServiceConfiguration.m; sourceTree = "<group>"; };
 		5604A048AC132604A59C7096E98C6295 /* CTMediator.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CTMediator.debug.xcconfig; sourceTree = "<group>"; };
@@ -15937,7 +15937,7 @@
 		5B711A190921380B2115DD6078FBEBC3 /* QMUILogNameManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QMUILogNameManager.m; path = QMUIKit/QMUIComponents/QMUILog/QMUILogNameManager.m; sourceTree = "<group>"; };
 		5B982A7E5A35E9F1CFB83AA12939CBE8 /* sockaddr.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = sockaddr.h; path = src/core/lib/event_engine/sockaddr.h; sourceTree = "<group>"; };
 		5BA59D5804F2A8CC2CD6DD47181E846C /* rsaz_exp.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = rsaz_exp.c; path = src/crypto/fipsmodule/bn/rsaz_exp.c; sourceTree = "<group>"; };
-		5BA6046B4C2674409C0D5625F45F8769 /* BRPickerView */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = BRPickerView; path = BRPickerView.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		5BA6046B4C2674409C0D5625F45F8769 /* BRPickerView.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = BRPickerView.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		5BB9623394F150495599D61E553E07ED /* time_zone_if.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = time_zone_if.cc; path = absl/time/internal/cctz/src/time_zone_if.cc; sourceTree = "<group>"; };
 		5BBECF9BA2977DEE04CC0149488750A1 /* resource_name.upbdefs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = resource_name.upbdefs.h; path = "src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h"; sourceTree = "<group>"; };
 		5BC96498E8352434CB286FE850C3A911 /* thd_id.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = thd_id.h; path = include/grpc/support/thd_id.h; sourceTree = "<group>"; };
@@ -16029,7 +16029,7 @@
 		60193C0399563FA6EE5D7B6F4900AA7A /* fault.upbdefs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = fault.upbdefs.h; path = "src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h"; sourceTree = "<group>"; };
 		6019D86E73629A4D1BEDAE440E59C864 /* dh.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = dh.c; path = src/crypto/fipsmodule/dh/dh.c; sourceTree = "<group>"; };
 		601B5E32C14BA741564A6C48A4D28F27 /* eds.upbdefs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = eds.upbdefs.h; path = "src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.h"; sourceTree = "<group>"; };
-		601EEA66C9A6080A11C1ADE5E2A91AE1 /* YTKNetwork */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = YTKNetwork; path = YTKNetwork.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		601EEA66C9A6080A11C1ADE5E2A91AE1 /* YTKNetwork.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = YTKNetwork.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		6021B568C855D5A7DD597B3FD78F819E /* create_channel_posix.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = create_channel_posix.cc; path = src/cpp/client/create_channel_posix.cc; sourceTree = "<group>"; };
 		602800DAE0FED4A0D0111DAADE0529D4 /* frame_settings.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = frame_settings.h; path = src/core/ext/transport/chttp2/transport/frame_settings.h; sourceTree = "<group>"; };
 		602A8569619619B28550DF50C0D216A9 /* resolve_address.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = resolve_address.h; path = src/core/lib/iomgr/resolve_address.h; sourceTree = "<group>"; };
@@ -16219,7 +16219,7 @@
 		68F2714F1304649B3A10BF78ED77B4DD /* grpc_unary_call.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = grpc_unary_call.cc; path = Firestore/core/src/remote/grpc_unary_call.cc; sourceTree = "<group>"; };
 		68F6D291169D96E92CCA596DB780B6AC /* YTKBatchRequestAgent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YTKBatchRequestAgent.m; path = YTKNetwork/YTKBatchRequestAgent.m; sourceTree = "<group>"; };
 		68FD6A7542806BF0230D80DA1879DCD0 /* status.upb.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = status.upb.c; path = "src/core/ext/upb-generated/udpa/annotations/status.upb.c"; sourceTree = "<group>"; };
-		68FD71EBA2CC98523D3AACCE8A0D43C8 /* CTMediator */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = CTMediator; path = CTMediator.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		68FD71EBA2CC98523D3AACCE8A0D43C8 /* CTMediator.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CTMediator.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		690FCB9219D138B7F8C6C09B4E118ACB /* NSParagraphStyle+QMUI.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSParagraphStyle+QMUI.m"; path = "QMUIKit/UIKitExtensions/NSParagraphStyle+QMUI.m"; sourceTree = "<group>"; };
 		691B943D615E1CC9CEE428D940B77199 /* combiner.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = combiner.h; path = src/core/lib/iomgr/combiner.h; sourceTree = "<group>"; };
 		691C0E0C3F9ED0915A780F37E638F4E4 /* compile.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = compile.cc; path = third_party/re2/re2/compile.cc; sourceTree = "<group>"; };
@@ -16275,7 +16275,7 @@
 		6BAE54D7ECCB36CBB16FA2D57BD74C84 /* AFNetworkReachabilityManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFNetworkReachabilityManager.h; path = AFNetworking/AFNetworkReachabilityManager.h; sourceTree = "<group>"; };
 		6BB6F00462B3451C6B4893BDE91118EF /* FIRHeartbeatLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRHeartbeatLogger.h; path = FirebaseCore/Extension/FIRHeartbeatLogger.h; sourceTree = "<group>"; };
 		6BC1926012C8015D81FE472F89A04CED /* httpcli.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = httpcli.h; path = src/core/lib/http/httpcli.h; sourceTree = "<group>"; };
-		6BC54C3D03DEBF9C3A40965E69CAE039 /* Libuv-gRPC */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Libuv-gRPC"; path = uv.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		6BC54C3D03DEBF9C3A40965E69CAE039 /* uv.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = uv.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		6BDA57ADAF7D0149107564BD3D06AA86 /* HCSStarRatingView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "HCSStarRatingView-prefix.pch"; sourceTree = "<group>"; };
 		6BDC6292CA4548CBCC009234E6B600AA /* rds.upb.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = rds.upb.c; path = "src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c"; sourceTree = "<group>"; };
 		6BDE11A92476938D94B3C48CA99D3D92 /* gaussian_distribution.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = gaussian_distribution.cc; path = absl/random/gaussian_distribution.cc; sourceTree = "<group>"; };
@@ -16344,7 +16344,7 @@
 		6F965E4ABC7CB0511C6DDCDCFBBE4104 /* UIViewController+QMUITheme.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIViewController+QMUITheme.h"; path = "QMUIKit/QMUIComponents/QMUITheme/UIViewController+QMUITheme.h"; sourceTree = "<group>"; };
 		6FADD30F9C714C44157E62E9CF5E4D02 /* GIDConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GIDConfiguration.m; path = GoogleSignIn/Sources/GIDConfiguration.m; sourceTree = "<group>"; };
 		6FCADED54291F5583A3A3AFEE93D3093 /* DWKWebView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = DWKWebView.m; sourceTree = "<group>"; };
-		6FD122EA0AB9AB2A8FFA5F676C795DF0 /* GTMAppAuth */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = GTMAppAuth; path = GTMAppAuth.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		6FD122EA0AB9AB2A8FFA5F676C795DF0 /* GTMAppAuth.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = GTMAppAuth.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		6FDB170E3A0A7018137522A73807BC39 /* padding.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = padding.c; path = src/crypto/fipsmodule/rsa/padding.c; sourceTree = "<group>"; };
 		6FE32905A656C70F23F8FF24BFCF0434 /* HCSStarRatingView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = HCSStarRatingView.modulemap; sourceTree = "<group>"; };
 		6FE82AA44DF12FFCC4F87EBCA66A6EAB /* ref_counted_ptr.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ref_counted_ptr.h; path = src/core/lib/gprpp/ref_counted_ptr.h; sourceTree = "<group>"; };
@@ -16797,7 +16797,7 @@
 		8560B2ADA8AB5EDF9EEAAA8E39EF63C5 /* SDWebImageDownloaderConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderConfig.h; path = SDWebImage/Core/SDWebImageDownloaderConfig.h; sourceTree = "<group>"; };
 		858AFD90A3F79B218C3D5E788D84622C /* SDImageAPNGCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageAPNGCoder.m; path = SDWebImage/Core/SDImageAPNGCoder.m; sourceTree = "<group>"; };
 		85940BD88952FE3708DACCD56EC1163E /* PPBadgeView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = PPBadgeView.modulemap; sourceTree = "<group>"; };
-		8596B7A0C5A3E188061E9EDDAB573FCE /* QMUIKit */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = QMUIKit; path = QMUIKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		8596B7A0C5A3E188061E9EDDAB573FCE /* QMUIKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = QMUIKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		8598E8EDB5D3DE6706C4C12FACA783A8 /* socket_utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = socket_utils.h; path = src/core/lib/iomgr/socket_utils.h; sourceTree = "<group>"; };
 		85A2FC2DA16C0DC6C15A5A4588BEC91B /* x509spki.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = x509spki.c; path = src/crypto/x509/x509spki.c; sourceTree = "<group>"; };
 		85A9290F43D2A0081696B6065195BFC1 /* file_external_account_credentials.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = file_external_account_credentials.cc; path = src/core/lib/security/credentials/external/file_external_account_credentials.cc; sourceTree = "<group>"; };
@@ -16922,7 +16922,7 @@
 		8B72C7C1FD544A0F255D8AF8DF50FA54 /* SDWeakProxy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWeakProxy.m; path = SDWebImage/Private/SDWeakProxy.m; sourceTree = "<group>"; };
 		8B7DCB595F9BAD765777D4D6CCED9478 /* QMUINavigationBarScrollingSnapAnimator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QMUINavigationBarScrollingSnapAnimator.m; path = QMUIKit/QMUIComponents/QMUIScrollAnimator/QMUINavigationBarScrollingSnapAnimator.m; sourceTree = "<group>"; };
 		8B8125FBD2F4831578F431C981C4C904 /* config_dump.upb.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = config_dump.upb.c; path = "src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c"; sourceTree = "<group>"; };
-		8B8FAB0D627B17EDE1366984278705D9 /* MBProgressHUD */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = MBProgressHUD; path = MBProgressHUD.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		8B8FAB0D627B17EDE1366984278705D9 /* MBProgressHUD.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = MBProgressHUD.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		8BC0A974AD635BF28CBBE6D056DB074B /* index_backfiller.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = index_backfiller.cc; path = Firestore/core/src/local/index_backfiller.cc; sourceTree = "<group>"; };
 		8BDEF5C7865DC4B3B8321B6C0F4A69EC /* write_batch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = write_batch.h; path = include/leveldb/write_batch.h; sourceTree = "<group>"; };
 		8BE08B7CA39D0199523489017A26CE44 /* FIRFirestoreErrors.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRFirestoreErrors.h; path = Firestore/Source/Public/FirebaseFirestore/FIRFirestoreErrors.h; sourceTree = "<group>"; };
@@ -17055,7 +17055,7 @@
 		91F5A8A29041E3D4F506BCD34C201595 /* NSButton+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSButton+WebCache.m"; path = "SDWebImage/Core/NSButton+WebCache.m"; sourceTree = "<group>"; };
 		91F6F8E8314676B84377ABD4445C1A50 /* ssl_key_share.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = ssl_key_share.cc; path = src/ssl/ssl_key_share.cc; sourceTree = "<group>"; };
 		91FBEA7F000471CD564A246E329737FB /* target.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = target.cc; path = Firestore/core/src/core/target.cc; sourceTree = "<group>"; };
-		92000153CD73F7FC2DBAB4AB708269F3 /* FirebaseFirestore */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FirebaseFirestore; path = FirebaseFirestore.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		92000153CD73F7FC2DBAB4AB708269F3 /* FirebaseFirestore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FirebaseFirestore.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		920235F731EF2050F92B9AABF69B8F5F /* race.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = race.h; path = src/core/lib/promise/race.h; sourceTree = "<group>"; };
 		92130D2A7F18B23A52F181E14FA2E111 /* priority.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = priority.cc; path = src/core/ext/filters/client_channel/lb_policy/priority/priority.cc; sourceTree = "<group>"; };
 		921B84495B1CE52E6C6B98C110A6E3CB /* x509_vfy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = x509_vfy.h; path = src/include/openssl/x509_vfy.h; sourceTree = "<group>"; };
@@ -17158,7 +17158,7 @@
 		98288203F3C48214141579C48953FF61 /* tls_certificate_verifier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = tls_certificate_verifier.h; path = include/grpcpp/security/tls_certificate_verifier.h; sourceTree = "<group>"; };
 		983A44BC2D56D2D12A33E07418805EAE /* alts_credentials.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = alts_credentials.h; path = src/core/lib/security/credentials/alts/alts_credentials.h; sourceTree = "<group>"; };
 		9842C0BDB5623148F3315E20D74D02FB /* BoringSSL-GRPC.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "BoringSSL-GRPC.release.xcconfig"; sourceTree = "<group>"; };
-		98527D7196957AAB07B79E2E2AFDE23E /* IQKeyboardManager */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = IQKeyboardManager; path = IQKeyboardManager.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		98527D7196957AAB07B79E2E2AFDE23E /* IQKeyboardManager.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = IQKeyboardManager.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		9857049144D47FFB18B72A360D225133 /* escaping.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = escaping.h; path = absl/strings/escaping.h; sourceTree = "<group>"; };
 		9864FDBEEAA9452415B552BD348EEDC9 /* json_writer.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = json_writer.cc; path = src/core/lib/json/json_writer.cc; sourceTree = "<group>"; };
 		98658603F1F9F47B576B1D10370A5507 /* bits.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = bits.h; path = absl/numeric/bits.h; sourceTree = "<group>"; };
@@ -17249,7 +17249,7 @@
 		9C6EC5342B734F9E037514EAC31D58AD /* struct.nanopb.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = struct.nanopb.cc; path = Firestore/Protos/nanopb/google/protobuf/struct.nanopb.cc; sourceTree = "<group>"; };
 		9C6F5362F43DC957A4FB8451A97BCCF6 /* msg_internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = msg_internal.h; path = third_party/upb/upb/msg_internal.h; sourceTree = "<group>"; };
 		9C71F5866E87465F032DCF579C8CE992 /* xds_common_types.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = xds_common_types.h; path = src/core/ext/xds/xds_common_types.h; sourceTree = "<group>"; };
-		9C7C87B5D0A6752AFA2642F1BCA967A3 /* gRPC-C++-gRPCCertificates-Cpp */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "gRPC-C++-gRPCCertificates-Cpp"; path = "gRPCCertificates-Cpp.bundle"; sourceTree = BUILT_PRODUCTS_DIR; };
+		9C7C87B5D0A6752AFA2642F1BCA967A3 /* gRPCCertificates-Cpp.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "gRPCCertificates-Cpp.bundle"; sourceTree = BUILT_PRODUCTS_DIR; };
 		9C7E8037FE06B089DAB37E08888B6AD1 /* wakeup_fd_eventfd.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = wakeup_fd_eventfd.cc; path = src/core/lib/iomgr/wakeup_fd_eventfd.cc; sourceTree = "<group>"; };
 		9C803D9DE21166344577CDA8C47A284F /* UITextInputTraits+QMUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITextInputTraits+QMUI.h"; path = "QMUIKit/UIKitExtensions/UITextInputTraits+QMUI.h"; sourceTree = "<group>"; };
 		9C826C6D2E6A9765DAECEA96269EF4B5 /* grpc_alts_credentials_server_options.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = grpc_alts_credentials_server_options.cc; path = src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc; sourceTree = "<group>"; };
@@ -17406,7 +17406,7 @@
 		A4DD7B499BC58CB6C074CE437E117087 /* local_store.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = local_store.cc; path = Firestore/core/src/local/local_store.cc; sourceTree = "<group>"; };
 		A4E6BFCFCED93321C84D3019446A1ED0 /* FIRQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRQuery.h; path = Firestore/Source/Public/FirebaseFirestore/FIRQuery.h; sourceTree = "<group>"; };
 		A4ED62B75BA996DE893A71F7CFC67CBC /* a_enum.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = a_enum.c; path = src/crypto/asn1/a_enum.c; sourceTree = "<group>"; };
-		A4FA15D44DF6BAC7550EDEED10862AA3 /* AFNetworking */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = AFNetworking; path = AFNetworking.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		A4FA15D44DF6BAC7550EDEED10862AA3 /* AFNetworking.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AFNetworking.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		A4FBAFA5111E9A3D3CE4A4FD0A9CC34D /* QMUITextField.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QMUITextField.m; path = QMUIKit/QMUIComponents/QMUITextField.m; sourceTree = "<group>"; };
 		A502591828537707489E80045C0740B8 /* slice_utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = slice_utils.h; path = src/core/lib/slice/slice_utils.h; sourceTree = "<group>"; };
 		A506D0BB1EB8899FECC042D681B2055A /* handoff.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = handoff.cc; path = src/ssl/handoff.cc; sourceTree = "<group>"; };
@@ -17578,7 +17578,7 @@
 		ADD3CDD8DB53BFA77D8659E5675BC4BE /* SDWebImageOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageOperation.m; path = SDWebImage/Core/SDWebImageOperation.m; sourceTree = "<group>"; };
 		ADE5D40F2229CE2DCF9EDF2F6531FDAC /* call_op_set_interface.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = call_op_set_interface.h; path = include/grpcpp/impl/codegen/call_op_set_interface.h; sourceTree = "<group>"; };
 		ADE6F52C3A0D746D4AA161C4481509C0 /* alts_iovec_record_protocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = alts_iovec_record_protocol.h; path = src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h; sourceTree = "<group>"; };
-		ADEE2246E892D620067F2CF4647B6B4F /* Pods-Asteria */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Pods-Asteria"; path = Pods_Asteria.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		ADEE2246E892D620067F2CF4647B6B4F /* Pods_Asteria.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Asteria.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		ADF1E25935F05A386E223CA482E74989 /* grpc_nanopb.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = grpc_nanopb.cc; path = Firestore/core/src/remote/grpc_nanopb.cc; sourceTree = "<group>"; };
 		AE086AA7EF2D4160B024AD65BEADC764 /* server_context.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = server_context.cc; path = src/cpp/server/server_context.cc; sourceTree = "<group>"; };
 		AE11DD02815C27B486C1C58E4C86E223 /* channel_args_endpoint_config.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = channel_args_endpoint_config.h; path = src/core/lib/event_engine/channel_args_endpoint_config.h; sourceTree = "<group>"; };
@@ -17635,7 +17635,7 @@
 		B08F79B4800CF61FFC9157D412E220BB /* OIDURLSessionProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDURLSessionProvider.h; path = Source/AppAuthCore/OIDURLSessionProvider.h; sourceTree = "<group>"; };
 		B09616A6B675643B47932D66ACB9F5FF /* status.upbdefs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = status.upbdefs.h; path = "src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h"; sourceTree = "<group>"; };
 		B09E0500E708BB4111D40CD13D4295F5 /* internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = internal.h; path = src/crypto/err/internal.h; sourceTree = "<group>"; };
-		B0B214D775196BA7CA8E17E53048A493 /* SDWebImage */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SDWebImage; path = SDWebImage.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		B0B214D775196BA7CA8E17E53048A493 /* SDWebImage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SDWebImage.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		B0B23E533132F564695171831288F518 /* spinlock_linux.inc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.pascal; name = spinlock_linux.inc; path = absl/base/internal/spinlock_linux.inc; sourceTree = "<group>"; };
 		B0C52BC86EC6891BA2C8466F313D4DA3 /* target.nanopb.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = target.nanopb.cc; path = Firestore/Protos/nanopb/firestore/local/target.nanopb.cc; sourceTree = "<group>"; };
 		B0D00970BE3A68751BEB2041A8501A85 /* Storage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Storage.swift; path = FirebaseCore/Internal/Sources/HeartbeatLogging/Storage.swift; sourceTree = "<group>"; };
@@ -17704,7 +17704,7 @@
 		B3E92059E6F4BE925D4D41CF082E196F /* gaussian_distribution.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = gaussian_distribution.h; path = absl/random/gaussian_distribution.h; sourceTree = "<group>"; };
 		B3F253818F3B889BB3C642D4B657374E /* YTKNetwork-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "YTKNetwork-Info.plist"; sourceTree = "<group>"; };
 		B401A28AEEB7837B5D9732B900987343 /* explain.upb.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = explain.upb.c; path = "src/core/ext/upb-generated/google/api/expr/v1alpha1/explain.upb.c"; sourceTree = "<group>"; };
-		B43874C6CBB50E7134FBEC24BABFE14F /* GoogleUtilities */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = GoogleUtilities; path = GoogleUtilities.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		B43874C6CBB50E7134FBEC24BABFE14F /* GoogleUtilities.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = GoogleUtilities.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		B43D784886CD4B5EEA5941DD9D015259 /* QMUICore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QMUICore.h; path = QMUIKit/QMUICore/QMUICore.h; sourceTree = "<group>"; };
 		B44108B3C9202CEAB5AE8059BD9DE2CD /* ssl_buffer.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = ssl_buffer.cc; path = src/ssl/ssl_buffer.cc; sourceTree = "<group>"; };
 		B4521C3E98FB1A2F13C48314282DBA1D /* Pods-Asteria-NotificationServiceExtension-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Asteria-NotificationServiceExtension-resources.sh"; sourceTree = "<group>"; };
@@ -17712,7 +17712,7 @@
 		B45E8C0DA9572994CEB2B55483DAE601 /* FirebaseCore-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FirebaseCore-umbrella.h"; sourceTree = "<group>"; };
 		B46D1D1702B76DDED386D930DD277D23 /* ordered_code.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = ordered_code.cc; path = Firestore/core/src/util/ordered_code.cc; sourceTree = "<group>"; };
 		B4708045806D02FB080040782C3BC9B9 /* client_interceptor.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = client_interceptor.cc; path = src/cpp/client/client_interceptor.cc; sourceTree = "<group>"; };
-		B471867C535B02FA55D87E260F6480F8 /* gRPC-Core */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "gRPC-Core"; path = grpc.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		B471867C535B02FA55D87E260F6480F8 /* grpc.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = grpc.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		B4772F6E56A101AAD7023F8A576649AA /* health_check_service.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = health_check_service.cc; path = src/cpp/server/health/health_check_service.cc; sourceTree = "<group>"; };
 		B489613C1FDD488B732B8DECD2937D9A /* hpack_encoder.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = hpack_encoder.cc; path = src/core/ext/transport/chttp2/transport/hpack_encoder.cc; sourceTree = "<group>"; };
 		B4C127E5190C9B88B8A7CD420926E7AE /* race.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = race.h; path = src/core/lib/promise/race.h; sourceTree = "<group>"; };
@@ -17927,7 +17927,7 @@
 		BF79FE0E618204CBCAF1416791A46ED6 /* d1_lib.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = d1_lib.cc; path = src/ssl/d1_lib.cc; sourceTree = "<group>"; };
 		BF81BD6BF6C0DC4F402221445675E79A /* activity.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = activity.cc; path = src/core/lib/promise/activity.cc; sourceTree = "<group>"; };
 		BF87BD71E00FD38E31EC8FA96255C77F /* tls_certificate_provider.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = tls_certificate_provider.cc; path = src/cpp/common/tls_certificate_provider.cc; sourceTree = "<group>"; };
-		BF96B57ADE05E8909F823BDF6868B3E3 /* abseil */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = abseil; path = absl.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		BF96B57ADE05E8909F823BDF6868B3E3 /* absl.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = absl.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		BFA3A6611DEFCC94DFE45A1FEF783CBB /* FIRFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRFilter.h; path = Firestore/Source/Public/FirebaseFirestore/FIRFilter.h; sourceTree = "<group>"; };
 		BFAC27C11AD4ED76BE0B7B6EF9CEB35F /* resolver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = resolver.h; path = src/core/lib/resolver/resolver.h; sourceTree = "<group>"; };
 		BFB031F72771173327080AA736F37811 /* FIRAnalyticsConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRAnalyticsConfiguration.m; path = FirebaseCore/Sources/FIRAnalyticsConfiguration.m; sourceTree = "<group>"; };
@@ -17967,7 +17967,7 @@
 		C16B7FED366968178FA1CCF9152A5884 /* custom_tag.upb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = custom_tag.upb.h; path = "src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h"; sourceTree = "<group>"; };
 		C1701A972EC5065A8BDD22B8C27ED18A /* MKNetworkKit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "MKNetworkKit-Info.plist"; sourceTree = "<group>"; };
 		C18F3EE952AB39B796E0FAD5A884B700 /* json.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = json.h; path = src/core/lib/json/json.h; sourceTree = "<group>"; };
-		C1998E0D8085221AD87F89B614C10E52 /* GTMSessionFetcher */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = GTMSessionFetcher; path = GTMSessionFetcher.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		C1998E0D8085221AD87F89B614C10E52 /* GTMSessionFetcher.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = GTMSessionFetcher.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		C19B804BF0E0775E2BC6DC187AE2429E /* deadline_filter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = deadline_filter.h; path = src/core/ext/filters/deadline/deadline_filter.h; sourceTree = "<group>"; };
 		C1A86D472018C6571E568FB30A1AC519 /* semantic_version.upbdefs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = semantic_version.upbdefs.h; path = "src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h"; sourceTree = "<group>"; };
 		C1CF35BFBE0C94C7BFB8DD36C0C00A6C /* api_trace.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = api_trace.cc; path = src/core/lib/surface/api_trace.cc; sourceTree = "<group>"; };
@@ -17978,7 +17978,7 @@
 		C221D70805CDB926CA3D945147FD1C52 /* SDInternalMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDInternalMacros.h; path = SDWebImage/Private/SDInternalMacros.h; sourceTree = "<group>"; };
 		C2384ADCECA610557D73BB88162F4F66 /* PPBadgeView.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = PPBadgeView.release.xcconfig; sourceTree = "<group>"; };
 		C24FE01E9701CB0DCDA2CFBE9E77B038 /* encode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = encode.h; path = third_party/upb/upb/encode.h; sourceTree = "<group>"; };
-		C255EC69B2C365218BFC8176A41AD167 /* MKNetworkKit */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = MKNetworkKit; path = MKNetworkKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		C255EC69B2C365218BFC8176A41AD167 /* MKNetworkKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = MKNetworkKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		C28A436554E30D911CC996A873A54CBB /* cpu.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = cpu.h; path = src/include/openssl/cpu.h; sourceTree = "<group>"; };
 		C2A440AB8B9B8E911E8F3FD459DC8CE2 /* escaping.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = escaping.h; path = absl/strings/internal/escaping.h; sourceTree = "<group>"; };
 		C2A71C0D68D8D1A0C57EA6E841501FDA /* FIRHeartbeatLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FIRHeartbeatLogger.h; path = FirebaseCore/Extension/FIRHeartbeatLogger.h; sourceTree = "<group>"; };
@@ -18157,7 +18157,7 @@
 		CAAD151187D521C64A4577DD89E17777 /* external_account_credentials.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = external_account_credentials.h; path = src/core/lib/security/credentials/external/external_account_credentials.h; sourceTree = "<group>"; };
 		CAB149621AE53DB06788C0822DCA5CFF /* Toast.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Toast.modulemap; sourceTree = "<group>"; };
 		CABFD3F71788747A0C0561CB87B8D86D /* GKSDWebImageManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GKSDWebImageManager.m; path = GKPhotoBrowser/SDWebImage/GKSDWebImageManager.m; sourceTree = "<group>"; };
-		CAF0751214AFBE871D56A253826CE89D /* GKPhotoBrowser */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = GKPhotoBrowser; path = GKPhotoBrowser.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		CAF0751214AFBE871D56A253826CE89D /* GKPhotoBrowser.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = GKPhotoBrowser.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		CB082DCCE55220D53A5DE85E5314E3FA /* ssl_lib.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = ssl_lib.cc; path = src/ssl/ssl_lib.cc; sourceTree = "<group>"; };
 		CB1711DB23665C87B36443FB55C721D3 /* OIDErrorUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIDErrorUtilities.h; path = Source/AppAuthCore/OIDErrorUtilities.h; sourceTree = "<group>"; };
 		CB29B918DBFE9C610DA101DE45169B84 /* HWCookiesManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = HWCookiesManager.m; sourceTree = "<group>"; };
@@ -18583,7 +18583,7 @@
 		E27248255CA624D731345E35950FA14D /* channel_create_impl.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = channel_create_impl.cc; path = src/core/ext/transport/binder/client/channel_create_impl.cc; sourceTree = "<group>"; };
 		E2A289B5691762463ADD8EA5B3B4CBFB /* connectivity_monitor_apple.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = connectivity_monitor_apple.mm; path = Firestore/core/src/remote/connectivity_monitor_apple.mm; sourceTree = "<group>"; };
 		E2AAB46F1290D98B0277B889DE306522 /* QMUIAlertController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = QMUIAlertController.m; path = QMUIKit/QMUIComponents/QMUIAlertController.m; sourceTree = "<group>"; };
-		E2B63D462DB7F827C4B11FD51E4F8E2D /* FirebaseCore */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FirebaseCore; path = FirebaseCore.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		E2B63D462DB7F827C4B11FD51E4F8E2D /* FirebaseCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FirebaseCore.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		E2C591B0D6AE72704210FD85337EE420 /* TT_BaseV.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = TT_BaseV.m; sourceTree = "<group>"; };
 		E2C9AE7B304560E8B6294489896921AA /* vdso_support.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = vdso_support.cc; path = absl/debugging/internal/vdso_support.cc; sourceTree = "<group>"; };
 		E2CF6A92D3191C52753656901702ACE7 /* GIDSignInInternalOptions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GIDSignInInternalOptions.m; path = GoogleSignIn/Sources/GIDSignInInternalOptions.m; sourceTree = "<group>"; };
@@ -18619,7 +18619,7 @@
 		E48A33338586C9CE62811B3030D53142 /* QMUIConsoleViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QMUIConsoleViewController.h; path = QMUIKit/QMUIComponents/QMUIConsole/QMUIConsoleViewController.h; sourceTree = "<group>"; };
 		E4931285B00655C84FBEB5CC13F5BA36 /* endpoint.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = endpoint.cc; path = src/core/lib/iomgr/event_engine/endpoint.cc; sourceTree = "<group>"; };
 		E49D1A55DD264726A7168784A366988B /* dynamic_annotations.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = dynamic_annotations.h; path = absl/base/internal/dynamic_annotations.h; sourceTree = "<group>"; };
-		E49D6D248DD1CEE584E6776B9164A1B2 /* MJRefresh */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = MJRefresh; path = MJRefresh.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		E49D6D248DD1CEE584E6776B9164A1B2 /* MJRefresh.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = MJRefresh.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		E4BB48E39E86A16618C63DFFD72F0220 /* SDImageCacheConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCacheConfig.h; path = SDWebImage/Core/SDImageCacheConfig.h; sourceTree = "<group>"; };
 		E4D1DDC878A919FA156E5ECF9C30E8B3 /* common.upb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = common.upb.h; path = "src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h"; sourceTree = "<group>"; };
 		E4E6C94F7CDC0D052AD46C0FCCFE34B8 /* f_int.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = f_int.c; path = src/crypto/asn1/f_int.c; sourceTree = "<group>"; };
@@ -18643,7 +18643,7 @@
 		E59A4FDB7AE3C89A5922E4C6E44D55ED /* handshake.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = handshake.cc; path = src/ssl/handshake.cc; sourceTree = "<group>"; };
 		E5A366D1FEAD2C21F90E78542BB0C9EF /* wire_writer.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = wire_writer.cc; path = src/core/ext/transport/binder/wire_format/wire_writer.cc; sourceTree = "<group>"; };
 		E5A7BA7F5927F04F26DE4D093CF73418 /* host_port.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = host_port.h; path = src/core/lib/gprpp/host_port.h; sourceTree = "<group>"; };
-		E5BA41B7F2E1FE47F9ABCAC27C9E4281 /* GoogleSignIn-GoogleSignIn */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "GoogleSignIn-GoogleSignIn"; path = GoogleSignIn.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
+		E5BA41B7F2E1FE47F9ABCAC27C9E4281 /* GoogleSignIn.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GoogleSignIn.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
 		E5BC2ACA049589B3CECA006A3B5F700B /* filter_block.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = filter_block.h; path = table/filter_block.h; sourceTree = "<group>"; };
 		E5BC7F5EB2AEE4C9CCAFF139B7F81A2E /* generate_real.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = generate_real.h; path = absl/random/internal/generate_real.h; sourceTree = "<group>"; };
 		E5BE0D90B6871402ABA7E70F82117349 /* geo_point.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = geo_point.cc; path = Firestore/core/src/geo_point.cc; sourceTree = "<group>"; };
@@ -19087,7 +19087,7 @@
 		FD3D7248628763D293930ADD99156257 /* IQKeyboardManager.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQKeyboardManager.modulemap; sourceTree = "<group>"; };
 		FD4E58A6BF8D5CE8264358D4288BF761 /* exec_ctx.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = exec_ctx.cc; path = src/core/lib/iomgr/exec_ctx.cc; sourceTree = "<group>"; };
 		FD527D2A43D4D018FBEBC2317F83FFF8 /* internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = internal.h; path = src/core/ext/transport/chttp2/transport/internal.h; sourceTree = "<group>"; };
-		FD56AB51475BC5F592781EE2692D1412 /* GoogleSignIn */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = GoogleSignIn; path = GoogleSignIn.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		FD56AB51475BC5F592781EE2692D1412 /* GoogleSignIn.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = GoogleSignIn.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		FD56CAC1F27D8365C578B4FF3B9EFC68 /* firebase_auth_credentials_provider_apple.mm */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.objcpp; name = firebase_auth_credentials_provider_apple.mm; path = Firestore/core/src/credentials/firebase_auth_credentials_provider_apple.mm; sourceTree = "<group>"; };
 		FD647F8B1DDA2E4C9A8227235F889E5B /* endpoint_config.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = endpoint_config.h; path = include/grpc/event_engine/endpoint_config.h; sourceTree = "<group>"; };
 		FD6D95506916020D4AACC5AF6707CA51 /* da.lproj */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; name = da.lproj; path = GoogleSignIn/Sources/Strings/da.lproj; sourceTree = "<group>"; };
@@ -19135,7 +19135,7 @@
 		FFB80B89864F3041D1E28506E222815C /* nonsecure_base.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = nonsecure_base.h; path = absl/random/internal/nonsecure_base.h; sourceTree = "<group>"; };
 		FFC02843B499DC526F88BE3E1F26D22C /* AFImageDownloader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFImageDownloader.h; path = "UIKit+AFNetworking/AFImageDownloader.h"; sourceTree = "<group>"; };
 		FFC90EBA25263057B3ECD1E0DFA0F0EE /* mimics_pcre.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = mimics_pcre.cc; path = third_party/re2/re2/mimics_pcre.cc; sourceTree = "<group>"; };
-		FFDF743B2D7D655F7364FF1154FFEDE6 /* QMUIKit-QMUIResources */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "QMUIKit-QMUIResources"; path = QMUIResources.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
+		FFDF743B2D7D655F7364FF1154FFEDE6 /* QMUIResources.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = QMUIResources.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
 		FFE3AB212501C0813B6ACA2E28F3DB5F /* pollset_set.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = pollset_set.h; path = src/core/lib/iomgr/pollset_set.h; sourceTree = "<group>"; };
 		FFE51535E694F329BE88EAAF39D0839E /* ev_poll_posix.cc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; name = ev_poll_posix.cc; path = src/core/lib/iomgr/ev_poll_posix.cc; sourceTree = "<group>"; };
 		FFE8D015D67B3383E36FAA5C04ACB4F9 /* fixed_array.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = fixed_array.h; path = absl/container/fixed_array.h; sourceTree = "<group>"; };
@@ -21421,48 +21421,48 @@
 		4DC5CDA146156FC9FC88BFF78B97CA68 /* Products */ = {
 			isa = PBXGroup;
 			children = (
-				BF96B57ADE05E8909F823BDF6868B3E3 /* abseil */,
-				A4FA15D44DF6BAC7550EDEED10862AA3 /* AFNetworking */,
-				3FD1B4C1246D643E9476438C28048FA8 /* AppAuth */,
-				514D7742C6CBB0BDBD9984AEE97DDFDE /* BoringSSL-GRPC */,
-				5BA6046B4C2674409C0D5625F45F8769 /* BRPickerView */,
-				68FD71EBA2CC98523D3AACCE8A0D43C8 /* CTMediator */,
-				E2B63D462DB7F827C4B11FD51E4F8E2D /* FirebaseCore */,
+				BF96B57ADE05E8909F823BDF6868B3E3 /* absl.framework */,
+				A4FA15D44DF6BAC7550EDEED10862AA3 /* AFNetworking.framework */,
+				3FD1B4C1246D643E9476438C28048FA8 /* AppAuth.framework */,
+				514D7742C6CBB0BDBD9984AEE97DDFDE /* openssl_grpc.framework */,
+				5BA6046B4C2674409C0D5625F45F8769 /* BRPickerView.framework */,
+				68FD71EBA2CC98523D3AACCE8A0D43C8 /* CTMediator.framework */,
+				E2B63D462DB7F827C4B11FD51E4F8E2D /* FirebaseCore.framework */,
 				148D0F9E8C7373FEAF40D800FC5F1BAA /* FirebaseCoreInternal */,
-				92000153CD73F7FC2DBAB4AB708269F3 /* FirebaseFirestore */,
-				13C8C8B254851998F9289F71229B28A2 /* FirebaseInstallations */,
-				CAF0751214AFBE871D56A253826CE89D /* GKPhotoBrowser */,
-				0835B8D86D09F9141590F6E8B418315D /* GKSliderView */,
-				FD56AB51475BC5F592781EE2692D1412 /* GoogleSignIn */,
-				E5BA41B7F2E1FE47F9ABCAC27C9E4281 /* GoogleSignIn-GoogleSignIn */,
-				B43874C6CBB50E7134FBEC24BABFE14F /* GoogleUtilities */,
-				1911113E0FBF13CFF9132E5FF7685228 /* gRPC-C++ */,
-				9C7C87B5D0A6752AFA2642F1BCA967A3 /* gRPC-C++-gRPCCertificates-Cpp */,
-				B471867C535B02FA55D87E260F6480F8 /* gRPC-Core */,
-				6FD122EA0AB9AB2A8FFA5F676C795DF0 /* GTMAppAuth */,
-				C1998E0D8085221AD87F89B614C10E52 /* GTMSessionFetcher */,
-				41B72F4F981A545809C1EB158DA62C65 /* HCSStarRatingView */,
-				98527D7196957AAB07B79E2E2AFDE23E /* IQKeyboardManager */,
-				0A9F46A999C47653013D3AD854352507 /* leveldb-library */,
-				6BC54C3D03DEBF9C3A40965E69CAE039 /* Libuv-gRPC */,
-				1FFED36A657123030ABB700256D73F15 /* Masonry */,
-				8B8FAB0D627B17EDE1366984278705D9 /* MBProgressHUD */,
-				2B276B0A79173A1D6E83C9B4FB9A4A57 /* MJExtension */,
-				E49D6D248DD1CEE584E6776B9164A1B2 /* MJRefresh */,
-				C255EC69B2C365218BFC8176A41AD167 /* MKNetworkKit */,
-				06FC5C9CF96D60C50FCD47D339C91951 /* nanopb */,
-				ADEE2246E892D620067F2CF4647B6B4F /* Pods-Asteria */,
+				92000153CD73F7FC2DBAB4AB708269F3 /* FirebaseFirestore.framework */,
+				13C8C8B254851998F9289F71229B28A2 /* FirebaseInstallations.framework */,
+				CAF0751214AFBE871D56A253826CE89D /* GKPhotoBrowser.framework */,
+				0835B8D86D09F9141590F6E8B418315D /* GKSliderView.framework */,
+				FD56AB51475BC5F592781EE2692D1412 /* GoogleSignIn.framework */,
+				E5BA41B7F2E1FE47F9ABCAC27C9E4281 /* GoogleSignIn.bundle */,
+				B43874C6CBB50E7134FBEC24BABFE14F /* GoogleUtilities.framework */,
+				1911113E0FBF13CFF9132E5FF7685228 /* grpcpp.framework */,
+				9C7C87B5D0A6752AFA2642F1BCA967A3 /* gRPCCertificates-Cpp.bundle */,
+				B471867C535B02FA55D87E260F6480F8 /* grpc.framework */,
+				6FD122EA0AB9AB2A8FFA5F676C795DF0 /* GTMAppAuth.framework */,
+				C1998E0D8085221AD87F89B614C10E52 /* GTMSessionFetcher.framework */,
+				41B72F4F981A545809C1EB158DA62C65 /* HCSStarRatingView.framework */,
+				98527D7196957AAB07B79E2E2AFDE23E /* IQKeyboardManager.framework */,
+				0A9F46A999C47653013D3AD854352507 /* leveldb.framework */,
+				6BC54C3D03DEBF9C3A40965E69CAE039 /* uv.framework */,
+				1FFED36A657123030ABB700256D73F15 /* Masonry.framework */,
+				8B8FAB0D627B17EDE1366984278705D9 /* MBProgressHUD.framework */,
+				2B276B0A79173A1D6E83C9B4FB9A4A57 /* MJExtension.framework */,
+				E49D6D248DD1CEE584E6776B9164A1B2 /* MJRefresh.framework */,
+				C255EC69B2C365218BFC8176A41AD167 /* MKNetworkKit.framework */,
+				06FC5C9CF96D60C50FCD47D339C91951 /* nanopb.framework */,
+				ADEE2246E892D620067F2CF4647B6B4F /* Pods_Asteria.framework */,
 				592C4194BBB648410267743934B84F02 /* Pods-Asteria-NotificationServiceExtension */,
-				0DE46762C16AFA797BDAAD77C77D762A /* PPBadgeView */,
-				3347A1AB6546F0A3977529B8F199DC41 /* PromisesObjC */,
-				8596B7A0C5A3E188061E9EDDAB573FCE /* QMUIKit */,
-				FFDF743B2D7D655F7364FF1154FFEDE6 /* QMUIKit-QMUIResources */,
-				400FF55D0451E7A8F33A3D0D3E11C1B9 /* Reachability */,
-				B0B214D775196BA7CA8E17E53048A493 /* SDWebImage */,
-				55E0AFD333353D71ACC2207149E879D6 /* Toast */,
-				539FECC86006AA99C16C35C45709F2FC /* WMBase */,
-				601EEA66C9A6080A11C1ADE5E2A91AE1 /* YTKNetwork */,
-				48ACF38225AF5129416A1F090F6D3286 /* YYCache */,
+				0DE46762C16AFA797BDAAD77C77D762A /* PPBadgeView.framework */,
+				3347A1AB6546F0A3977529B8F199DC41 /* FBLPromises.framework */,
+				8596B7A0C5A3E188061E9EDDAB573FCE /* QMUIKit.framework */,
+				FFDF743B2D7D655F7364FF1154FFEDE6 /* QMUIResources.bundle */,
+				400FF55D0451E7A8F33A3D0D3E11C1B9 /* Reachability.framework */,
+				B0B214D775196BA7CA8E17E53048A493 /* SDWebImage.framework */,
+				55E0AFD333353D71ACC2207149E879D6 /* Toast.framework */,
+				539FECC86006AA99C16C35C45709F2FC /* WMBase.framework */,
+				601EEA66C9A6080A11C1ADE5E2A91AE1 /* YTKNetwork.framework */,
+				48ACF38225AF5129416A1F090F6D3286 /* YYCache.framework */,
 			);
 			name = Products;
 			sourceTree = "<group>";
@@ -30355,7 +30355,7 @@
 			);
 			name = AFNetworking;
 			productName = AFNetworking;
-			productReference = A4FA15D44DF6BAC7550EDEED10862AA3 /* AFNetworking */;
+			productReference = A4FA15D44DF6BAC7550EDEED10862AA3 /* AFNetworking.framework */;
 			productType = "com.apple.product-type.framework";
 		};
 		1664EA1850F2A5D7B4C063C13A541D0F /* GKPhotoBrowser */ = {
@@ -30375,7 +30375,7 @@
 			);
 			name = GKPhotoBrowser;
 			productName = GKPhotoBrowser;
-			productReference = CAF0751214AFBE871D56A253826CE89D /* GKPhotoBrowser */;
+			productReference = CAF0751214AFBE871D56A253826CE89D /* GKPhotoBrowser.framework */;
 			productType = "com.apple.product-type.framework";
 		};
 		1C5E43B0A9555E7C2E43A6D7C8A23CF6 /* gRPC-C++ */ = {
@@ -30588,7 +30588,7 @@
 			);
 			name = "gRPC-C++";
 			productName = grpcpp;
-			productReference = 1911113E0FBF13CFF9132E5FF7685228 /* gRPC-C++ */;
+			productReference = 1911113E0FBF13CFF9132E5FF7685228 /* grpcpp.framework */;
 			productType = "com.apple.product-type.framework";
 		};
 		1EF8BBBFC3709A3B7D4798483B0764E1 /* GKSliderView */ = {
@@ -30606,7 +30606,7 @@
 			);
 			name = GKSliderView;
 			productName = GKSliderView;
-			productReference = 0835B8D86D09F9141590F6E8B418315D /* GKSliderView */;
+			productReference = 0835B8D86D09F9141590F6E8B418315D /* GKSliderView.framework */;
 			productType = "com.apple.product-type.framework";
 		};
 		25E9E9A17BC3F670357D7385C521E48E /* FirebaseCoreInternal */ = {
@@ -30643,7 +30643,7 @@
 			);
 			name = PromisesObjC;
 			productName = FBLPromises;
-			productReference = 3347A1AB6546F0A3977529B8F199DC41 /* PromisesObjC */;
+			productReference = 3347A1AB6546F0A3977529B8F199DC41 /* FBLPromises.framework */;
 			productType = "com.apple.product-type.framework";
 		};
 		3847153A6E5EEFB86565BA840768F429 /* SDWebImage */ = {
@@ -30661,7 +30661,7 @@
 			);
 			name = SDWebImage;
 			productName = SDWebImage;
-			productReference = B0B214D775196BA7CA8E17E53048A493 /* SDWebImage */;
+			productReference = B0B214D775196BA7CA8E17E53048A493 /* SDWebImage.framework */;
 			productType = "com.apple.product-type.framework";
 		};
 		3B8CAC3956E59F928387D0C6310E3B37 /* gRPC-C++-gRPCCertificates-Cpp */ = {
@@ -30678,7 +30678,7 @@
 			);
 			name = "gRPC-C++-gRPCCertificates-Cpp";
 			productName = "gRPCCertificates-Cpp";
-			productReference = 9C7C87B5D0A6752AFA2642F1BCA967A3 /* gRPC-C++-gRPCCertificates-Cpp */;
+			productReference = 9C7C87B5D0A6752AFA2642F1BCA967A3 /* gRPCCertificates-Cpp.bundle */;
 			productType = "com.apple.product-type.bundle";
 		};
 		4402AFF83DBDC4DD07E198685FDC2DF2 /* FirebaseCore */ = {
@@ -30698,7 +30698,7 @@
 			);
 			name = FirebaseCore;
 			productName = FirebaseCore;
-			productReference = E2B63D462DB7F827C4B11FD51E4F8E2D /* FirebaseCore */;
+			productReference = E2B63D462DB7F827C4B11FD51E4F8E2D /* FirebaseCore.framework */;
 			productType = "com.apple.product-type.framework";
 		};
 		445FD4CB16BB7BEE2D1C404951CDE14A /* BoringSSL-GRPC */ = {
@@ -30756,7 +30756,7 @@
 			);
 			name = "BoringSSL-GRPC";
 			productName = openssl_grpc;
-			productReference = 514D7742C6CBB0BDBD9984AEE97DDFDE /* BoringSSL-GRPC */;
+			productReference = 514D7742C6CBB0BDBD9984AEE97DDFDE /* openssl_grpc.framework */;
 			productType = "com.apple.product-type.framework";
 		};
 		4918C036D448430C5CB2F8555D723929 /* Pods-Asteria */ = {
@@ -30820,7 +30820,7 @@
 			);
 			name = "Pods-Asteria";
 			productName = Pods_Asteria;
-			productReference = ADEE2246E892D620067F2CF4647B6B4F /* Pods-Asteria */;
+			productReference = ADEE2246E892D620067F2CF4647B6B4F /* Pods_Asteria.framework */;
 			productType = "com.apple.product-type.framework";
 		};
 		4CE4300C2EEA140B41D662E299459FEB /* MKNetworkKit */ = {
@@ -30839,7 +30839,7 @@
 			);
 			name = MKNetworkKit;
 			productName = MKNetworkKit;
-			productReference = C255EC69B2C365218BFC8176A41AD167 /* MKNetworkKit */;
+			productReference = C255EC69B2C365218BFC8176A41AD167 /* MKNetworkKit.framework */;
 			productType = "com.apple.product-type.framework";
 		};
 		4D3BA58D0583DF37575CACAB3DDADC85 /* MJExtension */ = {
@@ -30857,7 +30857,7 @@
 			);
 			name = MJExtension;
 			productName = MJExtension;
-			productReference = 2B276B0A79173A1D6E83C9B4FB9A4A57 /* MJExtension */;
+			productReference = 2B276B0A79173A1D6E83C9B4FB9A4A57 /* MJExtension.framework */;
 			productType = "com.apple.product-type.framework";
 		};
 		50F380A87A4FC4EC7EE3AC9BDADB6D2D /* gRPC-Core */ = {
@@ -31059,7 +31059,7 @@
 			);
 			name = "gRPC-Core";
 			productName = grpc;
-			productReference = B471867C535B02FA55D87E260F6480F8 /* gRPC-Core */;
+			productReference = B471867C535B02FA55D87E260F6480F8 /* grpc.framework */;
 			productType = "com.apple.product-type.framework";
 		};
 		55AF53E6C77A10ED4985E04D74A8878E /* Masonry */ = {
@@ -31077,7 +31077,7 @@
 			);
 			name = Masonry;
 			productName = Masonry;
-			productReference = 1FFED36A657123030ABB700256D73F15 /* Masonry */;
+			productReference = 1FFED36A657123030ABB700256D73F15 /* Masonry.framework */;
 			productType = "com.apple.product-type.framework";
 		};
 		5C642AA10FB29936669CC269F42079C6 /* AppAuth */ = {
@@ -31095,7 +31095,7 @@
 			);
 			name = AppAuth;
 			productName = AppAuth;
-			productReference = 3FD1B4C1246D643E9476438C28048FA8 /* AppAuth */;
+			productReference = 3FD1B4C1246D643E9476438C28048FA8 /* AppAuth.framework */;
 			productType = "com.apple.product-type.framework";
 		};
 		6868056D761E163D10FDAF8CF1C4D9B8 /* MJRefresh */ = {
@@ -31113,7 +31113,7 @@
 			);
 			name = MJRefresh;
 			productName = MJRefresh;
-			productReference = E49D6D248DD1CEE584E6776B9164A1B2 /* MJRefresh */;
+			productReference = E49D6D248DD1CEE584E6776B9164A1B2 /* MJRefresh.framework */;
 			productType = "com.apple.product-type.framework";
 		};
 		69AA1CD97ADEF721EFB8D16AF3E96CDE /* Libuv-gRPC */ = {
@@ -31135,7 +31135,7 @@
 			);
 			name = "Libuv-gRPC";
 			productName = uv;
-			productReference = 6BC54C3D03DEBF9C3A40965E69CAE039 /* Libuv-gRPC */;
+			productReference = 6BC54C3D03DEBF9C3A40965E69CAE039 /* uv.framework */;
 			productType = "com.apple.product-type.framework";
 		};
 		6A222DBB9D71B481EE8F2DACD77F8A61 /* CTMediator */ = {
@@ -31153,7 +31153,7 @@
 			);
 			name = CTMediator;
 			productName = CTMediator;
-			productReference = 68FD71EBA2CC98523D3AACCE8A0D43C8 /* CTMediator */;
+			productReference = 68FD71EBA2CC98523D3AACCE8A0D43C8 /* CTMediator.framework */;
 			productType = "com.apple.product-type.framework";
 		};
 		73CDC3D182DB953135F62609681B443D /* abseil */ = {
@@ -31204,7 +31204,7 @@
 			);
 			name = abseil;
 			productName = absl;
-			productReference = BF96B57ADE05E8909F823BDF6868B3E3 /* abseil */;
+			productReference = BF96B57ADE05E8909F823BDF6868B3E3 /* absl.framework */;
 			productType = "com.apple.product-type.framework";
 		};
 		740124B3EE5D14F0E8AF4C9163C297A8 /* QMUIKit */ = {
@@ -31223,7 +31223,7 @@
 			);
 			name = QMUIKit;
 			productName = QMUIKit;
-			productReference = 8596B7A0C5A3E188061E9EDDAB573FCE /* QMUIKit */;
+			productReference = 8596B7A0C5A3E188061E9EDDAB573FCE /* QMUIKit.framework */;
 			productType = "com.apple.product-type.framework";
 		};
 		7DFA91ED3A3D0BC020C3C843A3D1EB38 /* GoogleSignIn-GoogleSignIn */ = {
@@ -31240,7 +31240,7 @@
 			);
 			name = "GoogleSignIn-GoogleSignIn";
 			productName = GoogleSignIn;
-			productReference = E5BA41B7F2E1FE47F9ABCAC27C9E4281 /* GoogleSignIn-GoogleSignIn */;
+			productReference = E5BA41B7F2E1FE47F9ABCAC27C9E4281 /* GoogleSignIn.bundle */;
 			productType = "com.apple.product-type.bundle";
 		};
 		82B0A41D3031FF27D78E17B0A9A46FB0 /* MBProgressHUD */ = {
@@ -31258,7 +31258,7 @@
 			);
 			name = MBProgressHUD;
 			productName = MBProgressHUD;
-			productReference = 8B8FAB0D627B17EDE1366984278705D9 /* MBProgressHUD */;
+			productReference = 8B8FAB0D627B17EDE1366984278705D9 /* MBProgressHUD.framework */;
 			productType = "com.apple.product-type.framework";
 		};
 		8627999EF1D5E93E13DAFF580DA8CDCF /* GTMAppAuth */ = {
@@ -31278,7 +31278,7 @@
 			);
 			name = GTMAppAuth;
 			productName = GTMAppAuth;
-			productReference = 6FD122EA0AB9AB2A8FFA5F676C795DF0 /* GTMAppAuth */;
+			productReference = 6FD122EA0AB9AB2A8FFA5F676C795DF0 /* GTMAppAuth.framework */;
 			productType = "com.apple.product-type.framework";
 		};
 		87803597EB3F20FC46472B85392EC4FD /* FirebaseInstallations */ = {
@@ -31299,7 +31299,7 @@
 			);
 			name = FirebaseInstallations;
 			productName = FirebaseInstallations;
-			productReference = 13C8C8B254851998F9289F71229B28A2 /* FirebaseInstallations */;
+			productReference = 13C8C8B254851998F9289F71229B28A2 /* FirebaseInstallations.framework */;
 			productType = "com.apple.product-type.framework";
 		};
 		8D7F5D5DD528D21A72DC87ADA5B12E2D /* GoogleUtilities */ = {
@@ -31318,7 +31318,7 @@
 			);
 			name = GoogleUtilities;
 			productName = GoogleUtilities;
-			productReference = B43874C6CBB50E7134FBEC24BABFE14F /* GoogleUtilities */;
+			productReference = B43874C6CBB50E7134FBEC24BABFE14F /* GoogleUtilities.framework */;
 			productType = "com.apple.product-type.framework";
 		};
 		9307B7A119490930CF70393AB529AAC1 /* leveldb-library */ = {
@@ -31336,7 +31336,7 @@
 			);
 			name = "leveldb-library";
 			productName = leveldb;
-			productReference = 0A9F46A999C47653013D3AD854352507 /* leveldb-library */;
+			productReference = 0A9F46A999C47653013D3AD854352507 /* leveldb.framework */;
 			productType = "com.apple.product-type.framework";
 		};
 		959D5A26DB6A1B4F5800D81BB1D38F03 /* WMBase */ = {
@@ -31366,7 +31366,7 @@
 			);
 			name = WMBase;
 			productName = WMBase;
-			productReference = 539FECC86006AA99C16C35C45709F2FC /* WMBase */;
+			productReference = 539FECC86006AA99C16C35C45709F2FC /* WMBase.framework */;
 			productType = "com.apple.product-type.framework";
 		};
 		9BA99EA678644AC23346F73D0DD3DCEB /* PPBadgeView */ = {
@@ -31384,7 +31384,7 @@
 			);
 			name = PPBadgeView;
 			productName = PPBadgeView;
-			productReference = 0DE46762C16AFA797BDAAD77C77D762A /* PPBadgeView */;
+			productReference = 0DE46762C16AFA797BDAAD77C77D762A /* PPBadgeView.framework */;
 			productType = "com.apple.product-type.framework";
 		};
 		A4F02C53B5B4FD6A5A304A7F0FAC06E6 /* QMUIKit-QMUIResources */ = {
@@ -31401,7 +31401,7 @@
 			);
 			name = "QMUIKit-QMUIResources";
 			productName = QMUIResources;
-			productReference = FFDF743B2D7D655F7364FF1154FFEDE6 /* QMUIKit-QMUIResources */;
+			productReference = FFDF743B2D7D655F7364FF1154FFEDE6 /* QMUIResources.bundle */;
 			productType = "com.apple.product-type.bundle";
 		};
 		A80A4D6B185BA43BC06122FED0C15F94 /* Toast */ = {
@@ -31419,7 +31419,7 @@
 			);
 			name = Toast;
 			productName = Toast;
-			productReference = 55E0AFD333353D71ACC2207149E879D6 /* Toast */;
+			productReference = 55E0AFD333353D71ACC2207149E879D6 /* Toast.framework */;
 			productType = "com.apple.product-type.framework";
 		};
 		AA1F5FA164E7E244947AFCFA5F65010C /* Pods-Asteria-NotificationServiceExtension */ = {
@@ -31502,7 +31502,7 @@
 			);
 			name = YTKNetwork;
 			productName = YTKNetwork;
-			productReference = 601EEA66C9A6080A11C1ADE5E2A91AE1 /* YTKNetwork */;
+			productReference = 601EEA66C9A6080A11C1ADE5E2A91AE1 /* YTKNetwork.framework */;
 			productType = "com.apple.product-type.framework";
 		};
 		AFFEEF8FEF1DD6BA9599FF2612CD2B6F /* HCSStarRatingView */ = {
@@ -31520,7 +31520,7 @@
 			);
 			name = HCSStarRatingView;
 			productName = HCSStarRatingView;
-			productReference = 41B72F4F981A545809C1EB158DA62C65 /* HCSStarRatingView */;
+			productReference = 41B72F4F981A545809C1EB158DA62C65 /* HCSStarRatingView.framework */;
 			productType = "com.apple.product-type.framework";
 		};
 		CAA047C0F5E4106F3904E8497FA17F97 /* Reachability */ = {
@@ -31538,7 +31538,7 @@
 			);
 			name = Reachability;
 			productName = Reachability;
-			productReference = 400FF55D0451E7A8F33A3D0D3E11C1B9 /* Reachability */;
+			productReference = 400FF55D0451E7A8F33A3D0D3E11C1B9 /* Reachability.framework */;
 			productType = "com.apple.product-type.framework";
 		};
 		CAD3534FC55B0333104E5117C0A9A324 /* GoogleSignIn */ = {
@@ -31560,7 +31560,7 @@
 			);
 			name = GoogleSignIn;
 			productName = GoogleSignIn;
-			productReference = FD56AB51475BC5F592781EE2692D1412 /* GoogleSignIn */;
+			productReference = FD56AB51475BC5F592781EE2692D1412 /* GoogleSignIn.framework */;
 			productType = "com.apple.product-type.framework";
 		};
 		CFDAE6EB02F58B9A37CADCF439AE6082 /* YYCache */ = {
@@ -31578,7 +31578,7 @@
 			);
 			name = YYCache;
 			productName = YYCache;
-			productReference = 48ACF38225AF5129416A1F090F6D3286 /* YYCache */;
+			productReference = 48ACF38225AF5129416A1F090F6D3286 /* YYCache.framework */;
 			productType = "com.apple.product-type.framework";
 		};
 		D2B5E7DCCBBFB32341D857D01211A1A3 /* nanopb */ = {
@@ -31596,7 +31596,7 @@
 			);
 			name = nanopb;
 			productName = nanopb;
-			productReference = 06FC5C9CF96D60C50FCD47D339C91951 /* nanopb */;
+			productReference = 06FC5C9CF96D60C50FCD47D339C91951 /* nanopb.framework */;
 			productType = "com.apple.product-type.framework";
 		};
 		D505645C3F99EB1E8B6529D64D2C3E1C /* BRPickerView */ = {
@@ -31614,7 +31614,7 @@
 			);
 			name = BRPickerView;
 			productName = BRPickerView;
-			productReference = 5BA6046B4C2674409C0D5625F45F8769 /* BRPickerView */;
+			productReference = 5BA6046B4C2674409C0D5625F45F8769 /* BRPickerView.framework */;
 			productType = "com.apple.product-type.framework";
 		};
 		D676E21115185671D7258A56944ABE98 /* GTMSessionFetcher */ = {
@@ -31632,7 +31632,7 @@
 			);
 			name = GTMSessionFetcher;
 			productName = GTMSessionFetcher;
-			productReference = C1998E0D8085221AD87F89B614C10E52 /* GTMSessionFetcher */;
+			productReference = C1998E0D8085221AD87F89B614C10E52 /* GTMSessionFetcher.framework */;
 			productType = "com.apple.product-type.framework";
 		};
 		DBA2B63E3A5FE83FE89E731664C9269F /* FirebaseFirestore */ = {
@@ -31655,7 +31655,7 @@
 			);
 			name = FirebaseFirestore;
 			productName = FirebaseFirestore;
-			productReference = 92000153CD73F7FC2DBAB4AB708269F3 /* FirebaseFirestore */;
+			productReference = 92000153CD73F7FC2DBAB4AB708269F3 /* FirebaseFirestore.framework */;
 			productType = "com.apple.product-type.framework";
 		};
 		FBA456CB50E371584C11231929A0971E /* IQKeyboardManager */ = {
@@ -31673,7 +31673,7 @@
 			);
 			name = IQKeyboardManager;
 			productName = IQKeyboardManager;
-			productReference = 98527D7196957AAB07B79E2E2AFDE23E /* IQKeyboardManager */;
+			productReference = 98527D7196957AAB07B79E2E2AFDE23E /* IQKeyboardManager.framework */;
 			productType = "com.apple.product-type.framework";
 		};
 /* End PBXNativeTarget section */
@@ -31867,7 +31867,7 @@
 			isa = PBXResourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				C80E6A729D4A289850B7EFF27521998D /* GoogleSignIn-GoogleSignIn in Resources */,
+				C80E6A729D4A289850B7EFF27521998D /* GoogleSignIn.bundle in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -31948,7 +31948,7 @@
 			isa = PBXResourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				B9F978798943AC030B4BF710DE3D99F0 /* gRPC-C++-gRPCCertificates-Cpp in Resources */,
+				B9F978798943AC030B4BF710DE3D99F0 /* gRPCCertificates-Cpp.bundle in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -32125,7 +32125,7 @@
 			isa = PBXResourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				4AD589B67443DF0364282CDAB9DB3EE7 /* QMUIKit-QMUIResources in Resources */,
+				4AD589B67443DF0364282CDAB9DB3EE7 /* QMUIResources.bundle in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};