diff --git a/Podfile b/Podfile index 459034e..6ecfdaf 100644 --- a/Podfile +++ b/Podfile @@ -7,9 +7,6 @@ project 'YuMi.xcodeproj' target 'YuMi' do use_frameworks! - # 滑动标签栏 - pod 'JXCategoryView' - pod 'JXPagingView/Pager' #模型转化 pod 'MJExtension', '3.4.2' #图片加载 @@ -19,8 +16,7 @@ target 'YuMi' do pod 'SDWebImageFLPlugin' # 对FLAnimatedImage和SDWebImage的桥接 pod 'AFNetworking' #文字自动滚动 - pod 'MarqueeLabel' - pod 'YYText' + pod 'Masonry' #输入 pod 'SZTextView' diff --git a/Podfile.lock b/Podfile.lock index f7c96aa..2abaa00 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -19,9 +19,6 @@ PODS: - FLAnimatedImage (1.0.17) - GKCycleScrollView (1.2.3) - IQKeyboardManager (6.5.19) - - JXCategoryView (1.6.8) - - JXPagingView/Pager (2.1.3) - - MarqueeLabel (4.5.3) - Masonry (1.1.0) - MBProgressHUD (1.2.0) - MJExtension (3.4.2) @@ -60,7 +57,6 @@ PODS: - YYImage (1.0.4): - YYImage/Core (= 1.0.4) - YYImage/Core (1.0.4) - - YYText (1.0.7) - YYWebImage (1.0.5): - YYCache - YYImage @@ -73,9 +69,6 @@ DEPENDENCIES: - FLAnimatedImage - GKCycleScrollView - IQKeyboardManager - - JXCategoryView - - JXPagingView/Pager - - MarqueeLabel - Masonry - MBProgressHUD - MJExtension (= 3.4.2) @@ -93,7 +86,6 @@ DEPENDENCIES: - TYCyclePagerView - TZImagePickerController - YuMi (from `yum`) - - YYText - YYWebImage - ZLCollectionViewFlowLayout @@ -105,9 +97,6 @@ SPEC REPOS: - FLAnimatedImage - GKCycleScrollView - IQKeyboardManager - - JXCategoryView - - JXPagingView - - MarqueeLabel - Masonry - MBProgressHUD - MJExtension @@ -128,7 +117,6 @@ SPEC REPOS: - TZImagePickerController - YYCache - YYImage - - YYText - YYWebImage - ZLCollectionViewFlowLayout @@ -143,9 +131,6 @@ SPEC CHECKSUMS: FLAnimatedImage: bbf914596368867157cc71b38a8ec834b3eeb32b GKCycleScrollView: 8ed79d2142e62895a701973358b6f94b661b4829 IQKeyboardManager: c8665b3396bd0b79402b4c573eac345a31c7d485 - JXCategoryView: 262d503acea0b1278c79a1c25b7332ffaef4d518 - JXPagingView: afdd2e9af09c90160dd232b970d603cc6e7ddd0e - MarqueeLabel: 0c57d4c6634e04a6d015af79f7c9a175b2309525 Masonry: 678fab65091a9290e40e2832a55e7ab731aad201 MBProgressHUD: 3ee5efcc380f6a79a7cc9b363dd669c5e1ae7406 MJExtension: e97d164cb411aa9795cf576093a1fa208b4a8dd8 @@ -167,10 +152,9 @@ SPEC CHECKSUMS: YuMi: 6c5f00f1eccbcea3304feae03cbe659025fdb9cb YYCache: 8105b6638f5e849296c71f331ff83891a4942952 YYImage: 1e1b62a9997399593e4b9c4ecfbbabbf1d3f3b54 - YYText: 5c461d709e24d55a182d1441c41dc639a18a4849 YYWebImage: 5f7f36aee2ae293f016d418c7d6ba05c4863e928 ZLCollectionViewFlowLayout: c99024652ce9f0c57d33ab53052c9b85e4a936b7 -PODFILE CHECKSUM: 377abda18823bc4a29b1f0df9b0b4e424bd6f61c +PODFILE CHECKSUM: 6c65b83f79bba5e0d4aa83b16b51554490a0376c COCOAPODS: 1.16.2 diff --git a/YuMi.xcodeproj/project.pbxproj b/YuMi.xcodeproj/project.pbxproj index dd90ad5..9dfbf1e 100644 --- a/YuMi.xcodeproj/project.pbxproj +++ b/YuMi.xcodeproj/project.pbxproj @@ -32,13 +32,9 @@ 189DD76226E60DDC00AB55B1 /* Api+Login.m in Sources */ = {isa = PBXBuildFile; fileRef = 189DD76126E60DDC00AB55B1 /* Api+Login.m */; }; 18E7B1B726E8B2D10064BC9B /* Api+Main.m in Sources */ = {isa = PBXBuildFile; fileRef = 18E7B1B626E8B2D10064BC9B /* Api+Main.m */; }; 18E7B31826F097E00064BC9B /* UserInfoModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 18E7B31726F097E00064BC9B /* UserInfoModel.m */; }; - 18E7B31B26F0982E0064BC9B /* UserExpand.m in Sources */ = {isa = PBXBuildFile; fileRef = 18E7B31A26F0982E0064BC9B /* UserExpand.m */; }; - 18E7B31E26F0984C0064BC9B /* UserLevelVo.m in Sources */ = {isa = PBXBuildFile; fileRef = 18E7B31D26F0984C0064BC9B /* UserLevelVo.m */; }; - 18E7B32126F098650064BC9B /* UserInfoSkillVo.m in Sources */ = {isa = PBXBuildFile; fileRef = 18E7B32026F098650064BC9B /* UserInfoSkillVo.m */; }; 23116B0B2BDB8FDC00F7F97A /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 2368ECD72BC38FED00EDF4C9 /* PrivacyInfo.xcprivacy */; }; 232EBBFF2BD7A25500E8CEAD /* MSParamsDecode.m in Sources */ = {isa = PBXBuildFile; fileRef = 232EBBFE2BD7A25500E8CEAD /* MSParamsDecode.m */; }; 2331C1BD2A60F69E00E1D940 /* UILabel+Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = 2331C1BC2A60F69E00E1D940 /* UILabel+Utils.m */; }; - 234D821E2AEC57CF0022EFEB /* YYTextAsyncLayer+PITextAsyncLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 234D821D2AEC57CF0022EFEB /* YYTextAsyncLayer+PITextAsyncLayer.m */; }; 235A45232B04BEB6009753F5 /* PIBaseModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 235A45222B04BEB6009753F5 /* PIBaseModel.m */; }; 2368ECCF2BC38F9800EDF4C9 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 2368ECCD2BC38F9800EDF4C9 /* InfoPlist.strings */; }; 2368ECD32BC38FDA00EDF4C9 /* Launch Screen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2368ECD52BC38FDA00EDF4C9 /* Launch Screen.storyboard */; }; @@ -78,7 +74,6 @@ 23CEFC632AFB8FC100576D89 /* BSRealTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 23CEFC442AFB8FC100576D89 /* BSRealTextView.m */; }; 23CEFC642AFB8FC100576D89 /* BSkObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 23CEFC472AFB8FC100576D89 /* BSkObject.m */; }; 23CEFC652AFB8FC100576D89 /* BSDrawLine.m in Sources */ = {isa = PBXBuildFile; fileRef = 23CEFC482AFB8FC100576D89 /* BSDrawLine.m */; }; - 23D8DEF22AC5633300644637 /* PIIAPRegulate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23D8DEF12AC5633300644637 /* PIIAPRegulate.swift */; }; 23E56B3C2B03564B00C8DAC9 /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 23E56B3B2B03564B00C8DAC9 /* CoreTelephony.framework */; }; 4C06427F2E97BD6D00BAF413 /* EPMineHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C0642732E97BD6D00BAF413 /* EPMineHeaderView.m */; }; 4C0642802E97BD6D00BAF413 /* EPMomentCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C06427A2E97BD6D00BAF413 /* EPMomentCell.m */; }; @@ -109,33 +104,19 @@ 4CD19C8F2E9CBBC80069DAA0 /* EPLoginManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CD19C8B2E9CBBC80069DAA0 /* EPLoginManager.swift */; }; 4CD19C912E9CBBD30069DAA0 /* EPLoginBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CD19C902E9CBBD30069DAA0 /* EPLoginBridge.swift */; }; 4CD19C932E9CCF2C0069DAA0 /* EPLoginConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CD19C922E9CCF2C0069DAA0 /* EPLoginConfig.swift */; }; - 4CD19E722E9CDF980069DAA0 /* UIButton+MSRTL.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD19D692E9CDF980069DAA0 /* UIButton+MSRTL.m */; }; - 4CD19E772E9CDF980069DAA0 /* UITextView+MSRTL.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD19D732E9CDF980069DAA0 /* UITextView+MSRTL.m */; }; - 4CD19E782E9CDF980069DAA0 /* NSMutableAttributedString+MSRTL.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD19D672E9CDF980069DAA0 /* NSMutableAttributedString+MSRTL.m */; }; 4CD19E7C2E9CDF980069DAA0 /* TTPopupService.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD19D982E9CDF980069DAA0 /* TTPopupService.m */; }; 4CD19E7E2E9CDF980069DAA0 /* XNDJTDDLoadingTool.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD19DC82E9CDF980069DAA0 /* XNDJTDDLoadingTool.m */; }; 4CD19E802E9CDF980069DAA0 /* TTPopup.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD19DA32E9CDF980069DAA0 /* TTPopup.m */; }; 4CD19E812E9CDF980069DAA0 /* UIView+GradientLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD19DB62E9CDF980069DAA0 /* UIView+GradientLayer.m */; }; 4CD19E822E9CDF980069DAA0 /* TTAlertMessageAttributedConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD19D8F2E9CDF980069DAA0 /* TTAlertMessageAttributedConfig.m */; }; - 4CD19E842E9CDF980069DAA0 /* XPAdvertiseView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD19C992E9CDF980069DAA0 /* XPAdvertiseView.m */; }; - 4CD19E852E9CDF980069DAA0 /* UISwipeGestureRecognizer+MSRTL.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD19D6F2E9CDF980069DAA0 /* UISwipeGestureRecognizer+MSRTL.m */; }; 4CD19E862E9CDF980069DAA0 /* TTAlertButtonConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD19D8B2E9CDF980069DAA0 /* TTAlertButtonConfig.m */; }; 4CD19E882E9CDF980069DAA0 /* UIView+Corner.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD19DB32E9CDF980069DAA0 /* UIView+Corner.m */; }; 4CD19E8D2E9CDF980069DAA0 /* NetImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD19DAE2E9CDF980069DAA0 /* NetImageView.m */; }; - 4CD19E912E9CDF980069DAA0 /* UILabel+MSRTL.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD19D6D2E9CDF980069DAA0 /* UILabel+MSRTL.m */; }; - 4CD19E922E9CDF980069DAA0 /* YYLabel+MSRTL.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD19D752E9CDF980069DAA0 /* YYLabel+MSRTL.m */; }; 4CD19E932E9CDF980069DAA0 /* NetImageConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD19DAC2E9CDF980069DAA0 /* NetImageConfig.m */; }; - 4CD19E942E9CDF980069DAA0 /* UIButton+EnlargeTouchArea.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD19DA62E9CDF980069DAA0 /* UIButton+EnlargeTouchArea.m */; }; - 4CD19E952E9CDF980069DAA0 /* MSBaseRTLFlowLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD19D632E9CDF980069DAA0 /* MSBaseRTLFlowLayout.m */; }; - 4CD19E982E9CDF980069DAA0 /* AdvertiseModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD19C952E9CDF980069DAA0 /* AdvertiseModel.m */; }; 4CD19E9B2E9CDF980069DAA0 /* XCCurrentVCStackManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD19DC62E9CDF980069DAA0 /* XCCurrentVCStackManager.m */; }; 4CD19E9C2E9CDF980069DAA0 /* UIImage+ImageEffects.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD19DB92E9CDF980069DAA0 /* UIImage+ImageEffects.m */; }; 4CD19E9D2E9CDF980069DAA0 /* UIImage+Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD19DA92E9CDF980069DAA0 /* UIImage+Utils.m */; }; - 4CD19E9E2E9CDF980069DAA0 /* UIImage+MSRTL.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD19D6B2E9CDF980069DAA0 /* UIImage+MSRTL.m */; }; - 4CD19EA02E9CDF980069DAA0 /* UITextField+MSRTL.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD19D712E9CDF980069DAA0 /* UITextField+MSRTL.m */; }; 4CD19EA42E9CDF980069DAA0 /* TTPopupManagerService.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD19D942E9CDF980069DAA0 /* TTPopupManagerService.m */; }; - 4CD19EA52E9CDF980069DAA0 /* MSBaseTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD19D652E9CDF980069DAA0 /* MSBaseTextField.m */; }; - 4CD19EA62E9CDF980069DAA0 /* XPAdImageTool.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD19C972E9CDF980069DAA0 /* XPAdImageTool.m */; }; 4CD19EA82E9CDF980069DAA0 /* UIImageConstant.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CD19DB02E9CDF980069DAA0 /* UIImageConstant.m */; }; 4CD19EAE2E9CDFC30069DAA0 /* EPLoginButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CD19EAC2E9CDFC30069DAA0 /* EPLoginButton.swift */; }; 4CD19EAF2E9CDFC30069DAA0 /* EPLoginInputView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CD19EAD2E9CDFC30069DAA0 /* EPLoginInputView.swift */; }; @@ -144,8 +125,6 @@ 4CD19EB52E9D15000069DAA0 /* EPAboutUsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CD19EB62E9D15000069DAA0 /* EPAboutUsViewController.swift */; }; 4CDF7F3F2E9E580E00113F54 /* EPEmotionColorStorage.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CDF7F3E2E9E580E00113F54 /* EPEmotionColorStorage.m */; }; 4CDF7F422E9E581900113F54 /* EPEmotionColorPicker.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CDF7F412E9E581900113F54 /* EPEmotionColorPicker.m */; }; - 4CF462D42EA10E1B005E96C0 /* XPWebViewNavView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CF462D02EA10E1B005E96C0 /* XPWebViewNavView.m */; }; - 4CF462D52EA10E1B005E96C0 /* XPWebViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CF462CE2EA10E1B005E96C0 /* XPWebViewController.m */; }; 4CF4640B2EA12723005E96C0 /* DJDKMIMOMColor.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CF4640A2EA12723005E96C0 /* DJDKMIMOMColor.m */; }; 4CF464292EA1277C005E96C0 /* TTPopup.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CF464272EA1277C005E96C0 /* TTPopup.m */; }; 4CF4642A2EA1277C005E96C0 /* TTAlertConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CF464112EA1277C005E96C0 /* TTAlertConfig.m */; }; @@ -157,15 +136,9 @@ 4CF464302EA1277C005E96C0 /* TTNewAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CF464242EA1277C005E96C0 /* TTNewAlertView.m */; }; 4CF464312EA1277C005E96C0 /* TTActionSheetConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CF4640D2EA1277C005E96C0 /* TTActionSheetConfig.m */; }; 4CF464322EA1277C005E96C0 /* TTAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CF464222EA1277C005E96C0 /* TTAlertView.m */; }; - 548D54202CC208FD0084A2FF /* AlbumResourcePickerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 548D541F2CC208FD0084A2FF /* AlbumResourcePickerViewController.m */; }; - 54B9C6EA2C9C2DDC003F1CC5 /* GuildInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 54B9C6E92C9C2DDC003F1CC5 /* GuildInfo.m */; }; - 54F4693B2C2A984D00A83655 /* MedalModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 54F4693A2C2A984D00A83655 /* MedalModel.m */; }; - 54FFD37A2C9BCB1900DE61E5 /* RelationUserVO.m in Sources */ = {isa = PBXBuildFile; fileRef = 54FFD3792C9BCB1900DE61E5 /* RelationUserVO.m */; }; 73FFADDC93E195344047A2EC /* Pods_YuMi.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CACF623970097D653132D69A /* Pods_YuMi.framework */; }; 9B0E1C5926E77022005D4442 /* BaseNavigationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B0E1C5826E77022005D4442 /* BaseNavigationController.m */; }; - 9B2A12DE2783FEDD00CED41B /* UserVipInfoVo.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B2A12DD2783FEDD00CED41B /* UserVipInfoVo.m */; }; 9B33E3CB27D85379003B0E62 /* UploadFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B33E3C927D85379003B0E62 /* UploadFile.m */; }; - 9BA812D228BF145700783EA7 /* ClientRedPacketModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BA812D128BF145700783EA7 /* ClientRedPacketModel.m */; }; 9BA8A47527C60D9F000365A3 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9BA8A47427C60D9F000365A3 /* AudioToolbox.framework */; }; 9BA8A47727C60DF7000365A3 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9BA8A47627C60DF7000365A3 /* AVFoundation.framework */; }; E8098CA7282E00920090B9F0 /* Api+Moments.m in Sources */ = {isa = PBXBuildFile; fileRef = E8098CA6282E00920090B9F0 /* Api+Moments.m */; }; @@ -181,15 +154,12 @@ E82109AD26F1C8A000FC3319 /* CountDownHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = E82109AC26F1C8A000FC3319 /* CountDownHelper.m */; }; E83645A82A40AF5400E0DBE4 /* NSBundle+Localizable.m in Sources */ = {isa = PBXBuildFile; fileRef = E83645A72A40AF5400E0DBE4 /* NSBundle+Localizable.m */; }; E855515B280559FE005F293F /* NSDate+DateUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = E855515A280559FE005F293F /* NSDate+DateUtils.m */; }; - E875FA8727D619820086ED04 /* ClientDataModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E875FA8627D619820086ED04 /* ClientDataModel.m */; }; E88749B6282B8FC600C3C7DB /* MomentsInfoModel.m in Sources */ = {isa = PBXBuildFile; fileRef = E88749B5282B8FC600C3C7DB /* MomentsInfoModel.m */; }; E88863D3278ED4C0004BCFAB /* Timestamp.m in Sources */ = {isa = PBXBuildFile; fileRef = E88863D2278ED4C0004BCFAB /* Timestamp.m */; }; - E8DEC99527648FA50078CB70 /* ClientConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = E8DEC99427648FA50078CB70 /* ClientConfig.m */; }; E8E70D7E26F2F19D00F03460 /* Api+Mine.m in Sources */ = {isa = PBXBuildFile; fileRef = E8E70D7D26F2F19D00F03460 /* Api+Mine.m */; }; E8EEB8F226FC2050007C6EBA /* SDPhotoBrowser.m in Sources */ = {isa = PBXBuildFile; fileRef = E8EEB8EC26FC2050007C6EBA /* SDPhotoBrowser.m */; }; E8EEB8F326FC2050007C6EBA /* SDWaitingView.m in Sources */ = {isa = PBXBuildFile; fileRef = E8EEB8ED26FC2050007C6EBA /* SDWaitingView.m */; }; E8EEB8F426FC2050007C6EBA /* SDBrowserImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = E8EEB8EE26FC2050007C6EBA /* SDBrowserImageView.m */; }; - E8EEB8F726FC2673007C6EBA /* UserPhoto.m in Sources */ = {isa = PBXBuildFile; fileRef = E8EEB8F626FC2673007C6EBA /* UserPhoto.m */; }; E8F6135C291E26BD00E12650 /* NSMutableDictionary+Saft.m in Sources */ = {isa = PBXBuildFile; fileRef = E8F6135B291E26BD00E12650 /* NSMutableDictionary+Saft.m */; }; E8F6135F291E274E00E12650 /* NSArray+Safe.m in Sources */ = {isa = PBXBuildFile; fileRef = E8F6135E291E274E00E12650 /* NSArray+Safe.m */; }; /* End PBXBuildFile section */ @@ -265,18 +235,10 @@ 18E7B1B626E8B2D10064BC9B /* Api+Main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "Api+Main.m"; sourceTree = ""; }; 18E7B31626F097E00064BC9B /* UserInfoModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UserInfoModel.h; sourceTree = ""; }; 18E7B31726F097E00064BC9B /* UserInfoModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UserInfoModel.m; sourceTree = ""; }; - 18E7B31926F0982E0064BC9B /* UserExpand.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UserExpand.h; sourceTree = ""; }; - 18E7B31A26F0982E0064BC9B /* UserExpand.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UserExpand.m; sourceTree = ""; }; - 18E7B31C26F0984C0064BC9B /* UserLevelVo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UserLevelVo.h; sourceTree = ""; }; - 18E7B31D26F0984C0064BC9B /* UserLevelVo.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UserLevelVo.m; sourceTree = ""; }; - 18E7B31F26F098650064BC9B /* UserInfoSkillVo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UserInfoSkillVo.h; sourceTree = ""; }; - 18E7B32026F098650064BC9B /* UserInfoSkillVo.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UserInfoSkillVo.m; sourceTree = ""; }; 232EBBFD2BD7A25500E8CEAD /* MSParamsDecode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MSParamsDecode.h; sourceTree = ""; }; 232EBBFE2BD7A25500E8CEAD /* MSParamsDecode.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MSParamsDecode.m; sourceTree = ""; }; 2331C1BB2A60F69E00E1D940 /* UILabel+Utils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UILabel+Utils.h"; sourceTree = ""; }; 2331C1BC2A60F69E00E1D940 /* UILabel+Utils.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UILabel+Utils.m"; sourceTree = ""; }; - 234D821C2AEC57CF0022EFEB /* YYTextAsyncLayer+PITextAsyncLayer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "YYTextAsyncLayer+PITextAsyncLayer.h"; path = "YuMi/Appdelegate/YYTextAsyncLayer+PITextAsyncLayer.h"; sourceTree = SOURCE_ROOT; }; - 234D821D2AEC57CF0022EFEB /* YYTextAsyncLayer+PITextAsyncLayer.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = "YYTextAsyncLayer+PITextAsyncLayer.m"; path = "YuMi/Appdelegate/YYTextAsyncLayer+PITextAsyncLayer.m"; sourceTree = SOURCE_ROOT; }; 235A45212B04BEB6009753F5 /* PIBaseModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PIBaseModel.h; sourceTree = ""; }; 235A45222B04BEB6009753F5 /* PIBaseModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PIBaseModel.m; sourceTree = ""; }; 2368ECCA2BC38F6F00EDF4C9 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; @@ -344,7 +306,6 @@ 23CEFC472AFB8FC100576D89 /* BSkObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BSkObject.m; sourceTree = ""; }; 23CEFC482AFB8FC100576D89 /* BSDrawLine.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BSDrawLine.m; sourceTree = ""; }; 23CEFC492AFB8FC100576D89 /* BSkObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BSkObject.h; sourceTree = ""; }; - 23D8DEF12AC5633300644637 /* PIIAPRegulate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PIIAPRegulate.swift; sourceTree = ""; }; 23E56B3B2B03564B00C8DAC9 /* CoreTelephony.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreTelephony.framework; path = System/Library/Frameworks/CoreTelephony.framework; sourceTree = SDKROOT; }; 4C0642722E97BD6D00BAF413 /* EPMineHeaderView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EPMineHeaderView.h; sourceTree = ""; }; 4C0642732E97BD6D00BAF413 /* EPMineHeaderView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = EPMineHeaderView.m; sourceTree = ""; }; @@ -387,32 +348,6 @@ 4CD19C8C2E9CBBC80069DAA0 /* EPLoginService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EPLoginService.swift; sourceTree = ""; }; 4CD19C902E9CBBD30069DAA0 /* EPLoginBridge.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EPLoginBridge.swift; sourceTree = ""; }; 4CD19C922E9CCF2C0069DAA0 /* EPLoginConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EPLoginConfig.swift; sourceTree = ""; }; - 4CD19C942E9CDF980069DAA0 /* AdvertiseModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AdvertiseModel.h; sourceTree = ""; }; - 4CD19C952E9CDF980069DAA0 /* AdvertiseModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AdvertiseModel.m; sourceTree = ""; }; - 4CD19C962E9CDF980069DAA0 /* XPAdImageTool.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPAdImageTool.h; sourceTree = ""; }; - 4CD19C972E9CDF980069DAA0 /* XPAdImageTool.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPAdImageTool.m; sourceTree = ""; }; - 4CD19C982E9CDF980069DAA0 /* XPAdvertiseView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPAdvertiseView.h; sourceTree = ""; }; - 4CD19C992E9CDF980069DAA0 /* XPAdvertiseView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPAdvertiseView.m; sourceTree = ""; }; - 4CD19D622E9CDF980069DAA0 /* MSBaseRTLFlowLayout.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MSBaseRTLFlowLayout.h; sourceTree = ""; }; - 4CD19D632E9CDF980069DAA0 /* MSBaseRTLFlowLayout.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MSBaseRTLFlowLayout.m; sourceTree = ""; }; - 4CD19D642E9CDF980069DAA0 /* MSBaseTextField.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MSBaseTextField.h; sourceTree = ""; }; - 4CD19D652E9CDF980069DAA0 /* MSBaseTextField.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MSBaseTextField.m; sourceTree = ""; }; - 4CD19D662E9CDF980069DAA0 /* NSMutableAttributedString+MSRTL.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSMutableAttributedString+MSRTL.h"; sourceTree = ""; }; - 4CD19D672E9CDF980069DAA0 /* NSMutableAttributedString+MSRTL.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSMutableAttributedString+MSRTL.m"; sourceTree = ""; }; - 4CD19D682E9CDF980069DAA0 /* UIButton+MSRTL.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIButton+MSRTL.h"; sourceTree = ""; }; - 4CD19D692E9CDF980069DAA0 /* UIButton+MSRTL.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIButton+MSRTL.m"; sourceTree = ""; }; - 4CD19D6A2E9CDF980069DAA0 /* UIImage+MSRTL.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIImage+MSRTL.h"; sourceTree = ""; }; - 4CD19D6B2E9CDF980069DAA0 /* UIImage+MSRTL.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIImage+MSRTL.m"; sourceTree = ""; }; - 4CD19D6C2E9CDF980069DAA0 /* UILabel+MSRTL.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UILabel+MSRTL.h"; sourceTree = ""; }; - 4CD19D6D2E9CDF980069DAA0 /* UILabel+MSRTL.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UILabel+MSRTL.m"; sourceTree = ""; }; - 4CD19D6E2E9CDF980069DAA0 /* UISwipeGestureRecognizer+MSRTL.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UISwipeGestureRecognizer+MSRTL.h"; sourceTree = ""; }; - 4CD19D6F2E9CDF980069DAA0 /* UISwipeGestureRecognizer+MSRTL.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UISwipeGestureRecognizer+MSRTL.m"; sourceTree = ""; }; - 4CD19D702E9CDF980069DAA0 /* UITextField+MSRTL.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UITextField+MSRTL.h"; sourceTree = ""; }; - 4CD19D712E9CDF980069DAA0 /* UITextField+MSRTL.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UITextField+MSRTL.m"; sourceTree = ""; }; - 4CD19D722E9CDF980069DAA0 /* UITextView+MSRTL.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UITextView+MSRTL.h"; sourceTree = ""; }; - 4CD19D732E9CDF980069DAA0 /* UITextView+MSRTL.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UITextView+MSRTL.m"; sourceTree = ""; }; - 4CD19D742E9CDF980069DAA0 /* YYLabel+MSRTL.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "YYLabel+MSRTL.h"; sourceTree = ""; }; - 4CD19D752E9CDF980069DAA0 /* YYLabel+MSRTL.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "YYLabel+MSRTL.m"; sourceTree = ""; }; 4CD19D8A2E9CDF980069DAA0 /* TTAlertButtonConfig.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TTAlertButtonConfig.h; sourceTree = ""; }; 4CD19D8B2E9CDF980069DAA0 /* TTAlertButtonConfig.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TTAlertButtonConfig.m; sourceTree = ""; }; 4CD19D8E2E9CDF980069DAA0 /* TTAlertMessageAttributedConfig.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TTAlertMessageAttributedConfig.h; sourceTree = ""; }; @@ -426,8 +361,6 @@ 4CD19D992E9CDF980069DAA0 /* TTPopupServiceProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TTPopupServiceProtocol.h; sourceTree = ""; }; 4CD19DA22E9CDF980069DAA0 /* TTPopup.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TTPopup.h; sourceTree = ""; }; 4CD19DA32E9CDF980069DAA0 /* TTPopup.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TTPopup.m; sourceTree = ""; }; - 4CD19DA52E9CDF980069DAA0 /* UIButton+EnlargeTouchArea.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIButton+EnlargeTouchArea.h"; sourceTree = ""; }; - 4CD19DA62E9CDF980069DAA0 /* UIButton+EnlargeTouchArea.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIButton+EnlargeTouchArea.m"; sourceTree = ""; }; 4CD19DA82E9CDF980069DAA0 /* UIImage+Utils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIImage+Utils.h"; sourceTree = ""; }; 4CD19DA92E9CDF980069DAA0 /* UIImage+Utils.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIImage+Utils.m"; sourceTree = ""; }; 4CD19DAB2E9CDF980069DAA0 /* NetImageConfig.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NetImageConfig.h; sourceTree = ""; }; @@ -456,10 +389,6 @@ 4CDF7F3E2E9E580E00113F54 /* EPEmotionColorStorage.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = EPEmotionColorStorage.m; sourceTree = ""; }; 4CDF7F402E9E581900113F54 /* EPEmotionColorPicker.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EPEmotionColorPicker.h; sourceTree = ""; }; 4CDF7F412E9E581900113F54 /* EPEmotionColorPicker.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = EPEmotionColorPicker.m; sourceTree = ""; }; - 4CF462CD2EA10E1B005E96C0 /* XPWebViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPWebViewController.h; sourceTree = ""; }; - 4CF462CE2EA10E1B005E96C0 /* XPWebViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPWebViewController.m; sourceTree = ""; }; - 4CF462CF2EA10E1B005E96C0 /* XPWebViewNavView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPWebViewNavView.h; sourceTree = ""; }; - 4CF462D02EA10E1B005E96C0 /* XPWebViewNavView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPWebViewNavView.m; sourceTree = ""; }; 4CF464092EA12723005E96C0 /* DJDKMIMOMColor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DJDKMIMOMColor.h; sourceTree = ""; }; 4CF4640A2EA12723005E96C0 /* DJDKMIMOMColor.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DJDKMIMOMColor.m; sourceTree = ""; }; 4CF4640C2EA1277C005E96C0 /* TTActionSheetConfig.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TTActionSheetConfig.h; sourceTree = ""; }; @@ -485,23 +414,11 @@ 4CF464242EA1277C005E96C0 /* TTNewAlertView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TTNewAlertView.m; sourceTree = ""; }; 4CF464262EA1277C005E96C0 /* TTPopup.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TTPopup.h; sourceTree = ""; }; 4CF464272EA1277C005E96C0 /* TTPopup.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TTPopup.m; sourceTree = ""; }; - 548D541E2CC208FD0084A2FF /* AlbumResourcePickerViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AlbumResourcePickerViewController.h; sourceTree = ""; }; - 548D541F2CC208FD0084A2FF /* AlbumResourcePickerViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AlbumResourcePickerViewController.m; sourceTree = ""; }; - 54B9C6E82C9C2DDC003F1CC5 /* GuildInfo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GuildInfo.h; sourceTree = ""; }; - 54B9C6E92C9C2DDC003F1CC5 /* GuildInfo.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = GuildInfo.m; sourceTree = ""; }; - 54F469392C2A984D00A83655 /* MedalModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MedalModel.h; sourceTree = ""; }; - 54F4693A2C2A984D00A83655 /* MedalModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MedalModel.m; sourceTree = ""; }; - 54FFD3782C9BCB1900DE61E5 /* RelationUserVO.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RelationUserVO.h; sourceTree = ""; }; - 54FFD3792C9BCB1900DE61E5 /* RelationUserVO.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RelationUserVO.m; sourceTree = ""; }; 7DB00EC07F1D0ADFF900B38D /* Pods-YuMi.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-YuMi.debug.xcconfig"; path = "Target Support Files/Pods-YuMi/Pods-YuMi.debug.xcconfig"; sourceTree = ""; }; 9B0E1C5726E77022005D4442 /* BaseNavigationController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BaseNavigationController.h; sourceTree = ""; }; 9B0E1C5826E77022005D4442 /* BaseNavigationController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BaseNavigationController.m; sourceTree = ""; }; - 9B2A12DC2783FEDD00CED41B /* UserVipInfoVo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UserVipInfoVo.h; sourceTree = ""; }; - 9B2A12DD2783FEDD00CED41B /* UserVipInfoVo.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UserVipInfoVo.m; sourceTree = ""; }; 9B33E3C927D85379003B0E62 /* UploadFile.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UploadFile.m; sourceTree = ""; }; 9B33E3CA27D85379003B0E62 /* UploadFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UploadFile.h; sourceTree = ""; }; - 9BA812D028BF145700783EA7 /* ClientRedPacketModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ClientRedPacketModel.h; sourceTree = ""; }; - 9BA812D128BF145700783EA7 /* ClientRedPacketModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ClientRedPacketModel.m; sourceTree = ""; }; 9BA8A47427C60D9F000365A3 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; 9BA8A47627C60DF7000365A3 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; }; B66633E061B1B34177CD011C /* Pods-YuMi.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-YuMi.release.xcconfig"; path = "Target Support Files/Pods-YuMi/Pods-YuMi.release.xcconfig"; sourceTree = ""; }; @@ -532,15 +449,11 @@ E855515A280559FE005F293F /* NSDate+DateUtils.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSDate+DateUtils.m"; sourceTree = ""; }; E8729EB92A3B10C10076D80A /* YuMiRelease.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = YuMiRelease.entitlements; sourceTree = ""; }; E8729EBA2A3B10C10076D80A /* YuMi.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = YuMi.entitlements; sourceTree = ""; }; - E875FA8527D619820086ED04 /* ClientDataModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ClientDataModel.h; sourceTree = ""; }; - E875FA8627D619820086ED04 /* ClientDataModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ClientDataModel.m; sourceTree = ""; }; E88749B4282B8FC600C3C7DB /* MomentsInfoModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MomentsInfoModel.h; sourceTree = ""; }; E88749B5282B8FC600C3C7DB /* MomentsInfoModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MomentsInfoModel.m; sourceTree = ""; }; E88863D1278ED4C0004BCFAB /* Timestamp.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Timestamp.h; sourceTree = ""; }; E88863D2278ED4C0004BCFAB /* Timestamp.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Timestamp.m; sourceTree = ""; }; E8A72BBA2A3AFB2F00B2EC07 /* PrefixHeader.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PrefixHeader.pch; sourceTree = ""; }; - E8DEC99327648FA50078CB70 /* ClientConfig.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ClientConfig.h; sourceTree = ""; }; - E8DEC99427648FA50078CB70 /* ClientConfig.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ClientConfig.m; sourceTree = ""; }; E8E70D7C26F2F19D00F03460 /* Api+Mine.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Api+Mine.h"; sourceTree = ""; }; E8E70D7D26F2F19D00F03460 /* Api+Mine.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "Api+Mine.m"; sourceTree = ""; }; E8EEB8EB26FC2050007C6EBA /* SDPhotoBrowserConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDPhotoBrowserConfig.h; sourceTree = ""; }; @@ -550,8 +463,6 @@ E8EEB8EF26FC2050007C6EBA /* SDWaitingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDWaitingView.h; sourceTree = ""; }; E8EEB8F026FC2050007C6EBA /* SDPhotoBrowser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDPhotoBrowser.h; sourceTree = ""; }; E8EEB8F126FC2050007C6EBA /* SDBrowserImageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDBrowserImageView.h; sourceTree = ""; }; - E8EEB8F526FC2673007C6EBA /* UserPhoto.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UserPhoto.h; sourceTree = ""; }; - E8EEB8F626FC2673007C6EBA /* UserPhoto.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UserPhoto.m; sourceTree = ""; }; E8F6135A291E26BD00E12650 /* NSMutableDictionary+Saft.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSMutableDictionary+Saft.h"; sourceTree = ""; }; E8F6135B291E26BD00E12650 /* NSMutableDictionary+Saft.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSMutableDictionary+Saft.m"; sourceTree = ""; }; E8F6135D291E274E00E12650 /* NSArray+Safe.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSArray+Safe.h"; sourceTree = ""; }; @@ -596,12 +507,6 @@ isa = PBXGroup; children = ( 4C0642842E97BD9500BAF413 /* APIConfig.swift */, - E8DEC99327648FA50078CB70 /* ClientConfig.h */, - E8DEC99427648FA50078CB70 /* ClientConfig.m */, - E875FA8527D619820086ED04 /* ClientDataModel.h */, - E875FA8627D619820086ED04 /* ClientDataModel.m */, - 9BA812D028BF145700783EA7 /* ClientRedPacketModel.h */, - 9BA812D128BF145700783EA7 /* ClientRedPacketModel.m */, ); path = Config; sourceTree = ""; @@ -672,7 +577,6 @@ 14D8768029A751A100E1DD7F /* Config */, 189DD56B26DF5B0900AB55B1 /* Structure */, 189DD56126DE45F800AB55B1 /* Modules */, - 4CF462D12EA10E1B005E96C0 /* YMWeb */, E81C27AF26EF39B00031E639 /* AppDelegate */, 189DD53826DE255600AB55B1 /* Assets.xcassets */, 2368ECD52BC38FDA00EDF4C9 /* Launch Screen.storyboard */, @@ -740,22 +644,6 @@ 187EEEEE26E89FE8002833B2 /* AccountInfoStorage.m */, 18E7B31626F097E00064BC9B /* UserInfoModel.h */, 18E7B31726F097E00064BC9B /* UserInfoModel.m */, - 18E7B31926F0982E0064BC9B /* UserExpand.h */, - 18E7B31A26F0982E0064BC9B /* UserExpand.m */, - 18E7B31C26F0984C0064BC9B /* UserLevelVo.h */, - 18E7B31D26F0984C0064BC9B /* UserLevelVo.m */, - 18E7B31F26F098650064BC9B /* UserInfoSkillVo.h */, - 18E7B32026F098650064BC9B /* UserInfoSkillVo.m */, - E8EEB8F526FC2673007C6EBA /* UserPhoto.h */, - E8EEB8F626FC2673007C6EBA /* UserPhoto.m */, - 9B2A12DC2783FEDD00CED41B /* UserVipInfoVo.h */, - 9B2A12DD2783FEDD00CED41B /* UserVipInfoVo.m */, - 54F469392C2A984D00A83655 /* MedalModel.h */, - 54F4693A2C2A984D00A83655 /* MedalModel.m */, - 54FFD3782C9BCB1900DE61E5 /* RelationUserVO.h */, - 54FFD3792C9BCB1900DE61E5 /* RelationUserVO.m */, - 54B9C6E82C9C2DDC003F1CC5 /* GuildInfo.h */, - 54B9C6E92C9C2DDC003F1CC5 /* GuildInfo.m */, ); path = Model; sourceTree = ""; @@ -793,7 +681,6 @@ isa = PBXGroup; children = ( 23CEFC082AFB8FC100576D89 /* sdkContent */, - 23FF255C2ABA8EEE0064E904 /* PIIAPTool */, E83645A42A40AEF600E0DBE4 /* Bundle */, E8F61356291E269700E12650 /* Safe */, 9B33E3C827D85379003B0E62 /* File */, @@ -856,10 +743,7 @@ 18E7B1B426E8B2960064BC9B /* YMTabbar */ = { isa = PBXGroup; children = ( - E8B3E8062848B84F009746AB /* Model */, E8B3E8052848B849009746AB /* Api */, - E8B3E8042848B842009746AB /* View */, - E8B3E8032848B838009746AB /* Presenter */, ); path = YMTabbar; sourceTree = ""; @@ -1067,14 +951,6 @@ path = K; sourceTree = ""; }; - 23FF255C2ABA8EEE0064E904 /* PIIAPTool */ = { - isa = PBXGroup; - children = ( - 23D8DEF12AC5633300644637 /* PIIAPRegulate.swift */, - ); - path = PIIAPTool; - sourceTree = ""; - }; 4C0642712E97BD6D00BAF413 /* Controllers */ = { isa = PBXGroup; children = ( @@ -1253,46 +1129,6 @@ path = Services; sourceTree = ""; }; - 4CD19C9A2E9CDF980069DAA0 /* Adbvertise */ = { - isa = PBXGroup; - children = ( - 4CD19C942E9CDF980069DAA0 /* AdvertiseModel.h */, - 4CD19C952E9CDF980069DAA0 /* AdvertiseModel.m */, - 4CD19C962E9CDF980069DAA0 /* XPAdImageTool.h */, - 4CD19C972E9CDF980069DAA0 /* XPAdImageTool.m */, - 4CD19C982E9CDF980069DAA0 /* XPAdvertiseView.h */, - 4CD19C992E9CDF980069DAA0 /* XPAdvertiseView.m */, - ); - path = Adbvertise; - sourceTree = ""; - }; - 4CD19D762E9CDF980069DAA0 /* MSRTL */ = { - isa = PBXGroup; - children = ( - 4CD19D622E9CDF980069DAA0 /* MSBaseRTLFlowLayout.h */, - 4CD19D632E9CDF980069DAA0 /* MSBaseRTLFlowLayout.m */, - 4CD19D642E9CDF980069DAA0 /* MSBaseTextField.h */, - 4CD19D652E9CDF980069DAA0 /* MSBaseTextField.m */, - 4CD19D662E9CDF980069DAA0 /* NSMutableAttributedString+MSRTL.h */, - 4CD19D672E9CDF980069DAA0 /* NSMutableAttributedString+MSRTL.m */, - 4CD19D682E9CDF980069DAA0 /* UIButton+MSRTL.h */, - 4CD19D692E9CDF980069DAA0 /* UIButton+MSRTL.m */, - 4CD19D6A2E9CDF980069DAA0 /* UIImage+MSRTL.h */, - 4CD19D6B2E9CDF980069DAA0 /* UIImage+MSRTL.m */, - 4CD19D6C2E9CDF980069DAA0 /* UILabel+MSRTL.h */, - 4CD19D6D2E9CDF980069DAA0 /* UILabel+MSRTL.m */, - 4CD19D6E2E9CDF980069DAA0 /* UISwipeGestureRecognizer+MSRTL.h */, - 4CD19D6F2E9CDF980069DAA0 /* UISwipeGestureRecognizer+MSRTL.m */, - 4CD19D702E9CDF980069DAA0 /* UITextField+MSRTL.h */, - 4CD19D712E9CDF980069DAA0 /* UITextField+MSRTL.m */, - 4CD19D722E9CDF980069DAA0 /* UITextView+MSRTL.h */, - 4CD19D732E9CDF980069DAA0 /* UITextView+MSRTL.m */, - 4CD19D742E9CDF980069DAA0 /* YYLabel+MSRTL.h */, - 4CD19D752E9CDF980069DAA0 /* YYLabel+MSRTL.m */, - ); - path = MSRTL; - sourceTree = ""; - }; 4CD19D902E9CDF980069DAA0 /* Config */ = { isa = PBXGroup; children = ( @@ -1353,15 +1189,6 @@ path = TTPopup; sourceTree = ""; }; - 4CD19DA72E9CDF980069DAA0 /* UIButton */ = { - isa = PBXGroup; - children = ( - 4CD19DA52E9CDF980069DAA0 /* UIButton+EnlargeTouchArea.h */, - 4CD19DA62E9CDF980069DAA0 /* UIButton+EnlargeTouchArea.m */, - ); - path = UIButton; - sourceTree = ""; - }; 4CD19DAA2E9CDF980069DAA0 /* UIImage */ = { isa = PBXGroup; children = ( @@ -1417,10 +1244,7 @@ 4CF464282EA1277C005E96C0 /* TTPopup */, 4CF464092EA12723005E96C0 /* DJDKMIMOMColor.h */, 4CF4640A2EA12723005E96C0 /* DJDKMIMOMColor.m */, - 4CD19C9A2E9CDF980069DAA0 /* Adbvertise */, - 4CD19D762E9CDF980069DAA0 /* MSRTL */, 4CD19DA42E9CDF980069DAA0 /* TTPopup */, - 4CD19DA72E9CDF980069DAA0 /* UIButton */, 4CD19DAA2E9CDF980069DAA0 /* UIImage */, 4CD19DB12E9CDF980069DAA0 /* UIImageView */, 4CD19DB42E9CDF980069DAA0 /* UIViewCorner */, @@ -1434,17 +1258,6 @@ path = CustomUI; sourceTree = ""; }; - 4CF462D12EA10E1B005E96C0 /* YMWeb */ = { - isa = PBXGroup; - children = ( - 4CF462CD2EA10E1B005E96C0 /* XPWebViewController.h */, - 4CF462CE2EA10E1B005E96C0 /* XPWebViewController.m */, - 4CF462CF2EA10E1B005E96C0 /* XPWebViewNavView.h */, - 4CF462D02EA10E1B005E96C0 /* XPWebViewNavView.m */, - ); - path = YMWeb; - sourceTree = ""; - }; 4CF464142EA1277C005E96C0 /* Config */ = { isa = PBXGroup; children = ( @@ -1522,8 +1335,6 @@ 9B33E3C927D85379003B0E62 /* UploadFile.m */, 23959FE52BB15C930085A282 /* UploadFileModel.h */, 23959FE62BB15C930085A282 /* UploadFileModel.m */, - 548D541E2CC208FD0084A2FF /* AlbumResourcePickerViewController.h */, - 548D541F2CC208FD0084A2FF /* AlbumResourcePickerViewController.m */, ); path = File; sourceTree = ""; @@ -1611,8 +1422,6 @@ children = ( 189DD52C26DE255300AB55B1 /* AppDelegate.h */, 189DD52D26DE255300AB55B1 /* AppDelegate.m */, - 234D821C2AEC57CF0022EFEB /* YYTextAsyncLayer+PITextAsyncLayer.h */, - 234D821D2AEC57CF0022EFEB /* YYTextAsyncLayer+PITextAsyncLayer.m */, ); path = AppDelegate; sourceTree = ""; @@ -1675,20 +1484,6 @@ path = Timestamp; sourceTree = ""; }; - E8B3E8032848B838009746AB /* Presenter */ = { - isa = PBXGroup; - children = ( - ); - path = Presenter; - sourceTree = ""; - }; - E8B3E8042848B842009746AB /* View */ = { - isa = PBXGroup; - children = ( - ); - path = View; - sourceTree = ""; - }; E8B3E8052848B849009746AB /* Api */ = { isa = PBXGroup; children = ( @@ -1698,13 +1493,6 @@ path = Api; sourceTree = ""; }; - E8B3E8062848B84F009746AB /* Model */ = { - isa = PBXGroup; - children = ( - ); - path = Model; - sourceTree = ""; - }; E8E70D6E26F2EB1200F03460 /* YMMine */ = { isa = PBXGroup; children = ( @@ -1901,39 +1689,21 @@ buildActionMask = 2147483647; files = ( 180116FC279E8CCE00F2CBC0 /* NVDate.m in Sources */, - 54B9C6EA2C9C2DDC003F1CC5 /* GuildInfo.m in Sources */, - 234D821E2AEC57CF0022EFEB /* YYTextAsyncLayer+PITextAsyncLayer.m in Sources */, 4C4707A52D53430300C8CD24 /* NSData+GZIP.m in Sources */, 23CEFC542AFB8FC100576D89 /* BSNotification.m in Sources */, - 4CD19E722E9CDF980069DAA0 /* UIButton+MSRTL.m in Sources */, - 4CD19E772E9CDF980069DAA0 /* UITextView+MSRTL.m in Sources */, - 4CD19E782E9CDF980069DAA0 /* NSMutableAttributedString+MSRTL.m in Sources */, - 4CF462D42EA10E1B005E96C0 /* XPWebViewNavView.m in Sources */, - 4CF462D52EA10E1B005E96C0 /* XPWebViewController.m in Sources */, 4CD19E7C2E9CDF980069DAA0 /* TTPopupService.m in Sources */, 4CD19E7E2E9CDF980069DAA0 /* XNDJTDDLoadingTool.m in Sources */, 4CD19E802E9CDF980069DAA0 /* TTPopup.m in Sources */, 4CD19E812E9CDF980069DAA0 /* UIView+GradientLayer.m in Sources */, 4CD19E822E9CDF980069DAA0 /* TTAlertMessageAttributedConfig.m in Sources */, - 4CD19E842E9CDF980069DAA0 /* XPAdvertiseView.m in Sources */, - 4CD19E852E9CDF980069DAA0 /* UISwipeGestureRecognizer+MSRTL.m in Sources */, 4CD19E862E9CDF980069DAA0 /* TTAlertButtonConfig.m in Sources */, 4CD19E882E9CDF980069DAA0 /* UIView+Corner.m in Sources */, 4CD19E8D2E9CDF980069DAA0 /* NetImageView.m in Sources */, - 4CD19E912E9CDF980069DAA0 /* UILabel+MSRTL.m in Sources */, - 4CD19E922E9CDF980069DAA0 /* YYLabel+MSRTL.m in Sources */, 4CD19E932E9CDF980069DAA0 /* NetImageConfig.m in Sources */, - 4CD19E942E9CDF980069DAA0 /* UIButton+EnlargeTouchArea.m in Sources */, - 4CD19E952E9CDF980069DAA0 /* MSBaseRTLFlowLayout.m in Sources */, - 4CD19E982E9CDF980069DAA0 /* AdvertiseModel.m in Sources */, 4CD19E9B2E9CDF980069DAA0 /* XCCurrentVCStackManager.m in Sources */, 4CD19E9C2E9CDF980069DAA0 /* UIImage+ImageEffects.m in Sources */, 4CD19E9D2E9CDF980069DAA0 /* UIImage+Utils.m in Sources */, - 4CD19E9E2E9CDF980069DAA0 /* UIImage+MSRTL.m in Sources */, - 4CD19EA02E9CDF980069DAA0 /* UITextField+MSRTL.m in Sources */, 4CD19EA42E9CDF980069DAA0 /* TTPopupManagerService.m in Sources */, - 4CD19EA52E9CDF980069DAA0 /* MSBaseTextField.m in Sources */, - 4CD19EA62E9CDF980069DAA0 /* XPAdImageTool.m in Sources */, 4CD19EA82E9CDF980069DAA0 /* UIImageConstant.m in Sources */, 4C06428B2E98DC5F00BAF413 /* EPTabBarController.swift in Sources */, 4CF464292EA1277C005E96C0 /* TTPopup.m in Sources */, @@ -1949,24 +1719,20 @@ 4C1E98C32E9A45160031AE79 /* EPImageUploader.swift in Sources */, 4C1E98C42E9A45160031AE79 /* EPProgressHUD.swift in Sources */, E8E70D7E26F2F19D00F03460 /* Api+Mine.m in Sources */, - E8EEB8F726FC2673007C6EBA /* UserPhoto.m in Sources */, E81C27A226EF23490031E639 /* YUMINNNN.h in Sources */, 4CA7410E2E72B8FC00DB6853 /* YMLanguageConfig.m in Sources */, E855515B280559FE005F293F /* NSDate+DateUtils.m in Sources */, 189DD76226E60DDC00AB55B1 /* Api+Login.m in Sources */, - 54F4693B2C2A984D00A83655 /* MedalModel.m in Sources */, 23CEFC4E2AFB8FC100576D89 /* BSNSDictionary.m in Sources */, E8EEB8F326FC2050007C6EBA /* SDWaitingView.m in Sources */, 23CEFC512AFB8FC100576D89 /* SystemUtil.m in Sources */, 23CEFC5E2AFB8FC100576D89 /* BSRealTimeView.m in Sources */, - 9BA812D228BF145700783EA7 /* ClientRedPacketModel.m in Sources */, 4C7B91D82EA096DE00A5E236 /* EPEmotionInfoView.m in Sources */, 189DD73E26E21C3F00AB55B1 /* YYUtility.m in Sources */, 23CEFC652AFB8FC100576D89 /* BSDrawLine.m in Sources */, 180116F9279E8C4C00F2CBC0 /* PLTimeUtil.m in Sources */, 23CEFC502AFB8FC100576D89 /* UILabel+YBAttributeTextTapAction.m in Sources */, 23CEFC5C2AFB8FC100576D89 /* BSNetListenModel.m in Sources */, - 548D54202CC208FD0084A2FF /* AlbumResourcePickerViewController.m in Sources */, 23CEFC4A2AFB8FC100576D89 /* BSNSStringUtil.m in Sources */, E8EEB8F226FC2050007C6EBA /* SDPhotoBrowser.m in Sources */, 23CEFC4F2AFB8FC100576D89 /* BSSDLayoutUtil.m in Sources */, @@ -1974,9 +1740,7 @@ 189DD55A26DE39D200AB55B1 /* BaseMvpPresenter.m in Sources */, E88863D3278ED4C0004BCFAB /* Timestamp.m in Sources */, 189DD6FF26E20E5900AB55B1 /* HttpRequestHelper.m in Sources */, - 54FFD37A2C9BCB1900DE61E5 /* RelationUserVO.m in Sources */, 18E7B31826F097E00064BC9B /* UserInfoModel.m in Sources */, - 18E7B32126F098650064BC9B /* UserInfoSkillVo.m in Sources */, 4C0642912E98DC8700BAF413 /* EPMomentViewController.m in Sources */, 232EBBFF2BD7A25500E8CEAD /* MSParamsDecode.m in Sources */, 23959FE72BB15C930085A282 /* UploadFileModel.m in Sources */, @@ -1992,11 +1756,7 @@ 18E7B1B726E8B2D10064BC9B /* Api+Main.m in Sources */, 23CEFC5B2AFB8FC100576D89 /* BSSelectView.m in Sources */, 23CEFC622AFB8FC100576D89 /* BSLogNetDetailViewController.m in Sources */, - 18E7B31E26F0984C0064BC9B /* UserLevelVo.m in Sources */, 4C7B909B2E9F822900A5E236 /* EPEmotionColorWheelView.m in Sources */, - 23D8DEF22AC5633300644637 /* PIIAPRegulate.swift in Sources */, - 18E7B31B26F0982E0064BC9B /* UserExpand.m in Sources */, - 9B2A12DE2783FEDD00CED41B /* UserVipInfoVo.m in Sources */, 4C7B8F632E9F6E1300A5E236 /* EPSignatureColorGuideView.m in Sources */, 9B33E3CB27D85379003B0E62 /* UploadFile.m in Sources */, 4CD19EAE2E9CDFC30069DAA0 /* EPLoginButton.swift in Sources */, @@ -2010,7 +1770,6 @@ E8F6135F291E274E00E12650 /* NSArray+Safe.m in Sources */, 4C06427F2E97BD6D00BAF413 /* EPMineHeaderView.m in Sources */, 4C0642802E97BD6D00BAF413 /* EPMomentCell.m in Sources */, - E8DEC99527648FA50078CB70 /* ClientConfig.m in Sources */, 4CDF7F3F2E9E580E00113F54 /* EPEmotionColorStorage.m in Sources */, 23CEFC602AFB8FC100576D89 /* RealViewCellModel.m in Sources */, 4CD19C872E9CB31C0069DAA0 /* EPLoginViewController.swift in Sources */, @@ -2043,7 +1802,6 @@ 4C1E98C92E9A4DFD0031AE79 /* EPQCloudConfig.swift in Sources */, 4C1E98CA2E9A4DFD0031AE79 /* EPSDKManager.swift in Sources */, E88749B6282B8FC600C3C7DB /* MomentsInfoModel.m in Sources */, - E875FA8727D619820086ED04 /* ClientDataModel.m in Sources */, 4C1E98C62E9A45BC0031AE79 /* EPMomentAPISwiftHelper.swift in Sources */, 23CEFC4D2AFB8FC100576D89 /* BSXWDateUtil.m in Sources */, 189DD75926E6003C00AB55B1 /* Api.m in Sources */, @@ -2097,6 +1855,7 @@ 189DD54026DE255600AB55B1 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; @@ -2156,6 +1915,7 @@ 189DD54126DE255600AB55B1 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; @@ -2304,10 +2064,6 @@ "-framework", "\"ImageIO\"", "-framework", - "\"JXCategoryView\"", - "-framework", - "\"JXPagingView\"", - "-framework", "\"JavaScriptCore\"", "-framework", "\"LocalAuthentication\"", @@ -2318,8 +2074,6 @@ "-framework", "\"MJRefresh\"", "-framework", - "\"MarqueeLabel\"", - "-framework", "\"Masonry\"", "-framework", "\"Metal\"", @@ -2376,8 +2130,6 @@ "-framework", "\"YYImage\"", "-framework", - "\"YYText\"", - "-framework", "\"YYWebImage\"", "-framework", "\"YuMi\"", @@ -2490,10 +2242,6 @@ "-framework", "\"ImageIO\"", "-framework", - "\"JXCategoryView\"", - "-framework", - "\"JXPagingView\"", - "-framework", "\"JavaScriptCore\"", "-framework", "\"LocalAuthentication\"", @@ -2504,8 +2252,6 @@ "-framework", "\"MJRefresh\"", "-framework", - "\"MarqueeLabel\"", - "-framework", "\"Masonry\"", "-framework", "\"Metal\"", @@ -2562,8 +2308,6 @@ "-framework", "\"YYImage\"", "-framework", - "\"YYText\"", - "-framework", "\"YYWebImage\"", "-framework", "\"YuMi\"", diff --git a/YuMi/Appdelegate/AppDelegate.h b/YuMi/Appdelegate/AppDelegate.h index efa80bf..d4ddd22 100644 --- a/YuMi/Appdelegate/AppDelegate.h +++ b/YuMi/Appdelegate/AppDelegate.h @@ -6,15 +6,10 @@ // #import -#import + @interface AppDelegate : UIResponder @property (strong, nonatomic) UIWindow *window; -@property(nonatomic,strong,readonly)NSManagedObjectContext *managedObjectContext; -@property(nonatomic,strong,readonly)NSManagedObjectModel *managedObjectModel; -@property(nonatomic,strong,readonly)NSPersistentStoreCoordinator *persistentStoreCoordinator; -- (void)saveContext; -- (NSURL *)applicationDocumentsDirectory; @end diff --git a/YuMi/Appdelegate/AppDelegate.m b/YuMi/Appdelegate/AppDelegate.m index 2c11be2..231713c 100644 --- a/YuMi/Appdelegate/AppDelegate.m +++ b/YuMi/Appdelegate/AppDelegate.m @@ -10,11 +10,7 @@ #import "BaseNavigationController.h" #import -#import "ClientConfig.h" -#import "AccountModel.h" #import "YuMi-swift.h" -#import "EPSignatureColorGuideView.h" -#import "EPEmotionColorStorage.h" UIKIT_EXTERN NSString * const kOpenRoomNotification; @@ -33,13 +29,7 @@ UIKIT_EXTERN NSString * const kOpenRoomNotification; self.window.rootViewController = launchScreenVC; [self.window makeKeyAndVisible]; - @kWeakify(self); - [[ClientConfig shareConfig] clientConfig:^{ - @kStrongify(self); - dispatch_async(dispatch_get_main_queue(), ^{ - [self loadMainPage]; - }); - }]; + [self loadMainPage]; if (@available(iOS 15, *)) { [[UITableView appearance] setSectionHeaderTopPadding:0]; @@ -89,8 +79,6 @@ UIKIT_EXTERN NSString * const kOpenRoomNotification; [self checkAndShowSignatureColorGuide]; }); } - - [[ClientConfig shareConfig] clientInit]; } /// 检查并显示专属颜色引导页 @@ -185,84 +173,4 @@ UIKIT_EXTERN NSString * const kOpenRoomNotification; }); } - -#pragma mark - Core Data stack -@synthesize managedObjectContext = _managedObjectContext; -@synthesize managedObjectModel = _managedObjectModel; -@synthesize persistentStoreCoordinator = _persistentStoreCoordinator; - --(NSURL *)applicationDocumentsDirectory{ - return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]; -} - -- (NSManagedObjectModel *)managedObjectModel { - // The managed object model for the application. It is a fatal error for the application not to be able to find and load its model. - if (_managedObjectModel != nil) { - return _managedObjectModel; - } - NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"_1_______" withExtension:@"momd"]; - _managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL]; - return _managedObjectModel; -} - -- (NSPersistentStoreCoordinator *)persistentStoreCoordinator { - // The persistent store coordinator for the application. This implementation creates and returns a coordinator, having added the store for the application to it. - if (_persistentStoreCoordinator != nil) { - return _persistentStoreCoordinator; - } - - // Create the coordinator and store - - _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]]; - NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"_1_______.sqlite"]; - NSError *error = nil; - NSString *failureReason = @"There was an error creating or loading the application's saved data."; - if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) { - // Report any error we got. - NSMutableDictionary *dict = [NSMutableDictionary dictionary]; - dict[NSLocalizedDescriptionKey] = @"Failed to initialize the application's saved data"; - dict[NSLocalizedFailureReasonErrorKey] = failureReason; - dict[NSUnderlyingErrorKey] = error; - error = [NSError errorWithDomain:@"YOUR_ERROR_DOMAIN" code:9999 userInfo:dict]; - // Replace this with code to handle the error appropriately. - // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. -// NSLog(@"Unresolved error %@, %@", error, [error userInfo]); - abort(); - } - - return _persistentStoreCoordinator; -} - - -- (NSManagedObjectContext *)managedObjectContext { - // Returns the managed object context for the application (which is already bound to the persistent store coordinator for the application.) - if (_managedObjectContext != nil) { - return _managedObjectContext; - } - - NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator]; - if (!coordinator) { - return nil; - } - _managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType]; - [_managedObjectContext setPersistentStoreCoordinator:coordinator]; - return _managedObjectContext; -} - -#pragma mark - Core Data Saving support - -- (void)saveContext { - NSManagedObjectContext *managedObjectContext = self.managedObjectContext; - if (managedObjectContext != nil) { - NSError *error = nil; - if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) { - // Replace this implementation with code to handle the error appropriately. - // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. -// NSLog(@"Unresolved error %@, %@", error, [error userInfo]); - abort(); - } - } -} - - @end diff --git a/YuMi/Appdelegate/YYTextAsyncLayer+PITextAsyncLayer.h b/YuMi/Appdelegate/YYTextAsyncLayer+PITextAsyncLayer.h deleted file mode 100644 index d967494..0000000 --- a/YuMi/Appdelegate/YYTextAsyncLayer+PITextAsyncLayer.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// YYTextAsyncLayer+PITextAsyncLayer.h -// YuMi -// -// Created by duoban on 2023/10/28. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface YYTextAsyncLayer (PITextAsyncLayer) - -@end - -NS_ASSUME_NONNULL_END diff --git a/YuMi/Appdelegate/YYTextAsyncLayer+PITextAsyncLayer.m b/YuMi/Appdelegate/YYTextAsyncLayer+PITextAsyncLayer.m deleted file mode 100644 index bc5a5c7..0000000 --- a/YuMi/Appdelegate/YYTextAsyncLayer+PITextAsyncLayer.m +++ /dev/null @@ -1,26 +0,0 @@ -// -// YYTextAsyncLayer+PITextAsyncLayer.m -// YuMi -// -// Created by duoban on 2023/10/28. -// - -#import "YYTextAsyncLayer+PITextAsyncLayer.h" - -@implementation YYTextAsyncLayer (PITextAsyncLayer) -///iOS17bug,如果不把方法替换会闪退 -+(void)load { - Method displayMethod = class_getInstanceMethod(self, @selector(display)); - Method swizzingMethod = class_getInstanceMethod(self, @selector(swizzing_display)); - method_exchangeImplementations(displayMethod, swizzingMethod); -} --(void)swizzing_display{ - //通过变量名称获取类中的实例成员变量 - if (self.bounds.size.width <= 0 || self.bounds.size.height <= 0) { - self.contents = nil; - return; - } else { - [self swizzing_display]; - } -} -@end diff --git a/YuMi/Config/ClientConfig.h b/YuMi/Config/ClientConfig.h deleted file mode 100644 index 2360d47..0000000 --- a/YuMi/Config/ClientConfig.h +++ /dev/null @@ -1,70 +0,0 @@ -// -// ClientConfig.h -// YUMI -// -// Created by YUMI on 2021/12/11. -// - -#import -#import "ClientDataModel.h" -NS_ASSUME_NONNULL_BEGIN - -@interface ClientConfig : PIBaseModel -+ (instancetype)shareConfig; -///初始化 -- (void)clientInit; - -/// 获取 UI 配置 -- (void)clientConfig:(void(^)(void))finish; - -/// iOS第三方登录是否需要绑定手机号 -@property (nonatomic,assign) BOOL iOSPhoneBind; -/// 是否开启了糖果树 -@property (nonatomic,assign) BOOL openCandyTree; -///配置信息 -@property (nonatomic,strong) ClientDataModel *configInfo; - -@property (nonatomic, strong) AppUISetting *uiSetting; - -///开箱子 大于等级 展示 -@property (nonatomic, assign) NSInteger openCandyTreeLimitLevel; - -@property(nonatomic,assign) BOOL isTF; -///是否刷新了 -@property (nonatomic,assign) BOOL isLoad; -///房间id,用于分享房间跳转到房间 -@property (nonatomic, copy) NSString *__nullable roomId; -///用户id,用于外部h5跳转到聊天页面 -@property (nonatomic, copy) NSString *__nullable chatId; -///用户id,推送跳转到聊天页面 -@property (nonatomic, copy) NSString *__nullable pushChatId; -///邀请码,从外面进来会进入注册页面,并自动填写这个邀请码 -@property(nonatomic,copy) NSString *inviteCode; -///表情--- -@property (nonatomic, copy) NSString *version; -@property (nonatomic, copy) NSString *zipMd5; -@property (nonatomic, strong) NSURL *zipUrl; - -@property(nonatomic, assign) BOOL shouldDisplayCaptcha; - -- (UIColor *)bgColor; -- (NSString *)tabName:(NSInteger)tabIndex; - -- (NSString *)loadDefaultNormalTabImageName:(NSInteger)tabIndex; -- (NSString *)loadDefaultSelectedTabImageName:(NSInteger)tabIndex; -- (NSString *)loadConfigNormalTabImagePath:(NSInteger)tabIndex; -- (NSString *)loadConfigSelectedTabImagePath:(NSInteger)tabIndex; - -@property (nonatomic, copy) NSString *reloadNavigationAreaImageKey; -@property (nonatomic, copy) NSString *reloadViewBackgroundColorKey; - -@property (nonatomic, strong) UIImage *navigationAreaBG; -@property (nonatomic, strong) UIImage *tabbarBGImage; - - -@property (nonatomic, copy) void(^updateTabbarBG)(UIImage *image); - - -@end - -NS_ASSUME_NONNULL_END diff --git a/YuMi/Config/ClientConfig.m b/YuMi/Config/ClientConfig.m deleted file mode 100644 index d4fb8b1..0000000 --- a/YuMi/Config/ClientConfig.m +++ /dev/null @@ -1,123 +0,0 @@ -// -// ClientConfig.m -// YUMI -// -// Created by YUMI on 2021/12/11. -// - -#import "ClientConfig.h" -#import "Api+Main.h" -/// tool -#import "DESEncrypt.h" -#import "YUMIConstant.h" -#import -#import "NSString+Utils.h" -#import "YYUtility.h" -#import "XPWeakTimer.h" -#import "Api+Main.h" - -@interface ClientConfig () -///重试的次数 10次 如果你还是失败的话 那就算了 没办法了 -@property (nonatomic,assign) int retryCount; - -@property (nonatomic, strong) NSMutableArray *normalTabImageSource; -@property (nonatomic, strong) NSMutableArray *selectedTabImageSource; -@property (nonatomic, strong) NetImageView *normalTabImageLoader; -@property (nonatomic, strong) NetImageView *selectedTabImageLoader; -@property (nonatomic, strong) NetImageView *tabbarBGImageLoader; -@property (nonatomic, strong) NetImageView *navigationAreaBGImageLoader; - -@property (nonatomic, assign) BOOL isLoading; - -@end - -@implementation ClientConfig - -+ (instancetype)shareConfig { - static dispatch_once_t onceToken; - static ClientConfig * config; - dispatch_once(&onceToken, ^{ - config = [[ClientConfig alloc] init]; - config.isTF = [ClientConfig isTestFlight]; - config.reloadNavigationAreaImageKey = @"今天光线很好"; - config.reloadViewBackgroundColorKey = @"年轻人买不起:美国买房平均年龄飙升至56岁"; - }); - return config; -} - -+(BOOL)isTestFlight{ - NSURL *receiptURL = [[NSBundle mainBundle] appStoreReceiptURL]; - NSString *receiptURLString = [receiptURL path]; - BOOL isTestFlight = ([receiptURLString containsString:@"sandboxReceipt"] || [receiptURLString containsString:@"_MASReceipt/receipt"]); - return isTestFlight; -} - -- (void)clientInit { - @kWeakify(self); - [Api clientInitConfig:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) { - @kStrongify(self); - if (code == 200) { - self.retryCount = 0; - - ClientDataModel * model = [ClientDataModel modelWithDictionary:data.data]; - - self.iOSPhoneBind = model.iosPhoneBind; - - //糖果树配置 - self.openCandyTree = model.openBoxSwitch; - self.openCandyTreeLimitLevel = model.openBoxSwitchLevelNo; - - //表情包 - NSString *json = model.faceJson.json; - NSString *deJson = [DESEncrypt decryptUseDES:json key:KeyWithType(KeyType_FacePwdEncode)]; - NSDictionary *faceInitData = [deJson toJSONObject]; - - NSString *trtcAppId = @(model.trtcAppId).stringValue; - NSString *curTtcKey = [[NSUserDefaults standardUserDefaults]valueForKey:@"kTrtcAppId"]; - if(curTtcKey == nil){ - if(trtcAppId != nil){ - [[NSUserDefaults standardUserDefaults]setValue:trtcAppId forKey:@"kTrtcAppId"]; - [[NSUserDefaults standardUserDefaults]synchronize]; - } - }else{ - if(![trtcAppId isEqualToString:curTtcKey]){ - if(trtcAppId != nil){ - [[NSUserDefaults standardUserDefaults]setValue:trtcAppId forKey:@"kTrtcAppId"]; - [[NSUserDefaults standardUserDefaults]synchronize]; - } - } - } - - NSString *serverVer = model.appStoreAuditNoticeVersion; - NSString *shortVer = [YYUtility appVersion]; - model.hideNoticeVersion = [NSString versionCompareOldStr:serverVer andNewStr:shortVer]; - - self.configInfo = model; - - [[NSNotificationCenter defaultCenter] postNotificationName:@"reloadAfterLoadConfig" object:nil]; - } else { - if (self.retryCount < 10) { - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - self.retryCount+=1; - [self clientInit]; - }); - } - } - }]; -} - -- (void)clientConfig:(void(^)(void))finish { - @kWeakify(self); - [Api clientConfig:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) { - @kStrongify(self); - if (code == 200) { - self.uiSetting = [AppUISetting modelWithJSON:data.data[@"appUiSetting"]]; - } - - if (finish) { - finish(); - } - }]; -} - -@end diff --git a/YuMi/Config/ClientDataModel.h b/YuMi/Config/ClientDataModel.h deleted file mode 100644 index 430debb..0000000 --- a/YuMi/Config/ClientDataModel.h +++ /dev/null @@ -1,117 +0,0 @@ -// -// ClientDataModel.h -// YUMI -// -// Created by YUMI on 2022/3/7. -// - -#import -#import "ClientRedPacketModel.h" -#import "AdvertiseModel.h" -NS_ASSUME_NONNULL_BEGIN - -typedef NS_ENUM(NSInteger, FaceLivenessStrategy) { - FaceLivenessStrategy_Pass = 0, - FaceLivenessStrategy_Force = 1, - FaceLivenessStrategy_Guide = 2, -}; - -@interface FaceJson : PIBaseModel - -@property (nonatomic, assign) NSInteger status; -@property (nonatomic, assign) NSInteger id; -@property (nonatomic, assign) NSTimeInterval createTime; -@property (nonatomic, copy) NSString *json; -@property (nonatomic, assign) NSInteger version; - -@end - - -@interface AppUISetting : PIBaseModel - -@property (nonatomic, assign) NSInteger settingStatus; - -@property (nonatomic, copy) NSString *headIcon; -@property (nonatomic, copy) NSString *navbar; -@property (nonatomic, copy) NSString *backgroundColor; -@property (nonatomic, copy) NSString *homeSelectIcon; -@property (nonatomic, copy) NSString *homeUnSelectIcon; -@property (nonatomic, copy) NSString *gameSelectIcon; -@property (nonatomic, copy) NSString *gameUnSelectIcon; -@property (nonatomic, copy) NSString *dynamicSelectIcon; -@property (nonatomic, copy) NSString *dynamicUnSelectIcon; -@property (nonatomic, copy) NSString *msgSelectIcon; -@property (nonatomic, copy) NSString *msgUnSelectIcon; -@property (nonatomic, copy) NSString *mineSelectIcon; -@property (nonatomic, copy) NSString *mineUnSelectIcon; -@property (nonatomic, copy) NSString *selectBar; - -@end - -@interface ClientDataModel : PIBaseModel - -@property (nonatomic, strong) AppUISetting *appUiSetting; - -///首页tag 配置 -@property (nonatomic,strong) NSArray *homeTabList; -///房间表情的数据 -@property (nonatomic,copy) NSDictionary *faceInitData; -///是否隐藏房间公告 -@property (nonatomic,assign) BOOL hideNoticeVersion; -//进入房间拉取N条聊天数据 -@property(nonatomic, assign) NSInteger roomMessageCount; -///发现萌新展示等级 -@property (nonatomic,assign) NSInteger findNewbieCharmLevel; -///送礼物隐藏座驾动画的值 -@property (nonatomic,assign) double hideCarEffectGiftPrice; -//航海等级限制 -@property (nonatomic, assign) NSInteger linearlyPoolOpenLevel; -///红包配置 -@property (nonatomic, strong) ClientRedPacketModel *redEnvelopeConfig; -///启动图 -@property (nonatomic,strong) AdvertiseModel *splashVo; -///官方消息Uid列表 -@property (nonatomic, strong) NSArray *officialMsgUids; -///官方账号 小秘书 红包消息 -@property (nonatomic,strong) NSArray *officialAccountUids; -@property(nonatomic,copy) NSDictionary *publicChatRoomIdMap; // 公聊大厅房间 IDs,已不使用该业务逻辑 -> 又要使用了 -///星座礼物顶部是否开启 -@property (nonatomic,assign) BOOL twelveStarSwitch; -/// 开房是否需要实名 -@property (nonatomic,assign) FaceLivenessStrategy certificationType; - -///转赠钻石白名单 -@property (nonatomic,strong) NSMutableArray *giveDiamondErbanNoList; -///转赠礼物白名单 -@property (nonatomic,strong) NSMutableArray *giveGiftErbanNoList; -///每日转赠钻石总额限制 -@property (nonatomic,assign) NSInteger giveDiamondDailyNum; -///转赠钻石单笔最大限额 -@property (nonatomic,assign) NSInteger giveDiamondOnceLimitNum; -///转赠钻石财富等级 -@property (nonatomic,assign) NSInteger giveDiamondExperLevel; -///转赠礼物财富等级 -@property (nonatomic,assign) NSInteger giveGiftExperLevel; - -///转赠手续费率 -@property (nonatomic,assign) double giveDiamondRate; - -@property (nonatomic, assign) BOOL iosPhoneBind; -@property (nonatomic, assign) BOOL openBoxSwitch; -@property (nonatomic, assign) NSInteger openBoxSwitchLevelNo; - -@property (nonatomic, strong) FaceJson *faceJson; - -@property (nonatomic, assign) NSInteger trtcAppId; - -@property (nonatomic, copy) NSString *appStoreAuditNoticeVersion; - -@property(nonatomic, assign) BOOL captchaSwitch; - -@property (nonatomic, copy) NSString *sudId; -@property (nonatomic, copy) NSString *sudkey; -@property (nonatomic, copy) NSString *nimKey; - -@end - -NS_ASSUME_NONNULL_END diff --git a/YuMi/Config/ClientDataModel.m b/YuMi/Config/ClientDataModel.m deleted file mode 100644 index 2607d3d..0000000 --- a/YuMi/Config/ClientDataModel.m +++ /dev/null @@ -1,30 +0,0 @@ -// -// ClientDataModel.m -// YUMI -// -// Created by YUMI on 2022/3/7. -// - -#import "ClientDataModel.h" -#import "XPAdImageTool.h" - -@implementation FaceJson - -@end - -@implementation AppUISetting - -@end - -@implementation ClientDataModel - -- (void)setSplashVo:(AdvertiseModel *)splashVo { - _splashVo = splashVo; - if (_splashVo) { - [XPAdImageTool.shareImageTool saveAdInfo:splashVo]; - } -} - - - -@end diff --git a/YuMi/Config/ClientRedPacketModel.h b/YuMi/Config/ClientRedPacketModel.h deleted file mode 100644 index d23689c..0000000 --- a/YuMi/Config/ClientRedPacketModel.h +++ /dev/null @@ -1,52 +0,0 @@ -// -// ClientRedPacketModel.h -// YUMI -// -// Created by YUMI on 2022/8/31. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -//@class - -@interface ClientRedPacketModel : PIBaseModel - -///红包开关 -@property (nonatomic, assign) BOOL open; -///红包推送id -@property (nonatomic, assign) long long pushUserId; -///厅内红包个数最大值 -@property (nonatomic, strong) NSNumber *roomRedEnvelopeMaxNum; -///厅内红包数额最小值 -@property (nonatomic, strong) NSNumber *roomRedEnvelopeMinAmount; -///厅内红包个数最小值 -@property (nonatomic, strong) NSNumber *roomRedEnvelopeMinNum; -///全服红包个数最大值 -@property (nonatomic, strong) NSNumber *serverRedEnvelopeMaxNum; -///全服红包数额最小值 -@property (nonatomic, strong) NSNumber *serverRedEnvelopeMinAmount; -///全服红包个数最小值 -@property (nonatomic, strong) NSNumber *serverRedEnvelopeMinNum; -///厅内红包数额最大值 -@property (nonatomic, strong) NSNumber *roomRedEnvelopeMaxAmount; -///全服红包数额最大值 -@property (nonatomic, strong) NSNumber *serverRedEnvelopeMaxAmount; -///默认红包位置,1厅内 2全服 -@property (nonatomic, strong) NSNumber *redEnvelopedPosition; -///默认红包类型,1 钻石 2礼物 -@property (nonatomic, strong) NSNumber *redEnvelopeType; -///钻石红包比例 -@property (nonatomic, strong) NSNumber *exchangeDiamondsRate; -///版本 -@property (nonatomic, copy) NSString *serverAppVersion; - -//@property (nonatomic, strong) NSArray<> *gold2GiftIds; -@property (nonatomic, strong) NSArray *openRooms; -@property(nonatomic,assign) NSInteger beginSecond; -///红包有效时间 -@property(nonatomic,assign) NSInteger endSecond; -@end - -NS_ASSUME_NONNULL_END diff --git a/YuMi/Config/ClientRedPacketModel.m b/YuMi/Config/ClientRedPacketModel.m deleted file mode 100644 index 1a1c13c..0000000 --- a/YuMi/Config/ClientRedPacketModel.m +++ /dev/null @@ -1,16 +0,0 @@ -// -// ClientRedPacketModel.m -// YUMI -// -// Created by YUMI on 2022/8/31. -// - -#import "ClientRedPacketModel.h" - -@implementation ClientRedPacketModel - -//+ (NSDictionary *)objectClassInArray { -// return @{@"contents":GuildMessageLayoutInfoModel.class}; -//} - -@end diff --git a/YuMi/CustomUI/Adbvertise/AdvertiseModel.h b/YuMi/CustomUI/Adbvertise/AdvertiseModel.h deleted file mode 100644 index 10d61ee..0000000 --- a/YuMi/CustomUI/Adbvertise/AdvertiseModel.h +++ /dev/null @@ -1,44 +0,0 @@ -// -// AdvertiseModel.h -// YUMI -// -// Created by YUMI on 2022/10/31. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -typedef NS_ENUM(NSInteger, SplashInfoSkipType) { - SplashInfoSkipTypePage = 1, - SplashInfoSkipTypeRoom = 2, - SplashInfoSkipTypeWeb = 3, - SplashInfoSkipTypeWeb_CP = 4, - SplashInfoSkipTypeWeb_WeekStar = 5, - SplashInfoSkipTypeWeb_Custom = 6, -}; - -@interface AdvertiseFillModel : PIBaseModel - -@property(nonatomic, copy) NSString *loverNick; -@property(nonatomic, copy) NSString *loverErbanNo; -@property(nonatomic, copy) NSString *loverAvatar; -@property(nonatomic, copy) NSString *nick; -@property(nonatomic, copy) NSString *erbanNo; -@property(nonatomic, copy) NSString *avatar; -@property(nonatomic, copy) NSString *picUrl; -@property(nonatomic, copy) NSString *giftName; -@property(nonatomic, copy) NSString *giftId; - -@end - -@interface AdvertiseModel : PIBaseModel -@property (nonatomic, strong) NSString *link; -@property (nonatomic, assign) SplashInfoSkipType type;// 1跳app页面,2跳聊天室,3跳h5页面, -@property (nonatomic, copy) NSString *pict; -@property(nonatomic, strong) AdvertiseFillModel *fillVo; - - -@end - -NS_ASSUME_NONNULL_END diff --git a/YuMi/CustomUI/Adbvertise/AdvertiseModel.m b/YuMi/CustomUI/Adbvertise/AdvertiseModel.m deleted file mode 100644 index 8cfd83e..0000000 --- a/YuMi/CustomUI/Adbvertise/AdvertiseModel.m +++ /dev/null @@ -1,23 +0,0 @@ -// -// AdvertiseModel.m -// YUMI -// -// Created by YUMI on 2022/10/31. -// - -#import "AdvertiseModel.h" - -@implementation AdvertiseFillModel - -@end - -@implementation AdvertiseModel - -+ (NSDictionary *)objectClassInArray { - return @{ - @"fillVo": [AdvertiseFillModel class], - }; -} - - -@end diff --git a/YuMi/CustomUI/Adbvertise/XPAdImageTool.h b/YuMi/CustomUI/Adbvertise/XPAdImageTool.h deleted file mode 100644 index c4d3ca1..0000000 --- a/YuMi/CustomUI/Adbvertise/XPAdImageTool.h +++ /dev/null @@ -1,48 +0,0 @@ -// -// YMAdImageTool.h -// YUMI -// -// Created by YUMI on 2022/10/31. -// - -#import -#import "AdvertiseModel.h" -NS_ASSUME_NONNULL_BEGIN - -@interface XPAdImageTool : PIBaseModel -+ (instancetype)shareImageTool; - -///是否登录成功im -@property (nonatomic,assign)BOOL isImLogin; - -//去除广告信息 -- (AdvertiseModel *)getAdInfoFromCacheInMainWith:(NSString *)link; -///保存信息 -- (void)saveAdInfo:(AdvertiseModel *)adInfo; -/** - * 判断文件是否存在 - */ -- (BOOL)isFileExistWithFilePath:(NSString *)filePath; - -/** - * 初始化广告页面 - */ -- (void)getAdvertisingImage; - -/** - * 下载新图片 - */ -- (void)downloadAdImageWithUrl:(NSString *)imageUrl imageName:(NSString *)imageName; - -/** - * 删除旧图片 - */ -- (void)deleteOldImage; - -/** - * 根据图片名拼接文件路径 - */ -- (NSString *)getFilePathWithImageName:(NSString *)imageName; -@end - -NS_ASSUME_NONNULL_END diff --git a/YuMi/CustomUI/Adbvertise/XPAdImageTool.m b/YuMi/CustomUI/Adbvertise/XPAdImageTool.m deleted file mode 100644 index f4ed0b2..0000000 --- a/YuMi/CustomUI/Adbvertise/XPAdImageTool.m +++ /dev/null @@ -1,158 +0,0 @@ -// -// YMAdImageTool.m -// YUMI -// -// Created by YUMI on 2022/10/31. -// - -#import "XPAdImageTool.h" -#import -#import "UploadFile.h" - -#define CACHENAME @"XPUserCache" - -UIKIT_EXTERN NSString * const adImageName; -@interface XPAdImageTool () -@property (nonatomic, strong) YYCache *yyCache; -///广告信息 -@property (nonatomic,strong) AdvertiseModel *infoModel; -@end - -static XPAdImageTool* tool; -@implementation XPAdImageTool - -+ (instancetype)shareImageTool { - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - tool = [[XPAdImageTool alloc] init]; - }); - return tool; -} - -- (instancetype)init -{ - self = [super init]; - if (self) { - self.yyCache = [YYCache cacheWithName:CACHENAME]; - } - return self; -} - -//去除广告信息 -- (AdvertiseModel *)getAdInfoFromCacheInMainWith:(NSString *)link { - if (link.length > 0) { - if ([self.yyCache containsObjectForKey:link]) { - return (AdvertiseModel *)[self.yyCache objectForKey:link]; - }else { - return nil; - } - }else { - return nil; - } - return nil; -} - - -///保存信息 -- (void)saveAdInfo:(AdvertiseModel *)adInfo { - self.infoModel = adInfo; - NSArray *stringArr = [adInfo.pict componentsSeparatedByString:@"/"]; - NSString *key = stringArr.lastObject; - [self.yyCache setObject:(id )adInfo forKey:key withBlock:^{ - - }]; - - [self getAdvertisingImage]; -} - -/** - * 判断文件是否存在 - */ -- (BOOL)isFileExistWithFilePath:(NSString *)filePath { - NSFileManager *fileManager = [NSFileManager defaultManager]; - BOOL isDirectory = FALSE; - return [fileManager fileExistsAtPath:filePath isDirectory:&isDirectory]; -} - -/** - * 初始化广告页面 - */ -- (void)getAdvertisingImage { - - if (self.infoModel.pict.length > 0) { - NSString *imageUrl = self.infoModel.pict; - // 获取图片名 - NSArray *stringArr = [imageUrl componentsSeparatedByString:@"/"]; - NSString *imageName = stringArr.lastObject; - - // 拼接沙盒路径 - NSString *filePath = [self getFilePathWithImageName:imageName]; - BOOL isExist = [self isFileExistWithFilePath:filePath]; - if (!isExist){// 如果该图片不存在,则删除老图片,下载新图片 - [self downloadAdImageWithUrl:imageUrl imageName:imageName]; - } - }else { - [self deleteOldImage]; - } -} - -/** - * 下载新图片 - */ -- (void)downloadAdImageWithUrl:(NSString *)imageUrl imageName:(NSString *)imageName { - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - NSString *filePath = [self getFilePathWithImageName:imageName]; // 保存文件的名称 - - if ([imageUrl.lowercaseString hasSuffix:@"svga"]) { - @kWeakify(self); - [[UploadFile share] download:imageUrl path:filePath complete:^{ - @kStrongify(self); - [self deleteOldImage]; - [[NSUserDefaults standardUserDefaults] setValue:imageName forKey:adImageName]; - [[NSUserDefaults standardUserDefaults] synchronize]; - } failure:^{ - @kStrongify(self); - [self deleteOldImage]; - }]; - } else { - NSString *encode = [imageUrl stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]; - NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:encode]]; - UIImage *image = [UIImage imageWithData:data]; - - if ([UIImagePNGRepresentation(image) writeToFile:filePath atomically:YES]) {// 保存成功 - [self deleteOldImage]; - [[NSUserDefaults standardUserDefaults] setValue:imageName forKey:adImageName]; - [[NSUserDefaults standardUserDefaults] synchronize]; - }else{ - [self deleteOldImage]; - } - } - }); -} - -/** - * 删除旧图片 - */ -- (void)deleteOldImage { - NSString *imageName = [[NSUserDefaults standardUserDefaults] valueForKey:adImageName]; - if (imageName) { - NSString *filePath = [self getFilePathWithImageName:imageName]; - NSFileManager *fileManager = [NSFileManager defaultManager]; - [fileManager removeItemAtPath:filePath error:nil]; - } -} - -/** - * 根据图片名拼接文件路径 - */ -- (NSString *)getFilePathWithImageName:(NSString *)imageName { - if (imageName) { - NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask, YES); - NSString *filePath = [[paths xpSafeObjectAtIndex:0] stringByAppendingPathComponent:imageName]; - - return filePath; - } - - return nil; -} -@end diff --git a/YuMi/CustomUI/Adbvertise/XPAdvertiseView.h b/YuMi/CustomUI/Adbvertise/XPAdvertiseView.h deleted file mode 100644 index 81de7ef..0000000 --- a/YuMi/CustomUI/Adbvertise/XPAdvertiseView.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// YMAdvertiseView.h -// YUMI -// -// Created by YUMI on 2022/10/31. -// - -#import -#import "AdvertiseModel.h" -NS_ASSUME_NONNULL_BEGIN - -@interface XPAdvertiseView : UIView - -/** 显示广告页面方法*/ -- (void)show; - -/** 图片路径*/ -@property (nonatomic, copy) NSString *filePath; -@property(nonatomic, assign) SplashInfoSkipType type; -@property(nonatomic, strong) AdvertiseFillModel *fileModel; -@property (nonatomic, strong) UIImage *adImage; - -@property (nonatomic, copy) void(^dismissHandler)(BOOL shouldJump); //闪屏消失回调 -@end - -NS_ASSUME_NONNULL_END diff --git a/YuMi/CustomUI/Adbvertise/XPAdvertiseView.m b/YuMi/CustomUI/Adbvertise/XPAdvertiseView.m deleted file mode 100644 index de332a9..0000000 --- a/YuMi/CustomUI/Adbvertise/XPAdvertiseView.m +++ /dev/null @@ -1,223 +0,0 @@ -// -// YMAdvertiseView.m -// YUMI -// -// Created by YUMI on 2022/10/31. -// - -#import "XPAdvertiseView.h" -#import "AppDelegate.h" -//tool - -#import -#import -#import "YUMIMacroUitls.h" -///Tool -#import "UIImage+Utils.h" -NSString *const adImageName = @"adImageName"; -NSString *const adUrl = @"adUrl"; -// 广告显示的时间 -static int const showtime = 3; - -@interface XPAdvertiseView() - - -@property (nonatomic, strong) UIImageView *adView;//广告图片 - -@property (nonatomic, strong) UIButton *countdownButton;//倒计时、跳过按钮 - -@property (nonatomic, strong) NSTimer *countTimer; - -@property (nonatomic, assign) int count; - -@property (nonatomic, strong) UIWindow *window; - -@property(nonatomic, strong) NSMutableArray *imageLoaders; - - -@end - -@implementation XPAdvertiseView - -#pragma mark - Initialize Methods - -- (instancetype)initWithFrame:(CGRect)frame { - if (self = [super initWithFrame:frame]) { - - _adView = [[UIImageView alloc] initWithFrame:frame]; - _adView.userInteractionEnabled = YES; - _adView.contentMode = UIViewContentModeScaleAspectFill; - _adView.clipsToBounds = YES; - [self addSubview:_adView]; - - UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onTapAdViewAction)]; - [_adView addGestureRecognizer:tap]; - [self addSubview:self.countdownButton]; - [self.countdownButton mas_makeConstraints:^(MASConstraintMaker *make) { - make.trailing.mas_equalTo(-24); -// make.width.mas_equalTo(60); - make.height.mas_equalTo(30); - make.top.mas_equalTo(40); - }]; -// // 因为倒数跳秒问题,导致无法及时响应事件,经测试提案说无法接受此结果。所以就做成和安卓一样,去掉倒计时和跳过 -// if ([self needCountDownBtn]) { -// [self addSubview:self.countdownButton]; -// } - } - return self; -} - -#pragma mark - Public Methods - -- (void)show { - // 倒计时方法1:GCD - [self gcdCoundownHander]; - - UIWindow *keyWindow = [UIApplication sharedApplication].keyWindow; - [self.window.rootViewController.view addSubview:self]; - [self.window makeKeyAndVisible]; - [keyWindow makeKeyWindow]; -} - - -#pragma mark - Event Response - -/// 点击闪屏操作 -- (void)onTapAdViewAction { - [self dismissWithJumpHandle:YES]; -} - -/// 点击跳过按钮 -- (void)onClickSkipButton:(UIButton *)sender { - [self dismissWithJumpHandle:NO]; -} - - -#pragma mark - Privite Method - -// GCD倒计时方法 -- (void)gcdCoundownHander { - __block int timeout = showtime; - - dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); - dispatch_source_t _timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue); - dispatch_source_set_timer(_timer, DISPATCH_TIME_NOW, 1.0 * NSEC_PER_SEC, 0); //每秒执行 - - dispatch_source_set_event_handler(_timer, ^{ - - if (timeout <= 0) { //倒计时结束,关闭 - dispatch_source_cancel(_timer); - dispatch_async(dispatch_get_main_queue(), ^{ - [self dismissWithJumpHandle:NO]; - }); - } else { - dispatch_async(dispatch_get_main_queue(), ^{ - if (self.countdownButton) { - [self.countdownButton setTitle:YMLocalizedString(@"XPAdvertiseView0") forState:UIControlStateNormal]; - } - }); - timeout--; - } - }); - dispatch_resume(_timer); -} - -// 移除广告页面 -- (void)dismissWithJumpHandle:(BOOL)shouldJump { - if (self.countTimer) { - [self.countTimer invalidate]; - self.countTimer = nil; - } - - @kWeakify(self) - [UIView animateWithDuration:0.5f animations:^{ - @kStrongify(self) - self.window.hidden = YES; - - } completion:^(BOOL finished) { - @kStrongify(self) - - [self removeFromSuperview]; - self.window = nil; - - !self.dismissHandler ?: self.dismissHandler(shouldJump); - }]; -} - - -- (NSString *)deviceName { - // Gets a string with the device model - size_t size; - int nR = sysctlbyname("hw.machine", NULL, &size, NULL, 0); - char *machine = (char *)malloc(size); - nR = sysctlbyname("hw.machine", machine, &size, NULL, 0); - NSString *platform = [NSString stringWithCString:machine encoding:NSUTF8StringEncoding]; - free(machine); - return platform; -} - -- (BOOL)needCountDownBtn { - - NSString *platform = [self deviceName]; - BOOL needBtn = YES; - if ([platform isEqualToString:@"iPhone6,1"] || - [platform isEqualToString:@"iPhone6,2"] || - [platform isEqualToString:@"iPhone7,1"] || - [platform isEqualToString:@"iPhone7,2"] || - [platform isEqualToString:@"iPhone8,1"] || - [platform isEqualToString:@"iPhone8,2"] || - [platform isEqualToString:@"iPhone8,4"]) { - needBtn = NO; - } - return needBtn; -} - -#pragma mark - Setter -- (void)setFilePath:(NSString *)filePath { -} - -- (void)updateSvgaImage:(NSString *)imagePath key:(NSString *)key { - -} - -- (void)updateSvgaText:(NSString *)content key:(NSString *)key { - -} - -- (void)setAdImage:(UIImage *)adImage { - _adImage = adImage; - _adView.image = [adImage cutImage:[UIScreen mainScreen].bounds.size]; -} - - -#pragma mark - SVGAPlayerDelegate - - -#pragma mark - Getter - -- (UIWindow *)window { - if (_window == nil) { - _window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds]; - _window.windowLevel = UIWindowLevelAlert; - _window.userInteractionEnabled = YES; - _window.rootViewController = [[UIViewController alloc] init]; - } - return _window; -} - -- (UIButton *)countdownButton { - if (_countdownButton == nil) { - _countdownButton = [UIButton buttonWithType:UIButtonTypeCustom]; - [_countdownButton addTarget:self action:@selector(onClickSkipButton:) forControlEvents:UIControlEventTouchUpInside]; - [_countdownButton setTitle:YMLocalizedString(@"XPAdvertiseView1") forState:UIControlStateNormal]; - _countdownButton.titleLabel.font = [UIFont systemFontOfSize:15]; - [_countdownButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; - _countdownButton.backgroundColor = [UIColor colorWithRed:38 /255.0 green:38 /255.0 blue:38 /255.0 alpha:0.6]; - _countdownButton.layer.cornerRadius = 4; - _countdownButton.contentEdgeInsets = UIEdgeInsetsMake(0, 8, 0, 8); - [_countdownButton sizeToFit]; - } - return _countdownButton; -} - -@end diff --git a/YuMi/CustomUI/MSRTL/MSBaseRTLFlowLayout.h b/YuMi/CustomUI/MSRTL/MSBaseRTLFlowLayout.h deleted file mode 100644 index 929c5a4..0000000 --- a/YuMi/CustomUI/MSRTL/MSBaseRTLFlowLayout.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// MSBaseRTLFlowLayout.h -// YuMi -// -// Created by duoban on 2024/4/11. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface MSBaseRTLFlowLayout : UICollectionViewFlowLayout - -@end - -NS_ASSUME_NONNULL_END diff --git a/YuMi/CustomUI/MSRTL/MSBaseRTLFlowLayout.m b/YuMi/CustomUI/MSRTL/MSBaseRTLFlowLayout.m deleted file mode 100644 index 09df071..0000000 --- a/YuMi/CustomUI/MSRTL/MSBaseRTLFlowLayout.m +++ /dev/null @@ -1,21 +0,0 @@ -// -// MSBaseRTLFlowLayout.m -// YuMi -// -// Created by duoban on 2024/4/11. -// - -#import "MSBaseRTLFlowLayout.h" - -@implementation MSBaseRTLFlowLayout -- (UIUserInterfaceLayoutDirection)effectiveUserInterfaceLayoutDirection { - if (isMSRTL()) { - return UIUserInterfaceLayoutDirectionRightToLeft; - } - return UIUserInterfaceLayoutDirectionLeftToRight; -} - -- (BOOL)flipsHorizontallyInOppositeLayoutDirection{ - return YES; -} -@end diff --git a/YuMi/CustomUI/MSRTL/MSBaseTextField.h b/YuMi/CustomUI/MSRTL/MSBaseTextField.h deleted file mode 100644 index af616ac..0000000 --- a/YuMi/CustomUI/MSRTL/MSBaseTextField.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// MSBaseTextField.h -// YuMi -// -// Created by duoban on 2024/4/15. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface MSBaseTextField : UITextField - -@end - -NS_ASSUME_NONNULL_END diff --git a/YuMi/CustomUI/MSRTL/MSBaseTextField.m b/YuMi/CustomUI/MSRTL/MSBaseTextField.m deleted file mode 100644 index 96ecec2..0000000 --- a/YuMi/CustomUI/MSRTL/MSBaseTextField.m +++ /dev/null @@ -1,62 +0,0 @@ -// -// MSBaseTextField.m -// YuMi -// -// Created by duoban on 2024/4/15. -// -#import -#import "MSBaseTextField.h" -@interface MSBaseTextField() -@property(nonatomic,strong)UILabel *textView; -@end -@implementation MSBaseTextField --(instancetype)initWithFrame:(CGRect)frame{ - self = [super initWithFrame:frame]; - if(self){ - [self installUI]; - [self installConstraints]; - } - return self; -} --(void)installUI{ - - [self addSubview:self.textView]; - [self.textView mas_makeConstraints:^(MASConstraintMaker *make) { - make.centerY.equalTo(self); - make.leading.equalTo(self).inset(kGetScaleWidth(5)); - }]; - //使用RAC来监听字符串myString的变化 - @kWeakify(self); - [RACObserve(self, text) subscribeNext:^(id _Nullable x) { - @kStrongify(self) - - NSString *text = [NSString stringWithFormat:@"%@",x]; - self.textView.hidden = text.length > 0; - }]; - [self addTarget:self action:@selector(ms_textFieldDidChange:) forControlEvents:UIControlEventEditingChanged]; -} --(void)installConstraints{ - -} - -#pragma mark - 懒加载 --(instancetype)init{ - self = [super init]; - if(self){ - [self installUI]; - } - return self; -} --(void)ms_textFieldDidChange:(UITextField *)textField{ - self.textView.hidden = textField.text.length > 0; -} --(void)setAttributedPlaceholder:(NSAttributedString *)attributedPlaceholder{ - _textView.attributedText = attributedPlaceholder; -} -- (UILabel *)textView{ - if(!_textView){ - _textView = [UILabel new]; - } - return _textView; -} -@end diff --git a/YuMi/CustomUI/MSRTL/NSMutableAttributedString+MSRTL.h b/YuMi/CustomUI/MSRTL/NSMutableAttributedString+MSRTL.h deleted file mode 100644 index 5208a7f..0000000 --- a/YuMi/CustomUI/MSRTL/NSMutableAttributedString+MSRTL.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// MSRTL.h -// YuMi -// -// Created by duoban on 2024/4/11. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface NSMutableAttributedString (MSRTL) - -/// 用来改变布局方向,插入此空白字符串,则转化为RTL布局 -+ (NSMutableAttributedString *)createBlankAttributeToMSRTL; - -/// 用来解决YYText在RTL下的bug,如果昵称是阿语,整个富文本宽度计算会有误,在昵称前插入此空白字符串,可以修正布局。“i”可以是随意字母或中文 -+ (NSMutableAttributedString *)createBlankAttributeToMSLTR; - -@end - -NS_ASSUME_NONNULL_END diff --git a/YuMi/CustomUI/MSRTL/NSMutableAttributedString+MSRTL.m b/YuMi/CustomUI/MSRTL/NSMutableAttributedString+MSRTL.m deleted file mode 100644 index f4c6a27..0000000 --- a/YuMi/CustomUI/MSRTL/NSMutableAttributedString+MSRTL.m +++ /dev/null @@ -1,27 +0,0 @@ -// -// MSRTL.m -// YuMi -// -// Created by duoban on 2024/4/11. -// - -#import "NSMutableAttributedString+MSRTL.h" - - -@implementation NSMutableAttributedString (MSRTL) - -/// 用来改变布局方向,插入此空白字符串,则转化为RTL布局 -+ (NSMutableAttributedString *)createBlankAttributeToMSRTL { - NSMutableAttributedString *attribute = [[NSMutableAttributedString alloc] initWithString:@"\u202B"]; - [attribute addAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:0], NSForegroundColorAttributeName: UIColor.clearColor} range:NSMakeRange(0, attribute.length)]; - return attribute; -} - -/// 用来解决YYText在RTL下的bug,如果昵称是阿语,整个富文本宽度计算会有误,在昵称前插入此空白字符串,可以修正布局。“i”可以是随意字母或中文 -+ (NSMutableAttributedString *)createBlankAttributeToMSLTR { - NSMutableAttributedString *attribute = [[NSMutableAttributedString alloc] initWithString:@"\u202A"]; - [attribute addAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:0], NSForegroundColorAttributeName: UIColor.clearColor} range:NSMakeRange(0, attribute.length)]; - return attribute; -} - -@end diff --git a/YuMi/CustomUI/MSRTL/UIButton+MSRTL.h b/YuMi/CustomUI/MSRTL/UIButton+MSRTL.h deleted file mode 100644 index 28a1ae5..0000000 --- a/YuMi/CustomUI/MSRTL/UIButton+MSRTL.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// MSRTL.h -// YuMi -// -// Created by duoban on 2024/4/11. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface UIButton (MSRTL) - -@end - -NS_ASSUME_NONNULL_END diff --git a/YuMi/CustomUI/MSRTL/UIButton+MSRTL.m b/YuMi/CustomUI/MSRTL/UIButton+MSRTL.m deleted file mode 100644 index fdebc26..0000000 --- a/YuMi/CustomUI/MSRTL/UIButton+MSRTL.m +++ /dev/null @@ -1,52 +0,0 @@ -// -// MSRTL.m -// YuMi -// -// Created by duoban on 2024/4/11. -// - -#import "UIButton+MSRTL.h" - -@implementation UIButton (MSRTL) - -UIEdgeInsets RSRTLEdgeInsetsWithInsets(UIEdgeInsets insets) { - if (insets.left != insets.right && isMSRTL()) { - CGFloat temp = insets.left; - insets.left = insets.right; - insets.right = temp; - } - return insets; -} -+ (void)load{ - - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - Method oldMethod = class_getInstanceMethod(self, @selector(setContentEdgeInsets:)); - Method newMethod = class_getInstanceMethod(self, @selector(msrtl_setContentEdgeInsets:)); - method_exchangeImplementations(oldMethod, newMethod); - - Method oldImageMethod = class_getInstanceMethod(self, @selector(setImageEdgeInsets:)); - Method newImageMethod = class_getInstanceMethod(self, @selector(msrtl_setImageEdgeInsets:)); - method_exchangeImplementations(oldImageMethod,newImageMethod); - - Method oldTitleMethod = class_getInstanceMethod(self, @selector(setTitleEdgeInsets:)); - Method newTitleMethod = class_getInstanceMethod(self, @selector(msrtl_setTitleEdgeInsets:)); - method_exchangeImplementations(oldTitleMethod,newTitleMethod); - }); - -} - -- (void)msrtl_setContentEdgeInsets:(UIEdgeInsets)contentEdgeInsets { - [self msrtl_setContentEdgeInsets:RSRTLEdgeInsetsWithInsets(contentEdgeInsets)]; -} - -- (void)msrtl_setImageEdgeInsets:(UIEdgeInsets)imageEdgeInsets { - [self msrtl_setImageEdgeInsets:RSRTLEdgeInsetsWithInsets(imageEdgeInsets)]; -} - -- (void)msrtl_setTitleEdgeInsets:(UIEdgeInsets)titleEdgeInsets { - [self msrtl_setTitleEdgeInsets:RSRTLEdgeInsetsWithInsets(titleEdgeInsets)]; -} - - -@end diff --git a/YuMi/CustomUI/MSRTL/UIImage+MSRTL.h b/YuMi/CustomUI/MSRTL/UIImage+MSRTL.h deleted file mode 100644 index 942c6ec..0000000 --- a/YuMi/CustomUI/MSRTL/UIImage+MSRTL.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// MSRTL.h -// YuMi -// -// Created by duoban on 2024/4/11. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface UIImage (MSRTL) - -/// 需要阿语翻转的图片 -/// [[UIImage imageNamed:@"xxx"] mssetImageForRTL]; -- (UIImage *)ms_SetImageForRTL; - -@end - -NS_ASSUME_NONNULL_END diff --git a/YuMi/CustomUI/MSRTL/UIImage+MSRTL.m b/YuMi/CustomUI/MSRTL/UIImage+MSRTL.m deleted file mode 100644 index d41b89a..0000000 --- a/YuMi/CustomUI/MSRTL/UIImage+MSRTL.m +++ /dev/null @@ -1,22 +0,0 @@ -// -// MSRTL.m -// YuMi -// -// Created by duoban on 2024/4/11. -// - -#import "UIImage+MSRTL.h" - -@implementation UIImage (MSRTL) - - -- (UIImage *)ms_SetImageForRTL { - if (isMSRTL()) { - return [UIImage imageWithCGImage:self.CGImage - scale:self.scale - orientation:UIImageOrientationUpMirrored]; - } - return self; -} - -@end diff --git a/YuMi/CustomUI/MSRTL/UILabel+MSRTL.h b/YuMi/CustomUI/MSRTL/UILabel+MSRTL.h deleted file mode 100644 index 932751c..0000000 --- a/YuMi/CustomUI/MSRTL/UILabel+MSRTL.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// MSRTL.h -// YuMi -// -// Created by duoban on 2024/4/11. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface UILabel (MSRTL) - -@end - -NS_ASSUME_NONNULL_END diff --git a/YuMi/CustomUI/MSRTL/UILabel+MSRTL.m b/YuMi/CustomUI/MSRTL/UILabel+MSRTL.m deleted file mode 100644 index 2df6bf5..0000000 --- a/YuMi/CustomUI/MSRTL/UILabel+MSRTL.m +++ /dev/null @@ -1,94 +0,0 @@ -// -// MSRTL.m -// YuMi -// -// Created by duoban on 2024/4/11. -// - -#import "UILabel+MSRTL.h" -#import "NSMutableAttributedString+MSRTL.h" - -BOOL isMSRTLString(NSString *string) { - if ([string hasPrefix:@"\u202B"] || [string hasPrefix:@"\u202A"]) { - return YES; - } - return NO; -} - -NSString * MSRTLString(NSString *string) { - if (string.length == 0 || isMSRTLString(string)) { - return string; - } - if (isMSRTL()) { - string = [@"\u202B" stringByAppendingString:string]; - } else { - string = [@"\u202A" stringByAppendingString:string]; - } - return string; -} - - -@implementation UILabel (MSRTL) - -+ (void)load { - - Method oldInitMethod = class_getInstanceMethod(self,@selector(initWithFrame:)); - Method newInitMethod = class_getInstanceMethod(self, @selector(msrtl_initWithFrame:)); - method_exchangeImplementations(oldInitMethod, newInitMethod); //交换成功 - - Method oldTextAlignmentMethod = class_getInstanceMethod(self,@selector(setTextAlignment:)); - Method newTextAlignmentMethod = class_getInstanceMethod(self, @selector(msrtl_setTextAlignment:)); - method_exchangeImplementations(oldTextAlignmentMethod, newTextAlignmentMethod); //交换成功 - - Method oldTextMethod1 = class_getInstanceMethod(self,@selector(setAttributedText:)); - Method newTextMethod1 = class_getInstanceMethod(self, @selector(msrtl_setAttributedText:)); - method_exchangeImplementations(oldTextMethod1, newTextMethod1); -} - --(void)msrtl_setAttributedText:(NSAttributedString *)attributedText{ - if(attributedText == nil)return; - NSMutableAttributedString * attributedString = [[NSMutableAttributedString alloc]init]; - if([NSStringFromClass([self class])isEqualToString:@"UITextFieldLabel"] || self.textAlignment == NSTextAlignmentCenter){ - if (isMSRTL() ) { - // 插入RTL - [attributedString appendAttributedString:[NSMutableAttributedString createBlankAttributeToMSRTL]]; - - } - [attributedString appendAttributedString:attributedText]; - [self msrtl_setAttributedText:attributedString]; - return; - } - - - if (isMSRTL() ) { - // 插入RTL - - [attributedString appendAttributedString:[NSMutableAttributedString createBlankAttributeToMSRTL]]; - - } - [attributedString appendAttributedString:attributedText]; - [self msrtl_setAttributedText:attributedString]; - -} - -- (instancetype)msrtl_initWithFrame:(CGRect)frame { - if ([self msrtl_initWithFrame:frame]) { - self.textAlignment = NSTextAlignmentNatural; - } - return self; -} - -- (void)msrtl_setTextAlignment:(NSTextAlignment)textAlignment { - if (isMSRTL()) { - if (textAlignment == NSTextAlignmentNatural || textAlignment == NSTextAlignmentLeft) { - textAlignment = NSTextAlignmentRight; - } else if (textAlignment == NSTextAlignmentRight) { - textAlignment = NSTextAlignmentLeft; - } - } - [self msrtl_setTextAlignment:textAlignment]; -} - - - -@end diff --git a/YuMi/CustomUI/MSRTL/UISwipeGestureRecognizer+MSRTL.h b/YuMi/CustomUI/MSRTL/UISwipeGestureRecognizer+MSRTL.h deleted file mode 100644 index b9d4b79..0000000 --- a/YuMi/CustomUI/MSRTL/UISwipeGestureRecognizer+MSRTL.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// UINavigationController+MSRTL.h -// YuMi -// -// Created by duoban on 2024/4/12. -// - -#import - -NS_ASSUME_NONNULL_BEGIN -@interface UISwipeGestureRecognizer (MSRTL) - - -@end - -NS_ASSUME_NONNULL_END diff --git a/YuMi/CustomUI/MSRTL/UISwipeGestureRecognizer+MSRTL.m b/YuMi/CustomUI/MSRTL/UISwipeGestureRecognizer+MSRTL.m deleted file mode 100644 index eadc58e..0000000 --- a/YuMi/CustomUI/MSRTL/UISwipeGestureRecognizer+MSRTL.m +++ /dev/null @@ -1,36 +0,0 @@ -// -// UINavigationController+MSRTL.m -// YuMi -// -// Created by duoban on 2024/4/12. -// - -#import "UISwipeGestureRecognizer+MSRTL.h" - - - -@implementation UISwipeGestureRecognizer (MSRTL) - -+ (void)load -{ - Method oldAttMethod = class_getInstanceMethod(self,@selector(setDirection:)); - Method newAttMethod = class_getInstanceMethod(self,@selector(msrtl_setDirection:)); - method_exchangeImplementations(oldAttMethod, newAttMethod); //交换成功 - -} - -- (void)msrtl_setDirection:(UISwipeGestureRecognizerDirection)direction -{ - - if (isMSRTL()) { - if (direction == UISwipeGestureRecognizerDirectionRight) { - direction = UISwipeGestureRecognizerDirectionLeft; - } else if (direction == UISwipeGestureRecognizerDirectionLeft) { - direction = UISwipeGestureRecognizerDirectionRight; - } - } - [self msrtl_setDirection:direction]; -} - - -@end diff --git a/YuMi/CustomUI/MSRTL/UITextField+MSRTL.h b/YuMi/CustomUI/MSRTL/UITextField+MSRTL.h deleted file mode 100644 index 8e18c6f..0000000 --- a/YuMi/CustomUI/MSRTL/UITextField+MSRTL.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// UITextField+MSRTL.h -// YuMi -// -// Created by duoban on 2024/4/11. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface UITextField (MSRTL) - -@end - -NS_ASSUME_NONNULL_END diff --git a/YuMi/CustomUI/MSRTL/UITextField+MSRTL.m b/YuMi/CustomUI/MSRTL/UITextField+MSRTL.m deleted file mode 100644 index 9588352..0000000 --- a/YuMi/CustomUI/MSRTL/UITextField+MSRTL.m +++ /dev/null @@ -1,69 +0,0 @@ -// -// UITextField+MSRTL.m -// YuMi -// -// Created by duoban on 2024/4/11. -// - -#import "UITextField+MSRTL.h" -@implementation UITextField (MSRTL) - -+ (void)load { - - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - - Method oldInitMethod = class_getInstanceMethod(self,@selector(initWithFrame:)); - Method newInitMethod = class_getInstanceMethod(self, @selector(msrtl_initWithFrame:)); - method_exchangeImplementations(oldInitMethod, newInitMethod); //交换成功 - -// Method oldTextMethod1 = class_getInstanceMethod(self,@selector(setPlaceholder:)); -// Method newTextMethod1 = class_getInstanceMethod(self, @selector(msrtl_setPlaceholder:)); -// method_exchangeImplementations(oldTextMethod1, newTextMethod1); //交换成功 -// -// Method oldTextMethod = class_getInstanceMethod(self,@selector(setTextAlignment:)); -// Method newTextMethod = class_getInstanceMethod(self, @selector(msrtl_setTextAlignment:)); -// method_exchangeImplementations(oldTextMethod, newTextMethod); //交换成功 - Method oldMethod = class_getInstanceMethod(self,@selector(setAttributedPlaceholder:)); - Method newMethod = class_getInstanceMethod(self, @selector(msrtl_setAttributedPlaceholder:)); - method_exchangeImplementations(oldMethod, newMethod); //交换成功 - }); - - -} - -- (void)msrtl_setTextAlignment:(NSTextAlignment)textAlignment { - if (isMSRTL()) { - if (textAlignment == NSTextAlignmentNatural || textAlignment == NSTextAlignmentLeft) { - textAlignment = NSTextAlignmentRight; - } else if (textAlignment == NSTextAlignmentRight) { - textAlignment = NSTextAlignmentLeft; - } - } - [self msrtl_setTextAlignment:textAlignment]; -} -- (instancetype)msrtl_initWithFrame:(CGRect)frame { - if ([self msrtl_initWithFrame:frame]) { - - if(isMSRTL()){ - self.textAlignment = NSTextAlignmentRight; - } - } - return self; -} -- (void)msrtl_setAttributedPlaceholder:(NSAttributedString *)attributedPlaceholder{ - NSMutableAttributedString *att = [[NSMutableAttributedString alloc]initWithAttributedString:attributedPlaceholder]; - NSMutableParagraphStyle *paragraph = [[NSMutableParagraphStyle alloc] init]; - NSTextAlignment textAli = NSTextAlignmentLeft; - paragraph.alignment = textAli; - [att addAttributes:@{NSParagraphStyleAttributeName: paragraph} range:[attributedPlaceholder.string rangeOfString:attributedPlaceholder.string]]; - [self msrtl_setAttributedPlaceholder:att]; - -} -- (void)msrtl_setPlaceholder:(NSString *)placeholder { - if(placeholder == nil)return; - NSAttributedString * attribute = [[NSAttributedString alloc] initWithString:placeholder]; - self.attributedPlaceholder = attribute; -} - -@end diff --git a/YuMi/CustomUI/MSRTL/UITextView+MSRTL.h b/YuMi/CustomUI/MSRTL/UITextView+MSRTL.h deleted file mode 100644 index 2d24f5c..0000000 --- a/YuMi/CustomUI/MSRTL/UITextView+MSRTL.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// UITextView+MSRTL.h -// YuMi -// -// Created by duoban on 2024/4/11. -// - -#import - -NS_ASSUME_NONNULL_BEGIN -@interface UITextView (MSRTL) - -@end - -NS_ASSUME_NONNULL_END diff --git a/YuMi/CustomUI/MSRTL/UITextView+MSRTL.m b/YuMi/CustomUI/MSRTL/UITextView+MSRTL.m deleted file mode 100644 index 520b77a..0000000 --- a/YuMi/CustomUI/MSRTL/UITextView+MSRTL.m +++ /dev/null @@ -1,65 +0,0 @@ -// -// UITextView+MSRTL.m -// YuMi -// -// Created by duoban on 2024/4/11. -// - -#import "UITextView+MSRTL.h" - -@implementation UITextView (MSRTL) - -+ (void)load { - - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - Method oldInitMethod = class_getInstanceMethod(self,@selector(initWithFrame:)); - Method newInitMethod = class_getInstanceMethod(self, @selector(msrtl_initWithFrame:)); - method_exchangeImplementations(oldInitMethod, newInitMethod); //交换成功 - Method oldTextMethod = class_getInstanceMethod(self,@selector(setTextAlignment:)); - Method newTextMethod = class_getInstanceMethod(self, @selector(msrtl_setTextAlignment:)); - method_exchangeImplementations(oldTextMethod, newTextMethod); //交换成功 - -// Method oldTextMethod1 = class_getInstanceMethod(self,@selector(setPlaceholder:)); -// Method newTextMethod1 = class_getInstanceMethod(self, @selector(msrtl_setPlaceholder:)); -// method_exchangeImplementations(oldTextMethod1, newTextMethod1); //交换成功 -// -// -// Method oldMethod = class_getInstanceMethod(self,@selector(setAttributedPlaceholder:)); -// Method newMethod = class_getInstanceMethod(self, @selector(msrtl_setAttributedPlaceholder:)); -// method_exchangeImplementations(oldMethod, newMethod); //交换成功 - }); - - -} -- (instancetype)msrtl_initWithFrame:(CGRect)frame { - if ([self msrtl_initWithFrame:frame]) { - self.textAlignment = NSTextAlignmentNatural; - } - return self; -} -- (void)msrtl_setTextAlignment:(NSTextAlignment)textAlignment { - if (isMSRTL()) { - if (textAlignment == NSTextAlignmentNatural || textAlignment == NSTextAlignmentLeft) { - textAlignment = NSTextAlignmentRight; - } else if (textAlignment == NSTextAlignmentRight) { - textAlignment = NSTextAlignmentLeft; - } - } - [self msrtl_setTextAlignment:textAlignment]; -} -- (void)msrtl_setAttributedPlaceholder:(NSAttributedString *)attributedPlaceholder{ - NSMutableAttributedString *att = [[NSMutableAttributedString alloc]initWithAttributedString:attributedPlaceholder]; - NSMutableParagraphStyle *paragraph = [[NSMutableParagraphStyle alloc] init]; - NSTextAlignment textAli = isMSRTL() ? NSTextAlignmentRight : NSTextAlignmentLeft; - paragraph.alignment = textAli; - [att addAttributes:@{NSParagraphStyleAttributeName: paragraph} range:[attributedPlaceholder.string rangeOfString:attributedPlaceholder.string]]; - [self msrtl_setAttributedPlaceholder:att]; - -} -- (void)msrtl_setPlaceholder:(NSString *)placeholder { -// NSAttributedString * attribute = [[NSAttributedString alloc] initWithString:placeholder]; - // self.attributedPlaceholder = attribute; -} - -@end diff --git a/YuMi/CustomUI/MSRTL/YYLabel+MSRTL.h b/YuMi/CustomUI/MSRTL/YYLabel+MSRTL.h deleted file mode 100644 index 2080d2f..0000000 --- a/YuMi/CustomUI/MSRTL/YYLabel+MSRTL.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// MSRTL.h -// YuMi -// -// Created by duoban on 2024/4/15. -// - -#import - -NS_ASSUME_NONNULL_BEGIN -@interface YYLabel (MSRTL) - - -@end - -NS_ASSUME_NONNULL_END diff --git a/YuMi/CustomUI/MSRTL/YYLabel+MSRTL.m b/YuMi/CustomUI/MSRTL/YYLabel+MSRTL.m deleted file mode 100644 index e000657..0000000 --- a/YuMi/CustomUI/MSRTL/YYLabel+MSRTL.m +++ /dev/null @@ -1,55 +0,0 @@ -// -// MSRTL.m -// YuMi -// -// Created by duoban on 2024/4/15. -// - -#import "YYLabel+MSRTL.h" -#import "NSMutableAttributedString+MSRTL.h" -BOOL isRTLString(NSString *string) { - if ([string hasPrefix:@"\u202B"]) { - return YES; - } - return NO; -} -@implementation YYLabel (MSRTL) - -+ (void)load { - Method oldTextMethod = class_getInstanceMethod(self,@selector(setAttributedText:)); - Method newTextMethod = class_getInstanceMethod(self, @selector(msrtl_setAttributedText:)); - method_exchangeImplementations(oldTextMethod, newTextMethod); //交换成功 -} - --(void)msrtl_setAttributedText:(NSAttributedString *)attributedText{ - if(attributedText == nil)return; - NSMutableAttributedString * attributedString = [[NSMutableAttributedString alloc]init]; - if(self.textAlignment == NSTextAlignmentCenter){ - if (isMSRTL()) { - [attributedString appendAttributedString:[NSMutableAttributedString createBlankAttributeToMSRTL]]; -// [attributedString appendAttributedString:[NSMutableAttributedString createBlankAttributeToMSLTR]]; - } - [attributedString appendAttributedString:attributedText]; - [self msrtl_setAttributedText:attributedString]; - return; - } - - - if (isMSRTL()) { - [attributedString appendAttributedString:[NSMutableAttributedString createBlankAttributeToMSRTL]]; -// [attributedString appendAttributedString:[NSMutableAttributedString createBlankAttributeToMSLTR]]; - } - - [attributedString appendAttributedString:attributedText]; - [self msrtl_setAttributedText:attributedString]; - if(isMSRTL()){ - self.textAlignment = NSTextAlignmentRight; - }else{ - if (self.textAlignment == NSTextAlignmentNatural) { - self.textAlignment = NSTextAlignmentLeft; - } - } - -} - -@end diff --git a/YuMi/CustomUI/UIButton/UIButton+EnlargeTouchArea.h b/YuMi/CustomUI/UIButton/UIButton+EnlargeTouchArea.h deleted file mode 100644 index 3db38b2..0000000 --- a/YuMi/CustomUI/UIButton/UIButton+EnlargeTouchArea.h +++ /dev/null @@ -1,40 +0,0 @@ -// -// UIButton+EnlargeTouchArea.h -// XCCategrayKit -// -// Created by Macx on 2018/8/30. -// Copyright © 2018年 KevinWang. All rights reserved. -// - -#import - -@interface UIButton (EnlargeTouchArea) -@property (nonatomic, assign) NSTimeInterval yn_acceptEventInterval; // 重复点击的间隔 - -//图片frmae -@property (strong, nonatomic) NSValue *imageFrame; -//标题frmae -@property (strong, nonatomic) NSValue *titleFrame; - -/** - 通过 hitTest:withEvent: 扩大btn的点击范围 - 注:填写的都是 在button 原frame 上面 扩大的对应的值 - - @param top 顶部 扩大的值 - @param right 右边 扩大的值 - @param bottom 底部 扩大的值 - @param left 左边 扩大的值 - */ -- (void)setEnlargeEdgeWithTop:(CGFloat)top right:(CGFloat)right bottom:(CGFloat)bottom left:(CGFloat)left; - -/** - 扩大按钮点击范围 - - @discussion setEnlargeEdgeWithTop:right:bottom:left:方法的包装 - */ -- (void)enlargeTouchArea:(UIEdgeInsets)insets; - - -+(UIButton *)buttonInitWithText:(NSString *)text font:(UIFont *)font textColor:(UIColor *)textColor image:(UIImage *)image bgImage:(UIImage *)bgImage; - -@end diff --git a/YuMi/CustomUI/UIButton/UIButton+EnlargeTouchArea.m b/YuMi/CustomUI/UIButton/UIButton+EnlargeTouchArea.m deleted file mode 100644 index 59ac01a..0000000 --- a/YuMi/CustomUI/UIButton/UIButton+EnlargeTouchArea.m +++ /dev/null @@ -1,192 +0,0 @@ -// -// UIButton+EnlargeTouchArea.m -// XCCategrayKit -// -// Created by Macx on 2018/8/30. -// Copyright © 2018年 KevinWang. All rights reserved. -// - -#import "UIButton+EnlargeTouchArea.h" -#import - -#define defaultInterval 0.0003 //默认时间间隔,不能太长,以免影响系统拍照等功能 -@interface UIButton () -/** - * bool YES 忽略点击事件 NO 允许点击事件 - */ -@property (nonatomic, assign) BOOL isIgnoreEvent; -@end - -@implementation UIButton (EnlargeTouchArea) - -static const char *UIControl_acceptEventInterval = "UIControl_acceptEventInterval"; -static const char *UIControl_enventIsIgnoreEvent = "UIControl_enventIsIgnoreEvent"; - -//定义常量 必须是C语言字符串 -static const char *imageFrameStr = "imageFrame"; -static const char *titleFrameStr = "titleFrame"; - -+ (void)load{ - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - Method newImageMethod = class_getInstanceMethod(self, @selector(new_imageRectForContentRect:)); - Method oldImageMethod = class_getInstanceMethod(self, @selector(imageRectForContentRect:)); - method_exchangeImplementations(newImageMethod, oldImageMethod); - - Method newTitleMethod = class_getInstanceMethod(self, @selector(new_titleRectForContentRect:)); - Method oldTitleMethod = class_getInstanceMethod(self, @selector(titleRectForContentRect:)); - method_exchangeImplementations(newTitleMethod, oldTitleMethod); - - - //根据selector查找Method - SEL selA = @selector(sendAction:to:forEvent:); - SEL selB = @selector(new_sendAction:to:forEvent:); - Method methodA = class_getInstanceMethod(self,selA); - Method methodB = class_getInstanceMethod(self, selB); - //添加自定义方法 - BOOL isAdd = class_addMethod(self, selA, method_getImplementation(methodB), method_getTypeEncoding(methodB)); - - if (isAdd) {//添加成功->替换 - class_replaceMethod(self, selB, method_getImplementation(methodA), method_getTypeEncoding(methodA)); - }else{//添加不成功->交换 - //添加失败了 说明本类中有methodB的实现,此时只需要将methodA和methodB的IMP互换一下即可。 - method_exchangeImplementations(methodA, methodB); - } - - }); -} -- (void)new_sendAction:(SEL)action to:(id)target forEvent:(UIEvent *)event { - self.yn_acceptEventInterval = self.yn_acceptEventInterval == 0 ? defaultInterval : self.yn_acceptEventInterval; - if (self.isIgnoreEvent){//默认可以响应点击事件 - return; - } - if (self.yn_acceptEventInterval > 0){//第一次点击,设定eventTimeInterval后,可以响应点击事件 - [self performSelector:@selector(setNoIgnoreEvent) withObject:nil afterDelay:self.yn_acceptEventInterval]; - } - self.isIgnoreEvent = YES;//设置不可以响应点击事件 - [self new_sendAction:action to:target forEvent:event]; -} - -// runtime 动态绑定 属性 -- (BOOL)isIgnoreEvent{ - return [objc_getAssociatedObject(self, UIControl_enventIsIgnoreEvent) boolValue]; -} --(void)setNoIgnoreEvent{ - self.isIgnoreEvent = NO; -} -- (void)setIsIgnoreEvent:(BOOL)isIgnoreEvent { - objc_setAssociatedObject(self, UIControl_enventIsIgnoreEvent, @(isIgnoreEvent), OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - --(void)setYn_acceptEventInterval:(NSTimeInterval)yn_acceptEventInterval{ - objc_setAssociatedObject(self, UIControl_acceptEventInterval, @(yn_acceptEventInterval), OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} --(NSTimeInterval)yn_acceptEventInterval{ - return [objc_getAssociatedObject(self, UIControl_acceptEventInterval) doubleValue]; -} -- (void)setImageFrame:(NSValue *)imageFrame{ - objc_setAssociatedObject(self, imageFrameStr, imageFrame, OBJC_ASSOCIATION_RETAIN); -} - -- (NSValue *)imageFrame{ - return objc_getAssociatedObject(self, imageFrameStr); -} - -- (void)setTitleFrame:(NSValue *)titleFrame{ - objc_setAssociatedObject(self, titleFrameStr, titleFrame, OBJC_ASSOCIATION_RETAIN); -} - -- (NSValue *)titleFrame{ - return objc_getAssociatedObject(self, titleFrameStr); -} - -- (CGRect)new_imageRectForContentRect:(CGRect)contentRect{ - if (CGRectEqualToRect(self.imageFrame.CGRectValue, CGRectZero)) { - return [self new_imageRectForContentRect:contentRect]; - } - return self.imageFrame.CGRectValue; -} - -- (CGRect)new_titleRectForContentRect:(CGRect)contentRect{ - if (CGRectEqualToRect(self.titleFrame.CGRectValue, CGRectZero)) { - return [self new_titleRectForContentRect:contentRect]; - } - return self.titleFrame.CGRectValue; -} - - - -static char topNameKey; -static char rightNameKey; -static char bottomNameKey; -static char leftNameKey; - -- (void)setEnlargeEdgeWithTop:(CGFloat)top right:(CGFloat)right bottom:(CGFloat)bottom left:(CGFloat)left -{ - objc_setAssociatedObject(self, &topNameKey, [NSNumber numberWithFloat:top], OBJC_ASSOCIATION_COPY_NONATOMIC); - objc_setAssociatedObject(self, &rightNameKey, [NSNumber numberWithFloat:right], OBJC_ASSOCIATION_COPY_NONATOMIC); - objc_setAssociatedObject(self, &bottomNameKey, [NSNumber numberWithFloat:bottom], OBJC_ASSOCIATION_COPY_NONATOMIC); - objc_setAssociatedObject(self, &leftNameKey, [NSNumber numberWithFloat:left], OBJC_ASSOCIATION_COPY_NONATOMIC); -} - -- (void)enlargeTouchArea:(UIEdgeInsets)insets -{ - [self setEnlargeEdgeWithTop:insets.top - right:insets.right - bottom:insets.bottom - left:insets.left]; -} - -- (CGRect)enlargedRect -{ - NSNumber* topEdge = objc_getAssociatedObject(self, &topNameKey); - NSNumber* rightEdge = objc_getAssociatedObject(self, &rightNameKey); - NSNumber* bottomEdge = objc_getAssociatedObject(self, &bottomNameKey); - NSNumber* leftEdge = objc_getAssociatedObject(self, &leftNameKey); - if (topEdge && rightEdge && bottomEdge && leftEdge) - { - return CGRectMake(self.bounds.origin.x - leftEdge.floatValue, - self.bounds.origin.y - topEdge.floatValue, - self.bounds.size.width + leftEdge.floatValue + rightEdge.floatValue, - self.bounds.size.height + topEdge.floatValue + bottomEdge.floatValue); - } - else - { - return self.bounds; - } -} - -- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent*)event -{ - if(self.hidden) return nil; - CGRect rect = [self enlargedRect]; - if (CGRectEqualToRect(rect, self.bounds)) - { - return [super hitTest:point withEvent:event]; - } - return CGRectContainsPoint(rect, point) ? self : nil; -} -+(UIButton *)buttonInitWithText:(NSString *)text font:(UIFont *)font textColor:(UIColor *)textColor image:(UIImage *)image bgImage:(UIImage *)bgImage{ - UIButton *button = [[UIButton alloc]initWithFrame:CGRectZero]; - if(text.length > 0){ - [button setTitle:text forState:UIControlStateNormal]; - } - if(font != nil){ - button.titleLabel.font = font; - } - - if(textColor != nil){ - [button setTitleColor:textColor forState:UIControlStateNormal]; - } - - if (image != nil){ - [button setImage:image forState:UIControlStateNormal]; - } - - if(bgImage != nil){ - [button setBackgroundImage:bgImage forState:UIControlStateNormal]; - } - - return button; -} -@end diff --git a/YuMi/E-P/NewLogin/Controllers/EPLoginTypesViewController.swift b/YuMi/E-P/NewLogin/Controllers/EPLoginTypesViewController.swift index 34b4d3c..6ea39eb 100644 --- a/YuMi/E-P/NewLogin/Controllers/EPLoginTypesViewController.swift +++ b/YuMi/E-P/NewLogin/Controllers/EPLoginTypesViewController.swift @@ -672,32 +672,7 @@ class EPLoginTypesViewController: BaseViewController { /// 加载人机验证 Captcha WebView /// - Parameter completion: 验证成功后的回调 private func loadCaptchaWebView(completion: @escaping () -> Void) { - guard ClientConfig.share().shouldDisplayCaptcha else { - // 不需要验证,直接执行 - completion() - return - } - - view.endEditing(true) - - let webVC = XPWebViewController(roomUID: nil) - webVC.view.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width * 0.8, height: UIScreen.main.bounds.width * 1.2) - webVC.view.backgroundColor = .clear - webVC.view.layer.cornerRadius = 12 - webVC.view.layer.masksToBounds = true - webVC.isLoginStatus = false - webVC.isPush = false - webVC.hideNavigationBar() - webVC.url = URLWithType(.captchaSwitch) - - webVC.verifyCaptcha = { result in - if result { - TTPopup.dismiss() - completion() - } - } - - TTPopup.popupView(webVC.view, style: .alert) + completion() } } diff --git a/YuMi/Global/YUMIConstant.h b/YuMi/Global/YUMIConstant.h index 83f44e3..acd68a9 100644 --- a/YuMi/Global/YUMIConstant.h +++ b/YuMi/Global/YUMIConstant.h @@ -4,42 +4,19 @@ // // Created by YUMI on 2021/9/13. // -///一些项目中所用到的key +///项目配置常量 #import NS_ASSUME_NONNULL_BEGIN @interface YUMIConstant : NSObject -UIKIT_EXTERN NSString * const kRoomMiniNotificationKey; -UIKIT_EXTERN NSString * const kVisitorUnReadCountNotificationKey; -UIKIT_EXTERN NSString * const kHadShowNewUserGiftKey; -UIKIT_EXTERN NSString * const kRedPacketHistory; -UIKIT_EXTERN NSString * const kTuWenMessageHistory;///图文消息已读记录 -UIKIT_EXTERN NSString * const kRoomQuickMessageCloseCount; -UIKIT_EXTERN NSString * const kLoginMethod; -UIKIT_EXTERN NSString * const kMessageFromPublicRoomWithAttachmentNotification; -UIKIT_EXTERN NSString * const kRoomGiftEffectUpdateNotificationKey; +/// 配置Key类型枚举(仅保留实际使用的类型) typedef NS_ENUM(NSUInteger, Pi_KeyType) { - KeyType_PasswordEncode,///密码 des 加密的 - KeyType_TRTC,///TRTC key - KeyType_NetEase,///云信的key - keyType_YiDunBussinessId,///易盾的id - keyType_YiDunPhotoBussinessId,///易盾图片的id - KeyType_FacePwdEncode, ///表情包解密key - KeyType_SudGameAppID,///小游戏APPID - KeyType_SudGameAppKey,///小游戏APPKey - ///家族公会key - KeyType_GuildUidKey, - ///系统通知 - KeyType_SystemNotifiUidKey, - ///小秘书 - KeyType_SecretaryUidKey, - ///参数加密 - KeyType_Sign, + KeyType_Sign = 0, ///参数加密签名Key }; -/// 获取当前项目中所用到的 type 所对应的 value 的值 type 类型 +/// 获取指定类型的配置值 NSString * const KeyWithType(Pi_KeyType type); @end diff --git a/YuMi/Global/YUMIConstant.m b/YuMi/Global/YUMIConstant.m index 6283fe1..3fc369b 100644 --- a/YuMi/Global/YUMIConstant.m +++ b/YuMi/Global/YUMIConstant.m @@ -6,104 +6,16 @@ // #import "YUMIConstant.h" -#import "AESUtils.h" + @implementation YUMIConstant -/// AES miyao 14257fewedfgh 偏移 abcedgf -NSString * const kRoomMiniNotificationKey = @"ESkVolktPxd1sZsH4yccGD5S49crhLjAGMVnH3TeQjw="; -NSString * const kRoomGiftEffectUpdateNotificationKey = @"vNba94B4Zlh56Eb1VTbkLO1dVTROgaL5uVHAkQz9A92JkuP/lD+63ZgfhDId93Sm"; -NSString * const kHomeMoreScrollPageKey = @"gf6PRnJmby4FIMvi75ZSRqCO4udLaWxSUj6b26l7HOE="; -NSString * const kVisitorUnReadCountNotificationKey = @"gebsDgmM0iXmwnTEcqgP9EIC8aLUT0lK4t05kHYQADjBhVJmLIafi90V/wXgWPM7"; -NSString * const kRoomBackMusicCaptureVolumeKey = @"9N5Ei+Ch6nkmH1LzZET4ZjYSzXKFbavt+6lU+45eQa8=";///房间背景音乐 人声大小的key -NSString * const kRoomBackMusicAudioMixingVolumeKey = @"JuJZKfNgZQ7s25PjQcGG97za686ecXI1lylS9PSLrayNeY2l1me4NyyYUXHGaJP0";///房间背景音乐 背景音乐的大小 -NSString * const kRoomBackMusicPlayMusicOrderKey = @"xjtpOpnLgX00F9HgwT1FISMQPkxXj5cpE2vYc2acOR0=";///房间背景音乐 播放顺序 单曲 顺序 1 0 -NSString * const kRoomBackMusicPlayMusicFinishKey = @"xjtpOpnLgX00F9HgwT1FIf5yt3rZb+KP9BT0F9AgD7I8M+2JTSYq+jDIEx1e6qdC";///房间背景音乐 播放完毕的key -NSString * const kHadShowNewUserGiftKey = @"OHIPXsTBvyt1zwNqr4f6YJkIycUshwhKIpC5Pm2nVVU=";//新用户房间礼物 -NSString * const kNewUserRechargeKey = @"fmslcb104aFPWxdSGkMg6lmyehgB3uCu9V/FqzVpL+8=";//新用户充值优惠 不同于房间内首充 -NSString * const kFromSearchToHomeViewKey = @"pr5yHog50uSsZLKj2nA6Ono3Mq/bLTDyngBNDVRkhgg=";//用户第一次从搜索页返回首页 -NSString * const kTabShowAnchorCardKey = @"MIO0LwD8MCBISnBOps47VF1waAwY+/XFOm2C3luic/k="; //tab展示主播卡片 -NSString * const kRedPacketHistory = @"nwKkblakw5CH37vvs9YcSjHhVHcOoeZMmE09gg7Ymhk"; -NSString * const kTuWenMessageHistory = @"AMRtf6yOWYapbYqqOBK+m5IUPsFN5hfbOpPkrYvOr1E=";//图文消息已读记录 -NSString * const kRoomQuickMessageCloseCount = @"bUi7KnisS+mmUMj45e9s4VycnvRvBViGvd/ouRS4SHo=";//房间快捷发言关闭次数 -NSString * const kShieldingNotification = @"a1NoaWVsZGluZ05vdGlmaWNhdGlvbg==";///屏蔽房间 -NSString * const kRoomKickoutTime = @"a1Jvb21LaWNrb3V0VGltZQ==";///被踢时间 -///每日转赠钻石总额限制 -NSString * const kGiveDiamondDailyNum = @"a0dpdmVEaWFtb25kRGFpbHlOdW0="; - -///邀请成员成功 -NSString * const kInviteMemeberSuccess = @"a0ludml0ZU1lbWViZXJTdWNjZXNz"; -NSString * const kUserFirstRegisterKey = @"kUserFirstRegisterKey"; -///登录方式 -NSString * const kLoginMethod = @"a0xvZ2luTWV0aG9k"; -NSString * const kRequestTicket = @"a1JlcXVlc3RSaWNrZXQ="; -NSString * const kUpdateSoundInfo = @"kUpdateSoundInfo"; -NSString * const kMineInfoDelTag = @"kMineInfoDelTag"; -NSString * const kOpenRoomNotification = @"kOpenRoomNotification";///进房 -NSString * const kRoomRoomLittleGameMiniStageNotificationKey = @"kRoomRoomLittleGameMiniStageNotificationKey";///小游戏最小化坑位的通知的健 - - -NSString * const kFreeGiftCountdownNotification = @"kFreeGiftCountdownNotification";///免费礼物倒计时 -NSString * const kMessageFromPublicRoomWithAttachmentNotification = @"MessageFromPublicRoomWithAttachmentNotification";///公共房间消息转发通知 - -///在里面进行判断当前环境是什么 +/// 获取指定类型的配置值 NSString * const KeyWithType(Pi_KeyType type) { - BOOL isRelase = YES; -#ifdef DEBUG - NSString *isProduction = [[NSUserDefaults standardUserDefaults]valueForKey:@"kIsProductionEnvironment"]; - if([isProduction isEqualToString:@"YES"]){ - isRelase = YES; - }else{ - isRelase = NO; + // 参数加密签名Key(用于API请求签名) + if (type == KeyType_Sign) { + return @"rpbs6us1m8r2j9g6u06ff2bo18orwaya"; } -#else - isRelase = YES; -#endif - ///测试环境 - if(isRelase == NO){ - - NSDictionary * dic = @{ - @(KeyType_PasswordEncode) : @"1ea53d260ecf11e7b56e00163e046a26", - @(KeyType_TRTC) : @"1400741885", - @(KeyType_NetEase) : @"79bc37000f4018a2a24ea9dc6ca08d32", -// @(keyType_YiDunBussinessId) : @"3611b99d0457202a7f69151288183236", -// @(keyType_YiDunPhotoBussinessId) : @"", - @(KeyType_FacePwdEncode) : @"1ea53d260ecf11e7b56e00163e046a26", - @(KeyType_SudGameAppID) : @"1578948593831571457", - @(KeyType_SudGameAppKey) : @"J9lHOXvFWkAZiTfl4SK7IGt0wDnW3fWd", - @(KeyType_GuildUidKey) : @"938284", - @(KeyType_SystemNotifiUidKey) : @"938283", - @(KeyType_SecretaryUidKey) : @"938282", - @(KeyType_Sign) : @"rpbs6us1m8r2j9g6u06ff2bo18orwaya" - }; - NSString * value = [dic objectForKey:@(type)]; - return value; - } - - - NSDictionary *newDic = @{ - @(KeyType_SudGameAppID) : @"1578948593831571457",///小游戏 - @(KeyType_SudGameAppKey) : @"J9lHOXvFWkAZiTfl4SK7IGt0wDnW3fWd",///小游戏 -// @(keyType_YiDunBussinessId) : @"f459972b432106844b89fd58c92b8061", -// @(keyType_YiDunPhotoBussinessId) : @"", - @(KeyType_TRTC) : @"1400823228",/// - @(KeyType_NetEase) : @"7371d729710cd6ce3a50163b956b5eb6",/// - @(KeyType_FacePwdEncode) : @"1ea53d260ecf11e7b56e00163e046a26",/// - @(KeyType_PasswordEncode) : @"1ea53d260ecf11e7b56e00163e046a26",/// - @(KeyType_Sign) : @"rpbs6us1m8r2j9g6u06ff2bo18orwaya" - }; - NSString * newValue = [newDic objectForKey:@(type)]; - if(newValue != nil){ - return newValue; - } - - NSDictionary * dic = @{ - @(KeyType_GuildUidKey) : @"umyLNHTFzWIPw2FWQcYIeQ==", - @(KeyType_SystemNotifiUidKey) : @"ZacsLJGoW2hbNoXo32DnaA==", - @(KeyType_SecretaryUidKey) : @"cHTJhjYL9UXGs8NJSFxhdg==" - }; - NSString * value = [dic objectForKey:@(type)]; - NSString * number = [AESUtils aesDecrypt:value]; - return number; + return @""; } @end diff --git a/YuMi/Global/YUMIHtmlUrl.h b/YuMi/Global/YUMIHtmlUrl.h index b183d57..092d8db 100644 --- a/YuMi/Global/YUMIHtmlUrl.h +++ b/YuMi/Global/YUMIHtmlUrl.h @@ -11,115 +11,12 @@ NS_ASSUME_NONNULL_BEGIN @interface YUMIHtmlUrl : NSObject +/// URL类型枚举(仅保留实际使用的类型) typedef NS_ENUM(NSUInteger, URLType) { - kPrivacyURL,///隐私政策 - kPrivacySDKURL,// 隐私政策-SDK - kPrivacyPersonalURL,// 隐私政策-个人信息 - kPrivacyDeviceURL,// 隐私政策-设备权限 - kUserProtocalURL, ///用户协议 - kUserInviteFriendURL, ///邀请好友 - kFAQURL,///帮助 - kIdentityURL,///实名认证 - kGameBindAccountURL, - kNurseryURL,///护苗计划 - kRechargePrivacyURL,////充值协议 - kReportRoomURL,///举报房间 - ///分享房间 - kShareRoomURL, - /// 获奖记录 - kCandyTreeRecordURL, - /// 糖果树玩法规则 - kCandyTreeRuleURL, - ///房间魅力榜 - kRoomCharmRankURL, - ///房间榜 - kRoomRankURL, - ///房间小时榜 - kRoomHourRankURL, - ///用户等级 - kUserLevelURL, - ///平台榜单入口 - kHomeRankURL, - ///相亲规则介绍 - kRoomDatingRule, - ///VIP规则 - kNobleRuleURL, - ///VIP排行榜 - kNobleRankURL, - ///用户充值协议 - kUserRechargeAgrURL, - //用户注册服务协议 - kUserRegiServiceAgrURL, - ///直播服务协议 - kLiveServiceAgrURL, - ///社区规范 - kCommunitySpecURL, - ///账号注销协议 - kAccountlogoutAgrURL, - ///账号注销 - kAccountlogoutURL, - kAccountlogoutConfirmURL, - ///主播粉丝团-铭牌申请 - kAnchorFansOpenURL, - ///主播粉丝团-粉丝列表 - kAnchorFansListURL, - ///主播粉丝团-粉丝排行 - kAnchorFansRankURL, - ///主播粉丝团-粉丝团规则 - kAnchorFansRuleURL, - ///周星礼物-周星榜 - kNewWeekStarURL, - ///牌照房间小时榜 - kLicenseHourRankURL, - ///幸运礼物玩法说明 - kLuckyGiftPlayRuleURL, - ///航海中奖记录 - kSailingRecordURL, - ///航海玩法说明 - kSailingPlayDescdURL, - ///活动地址 - kSailingActivityURL, - ///网络整治乱象 - kNetworkRenovateURL, - ///动态分享 - kMonentsShareURL, - ///红包规则 - kRedPacketRuleURL, - ///星座入口 - kXinZuoStarURL, - ///收益记录 - kMineEarningsRecord, - ///金币收益记录 - kGoldEarningsRecord, - ///夺宝券购买 - kTreasureTicketBuyURL, - ///夺宝榜单达人 - kTreasureRankListURL, - ///夺宝券规则说明 - kTreasureRuleURL, - ///夺宝记录 - kTreasureRecordURL, - kChannelUrl, - ///LUDO排行榜路径 - kLUDOUrl, - /// CP 規則頁 - kCPRule, - /// 火箭规则 - KBoomRule, - /// 房间等级说明 - KRoomLevelRule, - /// 红包规则说明 - KLuckyPackageRule, - /// 人機驗證 - kCaptchaSwitchPath, - /// 活动详情页 - kEventDetailPath, - // 新排行榜 - kRankV2, - kVIP, - kTransfer, - kFirstChargeHomeIndex, - kFirstChargeBanner, + kPrivacyURL = 0, ///隐私政策 + kUserProtocalURL = 4, ///用户协议 + kFAQURL = 6, ///帮助/常见问题 + kCaptchaSwitchPath = 113, ///人机验证 }; NSString * const URLWithType(URLType type); diff --git a/YuMi/Global/YUMIHtmlUrl.m b/YuMi/Global/YUMIHtmlUrl.m index 6385cfa..f9bb2e9 100644 --- a/YuMi/Global/YUMIHtmlUrl.m +++ b/YuMi/Global/YUMIHtmlUrl.m @@ -7,91 +7,37 @@ #import "YUMIHtmlUrl.h" #import "AESUtils.h" -#import "Base64.h" -#import + @implementation YUMIHtmlUrl NSString * const URLWithType(URLType type) { - NSString * prefix = @"eparty"; - NSDictionary *newDic = @{ - @(kTreasureTicketBuyURL) : @"modules/act-treasureSnatching/index.html",///夺宝购买 - @(kTreasureRankListURL) : @"modules/act-treasureSnatching/list.html",///夺宝达人 - @(kTreasureRuleURL) : @"modules/act-treasureSnatching/rule.html",///夺宝规则说明 - @(kTreasureRecordURL) : @"modules/act-treasureSnatching/record.html",///夺宝记录 - @(kNobleRankURL) : @"modules/noble/index.html",///排行榜 - @(kGoldEarningsRecord) : @"modules/myincome/index.html#/GoldLog",///金币收益记录 - @(kCandyTreeRuleURL) : @"modules/rule/newWishingWellRule.html",///糖果树规则 modules/rank/index.html#/wishingWellRule - @(kChannelUrl) : @"modules/%@/index.html?channelType=%@&deviceId=%@", - @(kLUDOUrl) : @"modules/gameRank/index.html",///LUDO排行榜路径 - @(kCPRule) : @"modules/rule/cpRule.html", - @(KBoomRule) : @"modules/rule/boom.html?partitionId=",///收益记录, - @(KRoomLevelRule) : @"modules/roomLevel/index.html",///房间等级, - @(KLuckyPackageRule) : @"modules/luckyBagRules/index.html",///红包礼物, - @(kCaptchaSwitchPath) : @"modules/humanMachineVerification/index.html", - @(kAccountlogoutConfirmURL) : @"modules/logout/confirm.html", - @(kEventDetailPath) : @"modules/eventDetails/index.html?eventId=", - @(kRankV2) : @"modules/newRank/index.html", - @(kVIP) : @"modules/vip_Center/index.html", - @(kTransfer) : @"modules/rechargeAgent/index.html#/myTransfer", - @(kFirstChargeBanner) : @"modules/firstRechargeBonus/First_Bonus.html", - @(kFirstChargeHomeIndex) : @"modules/firstRechargeBonus/index.html", - + NSString *prefix = @"eparty"; + + // 明文 URL 配置(无需加密的路径) + NSDictionary *plainUrls = @{ + @(kCaptchaSwitchPath): @"modules/humanMachineVerification/index.html", }; - NSString * newUrl = [newDic objectForKey:@(type)]; - if(newUrl != nil){ - NSString * url = [newDic objectForKey:@(type)]; - return [NSString stringWithFormat:@"%@/%@",prefix, url]; + + NSString *plainUrl = plainUrls[@(type)]; + if (plainUrl) { + return [NSString stringWithFormat:@"%@/%@", prefix, plainUrl]; } - - NSDictionary * dic = @{ - @(kPrivacyURL) : @"sPa8x4YF1hFEeCeH5v+RMOulemxgjjZLbxkN8ZrBSM8=",//隐私政策 modules/rule/privacy-wap.html - @(kPrivacySDKURL) : @"EXbb0qKoel1tyEL3rQ3//BQ6p/uA56xs9iAOyFI7TRU=",//隐私政策-SDK modules/rule/sdk.html - @(kPrivacyPersonalURL) : @"u+t46y/9x4S49BgHUeSXxxu2D69UtZtmyhA93HUTvzI=",//隐私政策-个人信息 modules/rule/personal-info.html - @(kPrivacyDeviceURL) : @"u+t46y/9x4S49BgHUeSXx/rPFwLB78TiQyN+xJKENGQ=",//隐私政策-设备权限 modules/rule/permissions.html - @(kUserProtocalURL) : @"0sBhBaRqf7oBlYvNK4azCrVPTFjv9FYF0A2v9+qkSxg=",///用户协议 modules/rule/protocol.html - @(kUserInviteFriendURL) : @"HInhWCyiR3L4dAlHrmQ/GttrZqXhOtq85WujAcETPPI=",///邀请好友 - @(kFAQURL) : @"k/Bqnh8nGkuhV8KhU6xN5a8EkxEQrbDMAWNBtaAdJCo=",//常见问题 modules/rule/guide.html - @(kIdentityURL) : @"EQtrsRlCX2+rJN89+qyAT6JtfEnprTylInFU0tTPyLA=",//实人认证 modules/identity/new.html - @(kGameBindAccountURL) : @"5s9YWzw5Lt6ro86UN4pUFETAyuCsIL3wl00gLK5rCek=",///绑定账号 modules/game/bindAccount.html - @(kNurseryURL) : @"ZT1/YWK/T7gXs1rGDAYnbqG0OrzjhPKJfaebh80/1ro=",///护苗计划 activity/cleanNet/index.html - @(kRechargePrivacyURL) : @"boJayVmf9bj+vVXabUop2cc110U9LaDdAJhHfbinDzXLhlBtiv3h7J6Sivv3v1Lr",//充值协议 modules/rule/rechargeAgreement.html - @(kReportRoomURL) : @"TbIA4vIU9O5Z/RGJKEELZNe7SFzF9ig/Lvo6D1upv/g=",///举报房间 - @(kShareRoomURL) : @"k+TyUH/PriZr4MWmS/rq8BUYAu34MX3ZyAZsDLF0Eck=",///分享房间 modules/share_room/index.html - @(kCandyTreeRecordURL) : @"V6XAvR9DZVl5TTczQ/JABDNKGpFSnSP/r6WLbu91uPKWKlwVlmlYvkETALeLk7Jz",///糖果树记录 modules/rank/index.html#/newWishingWellRecord - @(kRoomCharmRankURL) : @"a5qVnItWuLLh148cl8R/+VuVNfOSOd1nzVzfSFbAxUA=",//房间魅力榜 modules/charm/index.html - @(kRoomRankURL) : @"DqPWO/9EdbpkGl4PoRVQy4+hE8o8EuE30v2vN/yeZFg=", //房间榜 modules/room_rank/index.html - @(kRoomHourRankURL) : @"DqPWO/9EdbpkGl4PoRVQy7m9/mGnCSpoi673bWBnwBc=", //房间小时榜 modules/room_rank/hourRank.html - @(kUserLevelURL) : @"NE+tamYZsEj7S9BySlTpcCyRDMdxsWDzm6KrZTs9Lbo=",//我的等级 modules/level/index.html - @(kHomeRankURL) : @"V6XAvR9DZVl5TTczQ/JABNoH8I7E1sQ4oZmqs01zOfc=", // 排行榜 modules/rank/index.html#/rank - @(kRoomDatingRule) : @"BbMeRujqQH/yCud2VyM4tZMYe8oHwrQCEcP50kTTxgQ=",//相亲玩法 modules/rule/dating.html - @(kNobleRuleURL) : @"4x4Blbka3DFMAyZGSVqxAp0jXvE4/JUx48YfowufzircU1vr/Du8GqrouZUzD9Uq", // VIP规则 modules/rule/introduction-patrician.html - - @(kUserRechargeAgrURL) : @"boJayVmf9bj+vVXabUop2cc110U9LaDdAJhHfbinDzXLhlBtiv3h7J6Sivv3v1Lr", ///用户充值协议 - @(kUserRegiServiceAgrURL): @"0sBhBaRqf7oBlYvNK4azCrVPTFjv9FYF0A2v9+qkSxg=",//用户注册服务协议 modules/rule/protocol.html - @(kLiveServiceAgrURL) : @"83qLuhoOlxXOw3gwkchLAnb0iz5PEjqOS5dKRRzIxVw=", ///直播服务协议 modules/rule/live-protocol.html - @(kCommunitySpecURL) : @"oZs0ygpb9qtOkpZG1zcj1qS3fx0xzBArL1h358e1NM3hbbSU8qTOBmxkpJ03iq+K", ///社区规范 modules/rule/community-norms.html - @(kAccountlogoutAgrURL) : @"8pzk0dLk9GPSIKjn894dHtmPvxfIJTkUYNP5qTE7GzYpYAG7LWwF1pK7NWb4E0D9", ///账号注销协议 - @(kAccountlogoutURL) : @"8pzk0dLk9GPSIKjn894dHmMgQS2OHgRpZ6NNmxGMZ7E=", ///账号注销 modules/rule/loginout.html - @(kAnchorFansOpenURL) : @"mLMTNiyvF2Tbv4qan6+ogPrhx2U0FdD+3WkY/LdNbduiPL2qYSUiF2VJ2Dfbgnpn", ///主播粉丝团-铭牌申请v modules/fans_club/nameplate.html - @(kAnchorFansListURL) : @"mLMTNiyvF2Tbv4qan6+ogDXuGLEHnNEEiALV6JCC/gE=", ///主播粉丝团-粉丝列表 modules/fans_club/myfans.html - @(kAnchorFansRankURL) : @"mLMTNiyvF2Tbv4qan6+ogCO6lES2UPVnrnZbAxJMj9o+Oz0MAqy0RX8j1QuItbfT", ///主播粉丝团-粉丝排行 modules/fans_club/fans_rank.html - @(kAnchorFansRuleURL) : @"mLMTNiyvF2Tbv4qan6+ogG32ymd/DYTOoOeZFye3U9A=", ///主播粉丝团-粉丝团规则 modules/fans_club/rule.html - @(kNewWeekStarURL) : @"GmT6HOvcXNUSbxa4g7oNm8j+6DnTtsNc9nMk6SrEyCdP95p3Jwz84r/fjSNcBBRi", ///周星礼物-周星榜 modules/weekStar/newWeekStar.html - @(kLicenseHourRankURL) : @"DqPWO/9EdbpkGl4PoRVQyyMfaOgNqIr7sGIOi+kLkijf1EAcL9tVSblMXjNuq+Qy",///牌照房小时榜礼物 modules/room_rank/hourRankLicense.html - @(kLuckyGiftPlayRuleURL) : @"DcADpWwvzNDc5QYX9hmrJDFatpu+zp4ynUPdb+KeBx0+iFBaBI/MRU80MenYMHKQ",///幸运礼物玩法说明 modules/rule/luckyGiftRule.html?giftID=%@ - @(kSailingActivityURL) : @"ZrQv+cP5sXzlvQp0nvUa20JB5cyCS6X8LTGvUroUfxk=", ///航海活动地址 activity/act-sail/more.html - @(kSailingPlayDescdURL) : @"ZrQv+cP5sXzlvQp0nvUa23RXydMeqE8YfwP1J1xHCv3PdHFTlEJiRJ1vhrmu25pu", ///航海玩法规则 activity/act-sail/play_explain.html - @(kSailingRecordURL) : @"ZrQv+cP5sXzlvQp0nvUa2w5kpdXwSP1aQbPEWUi/gPvrXEWTD9m43qlvhznGtWx1", ///航海中奖记录 activity/act-sail/win_record.html - @(kNetworkRenovateURL) : @"vMZOLHkGF9uAzm9Ii2dzmQVhtZPf5IUKeg8H7/5FGcWE3YbMNrK59iMSV91HEHz/",///网络整治乱象 activity/activemodel/index.html?code=ZBGG - @(kMonentsShareURL) : @"s06Uv+UqjOdDhupnk0YpKKnSCSFCZssMEJxKZdf+s0Ge3zIFKv3knVVNr710Y5eF",///分享动态 modules/world/share-page/index.html - @(kRedPacketRuleURL) : @"nRMNKGz9zmwOEcoRr/bGneWzsrl+qHbvUGgXJhFAfVGcldkazbiNrc/v2rR0HFw+",///红包规则 modules/rule/red-packet-rule.html - @(kXinZuoStarURL) : @"3l3NxeDKO2bNAESpzjZ76mvJa2D26Bgqy+nNusiuH1UHYM+bYk+MM/TNM4VRqk1K",///星座礼物 activity/act-constellation/index.html - @(kMineEarningsRecord) : @"0HJ5o+40NtYGeHo1KRoQE3VdLhFQnvGyqgph9CCLjyU53rS29T2nD7UEh3CpX2BG",///收益记录 - - + + // 加密 URL 配置(需要 AES 解密的路径) + NSDictionary *encryptedUrls = @{ + @(kPrivacyURL): @"sPa8x4YF1hFEeCeH5v+RMOulemxgjjZLbxkN8ZrBSM8=", // modules/rule/privacy-wap.html + @(kUserProtocalURL): @"0sBhBaRqf7oBlYvNK4azCrVPTFjv9FYF0A2v9+qkSxg=", // modules/rule/protocol.html + @(kFAQURL): @"k/Bqnh8nGkuhV8KhU6xN5a8EkxEQrbDMAWNBtaAdJCo=", // modules/rule/guide.html }; - NSString * url = [dic objectForKey:@(type)]; - NSString * webUrl = [AESUtils aesDecrypt:url]; - return [NSString stringWithFormat:@"%@/%@",prefix, webUrl]; + + NSString *encryptedUrl = encryptedUrls[@(type)]; + if (encryptedUrl) { + NSString *decryptedPath = [AESUtils aesDecrypt:encryptedUrl]; + return [NSString stringWithFormat:@"%@/%@", prefix, decryptedPath]; + } + + // 未找到对应的 URL 配置 + return @""; } + @end diff --git a/YuMi/Global/YUMINNNN.h b/YuMi/Global/YUMINNNN.h index ad6cbe4..a108cad 100644 --- a/YuMi/Global/YUMINNNN.h +++ b/YuMi/Global/YUMINNNN.h @@ -4,88 +4,14 @@ // // Created by YUMI on 2021/9/13. // -///放置一些全局的枚举 +///全局枚举定义(仅保留实际使用的类型) #ifndef YUMINNNN_h #define YUMINNNN_h -typedef NS_ENUM(NSUInteger, ThirdLoginType) { - ThirdLoginType_WeChat = 1,///微信 - ThirdLoginType_QQ = 2,///QQ - ThirdLoginType_FB = 10,///FackBook - ThirdLoginType_Line = 9,///Line - ThirdLoginType_Gmail = 8,///谷歌 - ThirdLoginType_Apple = 5,///苹果登录 - ThirdLoginType_Phone = 11,///手机号登录 -}; - -/// @param type 类型 业务类型,必填,1注册,2登录,3重设密码,4绑定手机,5绑定xczAccount,6重设xcz密码,7解绑手机 +/// 短信验证码业务类型(仅保留实际使用的类型) typedef NS_ENUM(NSUInteger, GetSmsType) { - GetSmsType_Regist = 1,///注册 - GetSmsType_Login = 2,///登录 - GetSmsType_Reset_Password = 3,///重设密码 - GetSmsType_Bind_Phone = 4, ///绑定手机 - GetSmsType_Bind_ZF = 5,///绑定支付宝 - GetSmsType_Reset_ZF = 6,///重设支付密码 - GetSmsType_Unbind_Phone = 7, ///解绑手机 -}; - -typedef NS_ENUM(NSInteger, GenderType) { - GenderType_Male = 1,///男性 - GenderType_Female = 2,///女性 -}; - -typedef NS_ENUM(NSInteger, DressUpLabelType) { - DressUpLabelType_New = 1, //新品 - DressUpLabelType_Discount = 2, //折扣 - DressUpLabelType_Limit = 3,//限定 - DressUpLabelType_Exclusive = 4//专属 -}; - -typedef NS_ENUM(NSInteger, GroupType) { - GroupType_default = 0,//默认 - GroupType_Blue = 1,//蓝队 男神 - GroupType_Red = 2, //红队 女神 -}; - -typedef NS_ENUM(NSInteger, UserEnterRoomFromType) { - ///首页推荐 - UserEnterRoomFromType_Home_Recommend = 1, - ///跟随用户 - UserEnterRoomFromType_Follow_User = 2, - ///赛事详情 - UserEnterRoomFromType_Follow_Game_Detail = 8, - ///跨房PK - UserEnterRoomFromType_Cross_Room_PK = 9, - ///新用户打招呼 - UserEnterRoomFromType_New_User_Greet = 10 -}; -typedef NS_ENUM(NSInteger, LittleGamePlayStatus) { - LittleGamePlayStatus_NoIn = 0,//未加入 - LittleGamePlayStatus_IsIn = 1,//已加入 - LittleGamePlayStatus_Ready = 2, //已准备 - LittleGamePlayStatus_Plying = 3,//游戏中 -}; - -typedef NS_ENUM(NSInteger, RoomPKVoteModeType){ - RoomPKVoteModeType_GiftValue = 1,//礼物价值 - RoomPKVoteModeType_NumberPerson = 2, //按送礼物的人数 -}; - -typedef NS_ENUM(NSInteger, RoomPKResultType) { - RoomPKResultType_Draw = 0,//平局 - RoomPKResultType_Blue = 1,//蓝方胜 - RoomPKResultType_Red = 2, //红方胜 -}; - -typedef NS_ENUM(NSInteger, ContactUseingType) { - ///默认 - ContactUseingType_Normal = 0, - ///在房间内 - ContactUseingType_In_Room = 1, - ///分享 - ContactUseingType_Share = 2, - ///消息 - ContactUseingType_In_Session = 3 + GetSmsType_Regist = 1, ///注册 + GetSmsType_Reset_Password = 3, ///重设密码 }; #endif /* YUMINNNN_h */ diff --git a/YuMi/Modules/YMLogin/View/NewLogin/PIUserSexView.h b/YuMi/Modules/YMLogin/View/NewLogin/PIUserSexView.h index ac3e844..09b044c 100644 --- a/YuMi/Modules/YMLogin/View/NewLogin/PIUserSexView.h +++ b/YuMi/Modules/YMLogin/View/NewLogin/PIUserSexView.h @@ -6,11 +6,11 @@ // #import -#import "YUMINNNN.h" + NS_ASSUME_NONNULL_BEGIN @interface PIUserSexView : UIView -@property (nonatomic,assign) GenderType gender; +@property (nonatomic,assign) NSInteger gender; /// 性别 1:男 2:女 @property (nonatomic,assign) BOOL selected; @end diff --git a/YuMi/Modules/YMLogin/View/NewLogin/PIUserSexView.m b/YuMi/Modules/YMLogin/View/NewLogin/PIUserSexView.m index 3347d93..0e21b21 100644 --- a/YuMi/Modules/YMLogin/View/NewLogin/PIUserSexView.m +++ b/YuMi/Modules/YMLogin/View/NewLogin/PIUserSexView.m @@ -57,36 +57,26 @@ }]; } -- (void)setGender:(GenderType)gender { +- (void)setGender:(NSInteger)gender { _gender = gender; - switch (_gender) { - case GenderType_Male: - { - self.logoImageView.image = [UIImage imageNamed:@"login_full_male_logo"]; - self.sexLb.text = YMLocalizedString(@"PIUserSexView0"); - self.sexImageView.image = [UIImage imageNamed:@"login_full_male"]; - } - break; - case GenderType_Female: - { - self.logoImageView.image = [UIImage imageNamed:@"login_full_female_logo"]; - self.sexLb.text = YMLocalizedString(@"PIUserSexView1"); - self.sexImageView.image = [UIImage imageNamed:@"login_full_female"]; - } - break; - - default: - break; + if (_gender == 1) { // 男性 + self.logoImageView.image = [UIImage imageNamed:@"login_full_male_logo"]; + self.sexLb.text = YMLocalizedString(@"PIUserSexView0"); + self.sexImageView.image = [UIImage imageNamed:@"login_full_male"]; + } else if (_gender == 2) { // 女性 + self.logoImageView.image = [UIImage imageNamed:@"login_full_female_logo"]; + self.sexLb.text = YMLocalizedString(@"PIUserSexView1"); + self.sexImageView.image = [UIImage imageNamed:@"login_full_female"]; } } - (void)setSelected:(BOOL)selected { _selected = selected; if (_selected) { - if (self.gender == GenderType_Male) { + if (self.gender == 1) { // 男性 self.backImageView.image = [UIImage gradientColorImageFromColors:@[[DJDKMIMOMColor colorWithHexString:@"#EBF5FF"],[DJDKMIMOMColor colorWithHexString:@"#FFFFFF"]] gradientType:GradientTypeTopToBottom imgSize:CGSizeMake(10, 10)]; self.backImageView.layer.borderColor = [DJDKMIMOMColor colorWithHexString:@"#B8E5FF"].CGColor; - } else { + } else { // 女性 self.backImageView.image = [UIImage gradientColorImageFromColors:@[[DJDKMIMOMColor colorWithHexString:@"#FFEBFA"],[DJDKMIMOMColor colorWithHexString:@"#FFFFFF"]] gradientType:GradientTypeTopToBottom imgSize:CGSizeMake(10, 10)]; self.backImageView.layer.borderColor = [DJDKMIMOMColor colorWithHexString:@"#FFB8E2"].CGColor; } diff --git a/YuMi/Modules/YMMessage/Tool/NIMSDKManager.h b/YuMi/Modules/YMMessage/Tool/NIMSDKManager.h deleted file mode 100644 index 007e2a4..0000000 --- a/YuMi/Modules/YMMessage/Tool/NIMSDKManager.h +++ /dev/null @@ -1,264 +0,0 @@ -// -// NIMSDKManager.h -// YUMI -// -// Created by YUMI on 2024/12/19. -// - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -// MARK: - NIMSDK配置模型 -@interface NIMSDKConfigModel : NSObject - -@property (nonatomic, copy) NSString *appKey; // 云信AppKey -@property (nonatomic, copy) NSString *apnsCername; // APNS证书名称 -@property (nonatomic, assign) BOOL shouldConsiderRevokedMessageUnreadCount; // 撤回消息计入未读数 -@property (nonatomic, assign) BOOL shouldSyncStickTopSessionInfos; // 同步置顶会话信息 -@property (nonatomic, assign) BOOL enabledHttpsForInfo; // 启用HTTPS信息传输 -@property (nonatomic, assign) BOOL enabledHttpsForMessage; // 启用HTTPS消息传输 - -@end - -// MARK: - NIMSDK登录状态枚举 -typedef NS_ENUM(NSInteger, NIMSDKLoginStatus) { - NIMSDKLoginStatusNotLogin = 0, // 未登录 - NIMSDKLoginStatusLogging, // 登录中 - NIMSDKLoginStatusLogined, // 已登录 - NIMSDKLoginStatusLogout, // 已登出 - NIMSDKLoginStatusKickout, // 被踢出 - NIMSDKLoginStatusAutoLoginFailed // 自动登录失败 -}; - -// MARK: - NIMSDK登录回调 -typedef void(^NIMSDKLoginCompletion)(NSError * _Nullable error); -typedef void(^NIMSDKLogoutCompletion)(NSError * _Nullable error); -typedef void(^NIMSDKStatusChangeBlock)(NIMSDKLoginStatus status); - -// MARK: - NIMSDKManager代理协议 -@protocol NIMSDKManagerDelegate - -@optional -// 登录状态变化 -- (void)nimSDKManager:(id)manager didChangeLoginStatus:(NIMSDKLoginStatus)status; -// 自动登录失败 -- (void)nimSDKManager:(id)manager didAutoLoginFailed:(NSError *)error; -// 被踢出 -- (void)nimSDKManager:(id)manager didKickout:(NIMLoginKickoutResult *)result; -// 收到消息 -- (void)nimSDKManager:(id)manager didReceiveMessages:(NSArray *)messages; -// 收到广播消息 -- (void)nimSDKManager:(id)manager didReceiveBroadcastMessage:(NIMBroadcastMessage *)broadcastMessage; - -@end - -// MARK: - NIMSDKManager主类 -@interface NIMSDKManager : NSObject - -// MARK: - 单例方法 -+ (instancetype)sharedManager; - -// MARK: - 配置和初始化 -/** - 配置NIMSDK - @param config 配置模型 - */ -- (void)configureWithConfig:(NIMSDKConfigModel *)config; - -/** - 初始化NIMSDK - @param completion 完成回调 - */ -- (void)initializeWithCompletion:(void(^)(NSError * _Nullable error))completion; - -/** - 注册自定义消息解码器 - @param decoder 解码器实例 - */ -- (void)registerCustomDecoder:(id)decoder; - -// MARK: - 登录管理 -/** - 登录 - @param account 账号 - @param token 登录token - @param completion 完成回调 - */ -- (void)loginWithAccount:(NSString *)account - token:(NSString *)token - completion:(NIMSDKLoginCompletion)completion; - -/** - 自动登录 - @param data 自动登录数据 - @param completion 完成回调 - */ -- (void)autoLoginWithData:(NSDictionary *)data - completion:(NIMSDKLoginCompletion)completion; - -/** - 登出 - @param completion 完成回调 - */ -- (void)logoutWithCompletion:(NIMSDKLogoutCompletion)completion; - -/** - 强制登出 - @param completion 完成回调 - */ -- (void)forceLogoutWithCompletion:(NIMSDKLogoutCompletion)completion; - -// MARK: - 状态查询 -/** - 获取当前登录状态 - @return 登录状态 - */ -- (NIMSDKLoginStatus)currentLoginStatus; - -/** - 是否已登录 - @return 是否已登录 - */ -- (BOOL)isLogined; - -/** - 获取当前登录账号 - @return 当前登录账号 - */ -- (NSString *)currentAccount; - -// MARK: - 推送管理 -/** - 更新APNS设备Token - @param deviceToken 设备Token - */ -- (void)updateApnsToken:(NSData *)deviceToken; - -/** - 处理推送消息 - @param userInfo 推送消息内容 - @return 是否处理成功 - */ -- (BOOL)handlePushNotification:(NSDictionary *)userInfo; - -// MARK: - 代理管理 -/** - 添加代理 - @param delegate 代理对象 - */ -- (void)addDelegate:(id)delegate; - -/** - 移除代理 - @param delegate 代理对象 - */ -- (void)removeDelegate:(id)delegate; - -/** - 设置登录状态变化回调 - @param block 回调block - */ -- (void)setLoginStatusChangeBlock:(NIMSDKStatusChangeBlock)block; - -// MARK: - 消息管理 -/** - 发送消息 - @param message 消息对象 - @param session 会话对象 - @param completion 完成回调 - */ -- (void)sendMessage:(NIMMessage *)message - toSession:(NIMSession *)session - completion:(void(^)(NSError * _Nullable error))completion; - -/** - 获取未读消息数 - @return 未读消息数 - */ -- (NSInteger)unreadMessageCount; - -/** - 获取所有会话 - @return 会话列表 - */ -- (NSArray *)allRecentSessions; - -// MARK: - 用户管理 -/** - 获取用户信息 - @param userId 用户ID - @return 用户信息 - */ -- (NIMUser *)userInfo:(NSString *)userId; - -/** - 获取用户信息(异步) - @param userIds 用户ID数组 - @param completion 完成回调 - */ -- (void)fetchUserInfos:(NSArray *)userIds - completion:(void(^)(NSArray * _Nullable users, NSError * _Nullable error))completion; - -// MARK: - 聊天室管理 -/** - 进入聊天室 - @param roomId 房间ID - @param completion 完成回调 - */ -- (void)enterChatroom:(NSString *)roomId - completion:(void(^)(NSError * _Nullable error))completion; - -/** - 退出聊天室 - @param roomId 房间ID - @param completion 完成回调 - */ -- (void)exitChatroom:(NSString *)roomId - completion:(void(^)(NSError * _Nullable error))completion; - -// MARK: - 工具方法 -/** - 创建自定义消息 - @param attachment 自定义附件 - @return 消息对象 - */ -- (NIMMessage *)createCustomMessageWithAttachment:(id)attachment; - -/** - 创建文本消息 - @param text 文本内容 - @return 消息对象 - */ -- (NIMMessage *)createTextMessage:(NSString *)text; - -/** - 创建图片消息 - @param image 图片对象 - @return 消息对象 - */ -- (NIMMessage *)createImageMessage:(UIImage *)image; - -/** - 创建音频消息 - @param filePath 音频文件路径 - @param duration 音频时长 - @return 消息对象 - */ -- (NIMMessage *)createAudioMessage:(NSString *)filePath duration:(NSTimeInterval)duration; - -// MARK: - 清理方法 -/** - 清理资源 - */ -- (void)cleanup; - -@end - -NS_ASSUME_NONNULL_END - - - - - diff --git a/YuMi/Modules/YMMessage/Tool/NIMSDKManager.m b/YuMi/Modules/YMMessage/Tool/NIMSDKManager.m deleted file mode 100644 index 040e8e9..0000000 --- a/YuMi/Modules/YMMessage/Tool/NIMSDKManager.m +++ /dev/null @@ -1,410 +0,0 @@ -// -// NIMSDKManager.m -// YUMI -// -// Created by YUMI on 2024/12/19. -// - -#import "NIMSDKManager.h" -#import "CustomAttachmentDecoder.h" -#import "YUMIConstant.h" - -@interface NIMSDKManager () - -@property (nonatomic, strong) NIMSDKConfigModel *config; -@property (nonatomic, assign) NIMSDKLoginStatus loginStatus; -@property (nonatomic, strong) NSMutableArray> *delegates; -@property (nonatomic, copy) NIMSDKStatusChangeBlock statusChangeBlock; -@property (nonatomic, assign) BOOL isInitialized; - -@end - -@implementation NIMSDKManager - -#pragma mark - 单例方法 - -+ (instancetype)sharedManager { - static NIMSDKManager *instance = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - instance = [[NIMSDKManager alloc] init]; - }); - return instance; -} - -- (instancetype)init { - self = [super init]; - if (self) { - _delegates = [NSMutableArray array]; - _loginStatus = NIMSDKLoginStatusNotLogin; - _isInitialized = NO; - } - return self; -} - -#pragma mark - 配置和初始化 - -- (void)configureWithConfig:(NIMSDKConfigModel *)config { - self.config = config; -} - -- (void)initializeWithCompletion:(void(^)(NSError * _Nullable error))completion { - if (self.isInitialized) { - if (completion) { - completion(nil); - } - return; - } - - // 检查配置 - if (!self.config || !self.config.appKey) { - NSError *error = [NSError errorWithDomain:@"NIMSDKManager" - code:-1 - userInfo:@{NSLocalizedDescriptionKey: @"NIMSDK配置不完整"}]; - if (completion) { - completion(error); - } - return; - } - - // 创建SDK选项 - NIMSDKOption *option = [NIMSDKOption optionWithAppKey:self.config.appKey]; - if (self.config.apnsCername) { - option.apnsCername = self.config.apnsCername; - } - - // 注册SDK - [[NIMSDK sharedSDK] registerWithOption:option]; - - // 注册自定义解码器 - [self registerCustomDecoder:[[CustomAttachmentDecoder alloc] init]]; - - // 配置SDK参数 - [NIMSDKConfig sharedConfig].shouldConsiderRevokedMessageUnreadCount = self.config.shouldConsiderRevokedMessageUnreadCount; - [[NIMSDKConfig sharedConfig] setShouldSyncStickTopSessionInfos:self.config.shouldSyncStickTopSessionInfos]; - [NIMSDKConfig sharedConfig].enabledHttpsForInfo = self.config.enabledHttpsForInfo; - [NIMSDKConfig sharedConfig].enabledHttpsForMessage = self.config.enabledHttpsForMessage; - - // 添加代理 - [[NIMSDK sharedSDK].loginManager addDelegate:self]; - [[NIMSDK sharedSDK].chatManager addDelegate:self]; - [[NIMSDK sharedSDK].systemNotificationManager addDelegate:self]; - [[NIMSDK sharedSDK].broadcastManager addDelegate:self]; - - self.isInitialized = YES; - - if (completion) { - completion(nil); - } -} - -- (void)registerCustomDecoder:(id)decoder { - [NIMCustomObject registerCustomDecoder:decoder]; -} - -#pragma mark - 登录管理 - -- (void)loginWithAccount:(NSString *)account - token:(NSString *)token - completion:(NIMSDKLoginCompletion)completion { - - if (!self.isInitialized) { - NSError *error = [NSError errorWithDomain:@"NIMSDKManager" - code:-2 - userInfo:@{NSLocalizedDescriptionKey: @"NIMSDK未初始化"}]; - if (completion) { - completion(error); - } - return; - } - - self.loginStatus = NIMSDKLoginStatusLogging; - [self notifyStatusChange]; - - [[NIMSDK sharedSDK].loginManager login:account - token:token - completion:^(NSError * _Nullable error) { - dispatch_async(dispatch_get_main_queue(), ^{ - if (error) { - self.loginStatus = NIMSDKLoginStatusNotLogin; - } else { - self.loginStatus = NIMSDKLoginStatusLogined; - } - [self notifyStatusChange]; - - if (completion) { - completion(error); - } - }); - }]; -} - -- (void)autoLoginWithData:(NSDictionary *)data - completion:(NIMSDKLoginCompletion)completion { - - if (!self.isInitialized) { - NSError *error = [NSError errorWithDomain:@"NIMSDKManager" - code:-2 - userInfo:@{NSLocalizedDescriptionKey: @"NIMSDK未初始化"}]; - if (completion) { - completion(error); - } - return; - } - - self.loginStatus = NIMSDKLoginStatusLogging; - [self notifyStatusChange]; - - [[NIMSDK sharedSDK].loginManager autoLogin:data]; - - // 注意:自动登录的结果通过代理方法回调 - // 这里暂时返回成功,实际结果通过代理通知 - if (completion) { - completion(nil); - } -} - -- (void)logoutWithCompletion:(NIMSDKLogoutCompletion)completion { - [[NIMSDK sharedSDK].loginManager logout:^(NSError * _Nullable error) { - dispatch_async(dispatch_get_main_queue(), ^{ - if (!error) { - self.loginStatus = NIMSDKLoginStatusLogout; - [self notifyStatusChange]; - } - - if (completion) { - completion(error); - } - }); - }]; -} - -- (void)forceLogoutWithCompletion:(NIMSDKLogoutCompletion)completion { - // 强制登出,清理所有状态 - [[NIMSDK sharedSDK].loginManager logout:^(NSError * _Nullable error) { - dispatch_async(dispatch_get_main_queue(), ^{ - self.loginStatus = NIMSDKLoginStatusLogout; - [self notifyStatusChange]; - - if (completion) { - completion(error); - } - }); - }]; -} - -#pragma mark - 状态查询 - -- (NIMSDKLoginStatus)currentLoginStatus { - return self.loginStatus; -} - -- (BOOL)isLogined { - return [[NIMSDK sharedSDK].loginManager isLogined]; -} - -- (NSString *)currentAccount { - return [[NIMSDK sharedSDK].loginManager currentAccount]; -} - -#pragma mark - 推送管理 - -- (void)updateApnsToken:(NSData *)deviceToken { - [[NIMSDK sharedSDK] updateApnsToken:deviceToken]; -} - -- (BOOL)handlePushNotification:(NSDictionary *)userInfo { - // 处理推送消息的逻辑 - // 这里可以根据具体的推送格式进行解析和处理 - return YES; -} - -#pragma mark - 代理管理 - -- (void)addDelegate:(id)delegate { - if (delegate && ![self.delegates containsObject:delegate]) { - [self.delegates addObject:delegate]; - } -} - -- (void)removeDelegate:(id)delegate { - [self.delegates removeObject:delegate]; -} - -- (void)setLoginStatusChangeBlock:(NIMSDKStatusChangeBlock)block { - self.statusChangeBlock = block; -} - -#pragma mark - 消息管理 - -- (void)sendMessage:(NIMMessage *)message - toSession:(NIMSession *)session - completion:(void(^)(NSError * _Nullable error))completion { - [[NIMSDK sharedSDK].chatManager sendMessage:message - toSession:session - error:nil]; - // 注意:实际发送结果通过代理方法回调 - if (completion) { - completion(nil); - } -} - -- (NSInteger)unreadMessageCount { - return [[NIMSDK sharedSDK].conversationManager allUnreadCount]; -} - -- (NSArray *)allRecentSessions { - return [[NIMSDK sharedSDK].conversationManager allRecentSessions]; -} - -#pragma mark - 用户管理 - -- (NIMUser *)userInfo:(NSString *)userId { - return [[NIMSDK sharedSDK].userManager userInfo:userId]; -} - -- (void)fetchUserInfos:(NSArray *)userIds - completion:(void(^)(NSArray * _Nullable users, NSError * _Nullable error))completion { - [[NIMSDK sharedSDK].userManager fetchUserInfos:userIds - completion:completion]; -} - -#pragma mark - 聊天室管理 - -- (void)enterChatroom:(NSString *)roomId - completion:(void(^)(NSError * _Nullable error))completion { - [[NIMSDK sharedSDK].chatroomManager enterChatroom:roomId - completion:completion]; -} - -- (void)exitChatroom:(NSString *)roomId - completion:(void(^)(NSError * _Nullable error))completion { - [[NIMSDK sharedSDK].chatroomManager exitChatroom:roomId - completion:completion]; -} - -#pragma mark - 工具方法 - -- (NIMMessage *)createCustomMessageWithAttachment:(id)attachment { - NIMCustomObject *customObject = [[NIMCustomObject alloc] init]; - customObject.attachment = attachment; - - NIMMessage *message = [[NIMMessage alloc] init]; - message.messageObject = customObject; - return message; -} - -- (NIMMessage *)createTextMessage:(NSString *)text { - return [[NIMMessage alloc] initWithText:text]; -} - -- (NIMMessage *)createImageMessage:(UIImage *)image { - NIMImageObject *imageObject = [[NIMImageObject alloc] initWithImage:image]; - NIMMessage *message = [[NIMMessage alloc] init]; - message.messageObject = imageObject; - return message; -} - -- (NIMMessage *)createAudioMessage:(NSString *)filePath duration:(NSTimeInterval)duration { - NIMAudioObject *audioObject = [[NIMAudioObject alloc] initWithSourcePath:filePath]; - audioObject.duration = duration; - - NIMMessage *message = [[NIMMessage alloc] init]; - message.messageObject = audioObject; - return message; -} - -#pragma mark - 清理方法 - -- (void)cleanup { - // 移除代理 - [[NIMSDK sharedSDK].loginManager removeDelegate:self]; - [[NIMSDK sharedSDK].chatManager removeDelegate:self]; - [[NIMSDK sharedSDK].systemNotificationManager removeDelegate:self]; - [[NIMSDK sharedSDK].broadcastManager removeDelegate:self]; - - // 清理状态 - self.loginStatus = NIMSDKLoginStatusNotLogin; - self.isInitialized = NO; - [self.delegates removeAllObjects]; - self.statusChangeBlock = nil; -} - -#pragma mark - 私有方法 - -- (void)notifyStatusChange { - // 通知代理 - for (id delegate in self.delegates) { - if ([delegate respondsToSelector:@selector(nimSDKManager:didChangeLoginStatus:)]) { - [delegate nimSDKManager:self didChangeLoginStatus:self.loginStatus]; - } - } - - // 通知block - if (self.statusChangeBlock) { - self.statusChangeBlock(self.loginStatus); - } -} - -#pragma mark - NIMLoginManagerDelegate - -- (void)onAutoLoginFailed:(NSError *)error { - dispatch_async(dispatch_get_main_queue(), ^{ - self.loginStatus = NIMSDKLoginStatusAutoLoginFailed; - [self notifyStatusChange]; - - // 通知代理 - for (id delegate in self.delegates) { - if ([delegate respondsToSelector:@selector(nimSDKManager:didAutoLoginFailed:)]) { - [delegate nimSDKManager:self didAutoLoginFailed:error]; - } - } - }); -} - -- (void)onKickout:(NIMLoginKickoutResult *)result { - dispatch_async(dispatch_get_main_queue(), ^{ - self.loginStatus = NIMSDKLoginStatusKickout; - [self notifyStatusChange]; - - // 通知代理 - for (id delegate in self.delegates) { - if ([delegate respondsToSelector:@selector(nimSDKManager:didKickout:)]) { - [delegate nimSDKManager:self didKickout:result]; - } - } - }); -} - -#pragma mark - NIMChatManagerDelegate - -- (void)onRecvMessages:(NSArray *)messages { - dispatch_async(dispatch_get_main_queue(), ^{ - // 通知代理 - for (id delegate in self.delegates) { - if ([delegate respondsToSelector:@selector(nimSDKManager:didReceiveMessages:)]) { - [delegate nimSDKManager:self didReceiveMessages:messages]; - } - } - }); -} - -#pragma mark - NIMBroadcastManagerDelegate - -- (void)onReceiveBroadcastMessage:(NIMBroadcastMessage *)broadcastMessage { - dispatch_async(dispatch_get_main_queue(), ^{ - // 通知代理 - for (id delegate in self.delegates) { - if ([delegate respondsToSelector:@selector(nimSDKManager:didReceiveBroadcastMessage:)]) { - [delegate nimSDKManager:self didReceiveBroadcastMessage:broadcastMessage]; - } - } - }); -} - -@end - - - - - diff --git a/YuMi/Modules/YMMine/Api/Api+Mine.h b/YuMi/Modules/YMMine/Api/Api+Mine.h index b076746..fd75750 100644 --- a/YuMi/Modules/YMMine/Api/Api+Mine.h +++ b/YuMi/Modules/YMMine/Api/Api+Mine.h @@ -308,20 +308,6 @@ NS_ASSUME_NONNULL_BEGIN +(void)getExchangeDiamondInformation:(HttpRequestHelperCompletion)completion; +(void)confirmExchangeDiamond:(HttpRequestHelperCompletion)completion goldNum:(NSString *)goldNum diamondNum:(NSString *)diamondNum currency:(NSString *)currency; -/// 得到声音卡信息 -/// - Parameters: -/// - completion: 完成 -/// - uid: 用户id -+(void)getSoundCardInfo:(HttpRequestHelperCompletion)completion uid:(NSString *)uid; - -/// 保存声音卡信息 -/// - Parameters: -/// - completion: 完成 -/// - audioUrl: 声音链接 -/// - second: 秒数 -+(void)saveSoundCardInfo:(HttpRequestHelperCompletion)completion audioUrl:(NSString *)audioUrl second:(NSString *)second; -///删除声音卡 -+(void)deleteSoundCardInfo:(HttpRequestHelperCompletion)completion; ///得到个人简介标签 +(void)getTagList:(HttpRequestHelperCompletion)completion; ///保存个人简介标签 diff --git a/YuMi/Modules/YMMine/Api/Api+Mine.m b/YuMi/Modules/YMMine/Api/Api+Mine.m index 7d59fcb..eb7d2e1 100644 --- a/YuMi/Modules/YMMine/Api/Api+Mine.m +++ b/YuMi/Modules/YMMine/Api/Api+Mine.m @@ -405,26 +405,7 @@ NSString * fang = [NSString stringFromBase64String:@"Z29sZEV4Y2hhbmdlRGlhbW9uZC9leGNoYW5nZQ=="];///goldExchangeDiamond/exchange [self makeRequest:fang method:HttpRequestHelperMethodPOST completion:completion,__FUNCTION__,goldNum,diamondNum,currency, nil]; } -/// 得到声音卡信息 -/// - Parameters: -/// - completion: 完成 -/// - uid: 用户id -+(void)getSoundCardInfo:(HttpRequestHelperCompletion)completion uid:(NSString *)uid{ - [self makeRequest:@"audioCard/get" method:HttpRequestHelperMethodGET completion:completion,__FUNCTION__,uid, nil]; -} -/// 保存声音卡信息 -/// - Parameters: -/// - completion: 完成 -/// - audioUrl: 声音链接 -/// - second: 秒数 -+(void)saveSoundCardInfo:(HttpRequestHelperCompletion)completion audioUrl:(NSString *)audioUrl second:(NSString *)second{ - [self makeRequest:@"audioCard/save" method:HttpRequestHelperMethodPOST completion:completion,__FUNCTION__,audioUrl,second, nil]; -} -///删除声音卡 -+(void)deleteSoundCardInfo:(HttpRequestHelperCompletion)completion{ - [self makeRequest:@"audioCard/del" method:HttpRequestHelperMethodPOST completion:completion,__FUNCTION__, nil]; -} +(void)getTagList:(HttpRequestHelperCompletion)completion{ [self makeRequest:@"label/edit" method:HttpRequestHelperMethodGET completion:completion,__FUNCTION__, nil]; } diff --git a/YuMi/Modules/YMMonents/Model/MomentsInfoModel.h b/YuMi/Modules/YMMonents/Model/MomentsInfoModel.h index c48ae3a..365cc3d 100644 --- a/YuMi/Modules/YMMonents/Model/MomentsInfoModel.h +++ b/YuMi/Modules/YMMonents/Model/MomentsInfoModel.h @@ -7,7 +7,6 @@ #import -#import "UserVipInfoVo.h" NS_ASSUME_NONNULL_BEGIN typedef NS_ENUM(NSInteger, MonentsContentType) { ///纯文字的 @@ -27,8 +26,8 @@ typedef NS_ENUM(NSInteger, MonentsContentType) { @property (nonatomic,assign) NSInteger defUser; ///是否是新用户 @property (nonatomic,assign) BOOL newUser; -///性别 -@property (nonatomic,assign) GenderType gender; +///性别 1:男 2:女 +@property (nonatomic,assign) NSInteger gender; ///头像 @property (nonatomic,copy) NSString *avatar; ///年龄 @@ -52,7 +51,7 @@ typedef NS_ENUM(NSInteger, MonentsContentType) { ///话题是否置顶 @property (nonatomic,assign) BOOL topicTop; ///VIP信息 -@property (nonatomic, strong) UserVipInfoVo *userVipInfoVO; +@property (nonatomic, strong) NSObject *userVipInfoVO; ///发布的内容 @property (nonatomic,copy) NSArray *dynamicResList; ///头饰url地址 diff --git a/YuMi/Modules/YMRoom/Features/Boom/Categories/RoomBoomManager_v2+EventHandling.h b/YuMi/Modules/YMRoom/Features/Boom/Categories/RoomBoomManager_v2+EventHandling.h deleted file mode 100644 index 41e76f2..0000000 --- a/YuMi/Modules/YMRoom/Features/Boom/Categories/RoomBoomManager_v2+EventHandling.h +++ /dev/null @@ -1,15 +0,0 @@ -#import "RoomBoomManager_v2.h" -#import "RoomBoomEvent.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface RoomBoomManager_v2 (EventHandling) - -- (void)handleBoomEvent:(RoomBoomEvent *)event; -- (void)handleGiftEvent:(RoomBoomEvent *)event; -- (void)handleBannerEvent:(RoomBoomEvent *)event; -- (void)handleEventError:(NSError *)error forEvent:(RoomBoomEvent *)event; - -@end - -NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMRoom/Features/Boom/Categories/RoomBoomManager_v2+EventHandling.m b/YuMi/Modules/YMRoom/Features/Boom/Categories/RoomBoomManager_v2+EventHandling.m deleted file mode 100644 index 35ba8d7..0000000 --- a/YuMi/Modules/YMRoom/Features/Boom/Categories/RoomBoomManager_v2+EventHandling.m +++ /dev/null @@ -1,130 +0,0 @@ -#import "RoomBoomManager_v2+EventHandling.h" -#import "RoomBoomManager_v2+Private.h" -#import "RoomBoomEventQueue.h" - -@implementation RoomBoomManager_v2 (EventHandling) - -#pragma mark - Event Processing - -- (void)handleBoomEvent:(RoomBoomEvent *)event { - if (!event) return; - - @synchronized (self) { - if (self.currentState != BoomStateIdle) { - // 如果当前正在处理其他事件,将事件加入队列 - RoomBoomEventQueue *queue = self.eventQueues[@(BoomEventTypeBoom)]; - [queue enqueueEvent:event]; - return; - } - - self.currentState = BoomStateBooming; - - // 通知所有监听器 - @synchronized (self.explosionListeners) { - for (NSDictionary *dic in self.explosionListeners) { - BoomEventBlock listener = [dic allValues].firstObject; - if (listener) { - listener(event.eventData); - } - } - } - } -} - -- (void)handleGiftEvent:(RoomBoomEvent *)event { - if (!event) return; - - @synchronized (self) { - if (self.currentState != BoomStateIdle) { - // 如果当前正在处理其他事件,将事件加入队列 - RoomBoomEventQueue *queue = self.eventQueues[@(BoomEventTypeGift)]; - [queue enqueueEvent:event]; - return; - } - - self.currentState = BoomStateGifting; - - // 通知所有监听器 - @synchronized (self.boomGiftsListeners) { - for (NSDictionary *dic in self.boomGiftsListeners) { - BoomEventBlock listener = [dic allValues].firstObject; - if (listener) { - listener(event.eventData); - } - } - } - } -} - -- (void)handleBannerEvent:(RoomBoomEvent *)event { - if (!event) return; - - @synchronized (self) { - if (self.currentState != BoomStateIdle) { - // 如果当前正在处理其他事件,将事件加入队列 - RoomBoomEventQueue *queue = self.eventQueues[@(BoomEventTypeBanner)]; - [queue enqueueEvent:event]; - return; - } - - self.currentState = BoomStateBannering; - - // 通知所有监听器 - @synchronized (self.bannerListeners) { - for (NSDictionary *dic in self.bannerListeners) { - BoomEventBlock listener = [dic allValues].firstObject; - if (listener) { - listener(event.eventData); - } - } - } - } -} - -- (void)handleEventError:(NSError *)error forEvent:(RoomBoomEvent *)event { - if (!error || !event) return; - - // 记录错误日志 - NSLog(@"Error handling event: %@, error: %@", event, error); - - // 重置状态 - @synchronized (self) { - self.currentState = BoomStateIdle; - - // 清理相关队列 - RoomBoomEventQueue *queue = self.eventQueues[@(event.type)]; - [queue clear]; - } - - // 可以在这里添加错误恢复逻辑 - // TODO: 添加错误恢复机制 -} - -#pragma mark - Helper Methods - -- (void)processNextEventInQueue:(BoomEventType)type { - RoomBoomEventQueue *queue = self.eventQueues[@(type)]; - if (!queue) return; - - @synchronized (self) { - if (self.currentState == BoomStateIdle) { - [queue processNextEvent]; - } - } -} - -- (void)resetStateForEventType:(BoomEventType)type { - @synchronized (self) { - if (self.currentState == BoomStateBooming && type == BoomEventTypeBoom) { - self.currentState = BoomStateIdle; - } else if (self.currentState == BoomStateGifting && type == BoomEventTypeGift) { - self.currentState = BoomStateIdle; - } else if (self.currentState == BoomStateBannering && type == BoomEventTypeBanner) { - self.currentState = BoomStateIdle; - } - - [self processNextEventInQueue:type]; - } -} - -@end diff --git a/YuMi/Modules/YMRoom/Features/Boom/Categories/RoomBoomManager_v2+NIMDelegate.h b/YuMi/Modules/YMRoom/Features/Boom/Categories/RoomBoomManager_v2+NIMDelegate.h deleted file mode 100644 index d204ac7..0000000 --- a/YuMi/Modules/YMRoom/Features/Boom/Categories/RoomBoomManager_v2+NIMDelegate.h +++ /dev/null @@ -1,10 +0,0 @@ -#import "RoomBoomManager_v2.h" -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface RoomBoomManager_v2 (NIMDelegate) - -@end - -NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMRoom/Features/Boom/Categories/RoomBoomManager_v2+NIMDelegate.m b/YuMi/Modules/YMRoom/Features/Boom/Categories/RoomBoomManager_v2+NIMDelegate.m deleted file mode 100644 index 2357cd9..0000000 --- a/YuMi/Modules/YMRoom/Features/Boom/Categories/RoomBoomManager_v2+NIMDelegate.m +++ /dev/null @@ -1,103 +0,0 @@ -#import "RoomBoomManager_v2+NIMDelegate.h" -#import "RoomBoomManager_v2+Private.h" -#import "RoomBoomManager_v2+EventHandling.h" -#import "RoomBoomEvent.h" -#import "AttachmentModel.h" -#import "BoomInfoModel.h" -#import "XPSkillCardPlayerManager.h" -#import "AccountInfoStorage.h" - -@implementation RoomBoomManager_v2 (NIMDelegate) - -#pragma mark - NIMChatManagerDelegate - -- (void)onRecvMessages:(NSArray *)messages { - for (NIMMessage *message in messages) { - if (message.messageType == NIMMessageTypeCustom) { - NIMCustomObject *obj = (NIMCustomObject *)message.messageObject; - if (obj.attachment != nil && [obj.attachment isKindOfClass:[AttachmentModel class]]) { - AttachmentModel *attachment = (AttachmentModel *)obj.attachment; - if (attachment.first == CustomMessageType_RoomBoom) { - [self handleNIMAttachment:attachment]; - } - } - } - } -} - -#pragma mark - NIMBroadcastManagerDelegate - -- (void)onReceiveBroadcastMessage:(NIMBroadcastMessage *)broadcastMessage { - if ([AccountInfoStorage instance].getUid.length == 0) { - return; - } - - if (broadcastMessage.content) { - NSDictionary *msgDictionary = [broadcastMessage.content toJSONObject]; - AttachmentModel *attachment = [AttachmentModel modelWithJSON:msgDictionary[@"body"]]; - NSString *partitionId = [NSString stringWithFormat:@"%@", attachment.data[@"partitionId"]]; - - if (![partitionId isEqualToString:self.userInfo.partitionId]) { - return; - } - - if (attachment.first == CustomMessageType_RoomBoom) { - [self handleNIMAttachment:attachment]; - } - } -} - -#pragma mark - Private Methods - -- (void)handleNIMAttachment:(AttachmentModel *)attachment { - if (!attachment) return; - - RoomBoomEvent *event; - - switch (attachment.second) { - case Custom_Message_Room_Boom_EXP: { - // 经验值更新事件 - BoomDetailModel *boomDetail = [BoomDetailModel modelWithJSON:attachment.data]; - event = [RoomBoomEvent eventWithData:boomDetail - type:BoomEventTypeBoom - priority:BoomEventPriorityNormal]; - [self handleBoomEvent:event]; - break; - } - - case Custom_Message_Room_Boom_LevelUp: { - // 升级事件 - if ([[XPSkillCardPlayerManager shareInstance] isInRoomVC]) { - // 爆炸效果事件 - event = [RoomBoomEvent eventWithData:attachment - type:BoomEventTypeBoom - priority:BoomEventPriorityHigh]; - [self handleBoomEvent:event]; - - // 横幅事件 - event = [RoomBoomEvent eventWithData:attachment - type:BoomEventTypeBanner - priority:BoomEventPriorityNormal]; - [self handleBannerEvent:event]; - - [[NSNotificationCenter defaultCenter] postNotificationName:@"UpdateWhenBoomExplosion" - object:nil]; - } - break; - } - - case Custom_Message_Room_Boom_Award: { - // 礼物事件 - event = [RoomBoomEvent eventWithData:attachment - type:BoomEventTypeGift - priority:BoomEventPriorityNormal]; - [self handleGiftEvent:event]; - break; - } - - default: - break; - } -} - -@end diff --git a/YuMi/Modules/YMRoom/Features/Boom/Core/RoomBoomManager_v2+Private.h b/YuMi/Modules/YMRoom/Features/Boom/Core/RoomBoomManager_v2+Private.h deleted file mode 100644 index b9fe69e..0000000 --- a/YuMi/Modules/YMRoom/Features/Boom/Core/RoomBoomManager_v2+Private.h +++ /dev/null @@ -1,19 +0,0 @@ -#import "RoomBoomManager_v2.h" -#import "BoomInfoModel.h" -#import "UserInfoModel.h" -#import "RoomBoomEventQueue.h" - -@interface RoomBoomManager_v2 () - -@property (nonatomic, strong) NSMutableDictionary *eventQueues; -@property (nonatomic, assign) BoomState currentState; -@property (nonatomic, strong) UserInfoModel *userInfo; - -@property (nonatomic, strong) NSMutableArray *bannerListeners; -@property (nonatomic, strong) NSMutableArray *explosionListeners; -@property (nonatomic, strong) NSMutableArray *enterRoomExplosionListeners; -@property (nonatomic, strong) NSMutableArray *progressUpdateListeners; -@property (nonatomic, strong) NSMutableArray *boomGiftsListeners; -@property (nonatomic, strong) NSMutableArray *boomDetailArray; - -@end diff --git a/YuMi/Modules/YMRoom/Features/Boom/Core/RoomBoomManager_v2.h b/YuMi/Modules/YMRoom/Features/Boom/Core/RoomBoomManager_v2.h deleted file mode 100644 index a211e72..0000000 --- a/YuMi/Modules/YMRoom/Features/Boom/Core/RoomBoomManager_v2.h +++ /dev/null @@ -1,60 +0,0 @@ -#import -@class UserInfoModel; -@class BoomDetailModel; -@class BoomInfoModel; - -NS_ASSUME_NONNULL_BEGIN - -// 事件类型定义 -typedef NS_ENUM(NSInteger, BoomEventType) { - BoomEventTypeBoom, - BoomEventTypeGift, - BoomEventTypeBanner -}; - -// 状态定义 -typedef NS_ENUM(NSInteger, BoomState) { - BoomStateIdle, - BoomStateBooming, - BoomStateGifting, - BoomStateBannering -}; - -// 事件优先级 -typedef NS_ENUM(NSInteger, BoomEventPriority) { - BoomEventPriorityHigh, - BoomEventPriorityNormal, - BoomEventPriorityLow -}; - -// 回调block定义 -typedef void(^BoomEventBlock)(id _Nullable event); - -@interface RoomBoomManager_v2 : NSObject - -+ (instancetype)sharedManager; - -// 用户信息相关 -- (void)saveUserInfo:(UserInfoModel *)userInfo; -- (void)leaveRoom; - -// Boom 详情相关 -- (NSArray *)loadBoomDetails; -- (void)updateBoomDetailArray:(NSArray *)array; -- (void)updateBoomDetail:(BoomDetailModel *)boomDetail; -- (void)cleanBoomDetail; - -// 事件监听注册 -- (void)registerBoomBanner:(BoomEventBlock)block target:(id)target; -- (void)registerBoomExplosion:(BoomEventBlock)block target:(id)target; -- (void)registerBoomEnterRoomExplosion:(BoomEventBlock)block target:(id)target; -- (void)registerBoomProgressUpdate:(BoomEventBlock)block target:(id)target; -- (void)registerBoomGiftDisplay:(BoomEventBlock)block target:(id)target; -- (void)removeEventListenerForTarget:(id)target; - -// 事件接收 -- (void)receiveEnterRoomBoom:(BoomInfoModel *)model; - -@end - -NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMRoom/Features/Boom/Core/RoomBoomManager_v2.m b/YuMi/Modules/YMRoom/Features/Boom/Core/RoomBoomManager_v2.m deleted file mode 100644 index d12b5d6..0000000 --- a/YuMi/Modules/YMRoom/Features/Boom/Core/RoomBoomManager_v2.m +++ /dev/null @@ -1,210 +0,0 @@ -#import "RoomBoomManager_v2.h" -#import "RoomBoomManager_v2+Private.h" -#import "RoomBoomManager_v2+EventHandling.h" -#import "RoomBoomEvent.h" -#import "RoomBoomEventQueue.h" -#import "BoomInfoModel.h" -#import "UserInfoModel.h" -#import "AttachmentModel.h" -#import "XPSkillCardPlayerManager.h" - -@implementation RoomBoomManager_v2 - -#pragma mark - Lifecycle - -+ (instancetype)sharedManager { - static RoomBoomManager_v2 *instance; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - instance = [[self alloc] init]; - [[NIMSDK sharedSDK].chatManager addDelegate:instance]; - [[NIMSDK sharedSDK].broadcastManager addDelegate:instance]; - }); - return instance; -} - -- (instancetype)init { - self = [super init]; - if (self) { - [self setupEventQueues]; - [self setupListeners]; - } - return self; -} - -- (void)dealloc { - [[NIMSDK sharedSDK].chatManager removeDelegate:self]; - [[NIMSDK sharedSDK].broadcastManager removeDelegate:self]; -} - -#pragma mark - Setup - -- (void)setupEventQueues { - _eventQueues = [NSMutableDictionary dictionary]; - - // 设置Boom事件队列 - RoomBoomEventQueue *boomQueue = [[RoomBoomEventQueue alloc] init]; - boomQueue.processBlock = ^(id event) { - if ([event isKindOfClass:[RoomBoomEvent class]]) { - [self handleBoomEvent:event]; - } - }; - _eventQueues[@(BoomEventTypeBoom)] = boomQueue; - - // 设置Gift事件队列 - RoomBoomEventQueue *giftQueue = [[RoomBoomEventQueue alloc] init]; - giftQueue.processBlock = ^(id event) { - if ([event isKindOfClass:[RoomBoomEvent class]]) { - [self handleGiftEvent:event]; - } - }; - _eventQueues[@(BoomEventTypeGift)] = giftQueue; - - // 设置Banner事件队列 - RoomBoomEventQueue *bannerQueue = [[RoomBoomEventQueue alloc] init]; - bannerQueue.processBlock = ^(id event) { - if ([event isKindOfClass:[RoomBoomEvent class]]) { - [self handleBannerEvent:event]; - } - }; - _eventQueues[@(BoomEventTypeBanner)] = bannerQueue; -} - -- (void)setupListeners { - _bannerListeners = [NSMutableArray array]; - _explosionListeners = [NSMutableArray array]; - _enterRoomExplosionListeners = [NSMutableArray array]; - _progressUpdateListeners = [NSMutableArray array]; - _boomGiftsListeners = [NSMutableArray array]; -// _boomDetailArray = [NSMutableArray array]; -} - -#pragma mark - Public Methods - -- (void)saveUserInfo:(UserInfoModel *)userInfo { - _userInfo = userInfo; -} - -- (void)leaveRoom { - @synchronized (self) { - [self.eventQueues enumerateKeysAndObjectsUsingBlock:^(NSNumber *key, RoomBoomEventQueue *queue, BOOL *stop) { - [queue clear]; - }]; - self.currentState = BoomStateIdle; - } -} - -- (NSArray *)loadBoomDetails { - return [self.boomDetailArray copy]; -} - -- (void)updateBoomDetailArray:(NSArray *)array { - if (!array) return; - self.boomDetailArray = [array mutableCopy]; -} - -- (void)updateBoomDetail:(BoomDetailModel *)boomDetail { - if (!boomDetail) return; - - for (NSInteger i = 0; i < self.boomDetailArray.count; i++) { - BoomDetailModel *detail = self.boomDetailArray[i]; - if (detail.level == boomDetail.level) { - self.boomDetailArray[i] = boomDetail; - break; - } - } -} - -- (void)cleanBoomDetail { - [self.boomDetailArray removeAllObjects]; -} - -#pragma mark - Event Registration - -- (void)registerBoomBanner:(BoomEventBlock)block target:(id)target { - if (!block || !target) return; - @synchronized (self.bannerListeners) { - [self.bannerListeners addObject:@{NSStringFromClass([target class]): block}]; - } -} - -- (void)registerBoomExplosion:(BoomEventBlock)block target:(id)target { - if (!block || !target) return; - @synchronized (self.explosionListeners) { - [self.explosionListeners addObject:@{NSStringFromClass([target class]): block}]; - } -} - -- (void)registerBoomEnterRoomExplosion:(BoomEventBlock)block target:(id)target { - if (!block || !target) return; - @synchronized (self.enterRoomExplosionListeners) { - [self.enterRoomExplosionListeners addObject:@{NSStringFromClass([target class]): block}]; - } -} - -- (void)registerBoomProgressUpdate:(BoomEventBlock)block target:(id)target { - if (!block || !target) return; - @synchronized (self.progressUpdateListeners) { - [self.progressUpdateListeners addObject:@{NSStringFromClass([target class]): block}]; - } -} - -- (void)registerBoomGiftDisplay:(BoomEventBlock)block target:(id)target { - if (!block || !target) return; - @synchronized (self.boomGiftsListeners) { - [self.boomGiftsListeners addObject:@{NSStringFromClass([target class]): block}]; - } -} - -- (void)removeEventListenerForTarget:(id)target { - if (!target) return; - - NSString *targetClass = NSStringFromClass([target class]); - - @synchronized (self) { - // 从所有监听器数组中移除目标 - NSArray *listenerArrays = @[ - self.bannerListeners, - self.explosionListeners, - self.enterRoomExplosionListeners, - self.progressUpdateListeners, - self.boomGiftsListeners - ]; - - for (NSMutableArray *listeners in listenerArrays) { - @synchronized (listeners) { - NSInteger index = [listeners indexOfObjectPassingTest:^BOOL(NSDictionary *obj, NSUInteger idx, BOOL *stop) { - return [[obj allKeys] containsObject:targetClass]; - }]; - - if (index != NSNotFound) { - [listeners removeObjectAtIndex:index]; - } - } - } - } -} - -#pragma mark - Room Boom Events - -- (void)receiveEnterRoomBoom:(BoomInfoModel *)model { - if (!model) return; - - // 创建并处理进入房间的爆炸事件 - RoomBoomEvent *event = [RoomBoomEvent eventWithData:model - type:BoomEventTypeBoom - priority:BoomEventPriorityHigh]; - [self handleBoomEvent:event]; - - // 通知所有进入房间爆炸效果监听器 - @synchronized (self.enterRoomExplosionListeners) { - for (NSDictionary *dic in self.enterRoomExplosionListeners) { - BoomEventBlock listener = [dic allValues].firstObject; - if (listener) { - listener(model); - } - } - } -} - -@end diff --git a/YuMi/Modules/YMRoom/Features/Boom/Models/RoomBoomEvent.h b/YuMi/Modules/YMRoom/Features/Boom/Models/RoomBoomEvent.h deleted file mode 100644 index f0c7909..0000000 --- a/YuMi/Modules/YMRoom/Features/Boom/Models/RoomBoomEvent.h +++ /dev/null @@ -1,19 +0,0 @@ -#import -#import "RoomBoomManager_v2.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface RoomBoomEvent : NSObject - -@property (nonatomic, strong) id eventData; -@property (nonatomic, assign) BoomEventType type; -@property (nonatomic, assign) BoomEventPriority priority; -@property (nonatomic, assign) NSTimeInterval timestamp; - -+ (instancetype)eventWithData:(id)data - type:(BoomEventType)type - priority:(BoomEventPriority)priority; - -@end - -NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMRoom/Features/Boom/Models/RoomBoomEvent.m b/YuMi/Modules/YMRoom/Features/Boom/Models/RoomBoomEvent.m deleted file mode 100644 index 943de63..0000000 --- a/YuMi/Modules/YMRoom/Features/Boom/Models/RoomBoomEvent.m +++ /dev/null @@ -1,26 +0,0 @@ -#import "RoomBoomEvent.h" - -@implementation RoomBoomEvent - -+ (instancetype)eventWithData:(id)data - type:(BoomEventType)type - priority:(BoomEventPriority)priority { - RoomBoomEvent *event = [[RoomBoomEvent alloc] init]; - event.eventData = data; - event.type = type; - event.priority = priority; - event.timestamp = [[NSDate date] timeIntervalSince1970]; - return event; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@: %p> type: %ld, priority: %ld, timestamp: %f, data: %@", - NSStringFromClass([self class]), - self, - (long)self.type, - (long)self.priority, - self.timestamp, - self.eventData]; -} - -@end \ No newline at end of file diff --git a/YuMi/Modules/YMRoom/Features/Boom/Models/RoomBoomEventQueue.h b/YuMi/Modules/YMRoom/Features/Boom/Models/RoomBoomEventQueue.h deleted file mode 100644 index 1701ff7..0000000 --- a/YuMi/Modules/YMRoom/Features/Boom/Models/RoomBoomEventQueue.h +++ /dev/null @@ -1,17 +0,0 @@ -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface RoomBoomEventQueue : NSObject - -@property (nonatomic, strong) NSMutableArray *events; -@property (nonatomic, assign) BOOL isProcessing; -@property (nonatomic, copy) void(^processBlock)(id event); - -- (void)enqueueEvent:(id)event; -- (void)processNextEvent; -- (void)clear; - -@end - -NS_ASSUME_NONNULL_END \ No newline at end of file diff --git a/YuMi/Modules/YMRoom/Features/Boom/Models/RoomBoomEventQueue.m b/YuMi/Modules/YMRoom/Features/Boom/Models/RoomBoomEventQueue.m deleted file mode 100644 index 3622253..0000000 --- a/YuMi/Modules/YMRoom/Features/Boom/Models/RoomBoomEventQueue.m +++ /dev/null @@ -1,60 +0,0 @@ -#import "RoomBoomEventQueue.h" -#import "RoomBoomEvent.h" - -@implementation RoomBoomEventQueue - -- (instancetype)init { - self = [super init]; - if (self) { - _events = [[NSMutableArray alloc] init]; - _isProcessing = NO; - } - return self; -} - -- (void)enqueueEvent:(id)event { - @synchronized (self.events) { - [self.events addObject:event]; - - // 如果当前没有在处理事件,则开始处理 - if (!self.isProcessing) { - [self processNextEvent]; - } - } -} - -- (void)processNextEvent { - @synchronized (self.events) { - if (self.events.count == 0) { - self.isProcessing = NO; - return; - } - - self.isProcessing = YES; - id event = self.events.firstObject; - [self.events removeObjectAtIndex:0]; - - if (self.processBlock) { - dispatch_async(dispatch_get_main_queue(), ^{ - self.processBlock(event); - }); - } - } -} - -- (void)clear { - @synchronized (self.events) { - [self.events removeAllObjects]; - self.isProcessing = NO; - } -} - -- (NSString *)description { - return [NSString stringWithFormat:@"<%@: %p> events count: %lu, isProcessing: %@", - NSStringFromClass([self class]), - self, - (unsigned long)self.events.count, - self.isProcessing ? @"YES" : @"NO"]; -} - -@end \ No newline at end of file diff --git a/YuMi/Modules/YMRoom/View/RoomRank/View/Cell/XPRoomRankTableViewCell.m b/YuMi/Modules/YMRoom/View/RoomRank/View/Cell/XPRoomRankTableViewCell.m index c60cc17..d2703a1 100644 --- a/YuMi/Modules/YMRoom/View/RoomRank/View/Cell/XPRoomRankTableViewCell.m +++ b/YuMi/Modules/YMRoom/View/RoomRank/View/Cell/XPRoomRankTableViewCell.m @@ -101,7 +101,7 @@ numStr = [NSString stringWithFormat:YMLocalizedString(@"XPRoomRankTableViewCell0"),numF]; numStr = [numStr stringByReplacingOccurrencesOfString:@".0" withString:@""]; } - self.genderImageView.image = rankModel.gender == GenderType_Female ? [UIImage imageNamed:@"common_female"] : [UIImage imageNamed:@"common_male"]; + self.genderImageView.image = rankModel.gender == 2 ? [UIImage imageNamed:@"common_female"] : [UIImage imageNamed:@"common_male"]; // 2:女 1:男 self.coinNumberLabel.text = numStr; self.avatarImageView.imageUrl = rankModel.avatar; self.nickNameLabel.text = rankModel.nick; diff --git a/YuMi/Modules/YMRoom/View/RoomRank/View/SubViews/XPRoomRankUserInfoView.m b/YuMi/Modules/YMRoom/View/RoomRank/View/SubViews/XPRoomRankUserInfoView.m index 64384d7..afe4900 100644 --- a/YuMi/Modules/YMRoom/View/RoomRank/View/SubViews/XPRoomRankUserInfoView.m +++ b/YuMi/Modules/YMRoom/View/RoomRank/View/SubViews/XPRoomRankUserInfoView.m @@ -115,7 +115,7 @@ numStr = [numStr stringByReplacingOccurrencesOfString:@".0" withString:@""]; } self.sexImageView.hidden = NO; - self.sexImageView.image = rankModel.gender == GenderType_Female ? [UIImage imageNamed:@"common_female"] : [UIImage imageNamed:@"common_male"]; + self.sexImageView.image = rankModel.gender == 2 ? [UIImage imageNamed:@"common_female"] : [UIImage imageNamed:@"common_male"]; // 2:女 1:男 self.coinLabel.text = numStr; self.avatarImageView.imageUrl = rankModel.avatar; self.nickLabel.text = rankModel.nick; diff --git a/YuMi/Structure/Base/BaseNavigationController.m b/YuMi/Structure/Base/BaseNavigationController.m index efd0ac1..388105a 100644 --- a/YuMi/Structure/Base/BaseNavigationController.m +++ b/YuMi/Structure/Base/BaseNavigationController.m @@ -44,13 +44,7 @@ } - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated { if(self.topViewController == viewController) return; - if (self.childViewControllers.count > 0) { - viewController.hidesBottomBarWhenPushed = YES; - UIBarButtonItem *leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[[UIImage imageNamed:@"common_nav_back"]ms_SetImageForRTL] style:UIBarButtonItemStyleDone target:self action:@selector(backClick)]; - leftBarButtonItem.tintColor = [DJDKMIMOMColor mainTextColor]; - viewController.navigationItem.leftBarButtonItem = leftBarButtonItem; - } - viewController.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil]; + [super pushViewController:viewController animated:animated]; } diff --git a/YuMi/Structure/Base/BaseViewController.h b/YuMi/Structure/Base/BaseViewController.h index ddebd1b..7ce2976 100644 --- a/YuMi/Structure/Base/BaseViewController.h +++ b/YuMi/Structure/Base/BaseViewController.h @@ -6,7 +6,6 @@ // #import -#import "ClientConfig.h" NS_ASSUME_NONNULL_BEGIN diff --git a/YuMi/Structure/MVP/Model/GuildInfo.h b/YuMi/Structure/MVP/Model/GuildInfo.h deleted file mode 100644 index 8b607b8..0000000 --- a/YuMi/Structure/MVP/Model/GuildInfo.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// GuildInfo.h -// YuMi -// -// Created by P on 2024/9/19. -// - -#import "PIBaseModel.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface GuildInfo : PIBaseModel - -@property (nonatomic, copy) NSString *avatar; -@property (nonatomic, copy) NSString *guildName; -@property (nonatomic, assign) NSInteger erbanNo; -@property (nonatomic, assign) NSInteger guildId; -@property (nonatomic, assign) NSInteger showCpAnim; -@property (nonatomic, assign) NSInteger showCpAvatar; - -@end - -NS_ASSUME_NONNULL_END diff --git a/YuMi/Structure/MVP/Model/GuildInfo.m b/YuMi/Structure/MVP/Model/GuildInfo.m deleted file mode 100644 index 7320f42..0000000 --- a/YuMi/Structure/MVP/Model/GuildInfo.m +++ /dev/null @@ -1,12 +0,0 @@ -// -// GuildInfo.m -// YuMi -// -// Created by P on 2024/9/19. -// - -#import "GuildInfo.h" - -@implementation GuildInfo - -@end diff --git a/YuMi/Structure/MVP/Model/MedalModel.h b/YuMi/Structure/MVP/Model/MedalModel.h deleted file mode 100644 index 09868a0..0000000 --- a/YuMi/Structure/MVP/Model/MedalModel.h +++ /dev/null @@ -1,85 +0,0 @@ -// -// MedalModel.h -// YuMi -// -// Created by P on 2024/6/25. -// - -#import "PIBaseModel.h" - -NS_ASSUME_NONNULL_BEGIN - - -@interface UserMedalModel : PIBaseModel -/** - * 用户UID - */ -@property (nonatomic, assign) NSInteger uid; -/** - * 勋章ID - */ -@property (nonatomic, assign) NSInteger medalId; -/** - * 勋章名称 - */ -@property (nonatomic, copy) NSString *medalName; -/** - * 图片链接 - */ -@property (nonatomic, copy) NSString *picUrl; -/** - * 排序 - */ -@property (nonatomic, assign) NSInteger seqNo; -/** - * 勋章类型 - */ -@property (nonatomic, assign) NSInteger medalType; - -/** - * 是否点亮 - */ -@property (nonatomic, assign) BOOL isLightUp; - -/** - * 领取时间 - */ -@property (nonatomic, assign) double receiveTime; - -/** - * 勋章描述 - */ -@property (nonatomic, copy) NSString *medalDesc; - -/** - * 勋章横幅 - */ -@property (nonatomic, copy) NSString *banner; - -/** - * 勋章数量 - */ -@property (nonatomic, assign) NSInteger amount; - -/** - * 勋章小图标 - */ -@property (nonatomic, copy) NSString *smallIcon; - -/** - * 业务类型 - */ -@property (nonatomic, assign) NSInteger busType; - -@property (nonatomic,copy) NSString *mp4Url; - -@end - -@interface MedalModel : PIBaseModel - -@property (nonatomic, assign) NSInteger medalCount; -@property (nonatomic, strong) NSArray* userMedals; - -@end - -NS_ASSUME_NONNULL_END diff --git a/YuMi/Structure/MVP/Model/MedalModel.m b/YuMi/Structure/MVP/Model/MedalModel.m deleted file mode 100644 index c038f0e..0000000 --- a/YuMi/Structure/MVP/Model/MedalModel.m +++ /dev/null @@ -1,21 +0,0 @@ -// -// MedalModel.m -// YuMi -// -// Created by P on 2024/6/25. -// - -#import "MedalModel.h" - -@implementation MedalModel -+ (NSDictionary *)objectClassInArray { - return @{ - @"userMedals":UserMedalModel.class - }; -} -@end - -@implementation UserMedalModel - - -@end diff --git a/YuMi/Structure/MVP/Model/RelationUserVO.h b/YuMi/Structure/MVP/Model/RelationUserVO.h deleted file mode 100644 index d526b58..0000000 --- a/YuMi/Structure/MVP/Model/RelationUserVO.h +++ /dev/null @@ -1,54 +0,0 @@ -// -// RelationUserVO.h -// YuMi -// -// Created by P on 2024/9/19. -// - -#import "PIBaseModel.h" - -NS_ASSUME_NONNULL_BEGIN - -typedef NS_ENUM(NSUInteger, CP_TYPE) { - CP_TYPE_CP = 1, - CP_TYPE_BRO, - CP_TYPE_SISTER, - CP_TYPE_FRIEND -}; - -typedef NS_ENUM(NSUInteger, CP_CLICK_TYPE) { - CP_CLICK_TYPE_DEFAULT = 0, - CP_CLICK_TYPE_SENDING, - CP_CLICK_TYPE_PASSED -}; - -@interface RelationUserVO : PIBaseModel - -@property (nonatomic, assign) BOOL showCpAvatar; -@property (nonatomic, assign) BOOL showCpAnim; - -@property (nonatomic, copy) NSString *nick; -@property (nonatomic, copy) NSString *avatar; -@property (nonatomic, copy) NSString *cpNick; -@property (nonatomic, copy) NSString *cpAvatar; - -@property (nonatomic, assign) NSInteger uid; -@property (nonatomic, assign) NSInteger cpUid; -@property (nonatomic, assign) NSInteger cpDay; -@property (nonatomic, assign) NSInteger cpLevel; -@property (nonatomic, assign) NSInteger maxCpLevel; -@property (nonatomic, assign) NSInteger currentExp; -@property (nonatomic, assign) NSInteger nextLevelExp; -@property (nonatomic, assign) NSInteger cancelGoldNum; - -@property (nonatomic, assign) NSInteger endExp; -@property (nonatomic, assign) NSInteger startExp; - -@property (nonatomic, assign) CP_TYPE relationNameType; -@property (nonatomic, assign) CP_CLICK_TYPE clickFlag; //默认状态0,1-您已经提交更换申请,请耐心等待。2-你需要30天才能更换状态。 - -- (BOOL)isEmptyRelation; - -@end - -NS_ASSUME_NONNULL_END diff --git a/YuMi/Structure/MVP/Model/RelationUserVO.m b/YuMi/Structure/MVP/Model/RelationUserVO.m deleted file mode 100644 index be57def..0000000 --- a/YuMi/Structure/MVP/Model/RelationUserVO.m +++ /dev/null @@ -1,16 +0,0 @@ -// -// RelationUserVO.m -// YuMi -// -// Created by P on 2024/9/19. -// - -#import "RelationUserVO.h" - -@implementation RelationUserVO - -- (BOOL)isEmptyRelation { - return self.cpAvatar.length == 0 || self.cpUid == 0 || self.cpNick.length == 0; -} - -@end diff --git a/YuMi/Structure/MVP/Model/UserExpand.h b/YuMi/Structure/MVP/Model/UserExpand.h deleted file mode 100644 index 78e4c5b..0000000 --- a/YuMi/Structure/MVP/Model/UserExpand.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// UserExpand.h -// YUMI -// -// Created by zu on 2021/9/14. -// - -#import "NSObject+MJExtension.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface UserExpand : PIBaseModel -@property (nonatomic , assign) NSInteger id; -@property (nonatomic , assign) BOOL showLocation; -@property (nonatomic , assign) NSInteger uid; -@property (nonatomic , assign) BOOL showAge; -@property (nonatomic , assign) BOOL matchChat; -@property (nonatomic , assign) BOOL sysMsgNotify; -@end - -NS_ASSUME_NONNULL_END diff --git a/YuMi/Structure/MVP/Model/UserExpand.m b/YuMi/Structure/MVP/Model/UserExpand.m deleted file mode 100644 index 9f0a03c..0000000 --- a/YuMi/Structure/MVP/Model/UserExpand.m +++ /dev/null @@ -1,12 +0,0 @@ -// -// UserExpand.m -// YUMI -// -// Created by zu on 2021/9/14. -// - -#import "UserExpand.h" - -@implementation UserExpand - -@end diff --git a/YuMi/Structure/MVP/Model/UserInfoModel.h b/YuMi/Structure/MVP/Model/UserInfoModel.h index 859cc66..79c257a 100644 --- a/YuMi/Structure/MVP/Model/UserInfoModel.h +++ b/YuMi/Structure/MVP/Model/UserInfoModel.h @@ -6,16 +6,8 @@ // #import "NSObject+MJExtension.h" -#import "UserExpand.h" -#import "UserLevelVo.h" -#import "UserInfoSkillVo.h" -#import "UserVipInfoVo.h" -#import "UserPhoto.h" #import "MomentsInfoModel.h" -#import "MedalModel.h" -#import "RelationUserVO.h" -#import "GuildInfo.h" NS_ASSUME_NONNULL_BEGIN @@ -47,17 +39,17 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic , assign) NSInteger createTime; @property (nonatomic , assign) BOOL parentMode; @property (nonatomic , assign) BOOL isBindPhone; -@property (nonatomic , strong) UserExpand * userExpand; +@property (nonatomic , strong) NSObject * userExpand; @property (nonatomic , assign) NSInteger erbanNo; @property (nonatomic , assign) NSInteger registerDay; @property (nonatomic , assign) BOOL isFirstCharge; @property (nonatomic , assign) BOOL hasPrettyErbanNo; -@property (nonatomic , strong) UserLevelVo * userLevelVo; +@property (nonatomic , strong) NSObject * userLevelVo; @property (nonatomic , assign) BOOL isBindApple; @property (nonatomic , assign) NSInteger fansNum; @property (nonatomic , assign) BOOL isBindBankCard; @property (nonatomic , assign) BOOL hasRegPacket; -@property (nonatomic , assign) GenderType gender; +@property (nonatomic , assign) NSInteger gender; /// 性别 1:男 2:女 @property (nonatomic , assign) NSInteger platformRole; /// 0 普通 1超管 @property (nonatomic , assign) NSInteger uid; @property (nonatomic , assign) NSInteger defUser; @@ -68,7 +60,7 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic , copy) NSString * avatar; @property (nonatomic , copy) NSString * reviewingAvatar; @property (nonatomic , assign) BOOL isReview; -@property (nonatomic , strong) UserInfoSkillVo * userInfoSkillVo; +@property (nonatomic , strong) NSObject * userInfoSkillVo; @property (nonatomic,copy) NSString *region; @property (nonatomic,copy) NSArray *labels; @property (nonatomic , assign) BOOL newUser; @@ -85,7 +77,7 @@ NS_ASSUME_NONNULL_BEGIN ///限时首充结束时间 @property (nonatomic, assign) long limitChargeEndTime; ///相册 -@property (nonatomic, strong) NSArray *privatePhoto;//相册 +@property (nonatomic, strong) NSArray *privatePhoto;//相册 ///签名 @property (nonatomic,copy) NSString *userDesc; ///出生日期 @@ -128,7 +120,7 @@ NS_ASSUME_NONNULL_BEGIN ///所选择的麦序 @property (nonatomic,assign) int selectMicPosition; ///VIP信息 -@property (nonatomic, strong) UserVipInfoVo *userVipInfoVO; +@property (nonatomic, strong) NSObject *userVipInfoVO; ///当前使用的资料卡装扮 @property (nonatomic, copy) NSString *userInfoCardPic; ///麦位光圈链接 @@ -141,17 +133,12 @@ NS_ASSUME_NONNULL_BEGIN ///跟随的 本地添加的字段 @property (nonatomic,copy) NSString *fromNick; -@property (nonatomic,assign) UserEnterRoomFromType fromType; @property (nonatomic,copy) NSString *fromUid; ///安卓房间公屏气泡 @property (nonatomic, copy) NSString *androidBubbleUrl; ///iOS房间公屏气泡 @property (nonatomic, copy) NSString *iosBubbleUrl; #pragma mark - 小游戏 -/// 小游戏状态 0 未加入游戏;1 加入游戏未准备;2 加入游戏已准备 3 游戏中 -@property (nonatomic, assign) LittleGamePlayStatus gameStatus; -///用户的参加PK的类型 -@property (nonatomic, assign) GroupType groupType; ///礼物墙中的礼物 @property (nonatomic,strong) NSArray *userGiftWall; ///礼物墙中的幸运礼物礼物 @@ -179,11 +166,11 @@ NS_ASSUME_NONNULL_BEGIN ///pk时不能禁麦 @property(nonatomic,assign) BOOL isNoProhibitMic; -@property (nonatomic, strong) MedalModel *medals; +@property (nonatomic, strong) NSObject *medals; -@property (nonatomic, strong) RelationUserVO *relationUserVO; +@property (nonatomic, strong) NSObject *relationUserVO; -@property (nonatomic, strong) GuildInfo *guildInfo; +@property (nonatomic, strong) NSObject *guildInfo; @property (nonatomic, copy) NSArray *userNameplateList; diff --git a/YuMi/Structure/MVP/Model/UserInfoModel.m b/YuMi/Structure/MVP/Model/UserInfoModel.m index 1b02e17..d6e6fdb 100644 --- a/YuMi/Structure/MVP/Model/UserInfoModel.m +++ b/YuMi/Structure/MVP/Model/UserInfoModel.m @@ -19,7 +19,7 @@ + (NSDictionary *)objectClassInArray { return @{ - + @"dynamicInfo":MomentsInfoModel.class, }; } diff --git a/YuMi/Structure/MVP/Model/UserInfoSkillVo.h b/YuMi/Structure/MVP/Model/UserInfoSkillVo.h deleted file mode 100644 index a193339..0000000 --- a/YuMi/Structure/MVP/Model/UserInfoSkillVo.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// UserInfoSkillVo.h -// YUMI -// -// Created by zu on 2021/9/14. -// - -#import "NSObject+MJExtension.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface UserInfoSkillVo : PIBaseModel -@property (nonatomic , assign) BOOL liveTag; -@end - -NS_ASSUME_NONNULL_END diff --git a/YuMi/Structure/MVP/Model/UserInfoSkillVo.m b/YuMi/Structure/MVP/Model/UserInfoSkillVo.m deleted file mode 100644 index ef16061..0000000 --- a/YuMi/Structure/MVP/Model/UserInfoSkillVo.m +++ /dev/null @@ -1,12 +0,0 @@ -// -// UserInfoSkillVo.m -// YUMI -// -// Created by zu on 2021/9/14. -// - -#import "UserInfoSkillVo.h" - -@implementation UserInfoSkillVo - -@end diff --git a/YuMi/Structure/MVP/Model/UserLevelVo.h b/YuMi/Structure/MVP/Model/UserLevelVo.h deleted file mode 100644 index a294afc..0000000 --- a/YuMi/Structure/MVP/Model/UserLevelVo.h +++ /dev/null @@ -1,32 +0,0 @@ -// -// UserLevelVo.h -// YUMI -// -// Created by zu on 2021/9/14. -// - -#import "NSObject+MJExtension.h" - -NS_ASSUME_NONNULL_BEGIN -typedef NS_ENUM(NSInteger, UserLevelType) { - UserLevelType_Common = 1,///普通人 - UserLevelType_Offical = 2,///官方 - UserLevelType_Robot = 3, ///机器人 -}; - -@interface UserLevelVo : PIBaseModel -@property (nonatomic , copy) NSString * experUrl; -@property (nonatomic , assign) NSInteger charmLevelSeq; -@property (nonatomic , copy) NSString * experLevelName; -@property (nonatomic , copy) NSString * charmLevelName; -@property (nonatomic , assign) NSInteger charmAmount; -@property (nonatomic , copy) NSString * experLevelGrp; -@property (nonatomic , copy) NSString * charmUrl; -@property (nonatomic , assign) NSInteger experLevelSeq; -@property (nonatomic , assign) NSInteger experAmount; -@property (nonatomic , copy) NSString * charmLevelGrp; -///账号类型 -@property(nonatomic, assign) UserLevelType defUser; //账号类型 -@end - -NS_ASSUME_NONNULL_END diff --git a/YuMi/Structure/MVP/Model/UserLevelVo.m b/YuMi/Structure/MVP/Model/UserLevelVo.m deleted file mode 100644 index b4a9eed..0000000 --- a/YuMi/Structure/MVP/Model/UserLevelVo.m +++ /dev/null @@ -1,12 +0,0 @@ -// -// UserLevelVo.m -// YUMI -// -// Created by zu on 2021/9/14. -// - -#import "UserLevelVo.h" - -@implementation UserLevelVo - -@end diff --git a/YuMi/Structure/MVP/Model/UserPhoto.h b/YuMi/Structure/MVP/Model/UserPhoto.h deleted file mode 100644 index d3d70a3..0000000 --- a/YuMi/Structure/MVP/Model/UserPhoto.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// UserPhoto.h -// YUMI -// -// Created by YUMI on 2021/9/23. -// - -#import "NSObject+MJExtension.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface UserPhoto : PIBaseModel -@property (copy, nonatomic) NSString *photoUrl; -@property (copy, nonatomic) NSString *pid; -@property (nonatomic, assign) BOOL isReview; -@end - -NS_ASSUME_NONNULL_END diff --git a/YuMi/Structure/MVP/Model/UserPhoto.m b/YuMi/Structure/MVP/Model/UserPhoto.m deleted file mode 100644 index a2b2ff5..0000000 --- a/YuMi/Structure/MVP/Model/UserPhoto.m +++ /dev/null @@ -1,13 +0,0 @@ -// -// UserPhoto.m -// YUMI -// -// Created by YUMI on 2021/9/23. -// - -#import "UserPhoto.h" - -@implementation UserPhoto - - -@end diff --git a/YuMi/Structure/MVP/Model/UserVipInfoVo.h b/YuMi/Structure/MVP/Model/UserVipInfoVo.h deleted file mode 100644 index db5bf7f..0000000 --- a/YuMi/Structure/MVP/Model/UserVipInfoVo.h +++ /dev/null @@ -1,55 +0,0 @@ -// -// UserVipInfoVo.h -// YUMI -// -// Created by YUMI on 2022/1/4. -// VIP信息 - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface UserVipInfoVo : PIBaseModel - -///VIP图标 -@property (nonatomic, copy) NSString *vipIcon; -///VIP等级 -@property (nonatomic, assign) NSInteger vipLevel; -//用户好友昵称颜色 -@property (nonatomic, copy) NSString *friendNickColour; -///是否防被踢 -@property (nonatomic, assign) BOOL preventKick; -///是否隐身进房 -@property (nonatomic, assign) BOOL enterHide; -///VIP进房特效 -@property (nonatomic, copy) NSString *enterRoomEffects; -///VIP名称 -@property (nonatomic, copy) NSString *vipName; -///隐身访问主页 -@property (nonatomic,assign) BOOL lookHomepageHide; - -@property (nonatomic, copy) NSString *userCardBG; -/// 是否可以上传动态头像 -@property (nonatomic, assign) BOOL uploadGifAvatar; -/// 过期时间 -@property (nonatomic, assign) NSTimeInterval expireTime; -/// 是否防跟随进房 -@property (nonatomic, assign) BOOL preventTrace; -/// 是否防关注 -@property (nonatomic, assign) BOOL preventFollow; -/// 查看访客 -@property(nonatomic, assign) BOOL visitHide; -/// 是否無痕瀏覽 -@property(nonatomic, assign) BOOL visitListView; - -@property (nonatomic, assign) bool privateChatLimit; - -@property (nonatomic, copy) NSString *nameplateUrl; - -@property(nonatomic, assign) NSInteger visitListVipLimit; - -@property(nonatomic, assign) BOOL roomPicScreen; // 是否能发送房间公屏图片消息 - -@end - -NS_ASSUME_NONNULL_END diff --git a/YuMi/Structure/MVP/Model/UserVipInfoVo.m b/YuMi/Structure/MVP/Model/UserVipInfoVo.m deleted file mode 100644 index 1c41f3f..0000000 --- a/YuMi/Structure/MVP/Model/UserVipInfoVo.m +++ /dev/null @@ -1,12 +0,0 @@ -// -// UserVipInfoVo.m -// YUMI -// -// Created by YUMI on 2022/1/4. -// - -#import "UserVipInfoVo.h" - -@implementation UserVipInfoVo - -@end diff --git a/YuMi/Structure/MVP/Presenter/BaseMvpPresenter.m b/YuMi/Structure/MVP/Presenter/BaseMvpPresenter.m index 683dbf9..71ae103 100644 --- a/YuMi/Structure/MVP/Presenter/BaseMvpPresenter.m +++ b/YuMi/Structure/MVP/Presenter/BaseMvpPresenter.m @@ -7,7 +7,6 @@ #import "BaseMvpPresenter.h" #import "AccountInfoStorage.h" -#import "ClientConfig.h" #import "BaseNavigationController.h" @interface BaseMvpPresenter() diff --git a/YuMi/Structure/MVP/View/MvpViewController.m b/YuMi/Structure/MVP/View/MvpViewController.m index e318667..0394cc4 100644 --- a/YuMi/Structure/MVP/View/MvpViewController.m +++ b/YuMi/Structure/MVP/View/MvpViewController.m @@ -40,19 +40,7 @@ } - (void)setupTopTheme { - __block UIImageView *theme = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, kGetScaleWidth(140))]; - theme.image = [[ClientConfig shareConfig] navigationAreaBG]; - theme.contentMode = UIViewContentModeScaleAspectFill; - [self.view addSubview:theme]; - [[NSNotificationCenter defaultCenter] addObserverForName:[ClientConfig shareConfig].reloadNavigationAreaImageKey - object:nil - queue:[NSOperationQueue mainQueue] - usingBlock:^(NSNotification * _Nonnull notification) { - if ([notification.object isKindOfClass:[UIImage class]]) { - theme.image = (UIImage *)notification.object; - } - }]; } - (void)setupCustomNavigationBar:(void(^)(void))backAction title:(NSString *)title titleColor:(UIColor *)color { @@ -203,7 +191,7 @@ - (UIButton *)mvpBackButton { if (!_backButton) { UIButton *b = [UIButton buttonWithType:UIButtonTypeCustom]; - [b setImage:[kImage(@"common_nav_back_white") ms_SetImageForRTL] + [b setImage:kImage(@"common_nav_back_white") forState:UIControlStateNormal]; [b addTarget:self action:@selector(didTapBack) diff --git a/YuMi/Structure/PrefixHeader.pch b/YuMi/Structure/PrefixHeader.pch index 4eae140..e1eb7b3 100644 --- a/YuMi/Structure/PrefixHeader.pch +++ b/YuMi/Structure/PrefixHeader.pch @@ -36,7 +36,6 @@ isEnterprise = [bundleID isEqualToString:@"com.hflighting.yumi"];\ #import "YUMIHtmlUrl.h" #import "NSArray+Safe.h" #import "NSString+Utils.h" -#import "UIButton+EnlargeTouchArea.h" #import "UIView+Corner.h" #import "UIView+GradientLayer.h" #import "UILabel+Utils.h" @@ -50,15 +49,10 @@ isEnterprise = [bundleID isEqualToString:@"com.hflighting.yumi"];\ #import "YUMIConstant.h" #import "YUMINNNN.h" #import "NSObject+MJExtension.h" -#import -#import #import "HttpRequestHelper.h" #import "BSNetListenModel.h" #import "PIBaseModel.h" #import "PLTimeUtil.h" #import "UIImage+ImageEffects.h" -#import "UIImage+MSRTL.h" -#import "MSBaseRTLFlowLayout.h" -#import "MSBaseTextField.h" #import "SZTextView.h" #endif /* PrefixHeader_pch */ diff --git a/YuMi/Tools/File/AlbumResourcePickerViewController.h b/YuMi/Tools/File/AlbumResourcePickerViewController.h deleted file mode 100644 index 1a10c2a..0000000 --- a/YuMi/Tools/File/AlbumResourcePickerViewController.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// AlbumResourcePickerViewController.h -// YuMi -// -// Created by P on 2024/10/18. -// - -#import - -@class PHAsset; -NS_ASSUME_NONNULL_BEGIN - -@interface AlbumResourcePickerViewController : UIViewController - -@property (nonatomic, copy) void(^didSelectedAsset)(PHAsset *asset); - -@end - -NS_ASSUME_NONNULL_END diff --git a/YuMi/Tools/File/AlbumResourcePickerViewController.m b/YuMi/Tools/File/AlbumResourcePickerViewController.m deleted file mode 100644 index 8502812..0000000 --- a/YuMi/Tools/File/AlbumResourcePickerViewController.m +++ /dev/null @@ -1,281 +0,0 @@ -// -// AlbumResourcePickerViewController.m -// YuMi -// -// Created by P on 2024/10/18. -// - -#import "AlbumResourcePickerViewController.h" - -#import -#import - -#import "YYUtility.h" - -@interface ImageDetailViewController : UIViewController -@property (nonatomic, strong) UIImage *image; // 用于显示静态图片 -@property (nonatomic, strong) NSData *gifData; // 用于显示 GIF 数据 -@end - -@implementation ImageDetailViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - - self.view.backgroundColor = [UIColor blackColor]; // 背景颜色为黑色 - - if (self.gifData) { - // 如果是 GIF 动画 - FLAnimatedImage *animatedImage = [FLAnimatedImage animatedImageWithGIFData:self.gifData]; - FLAnimatedImageView *animatedImageView = [[FLAnimatedImageView alloc] initWithFrame:self.view.bounds]; - animatedImageView.animatedImage = animatedImage; - animatedImageView.contentMode = UIViewContentModeScaleAspectFit; - [self.view addSubview:animatedImageView]; - } else if (self.image) { - // 如果是静态图片 - UIImageView *imageView = [[UIImageView alloc] initWithFrame:self.view.bounds]; - imageView.image = self.image; - imageView.contentMode = UIViewContentModeScaleAspectFit; - [self.view addSubview:imageView]; - } - - [self setupToolArea]; - - // 添加关闭按钮 - UIButton *closeButton = [UIButton buttonWithType:UIButtonTypeSystem]; - [closeButton setTitle:@"关闭" forState:UIControlStateNormal]; - closeButton.frame = CGRectMake(20, 40, 60, 30); - [closeButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; - [closeButton addTarget:self action:@selector(closeButtonTapped) forControlEvents:UIControlEventTouchUpInside]; - [self.view addSubview:closeButton]; -} - -- (void)setupToolArea { - UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, 44)]; - titleLabel.text = @"选取图片"; -// titleLabel.backgroundColor = [UIColor c]; -} - -// 关闭按钮点击事件 -- (void)closeButtonTapped { - [self dismissViewControllerAnimated:YES completion:nil]; -} - -@end - - -@interface AlbumResourceCollectionCell : UICollectionViewCell - -@property (nonatomic, strong) FLAnimatedImageView *imageView; - -- (void)setupGifImage:(NSData *)data; -- (void)setupImage:(PHAsset *)asset; - -@end - -@implementation AlbumResourceCollectionCell - -- (instancetype)initWithFrame:(CGRect)frame -{ - self = [super initWithFrame:frame]; - if (self) { - [self.contentView addSubview:self.imageView]; - [self.imageView mas_makeConstraints:^(MASConstraintMaker *make) { - make.edges.mas_equalTo(self.contentView); - }]; - } - return self; -} - -- (FLAnimatedImageView *)imageView { - if (!_imageView) { - _imageView = [[FLAnimatedImageView alloc] init]; - _imageView.contentMode = UIViewContentModeScaleAspectFill; - _imageView.clipsToBounds = YES; - } - return _imageView; -} -- (void)setupGifImage:(NSData *)data { - FLAnimatedImage *animatedImage = [FLAnimatedImage animatedImageWithGIFData:data]; - self.imageView.animatedImage = animatedImage; -} - -- (void)setupImage:(PHAsset *)asset { - @kWeakify(self); - [[PHImageManager defaultManager] requestImageForAsset:asset - targetSize:CGSizeMake(250, 250) - contentMode:PHImageContentModeAspectFill - options:nil - resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) { - @kStrongify(self); - self.imageView.image = result; - }]; -} - -@end - -@interface AlbumResourcePickerViewController () - -@property (nonatomic, strong) UICollectionView *collectionView; -@property (nonatomic, strong) PHFetchResult *allPhotos; -@property (nonatomic, assign) CGSize cellSize; -@property (nonatomic, assign) CGFloat cellSpace; - -@end - -@implementation AlbumResourcePickerViewController - -+ (void)checkAuthorization:(void(^)(BOOL authorized))result { - [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) { - if (result) { - result(status == PHAuthorizationStatusAuthorized); - } - }]; -} - -- (void)viewDidLoad { - [super viewDidLoad]; - [self calSize]; - [self setupCollectionView]; - [self fetchAllPhotos]; -} - -- (void)calSize { - self.cellSpace = 2; - CGFloat screenWidth = UIScreen.mainScreen.bounds.size.width; - CGFloat width = (screenWidth - self.cellSpace * self.cellSpace) / 3; - self.cellSize = CGSizeMake(width, width); -} - -- (void)fetchAllPhotos { - PHFetchOptions *fetchOptions = [[PHFetchOptions alloc] init]; - fetchOptions.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:NO]]; - - // 获取所有类型的资源 - self.allPhotos = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeImage - options:fetchOptions]; - - // 刷新 UICollectionView - dispatch_async(dispatch_get_main_queue(), ^{ - [self.collectionView reloadData]; - }); -} - -- (void)handleAsset:(PHAsset *)asset { - // 使用 PHImageManager 来请求图像数据 - [[PHImageManager defaultManager] requestImageDataForAsset:asset options:nil resultHandler:^(NSData * _Nullable imageData, NSString * _Nullable dataUTI, UIImageOrientation orientation, NSDictionary * _Nullable info) { -// NSLog(@"%@", info); - if ([dataUTI isEqualToString:@"com.compuserve.gif"]) { - // 是 GIF 文件,处理 GIF 数据 - FLAnimatedImage *animatedImage = [FLAnimatedImage animatedImageWithGIFData:imageData]; - FLAnimatedImageView *animatedImageView = [[FLAnimatedImageView alloc] init]; - animatedImageView.animatedImage = animatedImage; -// [self displayAnimatedImageView:animatedImageView]; - } else { - // 是普通图片 - UIImage *image = [UIImage imageWithData:imageData]; - [self displayStaticImage:image]; - } - }]; -} - -- (void)displayAnimatedImageView:(FLAnimatedImageView *)animatedImageView { - animatedImageView.frame = CGRectMake(0, 0, 300, 300); // 设置合适的 frame - [self.view addSubview:animatedImageView]; -} - -- (void)displayStaticImage:(UIImage *)image { - UIImageView *imageView = [[UIImageView alloc] initWithImage:image]; - imageView.frame = CGRectMake(0, 0, 300, 300); // 设置合适的 frame - [self.view addSubview:imageView]; -} - -- (void)setupCollectionView { - UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; - layout.minimumInteritemSpacing = self.cellSpace; - layout.minimumLineSpacing = self.cellSpace; - layout.itemSize = self.cellSize; - - UICollectionView *collectionView = [[UICollectionView alloc] initWithFrame:self.view.bounds collectionViewLayout:layout]; - collectionView.delegate = self; - collectionView.dataSource = self; - - [collectionView registerClass:[AlbumResourceCollectionCell class] forCellWithReuseIdentifier:@"PhotoCell"]; - [self.view addSubview:collectionView]; -} - -- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { - return self.allPhotos.count; // 返回相册中的资源数量 -} - -- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { - AlbumResourceCollectionCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"PhotoCell" forIndexPath:indexPath]; - - PHAsset *asset = self.allPhotos[indexPath.item]; - - // 使用 PHImageManager 来请求图像数据,判断是否为 GIF - [[PHImageManager defaultManager] requestImageDataForAsset:asset options:nil resultHandler:^(NSData * _Nullable imageData, NSString * _Nullable dataUTI, UIImageOrientation orientation, NSDictionary * _Nullable info) { - -// [cell setupImage:imageData isGif:[dataUTI isEqualToString:@"com.compuserve.gif"]]; - - if ([dataUTI isEqualToString:@"com.compuserve.gif"]) { - [cell setupGifImage:imageData]; -// [cell setupImage:imageData isGif:YES]; - } else { - [cell setupImage:asset]; -// [cell setupImage:imageData isGif:NO]; -// // 是普通静态图片 -// [[PHImageManager defaultManager] requestImageForAsset:asset targetSize:CGSizeMake(100, 100) contentMode:PHImageContentModeAspectFill options:nil resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) { -// UIImageView *imageView = [[UIImageView alloc] initWithImage:result]; -// imageView.frame = cell.contentView.bounds; -// [cell.contentView addSubview:imageView]; -// }]; - } - }]; - - return cell; -} - -- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { - PHAsset *asset = self.allPhotos[indexPath.item]; - - // 使用 PHImageManager 来请求图像数据 - [[PHImageManager defaultManager] requestImageDataForAsset:asset options:nil resultHandler:^(NSData * _Nullable imageData, NSString * _Nullable dataUTI, UIImageOrientation orientation, NSDictionary * _Nullable info) { - - // 创建 ImageDetailViewController 并传递图片数据 - ImageDetailViewController *detailVC = [[ImageDetailViewController alloc] init]; - - if ([dataUTI isEqualToString:@"com.compuserve.gif"]) { - // 是 GIF 文件,传递 GIF 数据 - detailVC.gifData = imageData; - } else { - // 是静态图片,传递 UIImage - UIImage *image = [UIImage imageWithData:imageData]; - detailVC.image = image; - } - - // 弹出全屏显示图片的视图控制器 - [self presentViewController:detailVC animated:YES completion:nil]; - }]; - - if (self.didSelectedAsset) { - self.didSelectedAsset(asset); - } -// // 使用 PHImageManager 来请求图像数据 -// [[PHImageManager defaultManager] requestImageDataForAsset:asset options:nil resultHandler:^(NSData * _Nullable imageData, NSString * _Nullable dataUTI, UIImageOrientation orientation, NSDictionary * _Nullable info) { -// if ([dataUTI isEqualToString:@"com.compuserve.gif"]) { -// // 是 GIF 文件,播放 GIF 动画 -// FLAnimatedImage *animatedImage = [FLAnimatedImage animatedImageWithGIFData:imageData]; -// FLAnimatedImageView *animatedImageView = [[FLAnimatedImageView alloc] init]; -// animatedImageView.animatedImage = animatedImage; -// [self displayAnimatedImageView:animatedImageView]; -// } else { -// // 是静态图片 -// UIImage *image = [UIImage imageWithData:imageData]; -// [self displayStaticImage:image]; -// } -// }]; -} - - -@end diff --git a/YuMi/Tools/PIIAPTool/PIIAPRegulate.swift b/YuMi/Tools/PIIAPTool/PIIAPRegulate.swift deleted file mode 100644 index edd69da..0000000 --- a/YuMi/Tools/PIIAPTool/PIIAPRegulate.swift +++ /dev/null @@ -1,227 +0,0 @@ - - -import UIKit -import StoreKit - - - -@available(iOS 15.0, *) -typealias Transaction = StoreKit.Transaction -@available(iOS 15.0, *) -typealias RenewalInfo = StoreKit.Product.SubscriptionInfo.RenewalInfo -@available(iOS 15.0, *) -typealias RenewalState = StoreKit.Product.SubscriptionInfo.RenewalState - - - -enum PIStoreError: Error { - // 错误回调枚举 - case failedVerification - case noProduct -} - -@objc public enum StoreConditionResult: Int64 { // 支付状态 - case start // 开始 - case pay // 进行苹果支付 - case verifiedServer // 服务器校验 - case userCancelled // 用户取消 - case pending // 等待(家庭用户才有的状态) - case unowned - case noProduct //没有商品 - case failedVerification //验证失败 -} - - - -@available(iOS 15.0, *) -public class PIIAPRegulate: NSObject { - public typealias KConditionBlock = (_ state :StoreConditionResult,_ param:Dictionary?) ->() - @objc public var ConditionBlock: KConditionBlock! // 状态回调 - - var updateListenerTask: Task? = nil // 支付事件监听 - - var transactionMap :[String:Transaction] = [:]// 用于完成Id的缓存map - - @objc public static let shared = PIIAPRegulate() - - private override init() { // 单例需要保证private的私有性质 - super.init() - self.updateListenerTask = listenForTransactions() - } - - func triggerConditionBlock(_ state: StoreConditionResult, _ param: [String: Any]? = nil) { - if let ConditionBlock = ConditionBlock { - ConditionBlock(state, param) - } - } - - // 退订 - @objc public func refunRequest(view: UIView,transactionId:UInt64) async { - do { - if let scene = await view.window?.windowScene{ - _ = try await Transaction.beginRefundRequest(for:transactionId , in: scene) - } - }catch{ - print("iap error") - } - } - - // 购买某个产品 - @objc public func demandCommodityThing(productId:String, uuid: String) async throws { - triggerConditionBlock(.start) - do { - let list = [productId] - let storeProducts = try await Product.products(for: Set(list)) - guard let product = storeProducts.first else { -// triggerConditionBlock(.noProduct) - throw PIStoreError.noProduct - } - _ = try await purchase(product, uuid) - } catch { - triggerConditionBlock(.noProduct) - throw PIStoreError.noProduct - } - } - - // 购买 - private func purchase(_ product: Product, _ uuid: String) async throws -> Transaction? { - triggerConditionBlock(.pay) - - guard let curUUID = UUID.init(uuidString: uuid) else{ - triggerConditionBlock(.failedVerification) - return nil - } - - let result = try await product.purchase(options: [.appAccountToken(curUUID)]) - - switch result { - case .success(let verification): // 用户购买完成 - return try await verifiedAndAccomplish(verification) - case .userCancelled: // 用户取消 - triggerConditionBlock(.userCancelled) - case .pending: // 此次购买被挂起 - triggerConditionBlock(.pending) - default: - triggerConditionBlock(.unowned) - } - return nil - } - - // 校验 - func checkVerified(_ result: VerificationResult) throws -> T { - //Check whether the JWS passes StoreKit verification. - switch result { - case .unverified: - //StoreKit parses the JWS, but it fails verification. - triggerConditionBlock(.failedVerification) - throw PIStoreError.failedVerification - case .verified(let safe): - //The result is verified. Return the unwrapped value. - print("iap: verified success") - return safe - } - } - - // 校验&完成后传给服务器 - func verifiedAndAccomplish(_ verification:VerificationResult) async throws -> Transaction?{ - //Check whether the transaction is verified. If it isn't, - //this function rethrows the verification error. - let transaction = try checkVerified(verification) - // 这里将订单提交给服务器进行验证 ~~~ - let transactionId = try verification.payloadValue.id - - // 添加进入待完成map - let key = String(transactionId) - transactionMap[key] = transaction - await uploadServer(for: key) - - // 这里不触发完成,等服务器验证再触发完成逻辑 - await transaction.finish() - - print("iap: finish") - return transaction - } - /*All transactions:全部的购买交易订单 - Latest transactions:最新的购买交易订单。(分为订阅品项和除订阅品项外的所有类型二种) - Current entitlements:当前用户有购买的权限。(全部的订阅品项、和非消耗品项) - */ - func getAllBusiness(transactionId:String) async { - - let transactionIntId = UInt64(transactionId) - for await result in Transaction.all { - do { - let tran = try checkVerified(result) - let resultId = try result.payloadValue.id - if transactionIntId == resultId { - await tran.finish() - break - } - } catch let error { - print("error:----\(error)") - } - } - } - // 事件完成处理 - -// @objc public func verifyBusinessAccomplish(transaction:String) async { -// if(transactionMap[transaction] != nil){ -// await transactionMap[transaction]!.finish() -// transactionMap.removeValue(forKey: transaction) -// print("verifyBusinessFinish end") -// }else { -// await getAllBusiness(transactionId: transaction) -// } -// } - - @objc public func verifyBusinessAccomplish(transactionID: String, completionHandler: @escaping (Bool, Error?) -> Void) { - if let transaction = transactionMap[transactionID] { - Task { - await transaction.finish() - transactionMap.removeValue(forKey: transactionID) - completionHandler(true, nil) // 成功完成交易 - } - } else { - Task { - await getAllBusiness(transactionId: transactionID) - completionHandler(false, nil) // 没有找到交易,但已尝试处理未完成交易 - } - } - } - - @MainActor - func uploadServer(for transactionId:String) async { - let dic :Dictionary = ["transactionId":transactionId] - triggerConditionBlock(.verifiedServer, dic) - } - - // 支付监听事件 - func listenForTransactions() -> Task { - return Task.detached { - for await result in Transaction.updates { - do { - let resultId = try result.payloadValue.id - if !self.transactionMap.keys.contains(String(resultId)) { - _ = try await self.verifiedAndAccomplish(result) - } - } catch { - // 在这里处理错误 - print("Error: \(error)") - } - } - } - } - - //获取推广内购商品 - func Promotion() async -> [SKProduct]?{ - let promotion = SKProductStorePromotionController() - - let prodicts = try? await promotion.promotionOrder() - return prodicts - } - // 销毁调用 - deinit { - updateListenerTask?.cancel() - } - - -} diff --git a/YuMi/Tools/YYUtility/YYUtility+App.m b/YuMi/Tools/YYUtility/YYUtility+App.m index dd54a2a..db81600 100644 --- a/YuMi/Tools/YYUtility/YYUtility+App.m +++ b/YuMi/Tools/YYUtility/YYUtility+App.m @@ -9,8 +9,6 @@ #import "YYUtility.h" #import //为判断网络制式的主要文件 #import //添加获取客户端运营商 支持 -#import "ClientConfig.h" - @@ -120,22 +118,11 @@ static NSString * const kMobileFrameworkResourceBundleName = @"YYMobileFramework static NSString *_from = nil; + (NSString *)getAppSource{ - if (_from == nil) { - if (isEnterprise == NO) { - _from = ISTestFlight ? PI_Test_Flight : @"eparti_enterprise"; // 企业包 - }else { - _from = [ClientConfig shareConfig].isTF == YES ? PI_Test_Flight : PI_App_Source; // Test_Flight包或appstore App Store包 - } - } - return _from; } + (BOOL)isFromAppStore{ - if([[[YYUtility getAppSource] lowercaseString] isEqualToString:@"appstore"]){ return YES; - } - return NO; } @@ -149,7 +136,7 @@ static NSString *_from = nil; + (YYUtilityTelephonType)getOperatorInfomation { CTTelephonyNetworkInfo *info = [[CTTelephonyNetworkInfo alloc] init]; //NSLog(@"info = %@", info); - CTCarrier *carrier = [info subscriberCellularProvider]; + CTCarrier *carrier = [info serviceSubscriberCellularProviders]; //NSLog(@"carrier = %@", carrier); if (carrier == nil) { return YYUtilityTelephonType_Link_Unknown; diff --git a/YuMi/Tools/YYUtility/YYUtility+Device.m b/YuMi/Tools/YYUtility/YYUtility+Device.m index 59c1198..3d2e744 100644 --- a/YuMi/Tools/YYUtility/YYUtility+Device.m +++ b/YuMi/Tools/YYUtility/YYUtility+Device.m @@ -192,17 +192,6 @@ } } -+ (void)checkMicPrivacy:(void(^)(BOOL succeed))resultBlock -{ - [[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) { - if (resultBlock) { - dispatch_async(dispatch_get_main_queue(), ^{ - resultBlock(granted); - }); - } - }]; -} - + (NSString *)deviceUniqueIdentification { // SSKeychain NSString * currentDeviceUUIDStr = [SSKeychain passwordForService:@" " account:@"uuid"]; diff --git a/YuMi/Tools/YYUtility/YYUtility.h b/YuMi/Tools/YYUtility/YYUtility.h index 8de2053..5f70580 100644 --- a/YuMi/Tools/YYUtility/YYUtility.h +++ b/YuMi/Tools/YYUtility/YYUtility.h @@ -204,13 +204,6 @@ typedef enum : NSUInteger { */ + (void)checkAssetsLibrayAvailable:(void (^)(void))available denied:(void(^)(void))denied restriction:(void(^)(void))restriction; -/** - 检查麦克风权限 - - @param resultBlock 结果处理block - */ -+ (void)checkMicPrivacy:(void(^)(BOOL succeed))resultBlock; - + (NSString *)macAddresss; + (NSString *)idfa; diff --git a/YuMi/YMWeb/XPWebViewController.h b/YuMi/YMWeb/XPWebViewController.h deleted file mode 100644 index eda8983..0000000 --- a/YuMi/YMWeb/XPWebViewController.h +++ /dev/null @@ -1,60 +0,0 @@ -// -// XPWebViewController.h -// YuMi -// -// Created by z on 2021/9/16. -// - -#import "BaseViewController.h" -#import - -NS_ASSUME_NONNULL_BEGIN - -@protocol XPWebViewControllerDelegate - --(void)payHandler; - -@end - - -@interface XPWebViewController : BaseViewController -/// -@property (nonatomic,weak) id delegate; -@property (strong, nonatomic) WKWebView *webview; -///跳转方式,如果push的直接pushViewController,不用dismissViewControllerAnimated后再pushViewController -@property (nonatomic,assign) BOOL isPush; - -///是否从精灵页面过来 -@property (nonatomic,assign) BOOL isFairyPay; -@property (nonatomic,assign) BOOL is_Pi_FairyPay; - -///XPWebViewController是否作为属性,yes则 -@property (nonatomic,assign) BOOL isProperty; -@property (copy, nonatomic) NSString *url; - -@property(nonatomic, assign) BOOL isLoginStatus; - -/// URL加载完成回调,result:加载结果成功/失败,error:失败原因 -@property (nonatomic, copy) void (^urlLoadCompleted)(BOOL result, NSError * _Nullable error); -///是都隐藏导航栏 目前适用于半屏的情况下 -@property (nonatomic,copy) void (^InitShowNavBlock)(BOOL show); -///关闭webView 目前适用于半屏的情况下 -@property (nonatomic,copy) void (^CloseWebViewBlock)(BOOL result); - -@property(nonatomic, copy) void (^verifyCaptcha)(BOOL result); - -@property (nonatomic, copy) void(^didTapCharge)(void); - -- (instancetype)initWithCustomizeNav:(BOOL)isCustom; - -///强制使用 roomUID 初始化,尽量传入,防止 web 在需要时取不到数据 -// 更好的做法是,全具保持一个 roomUID 记录 -@property (nonatomic,copy) NSString *roomUid; -- (instancetype)initWithRoomUID:(NSString * _Nullable)roomUid; -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - - -@end - -NS_ASSUME_NONNULL_END diff --git a/YuMi/YMWeb/XPWebViewController.m b/YuMi/YMWeb/XPWebViewController.m deleted file mode 100644 index 421dc6e..0000000 --- a/YuMi/YMWeb/XPWebViewController.m +++ /dev/null @@ -1,675 +0,0 @@ -// -// XPWebViewController.m -// YuMi -// -// Created by zu on 2021/9/16. -// - -#import "XPWebViewController.h" -#import "AccountInfoStorage.h" -#import "DJDKMIMOMColor.h" -#import "YUMIMacroUitls.h" -#import "YYUtility.h" -#import "HttpRequestHelper.h" -#import "TTPopup.h" -#import "XCCurrentVCStackManager.h" -#import "Api+Mine.h" -#import "YuMi-swift.h" - -///vc -#import "Api+Mine.h" -#import "XPWebViewNavView.h" - -typedef NS_ENUM(NSUInteger, RightNavigationPushType){ - ///跳转h5页面 - RightNavigationPushType_Web = 1, - ///分享 - RightNavigationPushType_Share = 2, - ///跳转原生页面 - RightNavigationPushType_AppPage = 3, - ///分享图片 - RightNavigationPushType_SharePicture = 5 -}; - -@interface WeakWebViewScriptMessageDelegate : NSObject - -//WKScriptMessageHandler 这个协议类专门用来处理JavaScript调用原生OC的方法 -@property (nonatomic, weak) id scriptDelegate; - -- (instancetype)initWithDelegate:(id)scriptDelegate; - -@end -@implementation WeakWebViewScriptMessageDelegate - -- (instancetype)initWithDelegate:(id)scriptDelegate { - self = [super init]; - if (self) { - _scriptDelegate = scriptDelegate; - } - return self; -} - -//遵循WKScriptMessageHandler协议,必须实现如下方法,然后把方法向外传递 -//通过接收JS传出消息的name进行捕捉的回调方法 -- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message { - - if ([self.scriptDelegate respondsToSelector:@selector(userContentController:didReceiveScriptMessage:)]) { - [self.scriptDelegate userContentController:userContentController didReceiveScriptMessage:message]; - } -} - -@end - -@interface XPWebViewController () -//@property (strong, nonatomic) WKWebView *webview; -@property (strong, nonatomic) UIProgressView *progressView; -@property (nonatomic, strong) WKUserContentController *pi_userContentController; -///分享的内容 -@property (nonatomic,copy) NSDictionary *shareDic; -///分享的内容 -@property (nonatomic,copy) NSDictionary *savePhotoDic; - -/// -@property (nonatomic,strong) XPWebViewNavView *navView; -/// -@property (nonatomic,assign) BOOL isCustom; - -/// 订单编号 -@property (nonatomic,copy) NSString *orderId; - -@property (nonatomic, assign) BOOL isHideNavBar; - -@end - -NSString * const kJSOpenPurse = @"openPurse"; -NSString * const kJSOpenChargePage = @"openChargePage"; -NSString * const kJSChargePayPage = @"chargePayPage"; -NSString * const kJSChargePayClickPage = @"chargePayClickPage"; -NSString * const kJSOpenSharePage = @"openSharePage"; -NSString * const kJSGetUid = @"getUid"; -NSString * const kJSGetDeviceId = @"getDeviceId"; -NSString * const kJSGetTicket = @"getTicket"; -NSString * const kJSGetDeviceInfo = @"getDeviceInfo"; -NSString * const kJSOpenFaceLiveness = @"openFaceLiveness"; -NSString * const kJSInitNav = @"initNav"; -NSString * const kJSGetRoomUid = @"getRoomUid"; -NSString * const kOpenPersonPage = @"openPersonPage"; -NSString * const kInitShowNav = @"initShowNav"; -NSString * const kCloseWebView = @"closeWebView"; -NSString * const kJumpAppointPage = @"jumpAppointPage"; -NSString * const kJSOpenRoom = @"openRoom"; -NSString * const kJSOpenRoomForGiftId = @"openRoomForGiftId"; -NSString * const kJSOpenChatPage = @"geToChatPage"; -NSString * const kJSOpenAppConcernedChat = @"openAppConcernedChat"; -NSString * const kJSSavePictureShare = @"savePictureShare"; -NSString * const kJSGoToExchangeGold = @"goToExchangeGold"; -NSString * const kJSOpenPayment = @"openPayment"; -NSString * const kJSOpenPaymentCallback = @"openPaymentCallback"; -NSString * const kJSVerifyCaptchaCallBack = @"closeToVerify"; -NSString * const kJSShowShareCallBack = @"showShareAction"; - - -@implementation XPWebViewController - -- (instancetype)initWithCustomizeNav:(BOOL)isCustom -{ - self = [super init]; - if (self) { - self.isCustom = isCustom; - } - return self; -} - -- (instancetype)initWithRoomUID:(NSString * _Nullable)roomUid { - self = [super init]; - if (self) { - self.roomUid = roomUid; - self.isLoginStatus = YES; - } - return self; -} - --(void)viewWillAppear:(BOOL)animated{ - [super viewWillAppear:animated]; - - if (self.isHideNavBar) { - if (self.navigationController) { - [self.navigationController setNavigationBarHidden:YES]; - } - } -} - -- (void)viewDidLoad { - [super viewDidLoad]; - [self initView]; -} - - -- (void)initView { - if (self.navigationController.viewControllers.count > 1){ - UIBarButtonItem *leftBarButtonItem = [[UIBarButtonItem alloc]initWithImage:[[UIImage imageNamed:@"common_nav_back"]ms_SetImageForRTL] style:UIBarButtonItemStylePlain target:self action:@selector(backButtonClick)]; - - leftBarButtonItem.tintColor = [DJDKMIMOMColor mainTextColor]; - - self.navigationItem.leftBarButtonItem = leftBarButtonItem; - } - - self.webview.scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; - - if(self.isCustom == YES){ - [self.view addSubview:self.navView]; - [self.view addSubview:self.webview]; - [self.view addSubview:self.progressView]; - [self.navView mas_makeConstraints:^(MASConstraintMaker *make) { - make.leading.trailing.top.equalTo(self.view); - make.height.mas_equalTo(kNavigationHeight); - }]; - [self.webview mas_makeConstraints:^(MASConstraintMaker *make) { - make.leading.trailing.bottom.equalTo(self.view); - make.top.equalTo(self.navView.mas_bottom); - }]; - [self.progressView mas_makeConstraints:^(MASConstraintMaker *make) { - make.leading.trailing.equalTo(self.view); - make.height.mas_equalTo(1); - make.top.equalTo(self.navView.mas_bottom); - }]; - }else{ - [self.view addSubview:self.webview]; - [self.view addSubview:self.progressView]; - [self.webview mas_makeConstraints:^(MASConstraintMaker *make) { - make.leading.trailing.top.bottom.mas_equalTo(self.view); - }]; - } -} -- (void)xPWebViewNavView:(XPWebViewNavView *)view didClickBack:(UIButton *)sender{ - if(self.is_Pi_FairyPay){ - [self willMoveToParentViewController:nil]; //1 - [self.view removeFromSuperview]; //2 - [self removeFromParentViewController]; //3 - return; - } - if(self.isFairyPay){ - if(self.CloseWebViewBlock){ - self.CloseWebViewBlock(YES); - } - return; - } - [self dismissViewControllerAnimated:YES completion:nil]; -} -//加载完成 -- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation { - //加载完成后隐藏progressView - self.progressView.hidden = YES; - if (self.urlLoadCompleted) { - self.urlLoadCompleted(YES, nil); - } -#if DEBUG - NSString *fileName = @"vconsole.min.js"; // 你要查找的文件名 - NSString *directory = [[NSBundle mainBundle] resourcePath]; - - NSFileManager *fileManager = [NSFileManager defaultManager]; - NSDirectoryEnumerator *enumerator = [fileManager enumeratorAtPath:directory]; - NSString *filePath; - - for (NSString *path in enumerator) { - if ([[path lastPathComponent] containsString:fileName]) { - filePath = [directory stringByAppendingPathComponent:path]; - break; - } - } - - if (filePath.length > 0) { - NSString *vConsoleScript = [NSString stringWithContentsOfFile:filePath - encoding:NSUTF8StringEncoding error:nil]; - [webView evaluateJavaScript:vConsoleScript completionHandler:nil]; - - // 初始化 vConsole - NSString *initVConsoleScript = @"var vConsole = new VConsole();"; - [webView evaluateJavaScript:initVConsoleScript completionHandler:nil]; - } -#endif -} - -#if DEBUG -- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse - decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler { - - NSHTTPURLResponse *response = (NSHTTPURLResponse *)navigationResponse.response; - NSDictionary *headers = response.allHeaderFields; - // NSLog(@"Response Headers: %@", headers); - - NSString *contentEncoding = headers[@"Content-Encoding"]; - if ([contentEncoding isEqualToString:@"gzip"]) { - // NSLog(@"✅ Gzip 响应已启用"); - } else { - // NSLog(@"❌ Gzip 响应未启用"); - } - - decisionHandler(WKNavigationResponsePolicyAllow); -} -#endif - -//加载失败 -- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation withError:(NSError *)error { - //加载失败同样需要隐藏progressView - self.progressView.hidden = YES; - if (self.urlLoadCompleted) { - self.urlLoadCompleted(NO, error); - } -} - -//捕抓打电话事件 -- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler { - NSURL *URL = navigationAction.request.URL; - NSString *scheme = [URL scheme]; - NSURLRequest *request = navigationAction.request; - // Judge is whether to jump to other app. - if (![scheme isEqualToString:@"https"] && ![scheme isEqualToString:@"http"]) { - BOOL canOpen = [[UIApplication sharedApplication] canOpenURL:request.URL]; - if (canOpen) { - [[UIApplication sharedApplication] openURL:request.URL options:@{} completionHandler:^(BOOL success) { - - }]; - } - decisionHandler(WKNavigationActionPolicyCancel); - return; - } - decisionHandler(WKNavigationActionPolicyAllow); -} -- (void)webView:(WKWebView *)webView didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, NSURLCredential * _Nullable))completionHandler{ - if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) { - dispatch_async(dispatch_get_global_queue(0, 0), ^{ - NSURLCredential *card = [[NSURLCredential alloc]initWithTrust:challenge.protectionSpace.serverTrust]; - completionHandler(NSURLSessionAuthChallengeUseCredential,card); - }); - } -} -- (void)userContentController:(WKUserContentController *)userContentController - didReceiveScriptMessage:(WKScriptMessage *)message { - [self.webview evaluateJavaScript:@"document.location.href" - completionHandler:^(id _Nullable response, NSError * _Nullable error) { - NSString *currentUrl = [NSString stringWithFormat:@"%@", response]; - ///测试环境只要有host就执行,方便h5连接本地调试 - BOOL condition = currentUrl != nil && [currentUrl containsString:API_HOST_URL]; - - NSLog(@"-- -- - -- - - | -- -- - -- - -%@", response); - NSLog(@"-- -- - -- - -%@: %@", message.name, message.body); -#ifdef DEBUG - condition = currentUrl != nil; -#endif - if(condition) { - if ([message.name isEqualToString:kJSOpenSharePage]) { - - } else if ([message.name isEqualToString:kJSGetUid]) { - NSString *uid = [[AccountInfoStorage instance] getUid]; - NSString *js = [NSString stringWithFormat:@"getMessage(\"uid\",%@)", uid]; - [self.webview evaluateJavaScript:js completionHandler:^(id _Nullable other, NSError * _Nullable error) { - // NSLog(@"%@",error); - }]; - } else if ([message.name isEqualToString:kJSGetTicket]) { - NSString *ticket = [[AccountInfoStorage instance] getTicket]; - NSString *js = [NSString stringWithFormat:@"getMessage(\"ticket\",\"%@\")",ticket]; - [self.webview evaluateJavaScript:js completionHandler:^(id _Nullable other, NSError * _Nullable error) { - // NSLog(@"%@",error); - }]; - } else if ([message.name isEqualToString:kJSGetDeviceId]) { - NSString *js = [NSString stringWithFormat:@"getMessage(\"deviceId\",\"%@\")",[YYUtility deviceUniqueIdentification]]; - [self.webview evaluateJavaScript:js completionHandler:^(id _Nullable other, NSError * _Nullable error) { - // NSLog(@"%@",error); - }]; - } else if ([message.name isEqualToString:kJSGetDeviceInfo]) { - NSDictionary *basicParmars = [HttpRequestHelper configBaseParmars:[[NSDictionary alloc] init]]; - NSString *json = [basicParmars mj_JSONString]; - NSString *js = [NSString stringWithFormat:@"getMessage(\"deviceInfo\",%@)", json]; - [self.webview evaluateJavaScript:js completionHandler:^(id _Nullable ohter, NSError * _Nullable error) { - // NSLog(@"%@", error); - }]; - } else if ([message.name isEqualToString:kJSOpenPurse]) { - - }else if([message.name isEqualToString:kJSChargePayPage]){ - // NSString *money = [NSString stringWithFormat:@"%@",message.body] ; - - }else if([message.name isEqualToString:kJSChargePayClickPage]){ - - }else if ([message.name isEqualToString:kJSOpenChargePage]) { - - - } else if ([message.name isEqualToString:kOpenPersonPage]) { - - } else if([message.name isEqualToString:kJSInitNav]) { - [self initNav:message.body]; - } else if([message.name isEqualToString:kJSGetRoomUid]) { - NSString *js = [NSString stringWithFormat:@"getMessage(\"roomUid\",\"%@\")",self.roomUid]; - [self.webview evaluateJavaScript:js completionHandler:^(id _Nullable other, NSError * _Nullable error) { - // NSLog(@"%@",error); - }]; - } else if([message.name isEqualToString:kInitShowNav]) { - if (((NSNumber *)message.body).intValue == 0) { - if (self.InitShowNavBlock) { - self.InitShowNavBlock(YES); - return; - } - self.isHideNavBar = YES; - if (self.navigationController) { - [self.navigationController setNavigationBarHidden:YES]; - } - } - } else if([message.name isEqualToString:kCloseWebView]) { - if (self.CloseWebViewBlock) { - self.CloseWebViewBlock(YES); - return; - } - if (self.navigationController) { - [self.navigationController popViewControllerAnimated:YES]; - } - } else if ([message.name isEqualToString:kJumpAppointPage]) { - // h5与原生交互新协议 - NSDictionary *bodyDict; - if ([message.body isKindOfClass:[NSDictionary class]]) { - bodyDict = message.body; - } else if ([message.body isKindOfClass:[NSString class]]) { - NSString *str = (NSString *)message.body; - bodyDict = [str toJSONObject]; - } - NSInteger skyType = [bodyDict[@"routerType"] integerValue]; - [self handleRouterType:skyType message:message]; - }else if ([message.name isEqualToString:kJSOpenChatPage]){ - - }else if([message.name isEqualToString:kJSOpenAppConcernedChat]){ - - }else if ([message.name isEqualToString:kJSOpenRoom]) { - - } else if([message.name isEqualToString:kJSOpenRoomForGiftId]) { - - }else if ([message.name isEqualToString:kJSSavePictureShare]){ - - } else if([message.name isEqualToString:kJSGoToExchangeGold]){ - - } else if([message.name isEqualToString:kJSOpenPayment]) { - [self handleOpenPayment:message.body]; - } else if([message.name isEqualToString:kJSVerifyCaptchaCallBack]) { - [self handleCaptchaResult:[message.body integerValue] == 1]; - } else if([message.name isEqualToString:kJSShowShareCallBack]) { - [self handleShareActioin:message.body]; - } - } - }]; -} - -#pragma mark - -- (void)handleShareActioin:(NSString *)content { - -} - -- (void)handleCaptchaResult:(BOOL)reuslt { - if (_verifyCaptcha) { - self.verifyCaptcha(reuslt); - } -} - -#pragma mark - Payment Method -- (void)handleOpenPayment:(NSString *)chargeProdId { - -} - -- (void)triggerOpenPaymentCallback:(NSInteger)code - orderID:(NSString *)orderID - productID:(NSString *)productID { - NSDictionary *dic = @{@"code":@(code), @"orderId":orderID, @"productId":productID}; - NSString *js = [NSString stringWithFormat:@"openPaymentCallback(%@)", dic.toJSONString]; - @kWeakify(self); - [self.webview evaluateJavaScript:js - completionHandler:^(id _Nullable result, NSError * _Nullable error) { - @kStrongify(self); - [self hideHUD]; - }]; -} - -#pragma mark - private method -- (void)handleRouterType:(NSInteger)skyType message:(WKScriptMessage *)message { - NSDictionary *bodyDict = (NSDictionary *)message.body; - switch (skyType) { - case 1: - { - - } - break; - case 7: - { - } - break; - case 8: - { - } - break; - case 75: - { - } - break; - default: - break; - } -} -- (void)setUrl:(NSString *)urlString{ - _url = urlString; - if (_url == nil) { - return; - } - if (![_url hasPrefix:@"http"] && ![_url hasPrefix:@"https"]){ - _url = [NSString stringWithFormat:@"%@/%@", [HttpRequestHelper getHostUrl], _url]; - } - - if (![_url containsString:@"?"]) { - _url = [NSString stringWithFormat:@"%@", _url]; - } else { - _url = [NSString stringWithFormat:@"%@", _url]; - } - - // 去掉 urlString 中的空格。 - NSString *noSpaceTextUrl = [_url stringByReplacingOccurrencesOfString:@" " withString:@""]; - - NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:noSpaceTextUrl]]; - [self.webview loadRequest:request]; -} -- (void)backButtonClick { - BOOL canGoBack = YES; - if (self.webview.backForwardList.backList.count <= 1) { - canGoBack = NO; - } - - if ([self.webview canGoBack]) { - [self.webview goBack]; - } else { - [self.navigationController popViewControllerAnimated:YES]; - [self.pi_userContentController removeAllUserScripts]; - } -} -#pragma mark - 分享 -- (void)initNav:(NSDictionary *)response{ - if(!response || ![response isKindOfClass:[NSDictionary class]])return; - self.shareDic = response[@"data"]; - if ([response[@"type"] intValue]== RightNavigationPushType_Web) { - [self addNavigationItemWithTitles:@[response[@"data"][@"title"]] titleColor:[DJDKMIMOMColor alertTitleColor] isLeft:NO target:self action:@selector(gotoWebView) tags:nil]; - }else if ([response[@"type"] intValue]== RightNavigationPushType_Share || [response[@"type"] intValue]== RightNavigationPushType_SharePicture){ - [self addNavigationItemWithImageNames:@[@"family_person_share"] isLeft:NO - target:self action:@selector(showSharePanel) tags:nil]; - } -} - -- (void)gotoWebView { - if (self.shareDic[@"link"]) { - XPWebViewController * webVC = [[XPWebViewController alloc] init]; - webVC.url = self.shareDic[@"link"]; - [self.navigationController pushViewController:webVC animated:YES]; - } -} - - -- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { - if ([keyPath isEqualToString:@"estimatedProgress"]) { - self.progressView.progress = self.webview.estimatedProgress; - if (self.progressView.progress == 1) { - __weak typeof (self)weakSelf = self; - [UIView animateWithDuration:0.25f delay:0.3f options:UIViewAnimationOptionCurveEaseOut animations:^{ - weakSelf.progressView.transform = CGAffineTransformMakeScale(1.0f, 1.0f); - } completion:^(BOOL finished) { - weakSelf.progressView.hidden = YES; - }]; - } - } else if ([keyPath isEqualToString:@"title"]) { - if (object == self.webview) { - self.navigationItem.title = self.webview.title; - if (self.urlLoadCompleted) {//半屏webview如果在加载完成回调后标题还会改变,在此处重新设置一遍 - self.urlLoadCompleted(YES, nil); - } - }else{ - [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; - } - } else { - [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; - } -} - -- (void)dealloc { - [self.webview removeObserver:self forKeyPath:@"estimatedProgress"]; - [self.webview removeObserver:self forKeyPath:@"title"]; -} - -- (WKWebView *)webview { - if (_webview == nil) { - WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc]init]; - - if (@available(iOS 10.0, *)) { - configuration.mediaTypesRequiringUserActionForPlayback = NO; - } else { - // Fallback on earlier versions - } - configuration.allowsInlineMediaPlayback = YES; - - NSString *uid = [[AccountInfoStorage instance] getUid]; - NSString *realCookie = [NSString stringWithFormat:@"%@=%@",@"uid",uid]; - - WKUserScript *cookieScript = [[WKUserScript alloc] initWithSource: [NSString stringWithFormat:@"document.cookie = '%@';", realCookie] injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:NO]; - [self.pi_userContentController addUserScript:cookieScript]; - ///禁止缩放 - NSString *scaleJs = @"$('meta[name=description]').remove(); $('head').append( '' );"; - WKUserScript *scaleScript = [[WKUserScript alloc] initWithSource:scaleJs injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:NO]; - [self.pi_userContentController addUserScript:scaleScript]; - - //根据生成的WKUserScript对象,初始化WKWebViewConfiguration - configuration.preferences.javaScriptEnabled = YES; - configuration.preferences.javaScriptCanOpenWindowsAutomatically = YES; - configuration.preferences.minimumFontSize = 10; - configuration.selectionGranularity = WKSelectionGranularityCharacter; - configuration.userContentController = self.pi_userContentController; - - CGSize size = [UIScreen mainScreen].bounds.size; - _webview = [[WKWebView alloc]initWithFrame:CGRectMake(0, 0, size.width,size.height) configuration:configuration]; - - _webview.navigationDelegate = self; - //添加KVO,WKWebView有一个属性estimatedProgress,就是当前网页加载的进度,所以监听这个属性 - [_webview addObserver:self forKeyPath:@"estimatedProgress" options:NSKeyValueObservingOptionNew context:nil]; - //添加KVO,监听title属性 - [_webview addObserver:self forKeyPath:@"title" options:NSKeyValueObservingOptionNew context:NULL]; - - UISwipeGestureRecognizer *swipeGesture = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(backButtonClick)]; - [_webview addGestureRecognizer:swipeGesture]; - - [_webview.scrollView setShowsVerticalScrollIndicator:NO]; - [_webview.scrollView setShowsHorizontalScrollIndicator:NO]; - - //set useragent - __weak typeof(self) weakSelf = self; - [_webview evaluateJavaScript:@"navigator.userAgent" completionHandler:^(id result, NSError *error) { - NSString *userAgent = result; - - if (![userAgent containsString:@"molistarAppIos erbanAppIos"]){ - NSString *newUserAgent = [userAgent stringByAppendingString:@" molistarAppIos erbanAppIos"]; - NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:newUserAgent, @"UserAgent", nil]; - [[NSUserDefaults standardUserDefaults] registerDefaults:dictionary]; - [[NSUserDefaults standardUserDefaults] synchronize]; - [weakSelf.webview setCustomUserAgent:newUserAgent]; - } - - }]; - _webview.scrollView.bounces = NO; - } - return _webview; -} -- (UIProgressView *)progressView{ - if (!_progressView) { - _progressView = [[UIProgressView alloc] initWithFrame:CGRectMake(0, 0, [[UIScreen mainScreen] bounds].size.width, 1)]; - _progressView.progressTintColor = [DJDKMIMOMColor appMainColor]; - _progressView.trackTintColor = [UIColor clearColor]; - _progressView.transform = CGAffineTransformMakeScale(1.0f, 1.0f); - } - return _progressView; -} - -- (WKUserContentController *)pi_userContentController{ - if (!_pi_userContentController) { - //自定义的WKScriptMessageHandler 是为了解决内存不释放的问题 - WeakWebViewScriptMessageDelegate *weakScriptMessageDelegate = [[WeakWebViewScriptMessageDelegate alloc] initWithDelegate:self]; - _pi_userContentController = [[WKUserContentController alloc] init]; - // 分享面板 - [_pi_userContentController addScriptMessageHandler:weakScriptMessageDelegate name:kJSOpenSharePage]; - // 钱包页面 - [_pi_userContentController addScriptMessageHandler:weakScriptMessageDelegate name:kJSOpenPurse]; - // 充值页面 - [_pi_userContentController addScriptMessageHandler:weakScriptMessageDelegate name:kJSOpenChargePage]; - [_pi_userContentController addScriptMessageHandler:weakScriptMessageDelegate name:kJSChargePayPage]; - [_pi_userContentController addScriptMessageHandler:weakScriptMessageDelegate name:kJSChargePayClickPage]; - // 获取uid - [_pi_userContentController addScriptMessageHandler:weakScriptMessageDelegate name:kJSGetUid]; - // 获取设备id - [_pi_userContentController addScriptMessageHandler:weakScriptMessageDelegate name:kJSGetDeviceId]; - // 获取Ticket - [_pi_userContentController addScriptMessageHandler:weakScriptMessageDelegate name:kJSGetTicket]; - // 获取设备info - [_pi_userContentController addScriptMessageHandler:weakScriptMessageDelegate name:kJSGetDeviceInfo]; - // 实人认证: 打开原生人脸认证 - [_pi_userContentController addScriptMessageHandler:weakScriptMessageDelegate name:kJSOpenFaceLiveness]; - // 分享按钮 - [_pi_userContentController addScriptMessageHandler:weakScriptMessageDelegate name:kJSInitNav]; - // 获取房间uid - [_pi_userContentController addScriptMessageHandler:weakScriptMessageDelegate name:kJSGetRoomUid]; - // 进入个人主页 - [_pi_userContentController addScriptMessageHandler:weakScriptMessageDelegate name:kOpenPersonPage]; - // 隐藏导航栏 - [_pi_userContentController addScriptMessageHandler:weakScriptMessageDelegate name:kInitShowNav]; - // 隐藏导航栏 - [_pi_userContentController addScriptMessageHandler:weakScriptMessageDelegate name:kCloseWebView]; - //装扮及其他活动页面 - [_pi_userContentController addScriptMessageHandler:weakScriptMessageDelegate name:kJumpAppointPage]; - //进入房间 - [_pi_userContentController addScriptMessageHandler:weakScriptMessageDelegate name:kJSOpenRoom]; - //进房并弹出礼物面板 - [_pi_userContentController addScriptMessageHandler:weakScriptMessageDelegate name:kJSOpenRoomForGiftId]; - ///进入聊天 - [_pi_userContentController addScriptMessageHandler:weakScriptMessageDelegate name:kJSOpenChatPage]; - ///进入聊天并关注 - [_pi_userContentController addScriptMessageHandler:weakScriptMessageDelegate name:kJSOpenAppConcernedChat]; - ///分享及保存 - [_pi_userContentController addScriptMessageHandler:weakScriptMessageDelegate name:kJSSavePictureShare]; - ///兑换金币 - [_pi_userContentController addScriptMessageHandler:weakScriptMessageDelegate name:kJSGoToExchangeGold]; - ///周卡内购 - [_pi_userContentController addScriptMessageHandler:weakScriptMessageDelegate name:kJSOpenPayment]; - [_pi_userContentController addScriptMessageHandler:weakScriptMessageDelegate name:kJSOpenPaymentCallback]; - [_pi_userContentController addScriptMessageHandler:weakScriptMessageDelegate name:kJSVerifyCaptchaCallBack]; - [_pi_userContentController addScriptMessageHandler:weakScriptMessageDelegate name:kJSShowShareCallBack]; - - } - return _pi_userContentController; - -} --(XPWebViewNavView *)navView{ - if (!_navView){ - _navView = [[XPWebViewNavView alloc]initWithFrame:CGRectZero]; - _navView.delegate = self; - } - return _navView; -} - - -@end diff --git a/YuMi/YMWeb/XPWebViewNavView.h b/YuMi/YMWeb/XPWebViewNavView.h deleted file mode 100644 index f5af434..0000000 --- a/YuMi/YMWeb/XPWebViewNavView.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// XPWebViewNavView.h -// YuMi -// -// Created by YuMi on 2023/2/27. -// - -#import -@class XPWebViewNavView; -NS_ASSUME_NONNULL_BEGIN -@protocol XPWebViewNavViewDelegate -//点击了返回 -- (void)xPWebViewNavView:(XPWebViewNavView *)view didClickBack:(UIButton *)sender; - -@end -@interface XPWebViewNavView : UIView -/// -@property (nonatomic,weak) id delegate; -@end - -NS_ASSUME_NONNULL_END diff --git a/YuMi/YMWeb/XPWebViewNavView.m b/YuMi/YMWeb/XPWebViewNavView.m deleted file mode 100644 index 7f91bd1..0000000 --- a/YuMi/YMWeb/XPWebViewNavView.m +++ /dev/null @@ -1,79 +0,0 @@ -// -// XPWebViewNavView.m -// YuMi -// -// Created by YuMi on 2023/2/27. -// - -#import "XPWebViewNavView.h" -///Third -#import -#import "UIButton+EnlargeTouchArea.h" -#import "DJDKMIMOMColor.h" -#import "YUMIMacroUitls.h" -@interface XPWebViewNavView() -///返回 -@property (nonatomic,strong) UIButton *backButton; -///标题 -@property (nonatomic,strong) UILabel *titleView; -@end -@implementation XPWebViewNavView - --(instancetype)initWithFrame:(CGRect)frame{ - self = [super initWithFrame:frame]; - if(self){ - [self initSubViews]; - [self initSubViewConstraints]; - } - return self; -} - -#pragma mark - Private Method -- (void)initSubViews { - [self addSubview:self.backButton]; - [self addSubview:self.titleView]; - -} -- (void)initSubViewConstraints { - [self.backButton mas_makeConstraints:^(MASConstraintMaker *make) { - make.width.height.mas_equalTo(kGetScaleWidth(28)); - make.leading.mas_equalTo(0); - make.bottom.mas_equalTo(-kGetScaleWidth(8)); - }]; - [self.titleView mas_makeConstraints:^(MASConstraintMaker *make) { - make.centerY.equalTo(self.backButton); - make.centerX.equalTo(self); - }]; - -} --(void)backButtonAction{ - if(self.delegate && [self.delegate respondsToSelector:@selector(xPWebViewNavView:didClickBack:)]){ - [self.delegate xPWebViewNavView:self didClickBack:self.backButton]; - } -} - -#pragma mark -懒加载 -- (UIButton *)backButton { - if (!_backButton) { - _backButton = [UIButton buttonWithType:UIButtonTypeCustom]; - [_backButton setImage:[[UIImage imageNamed:@"common_nav_back"]ms_SetImageForRTL] forState:UIControlStateNormal]; - [_backButton setImage:[[UIImage imageNamed:@"common_nav_back"]ms_SetImageForRTL] forState:UIControlStateSelected]; - [_backButton addTarget:self action:@selector(backButtonAction) forControlEvents:UIControlEventTouchUpInside]; - [_backButton setEnlargeEdgeWithTop:10 right:10 bottom:10 left:10]; - } - return _backButton; -} - - -- (UILabel *)titleView { - if (!_titleView) { - _titleView = [[UILabel alloc] init]; - _titleView.font = [UIFont systemFontOfSize:17 weight:UIFontWeightSemibold]; - _titleView.textColor = UIColorFromRGB(0x1F1B4F); - _titleView.text = YMLocalizedString(@"XPWebViewNavView0"); - } - return _titleView; -} - - -@end diff --git a/YuMi/YuMi-Bridging-Header.h b/YuMi/YuMi-Bridging-Header.h index 827bf12..c3f114d 100644 --- a/YuMi/YuMi-Bridging-Header.h +++ b/YuMi/YuMi-Bridging-Header.h @@ -63,12 +63,11 @@ // MARK: - Login - Navigation & Web #import "BaseNavigationController.h" #import "BaseViewController.h" -#import "XPWebViewController.h" // MARK: - Login - Utilities #import "YUMIMacroUitls.h" // YMLocalizedString #import "YUMIHtmlUrl.h" // URLWithType -#import "YUMIConstant.h" // KeyWithType, KeyType_PasswordEncode +#import "YUMIConstant.h" // KeyWithType, KeyType_Sign #import "DESEncrypt.h" // DES加密工具 #import "HttpRequestHelper.h" // getHostUrl @@ -81,7 +80,6 @@ #import "Api+Main.h" // MARK: - Login - Captcha & Config -#import "ClientConfig.h" #import "TTPopup.h" // 注意: diff --git a/YuMi/en.lproj/InfoPlist.strings b/YuMi/en.lproj/InfoPlist.strings index 007534c..8801e44 100644 --- a/YuMi/en.lproj/InfoPlist.strings +++ b/YuMi/en.lproj/InfoPlist.strings @@ -3,7 +3,6 @@ NSCameraUsageDescription ="\"E-Party\" needs your consent before you can visit, take photos and upload your pictures, and then display them on your personal homepage for others to view"; NSLocalNetworkUsageDescription ="The app will discover and connect to devices on your network"; NSLocationWhenInUseUsageDescription = "Your consent is required before you can use location services and recommend nearby friends"; -NSMicrophoneUsageDescription = "\"E-Party\" needs your consent before it can conduct voice chat"; NSPhotoLibraryAddUsageDescription = "\"E-Party\" needs your consent before it can store photos in the album"; NSPhotoLibraryUsageDescription = "\"E-Party\" needs your consent before you can access the album and select the pictures you need to upload, and then display them on your personal homepage for others to view"; NSUserTrackingUsageDescription = "Please allow us to obtain your idfa permission to provide you with personalized activities and services. your information will not be used for other purposes without your permission"; diff --git a/YuMi/en.lproj/Localizable.strings b/YuMi/en.lproj/Localizable.strings index 8e8fb95..b1305f1 100644 --- a/YuMi/en.lproj/Localizable.strings +++ b/YuMi/en.lproj/Localizable.strings @@ -3254,30 +3254,7 @@ "XPTreasureFairyGiftView5"="Epic"; "XPTreasureFairyGiftView6"="Legendary"; "XPTreasureFairyGiftView7"="Summon"; -"XPTreasureFairyGiftView8"="Coins"; -///XPMineUserInfoRecordedSoundView -"XPMineUserInfoRecordedSoundView0"="Good voice can bring more attention~"; -"XPMineUserInfoRecordedSoundView1"="Click to start recording"; -"XPMineUserInfoRecordedSoundView2"="Re-record"; -"XPMineUserInfoRecordedSoundView3"="Save sound"; -"XPMineUserInfoRecordedSoundView4"="Sound under review, will be displayed upon approval~"; - -"XPMineUserInfoRecordedSoundView5"="Click to stop"; -"XPMineUserInfoRecordedSoundView6"="Click to preview"; -"XPMineUserInfoRecordedSoundView7"="Click to stop playback"; -"XPMineUserInfoRecordedSoundView8"="Delete sound"; -"XPMineUserInfoRecordedSoundView9"="Sound signature approved, share with friends now~"; -"XPMineUserInfoRecordedSoundView10"="Currently in a voice chat, cannot record"; -///XPMineUserInfoRecordedSoundVC -"XPMineUserInfoRecordedSoundVC0"="Please grant microphone permissions and try again"; -"XPMineUserInfoRecordedSoundVC1"="Recording time too short~"; -"XPMineUserInfoRecordedSoundVC2"="Voice signature"; -"XPMineUserInfoRecordedSoundVC3"="Failed to save sound"; -"XPMineUserInfoRecordedSoundVC4"="Sound saved successfully"; -"XPMineUserInfoRecordedSoundVC5"="Sound deleted successfully"; -"XPMineUserInfoRecordedSoundVC6"="Are you sure you want to delete this sound?"; -"XPMineUserInfoRecordedSoundVC7"="Sound recording not yet complete, confirm exit?"; -"XPMineUserInfoRecordedSoundVC8"="Sound not yet saved, confirm exit?"; +"XPMineUserInfoRecordedSoundView8"="Coins"; //XPMineUserInfoTagVC "XPMineUserInfoTagVC0"="My Tags"; "XPMineUserInfoTagVC1"="Done";