解决冲突

This commit is contained in:
liyuhua
2023-12-12 15:35:10 +08:00
parent ac9077b3d1
commit a5bc5be14b
43 changed files with 2428 additions and 43 deletions

View File

@@ -3,7 +3,7 @@
archiveVersion = 1;
classes = {
};
objectVersion = 53;
objectVersion = 54;
objects = {
/* Begin PBXBuildFile section */
@@ -692,8 +692,50 @@
18F5C6B72A5BB4E400D284AF /* UIButton+DDAction.m in Sources */ = {isa = PBXBuildFile; fileRef = 18F5C6B62A5BB4E400D284AF /* UIButton+DDAction.m */; };
18FC19D62A481A07006FC925 /* RoomEditPassWordView.m in Sources */ = {isa = PBXBuildFile; fileRef = 18FC19D52A481A07006FC925 /* RoomEditPassWordView.m */; };
18FDEDCF2A50353A005EB21D /* DynamicSendLocationView.m in Sources */ = {isa = PBXBuildFile; fileRef = 18FDEDCE2A50353A005EB21D /* DynamicSendLocationView.m */; };
2358F57D2B230B4A0038453C /* DDVideoEncodeManage.m in Sources */ = {isa = PBXBuildFile; fileRef = 2358F57C2B230B4A0038453C /* DDVideoEncodeManage.m */; };
2358F5812B230C350038453C /* UILabel+DDFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 2358F5802B230C350038453C /* UILabel+DDFactory.m */; };
23B2A7B02B283A76001C0913 /* DDAppColor.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B2A7622B283A75001C0913 /* DDAppColor.m */; };
23B2A7B12B283A76001C0913 /* DDBaseVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B2A7662B283A75001C0913 /* DDBaseVC.m */; };
23B2A7B22B283A76001C0913 /* DDHUDManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B2A7692B283A75001C0913 /* DDHUDManager.m */; };
23B2A7B32B283A76001C0913 /* DDUIImageFixedManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B2A76D2B283A75001C0913 /* DDUIImageFixedManager.m */; };
23B2A7B42B283A76001C0913 /* DDDownloadImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B2A76E2B283A75001C0913 /* DDDownloadImageView.m */; };
23B2A7B52B283A76001C0913 /* DDDownloadImageFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B2A76F2B283A75001C0913 /* DDDownloadImageFile.m */; };
23B2A7B62B283A76001C0913 /* UIImage+ImageEffects.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B2A7732B283A76001C0913 /* UIImage+ImageEffects.m */; };
23B2A7B72B283A76001C0913 /* DDSVGAAnimationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B2A7752B283A76001C0913 /* DDSVGAAnimationManager.m */; };
23B2A7B82B283A76001C0913 /* UILabel+DDFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B2A7782B283A76001C0913 /* UILabel+DDFactory.m */; };
23B2A7B92B283A76001C0913 /* UIView+UIView_DDAngleRoundedTool.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B2A77B2B283A76001C0913 /* UIView+UIView_DDAngleRoundedTool.m */; };
23B2A7BA2B283A76001C0913 /* DDBaseNavVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B2A77E2B283A76001C0913 /* DDBaseNavVC.m */; };
23B2A7BB2B283A76001C0913 /* UIButton+TouchRegion.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B2A7812B283A76001C0913 /* UIButton+TouchRegion.m */; };
23B2A7BC2B283A76001C0913 /* DDBaseButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B2A7842B283A76001C0913 /* DDBaseButton.m */; };
23B2A7BD2B283A76001C0913 /* DDVideoEncodeManage.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B2A7872B283A76001C0913 /* DDVideoEncodeManage.m */; };
23B2A7BE2B283A76001C0913 /* TTPopup.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B2A7892B283A76001C0913 /* TTPopup.m */; };
23B2A7BF2B283A76001C0913 /* TTAlertConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B2A78B2B283A76001C0913 /* TTAlertConfig.m */; };
23B2A7C02B283A76001C0913 /* TTAlertButtonConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B2A7902B283A76001C0913 /* TTAlertButtonConfig.m */; };
23B2A7C12B283A76001C0913 /* TTAlertMessageAttributedConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B2A7912B283A76001C0913 /* TTAlertMessageAttributedConfig.m */; };
23B2A7C22B283A76001C0913 /* TTActionSheetConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B2A7922B283A76001C0913 /* TTActionSheetConfig.m */; };
23B2A7C32B283A76001C0913 /* TTPopupManagerService.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B2A7962B283A76001C0913 /* TTPopupManagerService.m */; };
23B2A7C42B283A76001C0913 /* TTAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B2A7992B283A76001C0913 /* TTAlertView.m */; };
23B2A7C52B283A76001C0913 /* TTActionSheetView.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B2A79C2B283A76001C0913 /* TTActionSheetView.m */; };
23B2A7C62B283A76001C0913 /* TTPopupService.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B2A79E2B283A76001C0913 /* TTPopupService.m */; };
23B2A7C72B283A76001C0913 /* DDFloatScreenAdvertiseModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B2A7A42B283A76001C0913 /* DDFloatScreenAdvertiseModel.m */; };
23B2A7C82B283A76001C0913 /* DDFloatScreenAdvertiseManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B2A7A62B283A76001C0913 /* DDFloatScreenAdvertiseManager.m */; };
23B2A7C92B283A76001C0913 /* DDFloatScreenAdvertiseView.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B2A7A82B283A76001C0913 /* DDFloatScreenAdvertiseView.m */; };
23B2A7CA2B283A76001C0913 /* DDCurVCManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B2A7AC2B283A76001C0913 /* DDCurVCManager.m */; };
23B2A7CB2B283A76001C0913 /* UIImage+DDFilletCorner.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B2A7AF2B283A76001C0913 /* UIImage+DDFilletCorner.m */; };
23B2A7F52B283ACA001C0913 /* BaseMvpPresenter.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B2A7CF2B283ACA001C0913 /* BaseMvpPresenter.m */; };
23B2A7F62B283ACA001C0913 /* UserPhoto.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B2A7D32B283ACA001C0913 /* UserPhoto.m */; };
23B2A7F72B283ACA001C0913 /* NSObject+AutoCoding.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B2A7D52B283ACA001C0913 /* NSObject+AutoCoding.m */; };
23B2A7F82B283ACA001C0913 /* AccountInfoStorage.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B2A7D72B283ACA001C0913 /* AccountInfoStorage.m */; };
23B2A7F92B283ACA001C0913 /* BaseModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B2A7D92B283ACA001C0913 /* BaseModel.m */; };
23B2A7FA2B283ACA001C0913 /* UserInfoModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B2A7DA2B283ACA001C0913 /* UserInfoModel.m */; };
23B2A7FB2B283ACA001C0913 /* UserVipInfoVo.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B2A7DB2B283ACA001C0913 /* UserVipInfoVo.m */; };
23B2A7FC2B283ACA001C0913 /* UserExpand.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B2A7DD2B283ACA001C0913 /* UserExpand.m */; };
23B2A7FD2B283ACA001C0913 /* UserGameInfoVo.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B2A7DF2B283ACA001C0913 /* UserGameInfoVo.m */; };
23B2A7FE2B283ACA001C0913 /* UserLevelVo.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B2A7E52B283ACA001C0913 /* UserLevelVo.m */; };
23B2A7FF2B283ACA001C0913 /* LoginTicketInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B2A7E72B283ACA001C0913 /* LoginTicketInfo.m */; };
23B2A8002B283ACA001C0913 /* AccountModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B2A7E82B283ACA001C0913 /* AccountModel.m */; };
23B2A8012B283ACA001C0913 /* UserInfoSkillVo.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B2A7EA2B283ACA001C0913 /* UserInfoSkillVo.m */; };
23B2A8022B283ACA001C0913 /* MvpViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B2A7ED2B283ACA001C0913 /* MvpViewController.m */; };
23B2A8032B283ACA001C0913 /* Api.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B2A7EF2B283ACA001C0913 /* Api.m */; };
23B2A8042B283ACA001C0913 /* HttpRequestHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B2A7F22B283ACA001C0913 /* HttpRequestHelper.m */; };
8C2C3EC92B277E7F002C3C34 /* DDIAPHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C2C3EC82B277E7F002C3C34 /* DDIAPHelper.m */; };
8C2C3ECC2B2784DE002C3C34 /* DDIAPRechargeStorage.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C2C3ECB2B2784DE002C3C34 /* DDIAPRechargeStorage.m */; };
8C2C3ED02B278C9E002C3C34 /* DDUploadImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C2C3ECF2B278C9E002C3C34 /* DDUploadImage.m */; };
@@ -1987,10 +2029,100 @@
18FC19D52A481A07006FC925 /* RoomEditPassWordView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RoomEditPassWordView.m; sourceTree = "<group>"; };
18FDEDCD2A50353A005EB21D /* DynamicSendLocationView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DynamicSendLocationView.h; sourceTree = "<group>"; };
18FDEDCE2A50353A005EB21D /* DynamicSendLocationView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DynamicSendLocationView.m; sourceTree = "<group>"; };
2358F57B2B230B4A0038453C /* DDVideoEncodeManage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDVideoEncodeManage.h; sourceTree = "<group>"; };
2358F57C2B230B4A0038453C /* DDVideoEncodeManage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDVideoEncodeManage.m; sourceTree = "<group>"; };
2358F57F2B230C350038453C /* UILabel+DDFactory.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UILabel+DDFactory.h"; sourceTree = "<group>"; };
2358F5802B230C350038453C /* UILabel+DDFactory.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UILabel+DDFactory.m"; sourceTree = "<group>"; };
23B2A7622B283A75001C0913 /* DDAppColor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDAppColor.m; sourceTree = "<group>"; };
23B2A7632B283A75001C0913 /* DDAppColor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDAppColor.h; sourceTree = "<group>"; };
23B2A7652B283A75001C0913 /* DDBaseVC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDBaseVC.h; sourceTree = "<group>"; };
23B2A7662B283A75001C0913 /* DDBaseVC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDBaseVC.m; sourceTree = "<group>"; };
23B2A7682B283A75001C0913 /* DDHUDManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDHUDManager.h; sourceTree = "<group>"; };
23B2A7692B283A75001C0913 /* DDHUDManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDHUDManager.m; sourceTree = "<group>"; };
23B2A76B2B283A75001C0913 /* DDDownloadImageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDDownloadImageView.h; sourceTree = "<group>"; };
23B2A76C2B283A75001C0913 /* DDDownloadImageFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDDownloadImageFile.h; sourceTree = "<group>"; };
23B2A76D2B283A75001C0913 /* DDUIImageFixedManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDUIImageFixedManager.m; sourceTree = "<group>"; };
23B2A76E2B283A75001C0913 /* DDDownloadImageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDDownloadImageView.m; sourceTree = "<group>"; };
23B2A76F2B283A75001C0913 /* DDDownloadImageFile.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDDownloadImageFile.m; sourceTree = "<group>"; };
23B2A7702B283A75001C0913 /* DDUIImageFixedManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDUIImageFixedManager.h; sourceTree = "<group>"; };
23B2A7722B283A76001C0913 /* UIImage+ImageEffects.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+ImageEffects.h"; sourceTree = "<group>"; };
23B2A7732B283A76001C0913 /* UIImage+ImageEffects.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+ImageEffects.m"; sourceTree = "<group>"; };
23B2A7752B283A76001C0913 /* DDSVGAAnimationManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDSVGAAnimationManager.m; sourceTree = "<group>"; };
23B2A7762B283A76001C0913 /* DDSVGAAnimationManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDSVGAAnimationManager.h; sourceTree = "<group>"; };
23B2A7782B283A76001C0913 /* UILabel+DDFactory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UILabel+DDFactory.m"; sourceTree = "<group>"; };
23B2A7792B283A76001C0913 /* UILabel+DDFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UILabel+DDFactory.h"; sourceTree = "<group>"; };
23B2A77B2B283A76001C0913 /* UIView+UIView_DDAngleRoundedTool.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+UIView_DDAngleRoundedTool.m"; sourceTree = "<group>"; };
23B2A77C2B283A76001C0913 /* UIView+UIView_DDAngleRoundedTool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+UIView_DDAngleRoundedTool.h"; sourceTree = "<group>"; };
23B2A77E2B283A76001C0913 /* DDBaseNavVC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDBaseNavVC.m; sourceTree = "<group>"; };
23B2A77F2B283A76001C0913 /* DDBaseNavVC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDBaseNavVC.h; sourceTree = "<group>"; };
23B2A7812B283A76001C0913 /* UIButton+TouchRegion.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIButton+TouchRegion.m"; sourceTree = "<group>"; };
23B2A7822B283A76001C0913 /* DDBaseButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDBaseButton.h; sourceTree = "<group>"; };
23B2A7832B283A76001C0913 /* UIButton+TouchRegion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIButton+TouchRegion.h"; sourceTree = "<group>"; };
23B2A7842B283A76001C0913 /* DDBaseButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDBaseButton.m; sourceTree = "<group>"; };
23B2A7862B283A76001C0913 /* DDVideoEncodeManage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDVideoEncodeManage.h; sourceTree = "<group>"; };
23B2A7872B283A76001C0913 /* DDVideoEncodeManage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDVideoEncodeManage.m; sourceTree = "<group>"; };
23B2A7892B283A76001C0913 /* TTPopup.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TTPopup.m; sourceTree = "<group>"; };
23B2A78B2B283A76001C0913 /* TTAlertConfig.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TTAlertConfig.m; sourceTree = "<group>"; };
23B2A78C2B283A76001C0913 /* TTAlertMessageAttributedConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TTAlertMessageAttributedConfig.h; sourceTree = "<group>"; };
23B2A78D2B283A76001C0913 /* TTAlertButtonConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TTAlertButtonConfig.h; sourceTree = "<group>"; };
23B2A78E2B283A76001C0913 /* TTActionSheetConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TTActionSheetConfig.h; sourceTree = "<group>"; };
23B2A78F2B283A76001C0913 /* TTAlertConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TTAlertConfig.h; sourceTree = "<group>"; };
23B2A7902B283A76001C0913 /* TTAlertButtonConfig.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TTAlertButtonConfig.m; sourceTree = "<group>"; };
23B2A7912B283A76001C0913 /* TTAlertMessageAttributedConfig.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TTAlertMessageAttributedConfig.m; sourceTree = "<group>"; };
23B2A7922B283A76001C0913 /* TTActionSheetConfig.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TTActionSheetConfig.m; sourceTree = "<group>"; };
23B2A7942B283A76001C0913 /* TTPopupManagerServiceProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TTPopupManagerServiceProtocol.h; sourceTree = "<group>"; };
23B2A7952B283A76001C0913 /* TTPopupManagerService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TTPopupManagerService.h; sourceTree = "<group>"; };
23B2A7962B283A76001C0913 /* TTPopupManagerService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TTPopupManagerService.m; sourceTree = "<group>"; };
23B2A7972B283A76001C0913 /* TTPopup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TTPopup.h; sourceTree = "<group>"; };
23B2A7992B283A76001C0913 /* TTAlertView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TTAlertView.m; sourceTree = "<group>"; };
23B2A79A2B283A76001C0913 /* TTActionSheetView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TTActionSheetView.h; sourceTree = "<group>"; };
23B2A79B2B283A76001C0913 /* TTAlertView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TTAlertView.h; sourceTree = "<group>"; };
23B2A79C2B283A76001C0913 /* TTActionSheetView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TTActionSheetView.m; sourceTree = "<group>"; };
23B2A79E2B283A76001C0913 /* TTPopupService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TTPopupService.m; sourceTree = "<group>"; };
23B2A79F2B283A76001C0913 /* TTPopupServiceProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TTPopupServiceProtocol.h; sourceTree = "<group>"; };
23B2A7A02B283A76001C0913 /* TTPopupService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TTPopupService.h; sourceTree = "<group>"; };
23B2A7A22B283A76001C0913 /* TTPopupConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TTPopupConstants.h; sourceTree = "<group>"; };
23B2A7A42B283A76001C0913 /* DDFloatScreenAdvertiseModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDFloatScreenAdvertiseModel.m; sourceTree = "<group>"; };
23B2A7A52B283A76001C0913 /* DDFloatScreenAdvertiseView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDFloatScreenAdvertiseView.h; sourceTree = "<group>"; };
23B2A7A62B283A76001C0913 /* DDFloatScreenAdvertiseManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDFloatScreenAdvertiseManager.m; sourceTree = "<group>"; };
23B2A7A72B283A76001C0913 /* DDFloatScreenAdvertiseManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDFloatScreenAdvertiseManager.h; sourceTree = "<group>"; };
23B2A7A82B283A76001C0913 /* DDFloatScreenAdvertiseView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDFloatScreenAdvertiseView.m; sourceTree = "<group>"; };
23B2A7A92B283A76001C0913 /* DDFloatScreenAdvertiseModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDFloatScreenAdvertiseModel.h; sourceTree = "<group>"; };
23B2A7AB2B283A76001C0913 /* DDCurVCManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDCurVCManager.h; sourceTree = "<group>"; };
23B2A7AC2B283A76001C0913 /* DDCurVCManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDCurVCManager.m; sourceTree = "<group>"; };
23B2A7AE2B283A76001C0913 /* UIImage+DDFilletCorner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+DDFilletCorner.h"; sourceTree = "<group>"; };
23B2A7AF2B283A76001C0913 /* UIImage+DDFilletCorner.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+DDFilletCorner.m"; sourceTree = "<group>"; };
23B2A7CE2B283ACA001C0913 /* BaseMvpPresenter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BaseMvpPresenter.h; sourceTree = "<group>"; };
23B2A7CF2B283ACA001C0913 /* BaseMvpPresenter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BaseMvpPresenter.m; sourceTree = "<group>"; };
23B2A7D12B283ACA001C0913 /* BaseMvpProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BaseMvpProtocol.h; sourceTree = "<group>"; };
23B2A7D32B283ACA001C0913 /* UserPhoto.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UserPhoto.m; sourceTree = "<group>"; };
23B2A7D42B283ACA001C0913 /* UserGameInfoVo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserGameInfoVo.h; sourceTree = "<group>"; };
23B2A7D52B283ACA001C0913 /* NSObject+AutoCoding.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+AutoCoding.m"; sourceTree = "<group>"; };
23B2A7D62B283ACA001C0913 /* UserLevelVo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserLevelVo.h; sourceTree = "<group>"; };
23B2A7D72B283ACA001C0913 /* AccountInfoStorage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AccountInfoStorage.m; sourceTree = "<group>"; };
23B2A7D82B283ACA001C0913 /* LoginTicketInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LoginTicketInfo.h; sourceTree = "<group>"; };
23B2A7D92B283ACA001C0913 /* BaseModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BaseModel.m; sourceTree = "<group>"; };
23B2A7DA2B283ACA001C0913 /* UserInfoModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UserInfoModel.m; sourceTree = "<group>"; };
23B2A7DB2B283ACA001C0913 /* UserVipInfoVo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UserVipInfoVo.m; sourceTree = "<group>"; };
23B2A7DC2B283ACA001C0913 /* UserInfoSkillVo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserInfoSkillVo.h; sourceTree = "<group>"; };
23B2A7DD2B283ACA001C0913 /* UserExpand.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UserExpand.m; sourceTree = "<group>"; };
23B2A7DE2B283ACA001C0913 /* AccountModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccountModel.h; sourceTree = "<group>"; };
23B2A7DF2B283ACA001C0913 /* UserGameInfoVo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UserGameInfoVo.m; sourceTree = "<group>"; };
23B2A7E02B283ACA001C0913 /* UserPhoto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserPhoto.h; sourceTree = "<group>"; };
23B2A7E12B283ACA001C0913 /* NSObject+AutoCoding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+AutoCoding.h"; sourceTree = "<group>"; };
23B2A7E22B283ACA001C0913 /* UserVipInfoVo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserVipInfoVo.h; sourceTree = "<group>"; };
23B2A7E32B283ACA001C0913 /* UserInfoModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserInfoModel.h; sourceTree = "<group>"; };
23B2A7E42B283ACA001C0913 /* BaseModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BaseModel.h; sourceTree = "<group>"; };
23B2A7E52B283ACA001C0913 /* UserLevelVo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UserLevelVo.m; sourceTree = "<group>"; };
23B2A7E62B283ACA001C0913 /* AccountInfoStorage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccountInfoStorage.h; sourceTree = "<group>"; };
23B2A7E72B283ACA001C0913 /* LoginTicketInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LoginTicketInfo.m; sourceTree = "<group>"; };
23B2A7E82B283ACA001C0913 /* AccountModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AccountModel.m; sourceTree = "<group>"; };
23B2A7E92B283ACA001C0913 /* UserExpand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserExpand.h; sourceTree = "<group>"; };
23B2A7EA2B283ACA001C0913 /* UserInfoSkillVo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UserInfoSkillVo.m; sourceTree = "<group>"; };
23B2A7EC2B283ACA001C0913 /* MvpViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MvpViewController.h; sourceTree = "<group>"; };
23B2A7ED2B283ACA001C0913 /* MvpViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MvpViewController.m; sourceTree = "<group>"; };
23B2A7EF2B283ACA001C0913 /* Api.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Api.m; sourceTree = "<group>"; };
23B2A7F02B283ACA001C0913 /* Api.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Api.h; sourceTree = "<group>"; };
23B2A7F22B283ACA001C0913 /* HttpRequestHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HttpRequestHelper.m; sourceTree = "<group>"; };
23B2A7F32B283ACA001C0913 /* ApiHost.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ApiHost.h; sourceTree = "<group>"; };
23B2A7F42B283ACA001C0913 /* HttpRequestHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HttpRequestHelper.h; sourceTree = "<group>"; };
23B2A8062B2843B6001C0913 /* DDMacroHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDMacroHeader.h; sourceTree = "<group>"; };
2411BE5187E529C085E77220 /* libPods-DingDangAppTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-DingDangAppTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
42F5E7CEE31217A32E19E10E /* Pods-DingDangApp-DingDangAppUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DingDangApp-DingDangAppUITests.debug.xcconfig"; path = "Target Support Files/Pods-DingDangApp-DingDangAppUITests/Pods-DingDangApp-DingDangAppUITests.debug.xcconfig"; sourceTree = "<group>"; };
688E5912F2E950A95FC1EE55 /* Pods-DingDangAppTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DingDangAppTests.release.xcconfig"; path = "Target Support Files/Pods-DingDangAppTests/Pods-DingDangAppTests.release.xcconfig"; sourceTree = "<group>"; };
@@ -4945,6 +5077,7 @@
2358F5732B23085F0038453C /* YingMeng */ = {
isa = PBXGroup;
children = (
23B2A8052B2843B6001C0913 /* DDGlobalManager */,
2358F5742B23085F0038453C /* DDBaseCompilation */,
);
path = YingMeng;
@@ -4953,6 +5086,8 @@
2358F5742B23085F0038453C /* DDBaseCompilation */ = {
isa = PBXGroup;
children = (
23B2A7CC2B283ACA001C0913 /* MVP */,
23B2A7F12B283ACA001C0913 /* Net */,
2358F5752B23085F0038453C /* DDBaseUI */,
8CE493952B23F2B400CA14D5 /* DDBaseTool */,
);
@@ -4962,28 +5097,323 @@
2358F5752B23085F0038453C /* DDBaseUI */ = {
isa = PBXGroup;
children = (
2358F57E2B230C1C0038453C /* DDBaseUILabel */,
2358F57A2B230B4A0038453C /* DDVideoEncodeManage */,
23B2A7612B283A75001C0913 /* DDAppColor */,
23B2A77D2B283A76001C0913 /* DDBaseNavVC */,
23B2A7802B283A76001C0913 /* DDBaseUIButton */,
23B2A7AD2B283A76001C0913 /* DDBaseUIimage */,
23B2A7772B283A76001C0913 /* DDBaseUILabel */,
23B2A7642B283A75001C0913 /* DDBaseVC */,
23B2A7AA2B283A76001C0913 /* DDCurVCManager */,
23B2A7A32B283A76001C0913 /* DDFloatScreenAdvertisingView */,
23B2A7672B283A75001C0913 /* DDHUDManager */,
23B2A7742B283A76001C0913 /* DDSVGAAnimation */,
23B2A76A2B283A75001C0913 /* DDUIImageFixed */,
23B2A77A2B283A76001C0913 /* DDUIView */,
23B2A7852B283A76001C0913 /* DDVideoEncodeManage */,
23B2A7882B283A76001C0913 /* TTPopup */,
23B2A7712B283A76001C0913 /* VagueImageView */,
);
path = DDBaseUI;
sourceTree = "<group>";
};
2358F57A2B230B4A0038453C /* DDVideoEncodeManage */ = {
23B2A7612B283A75001C0913 /* DDAppColor */ = {
isa = PBXGroup;
children = (
2358F57B2B230B4A0038453C /* DDVideoEncodeManage.h */,
2358F57C2B230B4A0038453C /* DDVideoEncodeManage.m */,
23B2A7622B283A75001C0913 /* DDAppColor.m */,
23B2A7632B283A75001C0913 /* DDAppColor.h */,
);
path = DDAppColor;
sourceTree = "<group>";
};
23B2A7642B283A75001C0913 /* DDBaseVC */ = {
isa = PBXGroup;
children = (
23B2A7652B283A75001C0913 /* DDBaseVC.h */,
23B2A7662B283A75001C0913 /* DDBaseVC.m */,
);
path = DDBaseVC;
sourceTree = "<group>";
};
23B2A7672B283A75001C0913 /* DDHUDManager */ = {
isa = PBXGroup;
children = (
23B2A7682B283A75001C0913 /* DDHUDManager.h */,
23B2A7692B283A75001C0913 /* DDHUDManager.m */,
);
path = DDHUDManager;
sourceTree = "<group>";
};
23B2A76A2B283A75001C0913 /* DDUIImageFixed */ = {
isa = PBXGroup;
children = (
23B2A76C2B283A75001C0913 /* DDDownloadImageFile.h */,
23B2A76F2B283A75001C0913 /* DDDownloadImageFile.m */,
23B2A76B2B283A75001C0913 /* DDDownloadImageView.h */,
23B2A76E2B283A75001C0913 /* DDDownloadImageView.m */,
23B2A7702B283A75001C0913 /* DDUIImageFixedManager.h */,
23B2A76D2B283A75001C0913 /* DDUIImageFixedManager.m */,
);
path = DDUIImageFixed;
sourceTree = "<group>";
};
23B2A7712B283A76001C0913 /* VagueImageView */ = {
isa = PBXGroup;
children = (
23B2A7722B283A76001C0913 /* UIImage+ImageEffects.h */,
23B2A7732B283A76001C0913 /* UIImage+ImageEffects.m */,
);
path = VagueImageView;
sourceTree = "<group>";
};
23B2A7742B283A76001C0913 /* DDSVGAAnimation */ = {
isa = PBXGroup;
children = (
23B2A7752B283A76001C0913 /* DDSVGAAnimationManager.m */,
23B2A7762B283A76001C0913 /* DDSVGAAnimationManager.h */,
);
path = DDSVGAAnimation;
sourceTree = "<group>";
};
23B2A7772B283A76001C0913 /* DDBaseUILabel */ = {
isa = PBXGroup;
children = (
23B2A7782B283A76001C0913 /* UILabel+DDFactory.m */,
23B2A7792B283A76001C0913 /* UILabel+DDFactory.h */,
);
path = DDBaseUILabel;
sourceTree = "<group>";
};
23B2A77A2B283A76001C0913 /* DDUIView */ = {
isa = PBXGroup;
children = (
23B2A77B2B283A76001C0913 /* UIView+UIView_DDAngleRoundedTool.m */,
23B2A77C2B283A76001C0913 /* UIView+UIView_DDAngleRoundedTool.h */,
);
path = DDUIView;
sourceTree = "<group>";
};
23B2A77D2B283A76001C0913 /* DDBaseNavVC */ = {
isa = PBXGroup;
children = (
23B2A77E2B283A76001C0913 /* DDBaseNavVC.m */,
23B2A77F2B283A76001C0913 /* DDBaseNavVC.h */,
);
path = DDBaseNavVC;
sourceTree = "<group>";
};
23B2A7802B283A76001C0913 /* DDBaseUIButton */ = {
isa = PBXGroup;
children = (
23B2A7812B283A76001C0913 /* UIButton+TouchRegion.m */,
23B2A7822B283A76001C0913 /* DDBaseButton.h */,
23B2A7832B283A76001C0913 /* UIButton+TouchRegion.h */,
23B2A7842B283A76001C0913 /* DDBaseButton.m */,
);
path = DDBaseUIButton;
sourceTree = "<group>";
};
23B2A7852B283A76001C0913 /* DDVideoEncodeManage */ = {
isa = PBXGroup;
children = (
23B2A7862B283A76001C0913 /* DDVideoEncodeManage.h */,
23B2A7872B283A76001C0913 /* DDVideoEncodeManage.m */,
);
path = DDVideoEncodeManage;
sourceTree = "<group>";
};
2358F57E2B230C1C0038453C /* DDBaseUILabel */ = {
23B2A7882B283A76001C0913 /* TTPopup */ = {
isa = PBXGroup;
children = (
2358F57F2B230C350038453C /* UILabel+DDFactory.h */,
2358F5802B230C350038453C /* UILabel+DDFactory.m */,
23B2A7892B283A76001C0913 /* TTPopup.m */,
23B2A78A2B283A76001C0913 /* Config */,
23B2A7932B283A76001C0913 /* Manager */,
23B2A7972B283A76001C0913 /* TTPopup.h */,
23B2A7982B283A76001C0913 /* View */,
23B2A79D2B283A76001C0913 /* Service */,
23B2A7A12B283A76001C0913 /* Header */,
);
path = DDBaseUILabel;
path = TTPopup;
sourceTree = "<group>";
};
23B2A78A2B283A76001C0913 /* Config */ = {
isa = PBXGroup;
children = (
23B2A78B2B283A76001C0913 /* TTAlertConfig.m */,
23B2A78C2B283A76001C0913 /* TTAlertMessageAttributedConfig.h */,
23B2A78D2B283A76001C0913 /* TTAlertButtonConfig.h */,
23B2A78E2B283A76001C0913 /* TTActionSheetConfig.h */,
23B2A78F2B283A76001C0913 /* TTAlertConfig.h */,
23B2A7902B283A76001C0913 /* TTAlertButtonConfig.m */,
23B2A7912B283A76001C0913 /* TTAlertMessageAttributedConfig.m */,
23B2A7922B283A76001C0913 /* TTActionSheetConfig.m */,
);
path = Config;
sourceTree = "<group>";
};
23B2A7932B283A76001C0913 /* Manager */ = {
isa = PBXGroup;
children = (
23B2A7942B283A76001C0913 /* TTPopupManagerServiceProtocol.h */,
23B2A7952B283A76001C0913 /* TTPopupManagerService.h */,
23B2A7962B283A76001C0913 /* TTPopupManagerService.m */,
);
path = Manager;
sourceTree = "<group>";
};
23B2A7982B283A76001C0913 /* View */ = {
isa = PBXGroup;
children = (
23B2A7992B283A76001C0913 /* TTAlertView.m */,
23B2A79A2B283A76001C0913 /* TTActionSheetView.h */,
23B2A79B2B283A76001C0913 /* TTAlertView.h */,
23B2A79C2B283A76001C0913 /* TTActionSheetView.m */,
);
path = View;
sourceTree = "<group>";
};
23B2A79D2B283A76001C0913 /* Service */ = {
isa = PBXGroup;
children = (
23B2A79E2B283A76001C0913 /* TTPopupService.m */,
23B2A79F2B283A76001C0913 /* TTPopupServiceProtocol.h */,
23B2A7A02B283A76001C0913 /* TTPopupService.h */,
);
path = Service;
sourceTree = "<group>";
};
23B2A7A12B283A76001C0913 /* Header */ = {
isa = PBXGroup;
children = (
23B2A7A22B283A76001C0913 /* TTPopupConstants.h */,
);
path = Header;
sourceTree = "<group>";
};
23B2A7A32B283A76001C0913 /* DDFloatScreenAdvertisingView */ = {
isa = PBXGroup;
children = (
23B2A7A42B283A76001C0913 /* DDFloatScreenAdvertiseModel.m */,
23B2A7A52B283A76001C0913 /* DDFloatScreenAdvertiseView.h */,
23B2A7A62B283A76001C0913 /* DDFloatScreenAdvertiseManager.m */,
23B2A7A72B283A76001C0913 /* DDFloatScreenAdvertiseManager.h */,
23B2A7A82B283A76001C0913 /* DDFloatScreenAdvertiseView.m */,
23B2A7A92B283A76001C0913 /* DDFloatScreenAdvertiseModel.h */,
);
path = DDFloatScreenAdvertisingView;
sourceTree = "<group>";
};
23B2A7AA2B283A76001C0913 /* DDCurVCManager */ = {
isa = PBXGroup;
children = (
23B2A7AB2B283A76001C0913 /* DDCurVCManager.h */,
23B2A7AC2B283A76001C0913 /* DDCurVCManager.m */,
);
path = DDCurVCManager;
sourceTree = "<group>";
};
23B2A7AD2B283A76001C0913 /* DDBaseUIimage */ = {
isa = PBXGroup;
children = (
23B2A7AE2B283A76001C0913 /* UIImage+DDFilletCorner.h */,
23B2A7AF2B283A76001C0913 /* UIImage+DDFilletCorner.m */,
);
path = DDBaseUIimage;
sourceTree = "<group>";
};
23B2A7CC2B283ACA001C0913 /* MVP */ = {
isa = PBXGroup;
children = (
23B2A7CD2B283ACA001C0913 /* Presenter */,
23B2A7D02B283ACA001C0913 /* Protocol */,
23B2A7D22B283ACA001C0913 /* Model */,
23B2A7EB2B283ACA001C0913 /* View */,
23B2A7EE2B283ACA001C0913 /* Api */,
);
path = MVP;
sourceTree = "<group>";
};
23B2A7CD2B283ACA001C0913 /* Presenter */ = {
isa = PBXGroup;
children = (
23B2A7CE2B283ACA001C0913 /* BaseMvpPresenter.h */,
23B2A7CF2B283ACA001C0913 /* BaseMvpPresenter.m */,
);
path = Presenter;
sourceTree = "<group>";
};
23B2A7D02B283ACA001C0913 /* Protocol */ = {
isa = PBXGroup;
children = (
23B2A7D12B283ACA001C0913 /* BaseMvpProtocol.h */,
);
path = Protocol;
sourceTree = "<group>";
};
23B2A7D22B283ACA001C0913 /* Model */ = {
isa = PBXGroup;
children = (
23B2A7D32B283ACA001C0913 /* UserPhoto.m */,
23B2A7D42B283ACA001C0913 /* UserGameInfoVo.h */,
23B2A7D52B283ACA001C0913 /* NSObject+AutoCoding.m */,
23B2A7D62B283ACA001C0913 /* UserLevelVo.h */,
23B2A7D72B283ACA001C0913 /* AccountInfoStorage.m */,
23B2A7D82B283ACA001C0913 /* LoginTicketInfo.h */,
23B2A7D92B283ACA001C0913 /* BaseModel.m */,
23B2A7DA2B283ACA001C0913 /* UserInfoModel.m */,
23B2A7DB2B283ACA001C0913 /* UserVipInfoVo.m */,
23B2A7DC2B283ACA001C0913 /* UserInfoSkillVo.h */,
23B2A7DD2B283ACA001C0913 /* UserExpand.m */,
23B2A7DE2B283ACA001C0913 /* AccountModel.h */,
23B2A7DF2B283ACA001C0913 /* UserGameInfoVo.m */,
23B2A7E02B283ACA001C0913 /* UserPhoto.h */,
23B2A7E12B283ACA001C0913 /* NSObject+AutoCoding.h */,
23B2A7E22B283ACA001C0913 /* UserVipInfoVo.h */,
23B2A7E32B283ACA001C0913 /* UserInfoModel.h */,
23B2A7E42B283ACA001C0913 /* BaseModel.h */,
23B2A7E52B283ACA001C0913 /* UserLevelVo.m */,
23B2A7E62B283ACA001C0913 /* AccountInfoStorage.h */,
23B2A7E72B283ACA001C0913 /* LoginTicketInfo.m */,
23B2A7E82B283ACA001C0913 /* AccountModel.m */,
23B2A7E92B283ACA001C0913 /* UserExpand.h */,
23B2A7EA2B283ACA001C0913 /* UserInfoSkillVo.m */,
);
path = Model;
sourceTree = "<group>";
};
23B2A7EB2B283ACA001C0913 /* View */ = {
isa = PBXGroup;
children = (
23B2A7EC2B283ACA001C0913 /* MvpViewController.h */,
23B2A7ED2B283ACA001C0913 /* MvpViewController.m */,
);
path = View;
sourceTree = "<group>";
};
23B2A7EE2B283ACA001C0913 /* Api */ = {
isa = PBXGroup;
children = (
23B2A7EF2B283ACA001C0913 /* Api.m */,
23B2A7F02B283ACA001C0913 /* Api.h */,
);
path = Api;
sourceTree = "<group>";
};
23B2A7F12B283ACA001C0913 /* Net */ = {
isa = PBXGroup;
children = (
23B2A7F22B283ACA001C0913 /* HttpRequestHelper.m */,
23B2A7F32B283ACA001C0913 /* ApiHost.h */,
23B2A7F42B283ACA001C0913 /* HttpRequestHelper.h */,
);
path = Net;
sourceTree = "<group>";
};
23B2A8052B2843B6001C0913 /* DDGlobalManager */ = {
isa = PBXGroup;
children = (
23B2A8062B2843B6001C0913 /* DDMacroHeader.h */,
);
path = DDGlobalManager;
sourceTree = "<group>";
};
32CE1ADC954F476C1C94DB40 /* Frameworks */ = {
@@ -5756,6 +6186,7 @@
1802B3CB2A540F870036DCEF /* DDProtocolView.m in Sources */,
18660CD92A21921F0032D0C9 /* NetTipView.m in Sources */,
188AF5982A273CE9004DD4CF /* DDStorePageVC.m in Sources */,
23B2A7C22B283A76001C0913 /* TTActionSheetConfig.m in Sources */,
188AF5BF2A275C57004DD4CF /* RoomPublicScreenModel.m in Sources */,
188EC1212A47CF3200060F03 /* HXPhotoModel.m in Sources */,
188EC1132A47CF3200060F03 /* HXPhotoCommon.m in Sources */,
@@ -5790,6 +6221,7 @@
189569B32A235C4400DCF149 /* RoomOnlineUserListCell.m in Sources */,
188EC0E42A47CF3200060F03 /* DDMToolView.m in Sources */,
18660CEB2A2193050032D0C9 /* WLRefreshNormalHeader.m in Sources */,
23B2A7C02B283A76001C0913 /* TTAlertButtonConfig.m in Sources */,
188CA9662A4FCD5D00DAFC86 /* DDV2BannerImgView.m in Sources */,
189569A62A232EB300DCF149 /* RoomMoreManagementView.m in Sources */,
188EC1092A47CF3200060F03 /* NSBundle+HXPhotoPicker.m in Sources */,
@@ -5806,6 +6238,7 @@
181F754B2A5409AB006FA7F5 /* DDGradientView.m in Sources */,
188EC11C2A47CF3200060F03 /* HXPhotoViewController.m in Sources */,
8CE493B02B2404E000CA14D5 /* DDGCDHelper.m in Sources */,
23B2A7B22B283A76001C0913 /* DDHUDManager.m in Sources */,
188EBF742A47CEA500060F03 /* DDSystemXiaoXiInfoVC.m in Sources */,
18660D4A2A2193C50032D0C9 /* UIViewController+Custom.m in Sources */,
188EBF762A47CEA500060F03 /* DDLiveListCell.m in Sources */,
@@ -5820,10 +6253,11 @@
1812EC842A54FD4700FF2AC0 /* DDRoomGiftMicView.m in Sources */,
18AFFECA2A4BE798008F6478 /* DDMineModel.m in Sources */,
188EC0EA2A47CF3200060F03 /* DDMEmojisCell.m in Sources */,
23B2A7B92B283A76001C0913 /* UIView+UIView_DDAngleRoundedTool.m in Sources */,
18660D992A21A08A0032D0C9 /* AppUserModel.m in Sources */,
188EBF772A47CEA500060F03 /* DDMLiveListVC.m in Sources */,
2358F57D2B230B4A0038453C /* DDVideoEncodeManage.m in Sources */,
18C833602A25A12A0090BF65 /* DDMyInfoGiftWallCollectionViewCell.m in Sources */,
23B2A7FD2B283ACA001C0913 /* UserGameInfoVo.m in Sources */,
8C2C3F272B2803CA002C3C34 /* DDSpriteSheeImagetManager.m in Sources */,
18660DCD2A21E54B0032D0C9 /* RoomViewController.m in Sources */,
8C2C3EE62B27CC7D002C3C34 /* DDDESEncrypt.m in Sources */,
@@ -5847,6 +6281,7 @@
18E659CA2A5654FD0017854A /* DDFollowFansCell.m in Sources */,
18660CB12A21907B0032D0C9 /* AppDelegate+CYLTabBar.m in Sources */,
1812EC8A2A54FD7600FF2AC0 /* DDRoomLuckyGiftDescriptionView.m in Sources */,
23B2A7BF2B283A76001C0913 /* TTAlertConfig.m in Sources */,
186C9CEB2A29D96C00209BB5 /* DDDynamicSendViewController.m in Sources */,
183864442A28A17B005BF235 /* ZLPlayer.m in Sources */,
188AF59F2A273D28004DD4CF /* DDStoreBottomView.m in Sources */,
@@ -5874,12 +6309,15 @@
18660CBD2A21913E0032D0C9 /* WRCustomNavigationBar.m in Sources */,
188EC13A2A47CF3300060F03 /* HX_PhotoEditViewController.m in Sources */,
1812EC7E2A54FC9300FF2AC0 /* DDRoomSendGiftsView.m in Sources */,
23B2A7BC2B283A76001C0913 /* DDBaseButton.m in Sources */,
1838643D2A28A17B005BF235 /* ZLAnimateTransition.m in Sources */,
183864552A28A17B005BF235 /* ZLPhotoModel.m in Sources */,
18660CDB2A21921F0032D0C9 /* AFmanager.m in Sources */,
1899569C2A21F00C002ABEEB /* RoomUserMicroCell.m in Sources */,
23B2A8032B283ACA001C0913 /* Api.m in Sources */,
188AF5CB2A27648A004DD4CF /* RoomPublicScreenTextCell.m in Sources */,
18660CE22A2192A80032D0C9 /* AppMessageManager.m in Sources */,
23B2A8042B283ACA001C0913 /* HttpRequestHelper.m in Sources */,
188EC0F62A47CF3200060F03 /* DDChatHelper.m in Sources */,
18660D942A2195600032D0C9 /* DynamicViewController.m in Sources */,
18B1EA3B2A273F0F00DDE889 /* DDSearchPageNoDataView.m in Sources */,
@@ -5902,7 +6340,10 @@
188EBF6E2A47CEA500060F03 /* DDInteractiveCell.m in Sources */,
186615FF2A21F09D00A2044C /* UploadOSSTool.m in Sources */,
183864402A28A17B005BF235 /* ZLProgressView.m in Sources */,
23B2A7F62B283ACA001C0913 /* UserPhoto.m in Sources */,
23B2A7B02B283A76001C0913 /* DDAppColor.m in Sources */,
188EC10B2A47CF3200060F03 /* UIFont+HXExtension.m in Sources */,
23B2A7FB2B283ACA001C0913 /* UserVipInfoVo.m in Sources */,
180BE11D2A24357800DF59E3 /* RoomMoreManagementHeaderView.m in Sources */,
188EC1082A47CF3200060F03 /* NSArray+HXExtension.m in Sources */,
1826C6072A24A47200A5AFDB /* DDBasePagerHomeListViewController.m in Sources */,
@@ -5910,6 +6351,7 @@
188EC1592A47CF3300060F03 /* RKNotificationHub.m in Sources */,
183864472A28A17B005BF235 /* ZLEditViewController.m in Sources */,
1802B3DB2A541B6B0036DCEF /* DDLoginTextView.m in Sources */,
23B2A7B72B283A76001C0913 /* DDSVGAAnimationManager.m in Sources */,
186A897B2A41B272001DE99E /* DDAuthorStatusTableViewCell.m in Sources */,
186A88E42A415291001DE99E /* DDMyLevelViewController.m in Sources */,
18C905042A2305A600F7CAFD /* ResourcePickerToolsObject.m in Sources */,
@@ -5974,6 +6416,7 @@
188EC1522A47CF3300060F03 /* HXPhotoEditGraffitiColorViewCell.m in Sources */,
188EC1182A47CF3200060F03 /* HXCustomCameraViewController.m in Sources */,
18660DA52A21AF390032D0C9 /* DDSocketTool.m in Sources */,
23B2A7C92B283A76001C0913 /* DDFloatScreenAdvertiseView.m in Sources */,
186C9D1C2A2A15CE00209BB5 /* DDPasswordTextView.m in Sources */,
18FC19D62A481A07006FC925 /* RoomEditPassWordView.m in Sources */,
18F46DA92A288B2D00CD2B7E /* RoomSendGiftCountView.m in Sources */,
@@ -6002,6 +6445,7 @@
8C2C3F162B27ED7C002C3C34 /* DDUtility+App.m in Sources */,
18D348252A25F3A40011D61C /* DDMyInfoCommonListViewController.m in Sources */,
188EBF6C2A47CEA500060F03 /* DDChatVC.m in Sources */,
23B2A7B42B283A76001C0913 /* DDDownloadImageView.m in Sources */,
188EC14E2A47CF3300060F03 /* HXPhotoEditStickerItemContentView.m in Sources */,
188EC14D2A47CF3300060F03 /* HXPhotoEditDrawView.m in Sources */,
188EC14B2A47CF3300060F03 /* HXPhotoEditSplashMaskLayer.m in Sources */,
@@ -6022,11 +6466,13 @@
183864542A28A17B005BF235 /* ZLPhotoActionSheet.m in Sources */,
188EC1362A47CF3300060F03 /* HXCircleProgressView.m in Sources */,
188EC11B2A47CF3200060F03 /* HXPhotoPreviewViewController.m in Sources */,
23B2A8012B283ACA001C0913 /* UserInfoSkillVo.m in Sources */,
18660D7F2A21947B0032D0C9 /* WLBlockTableView.m in Sources */,
18AFFEC62A4BE706008F6478 /* DDMineCell.m in Sources */,
188EBF9C2A47CF0C00060F03 /* DDKeyBoardTextView.m in Sources */,
188EC0E22A47CF3200060F03 /* DDMInputView.m in Sources */,
18DA64892A68D6BD0086F600 /* DDAFJSONResponseSerializer.m in Sources */,
23B2A7F82B283ACA001C0913 /* AccountInfoStorage.m in Sources */,
18D7862B2A23087D00C9875F /* RoomUserInfoView.m in Sources */,
18D348342A2613800011D61C /* DDMyInfoSettingViewController.m in Sources */,
1826C6192A24C4EE00A5AFDB /* DDMyInformationDynamicViewController.m in Sources */,
@@ -6086,13 +6532,17 @@
18660D512A2193C50032D0C9 /* NSObject+Custom.m in Sources */,
188583432A4281F800657AEC /* DDMyBlackListViewController.m in Sources */,
188EC0F32A47CF3200060F03 /* DDMInputHelper.m in Sources */,
23B2A7F92B283ACA001C0913 /* BaseModel.m in Sources */,
188EC13E2A47CF3300060F03 /* HXPhotoEditResizeControl.m in Sources */,
1867776F2A4292F70096D802 /* CreatRoomBgImageViewCell.m in Sources */,
181F75482A5407AF006FA7F5 /* DDLabelModel.m in Sources */,
23B2A7F72B283ACA001C0913 /* NSObject+AutoCoding.m in Sources */,
186C9D0D2A29EE3500209BB5 /* ZLShowMultimedia.m in Sources */,
1894A2D42A5811870085ADAB /* DDMyRechargeCell.m in Sources */,
23B2A7CB2B283A76001C0913 /* UIImage+DDFilletCorner.m in Sources */,
188EC1202A47CF3200060F03 /* HXVideoEditViewController.m in Sources */,
188EBF932A47CF0C00060F03 /* DDMTableView.m in Sources */,
23B2A7C12B283A76001C0913 /* TTAlertMessageAttributedConfig.m in Sources */,
186EBFA92A3FE6A3005623CC /* DDKuoLieTableViewCell.m in Sources */,
188AF5832A271F01004DD4CF /* DDExchangeModel.m in Sources */,
186EBFC72A40363A005623CC /* XPSemiModalTransitioningDelegate.m in Sources */,
@@ -6105,6 +6555,7 @@
1826C61C2A24C50D00A5AFDB /* DDMyInformationGiftWallViewController.m in Sources */,
188EC1442A47CF3300060F03 /* HX_PhotoEditBottomView.m in Sources */,
18ECBD152A29C9F400C42DAA /* SVGATool.m in Sources */,
23B2A7B32B283A76001C0913 /* DDUIImageFixedManager.m in Sources */,
188EC0F82A47CF3200060F03 /* DDBaseInputView.m in Sources */,
183864572A28A17B005BF235 /* ZLPhotoConfiguration.m in Sources */,
1826C5FE2A24A1A400A5AFDB /* DDEditMyInfoViewController.m in Sources */,
@@ -6114,10 +6565,14 @@
1838643A2A28A17B005BF235 /* ZLPhotoBrowserCell.m in Sources */,
18E94E7D2A271D2E0055E8F0 /* AgoraTool.m in Sources */,
1838644C2A28A17B005BF235 /* ZLBrushBoardImageView.m in Sources */,
23B2A7BA2B283A76001C0913 /* DDBaseNavVC.m in Sources */,
188EC10C2A47CF3200060F03 /* UIView+HXExtension.m in Sources */,
23B2A7C82B283A76001C0913 /* DDFloatScreenAdvertiseManager.m in Sources */,
188EC12E2A47CF3200060F03 /* HXPreviewLivePhotoView.m in Sources */,
188CA9762A50000600DAFC86 /* DDV2HomeVerticalCell.m in Sources */,
23B2A7C52B283A76001C0913 /* TTActionSheetView.m in Sources */,
189569AC2A2339DE00DCF149 /* RoomPopView.m in Sources */,
23B2A8022B283ACA001C0913 /* MvpViewController.m in Sources */,
186C9D0B2A29EE3500209BB5 /* UIImage+ZLGIF.m in Sources */,
1812EC932A54FDB900FF2AC0 /* DDRoomGiftLuckyView.m in Sources */,
8CE493A02B23F5FA00CA14D5 /* DDUploadFile.m in Sources */,
@@ -6126,6 +6581,7 @@
188EC1152A47CF3200060F03 /* HXAssetManager.m in Sources */,
186A88F62A415884001DE99E /* DDNobleExpModel.m in Sources */,
188EC1002A47CF3200060F03 /* HXPhotoConfiguration.m in Sources */,
23B2A7FC2B283ACA001C0913 /* UserExpand.m in Sources */,
1848C2322A4D13640031F734 /* NSTimer+WeakTimer.m in Sources */,
183863F02A28A0CB005BF235 /* NSMutableAttributedString+DDAppendString.m in Sources */,
18C833662A25A30E0090BF65 /* DDGiftWallModel.m in Sources */,
@@ -6134,6 +6590,7 @@
18A7E6882A4E7C250078E659 /* DDDecoratePVC.m in Sources */,
187AE1132A496EAC00B427CB /* RoomConfigModel.m in Sources */,
18660D722A21942F0032D0C9 /* BaseCollectionViewHorizontalLayout.m in Sources */,
23B2A7FE2B283ACA001C0913 /* UserLevelVo.m in Sources */,
8C2C3F202B2801AC002C3C34 /* DDStatisticsService.m in Sources */,
183864522A28A17B005BF235 /* ZLShowBigImgViewController.m in Sources */,
186EBFC32A40363A005623CC /* XPSemiModalPresentationController.m in Sources */,
@@ -6146,6 +6603,7 @@
188EC15E2A47CF3300060F03 /* PlaneView.m in Sources */,
1826C5F62A244C3500A5AFDB /* DDMyInfoCollectionViewCell.m in Sources */,
183864462A28A17B005BF235 /* ToastUtils.m in Sources */,
23B2A7C72B283A76001C0913 /* DDFloatScreenAdvertiseModel.m in Sources */,
18B1EA3E2A274EC300DDE889 /* DDRoomAvatarListView.m in Sources */,
189956962A21ECC9002ABEEB /* RoomInfoModel.m in Sources */,
1826C6132A24B7DE00A5AFDB /* DDMyInfoInsertDynamicView.m in Sources */,
@@ -6163,8 +6621,10 @@
188EC1252A47CF3200060F03 /* HXPhotoPreviewLivePhotoCell.m in Sources */,
1826C5F32A244B8C00A5AFDB /* DDHoriCollectionView.m in Sources */,
18660D5C2A2193C50032D0C9 /* UILabel+YBAttributeTextTapAction.m in Sources */,
23B2A7C62B283A76001C0913 /* TTPopupService.m in Sources */,
187AE0FC2A491BF300B427CB /* RoomDetailView.m in Sources */,
18E659C02A564EED0017854A /* DDSearchListVC.m in Sources */,
23B2A7B12B283A76001C0913 /* DDBaseVC.m in Sources */,
188EC1292A47CF3200060F03 /* HXPhotoCustomNavigationBar.m in Sources */,
188EBF942A47CF0C00060F03 /* DDKeyBoardFaceBaseView.m in Sources */,
18792C0F2A565AC500683D6B /* DDUpdateVersionView.m in Sources */,
@@ -6186,6 +6646,7 @@
18869D132A4811A200152BD6 /* DDMCommonTool.m in Sources */,
18660D5E2A2193C50032D0C9 /* NSBundle+Language.m in Sources */,
188EBF9B2A47CF0C00060F03 /* DDKeyBoardView+TextView.m in Sources */,
23B2A7BB2B283A76001C0913 /* UIButton+TouchRegion.m in Sources */,
188EC1262A47CF3200060F03 /* HXCollectionView.m in Sources */,
1802B3C72A540A620036DCEF /* DDV2LoginVC.m in Sources */,
188EC1102A47CF3200060F03 /* NSTimer+HXExtension.m in Sources */,
@@ -6199,6 +6660,7 @@
18C9050B2A233F0600F7CAFD /* DDLunboModel.m in Sources */,
188EBF672A47CEA500060F03 /* DDChatVC+KeyBoardTool.m in Sources */,
187AE10D2A4943C400B427CB /* RoomBlackListCell.m in Sources */,
23B2A7B52B283A76001C0913 /* DDDownloadImageFile.m in Sources */,
18660D912A2195500032D0C9 /* MainViewController.m in Sources */,
188EC15C2A47CF3300060F03 /* SDWaitingView.m in Sources */,
ECA5314A2A20EB64006E6D04 /* main.m in Sources */,
@@ -6206,11 +6668,13 @@
188EC1552A47CF3300060F03 /* HXPhotoEditGridLayer.m in Sources */,
188EC1122A47CF3200060F03 /* UILabel+HXExtension.m in Sources */,
188EBF952A47CF0C00060F03 /* DDKeyBoardFaceItemCell.m in Sources */,
23B2A7C42B283A76001C0913 /* TTAlertView.m in Sources */,
188EC1022A47CF3200060F03 /* HXPhotoInteractiveTransition.m in Sources */,
188EC1042A47CF3200060F03 /* HXPhotoPersentInteractiveTransition.m in Sources */,
188AF5992A273CE9004DD4CF /* DDStoreVC.m in Sources */,
188EC0E62A47CF3200060F03 /* DDMEmojisKeyboard.m in Sources */,
188EC1192A47CF3200060F03 /* HXPhoto3DTouchViewController.m in Sources */,
23B2A7B62B283A76001C0913 /* UIImage+ImageEffects.m in Sources */,
1812ECAB2A55561800FF2AC0 /* DDRoomGiftMessageAlert.m in Sources */,
186777852A429D0C0096D802 /* RoomBgCollectionViewCell.m in Sources */,
183864382A28A17B005BF235 /* ZLBigImageCell.m in Sources */,
@@ -6238,6 +6702,7 @@
18660DCF2A21E54B0032D0C9 /* RoomUserMicroView.m in Sources */,
188AF58E2A272AEB004DD4CF /* DDRechargeCell.m in Sources */,
18B5E5AB2A4D89380089CEB1 /* DDShoppingListVC.m in Sources */,
23B2A7F52B283ACA001C0913 /* BaseMvpPresenter.m in Sources */,
18A7E69A2A4E81EB0078E659 /* DDDecotateShowView.m in Sources */,
188EC1382A47CF3300060F03 /* HXPhotoPreviewImageViewCell.m in Sources */,
186EBFC52A40363A005623CC /* XPSemiModalAnimatedTransitioning.m in Sources */,
@@ -6245,7 +6710,6 @@
188EC13D2A47CF3300060F03 /* HXPhotoEditGraffitiColorModel.m in Sources */,
1826C5E92A2431CA00A5AFDB /* DDCellModel.m in Sources */,
186A88E72A4152AA001DE99E /* DDMyLevelView.m in Sources */,
2358F5812B230C350038453C /* UILabel+DDFactory.m in Sources */,
18F46D9D2A28409600CD2B7E /* RoomSendGiftTopView.m in Sources */,
18660D532A2193C50032D0C9 /* UIView+Common.m in Sources */,
18D348372A26144B0011D61C /* DDMyInfoSettingTableViewCell.m in Sources */,
@@ -6265,8 +6729,10 @@
18B00BF92A21E874001232DF /* DDRoomPartyViewCell.m in Sources */,
18A63FD92A55060200A5F57B /* DDMyInfoReportViewController.m in Sources */,
18F46DA02A2840B500CD2B7E /* RoomSendGiftCollectionView.m in Sources */,
23B2A7BE2B283A76001C0913 /* TTPopup.m in Sources */,
186A89752A41B23A001DE99E /* DDAuthorNameCardTableViewCell.m in Sources */,
8CE493B42B240B0600CA14D5 /* DDTimerStamp.m in Sources */,
23B2A7C32B283A76001C0913 /* TTPopupManagerService.m in Sources */,
18660CEF2A2193370032D0C9 /* CLLocations.m in Sources */,
188EBF6F2A47CEA500060F03 /* ConversationListVC.m in Sources */,
18D348312A2608E00011D61C /* DDMyInfoFootRoomListTableViewCell.m in Sources */,
@@ -6280,11 +6746,14 @@
188CA9792A50003C00DAFC86 /* DDV2HomeHorizontalCell.m in Sources */,
1885834C2A42CC6100657AEC /* DDHandlePhoneCodeViewController.m in Sources */,
188EC0FF2A47CF3200060F03 /* DDChatToast.m in Sources */,
23B2A7BD2B283A76001C0913 /* DDVideoEncodeManage.m in Sources */,
188EC1452A47CF3300060F03 /* HXPhotoEditGridMaskLayer.m in Sources */,
186A890D2A4193C5001DE99E /* DDMyRoomListViewController.m in Sources */,
188EC1032A47CF3200060F03 /* HXPhotoViewPresentTransition.m in Sources */,
186A89022A415FF0001DE99E /* DDNobleListCollectionViewCell.m in Sources */,
188EC1562A47CF3300060F03 /* HXPhotoEditTextView.m in Sources */,
23B2A7CA2B283A76001C0913 /* DDCurVCManager.m in Sources */,
23B2A8002B283ACA001C0913 /* AccountModel.m in Sources */,
188EC1312A47CF3300060F03 /* HXFullScreenCameraPlayView.m in Sources */,
188EC0E32A47CF3200060F03 /* DDMInputBtn.m in Sources */,
180BE1292A2496BB00DF59E3 /* RoomSocketMsgModel.m in Sources */,
@@ -6295,10 +6764,13 @@
188EC1492A47CF3300060F03 /* HXPhotoEditChartletContentViewCell.m in Sources */,
188EC15D2A47CF3300060F03 /* SDBrowserImageView.m in Sources */,
188EC1112A47CF3200060F03 /* UIButton+HXExtension.m in Sources */,
23B2A7FF2B283ACA001C0913 /* LoginTicketInfo.m in Sources */,
18660D8B2A21952F0032D0C9 /* HomeViewController.m in Sources */,
23B2A7B82B283A76001C0913 /* UILabel+DDFactory.m in Sources */,
188EC1392A47CF3300060F03 /* HXPhotoEditConfiguration.m in Sources */,
18AFFEB52A4BCAF3008F6478 /* DDMineVC.m in Sources */,
18CF77DE2A4ECCC60009B602 /* RoomEventCell.m in Sources */,
23B2A7FA2B283ACA001C0913 /* UserInfoModel.m in Sources */,
189569A92A232EF700DCF149 /* RoomOnlineUserListView.m in Sources */,
18660D4C2A2193C50032D0C9 /* UITextView+Placeholder.m in Sources */,
189569A32A232EA100DCF149 /* RoomUserManagementView.m in Sources */,

View File

@@ -10,8 +10,11 @@
#import "WLCustomHeader.h"
#import "RequestUrl.h"
#import "DDMacroHeader.h"
#import "NSObject+DDExtension.h"
#import "UIImage+DDFilletCorner.h"
#import "DDAppColor.h"
#import "DDHUDManager.h"
#import "DDUIImageFixedManager.h"
#import "DDUtility.h"
#import "DDMacroHeader.h"
#endif /* PrefixHeader_pch */

View File

@@ -5,8 +5,8 @@
// Created by on 2023/12/11.
//
#import "DDUtility+App.h"
#import "DDUtility.h"
static NSString * const kMobileFrameworkResourceBundleName = @"YYMobileFrameworkRes";
static NSString *_from = nil;
@implementation DDUtility (App)

View File

@@ -5,7 +5,7 @@
// Created by on 2023/12/11.
//
#import "DDUtility+Carrier.h"
#import "DDUtility.h"
#import <CoreTelephony/CTCarrier.h>
#import <CoreTelephony/CTTelephonyNetworkInfo.h>
#import "DDCarrierIdentifier.h"

View File

@@ -6,7 +6,7 @@
//
#import "TTActionSheetConfig.h"
#import "ThemeColor.h"
#import "DDAppColor.h"
@implementation TTActionSheetConfig
@@ -24,7 +24,7 @@
+ (TTActionSheetConfig *)normalTitle:(NSString *)title selectColorType:(TTItemSelectType)type clickAction:(TTActionSheetClickAction)clickAction {
UIColor *color = type == TTItemSelectHighLight ? [ThemeColor alertTitleColor] : [ThemeColor alertTitleColor];
UIColor *color = type == TTItemSelectHighLight ? [DDAppColor dd_popUpTextColor] :[DDAppColor dd_popUpTextColor];
TTActionSheetConfig *config = [self actionWithTitle:title color:color handler:clickAction];
config.type = type;

View File

@@ -7,8 +7,7 @@
//
#import "TTAlertConfig.h"
#import "UIImage+Utils.h"
#import "ThemeColor.h"
#import "DDAppColor.h"
static CGFloat kAlertTitleFont = 18.f;
static CGFloat kAlertButtonFont = 15.f;
@@ -24,7 +23,7 @@ static CGFloat kAlertButtonCornerRadius = 8.f;
self = [super init];
if (self) {
_backgroundColor = [ThemeColor alertBackgroundColor];
_backgroundColor = [DDAppColor dd_appBgColor];
//
kAlertTitleFont = 16.f;
@@ -36,12 +35,12 @@ static CGFloat kAlertButtonCornerRadius = 8.f;
// title
_title = @"";//
_titleFont = [UIFont fontWithName:@"PingFangSC-Medium" size:kAlertTitleFont];//
_titleColor = [ThemeColor alertTitleColor];//
_titleColor = [DDAppColor dd_MajorTitleColor];//
// message
_message = @"";
_messageFont = [UIFont systemFontOfSize:kAlertMessageFont];//
_messageColor = [ThemeColor alertMessageColor];//
_messageColor = [DDAppColor dd_popUpMsgColor];//
_messageLineSpacing = kAlertMessageFontLineSpace;//
_messageAttributedConfig = @[];//
@@ -49,16 +48,16 @@ static CGFloat kAlertButtonCornerRadius = 8.f;
_cancelButtonConfig = [[TTAlertButtonConfig alloc] init];
_cancelButtonConfig.title = @"取消";//
_cancelButtonConfig.font = [UIFont systemFontOfSize:kAlertButtonFont];//
_cancelButtonConfig.titleColor = [ThemeColor cancelButtonTextColor];//
_cancelButtonConfig.backgroundImage = [UIImage gradientColorImageFromColors:@[[ThemeColor cancelButtonGradientStartColor], [ThemeColor cancelButtonGradientEndColor]] gradientType:GradientTypeLeftToRight imgSize:CGSizeMake(10, 10)];
_cancelButtonConfig.titleColor = [DDAppColor dd_abolishBtnTitleColor];//
_cancelButtonConfig.backgroundImage = [UIImage dd_CreateGradualChangeImage:@[[DDAppColor dd_abolishCommonBgColor], [DDAppColor dd_abolishBtnGradientFinishColor]] type:DDFilletCornerTypeLeftToRight size:CGSizeMake(10, 10)];
_cancelButtonConfig.cornerRadius = kAlertButtonCornerRadius;//
// confirm button
_confirmButtonConfig = [[TTAlertButtonConfig alloc] init];
_confirmButtonConfig.title = @"确定";
_confirmButtonConfig.font = [UIFont systemFontOfSize:kAlertButtonFont];
_confirmButtonConfig.titleColor = [ThemeColor confirmButtonTextColor];
_confirmButtonConfig.backgroundImage = [UIImage gradientColorImageFromColors:@[[ThemeColor confirmButtonGradientStartColor], [ThemeColor confirmButtonGradientEndColor]] gradientType:GradientTypeLeftToRight imgSize:CGSizeMake(10, 10)];
_confirmButtonConfig.titleColor = [DDAppColor dd_abolishBtnTitleColor];
_confirmButtonConfig.backgroundImage = [UIImage dd_CreateGradualChangeImage:@[[DDAppColor dd_sureBtnGradientFinishColor], [DDAppColor dd_sureBtnGradientBeginColor]] type:DDFilletCornerTypeLeftToRight size:CGSizeMake(10, 10)];
_confirmButtonConfig.cornerRadius = kAlertButtonCornerRadius;
_cornerRadius = kAlertCornerRadius;//

View File

@@ -8,7 +8,7 @@
#import "TTActionSheetView.h"
#import "TTActionSheetConfig.h"
#import "ThemeColor.h"
#import "DDAppColor.h"
#import <Masonry/Masonry.h>
static CGFloat const kSheetViewCellHeight = 51.f;
@@ -104,7 +104,7 @@ static NSString *const kSheetViewCellConst = @"kSheetViewCellConst";
_tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
_tableView.delegate = self;
_tableView.dataSource = self;
_tableView.separatorColor = [ThemeColor actionSeparatorColor];
_tableView.separatorColor = [DDAppColor dd_popUpSeparatorColor];
_tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
_tableView.rowHeight = kSheetViewCellHeight;
_tableView.tableFooterView = [[UIView alloc] init];
@@ -122,7 +122,7 @@ static NSString *const kSheetViewCellConst = @"kSheetViewCellConst";
_cancelButton = [UIButton buttonWithType:UIButtonTypeCustom];
[_cancelButton setTitle:@"取消" forState:UIControlStateNormal];
[_cancelButton setBackgroundColor:UIColor.whiteColor];
[_cancelButton setTitleColor:[ThemeColor alertMessageColor] forState:UIControlStateNormal];
[_cancelButton setTitleColor:[DDAppColor dd_popUpMsgColor] forState:UIControlStateNormal];
[_cancelButton.titleLabel setFont:[UIFont systemFontOfSize:16]];
_cancelButton.layer.cornerRadius = kSheetViewCornerRadius;
_cancelButton.layer.masksToBounds = YES;

View File

@@ -8,7 +8,7 @@
#import "TTAlertView.h"
#import "TTAlertConfig.h"
#import "ThemeColor.h"
#import "DDAppColor.h"
#import <Masonry/Masonry.h>
static CGFloat const kMargin = 25.f;
@@ -180,9 +180,9 @@ static CGFloat const kBtnHeight = 38.f;
_messageLabel.text = config.message;
}
_cancelButton.layer.borderColor = [ThemeColor dividerColor].CGColor;
_cancelButton.layer.borderColor = [DDAppColor dd_lineColor].CGColor;
_cancelButton.layer.borderWidth = 2.f;
_confirmButton.layer.borderColor = [ThemeColor dividerColor].CGColor;
_confirmButton.layer.borderColor = [DDAppColor dd_lineColor].CGColor;
_confirmButton.layer.borderWidth = 2.f;
}
@@ -190,15 +190,15 @@ static CGFloat const kBtnHeight = 38.f;
_isConfigBoard = isConfigBoard;
if (isConfigBoard) {
//
_cancelButton.layer.borderColor = [ThemeColor dividerColor].CGColor;
_cancelButton.layer.borderColor = [DDAppColor dd_lineColor].CGColor;
_cancelButton.layer.borderWidth = 2.f;
_confirmButton.layer.borderColor = [ThemeColor dividerColor].CGColor;
_confirmButton.layer.borderColor = [DDAppColor dd_lineColor].CGColor;
_confirmButton.layer.borderWidth = 2.f;
}else {
//
_cancelButton.layer.borderColor = [ThemeColor dividerColor].CGColor;
_cancelButton.layer.borderColor = [DDAppColor dd_lineColor].CGColor;
_cancelButton.layer.borderWidth = 0;
_confirmButton.layer.borderColor = [ThemeColor dividerColor].CGColor;
_confirmButton.layer.borderColor = [DDAppColor dd_lineColor].CGColor;
_confirmButton.layer.borderWidth = 0;
}
}

View File

@@ -0,0 +1,90 @@
//
// Api.h
// xplan-ios
//
// Created by zu on 2021/9/6.
//
#import <Foundation/Foundation.h>
#import "HttpRequestHelper.h"
NS_ASSUME_NONNULL_BEGIN
@interface Api : NSObject
/**
route : 接口路径
method : http 请求方法POST、GET等
completion : 网络请求完成的回调
... : 可变参数,第一个为 __FUNCTION__ ,接下来依次为该接口的协议参数
*/
+ (void)makeRequest:(NSString *)route method:(HttpRequestHelperMethod)method completion:(HttpRequestHelperCompletion)completion, ...;
+ (void)getUserInfo:(HttpRequestHelperCompletion)completion uid:(NSString *)uid;
/// 获取手机号的验证码
/// @param completion 请求完成
/// @param mobile 手机号
/// @param type 类型 请看XPEunm中的枚举
+ (void)phoneSmsCode:(HttpRequestHelperCompletion)completion mobile:(NSString *)mobile type:(NSString *)type;
/// 校验手机号码
/// @param complection 完成
/// @param mobile 手机号
/// @param code 验证码
/// @param uid 用户的uid
/// @param ticket ticket
+ (void)checkMoblieCode:(HttpRequestHelperCompletion)complection
mobile:(NSString *)mobile
code:(NSString *)code
uid:(NSString *)uid
ticket:(NSString *)ticket;
/// 补全用户资料
/// @param complection 完成
/// @param userInfo 需要更新的用户信息
+ (void)completeUserInfo:(HttpRequestHelperCompletion)complection
userInfo:(NSDictionary *)userInfo;
/// 获取用户钱包余额信息
/// @param complection 完成
/// @param uid 用户uid
/// @param ticket ticketg
+ (void)getUserWalletInfo:(HttpRequestHelperCompletion)complection
uid:(NSString *)uid
ticket:(NSString *)ticket;
/// 批量验证
/// @param complection 完成
/// @param transcationIdStr 需要验证的数据
+ (void)requestCheckTranscationIds:(HttpRequestHelperCompletion)complection
transcationIdStr:(NSString *)transcationIdStr;
/// 锁麦/开麦
/// @param complection 完成
/// @param roomUid 房主的uid
/// @param state 0 开麦 1 锁麦
/// @param position 坑位
/// @param ticket 用户的ticket
/// @param uid uid
+ (void)microMuteCompletion:(HttpRequestHelperCompletion)complection
roomUid:(NSString *)roomUid
state:(NSString *)state
position:(NSString *)position
ticket:(NSString *)ticket
uid:(NSString *)uid;
/// 锁坑/开锁
/// @param complection 完成
/// @param roomUid 房主的uid
/// @param state 1锁坑位0取消锁即取消锁坑位
/// @param position 坑位
/// @param ticket 用户的ticket
/// @param uid uid
+ (void)microLockCompletion:(HttpRequestHelperCompletion)complection
roomUid:(NSString *)roomUid
state:(NSString *)state
position:(NSString *)position
ticket:(NSString *)ticket
uid:(NSString *)uid;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,118 @@
//
// Api.m
// xplan-ios
//
// Created by zu on 2021/9/6.
//
#import "Api.h"
@implementation Api
+ (void)makeRequest:(NSString *)route method:(HttpRequestHelperMethod)method completion:(HttpRequestHelperCompletion)completion, ... {
va_list arg_lists;
va_start(arg_lists, completion);
// __FUNCTION__ key
const char *functionName = va_arg(arg_lists, const char *);
NSString *fn = [[NSString alloc] initWithUTF8String:functionName];
// NSLog __FUNCTION__
NSRange blankRange = [fn rangeOfString:@":"];
NSUInteger start = blankRange.location + 1;
NSUInteger length;
if ((start + 2) < fn.length) {
length = fn.length - start - 2;
} else if ((start + 1) < fn.length) {
length = fn.length -start - 1;
} else {
length = fn.length -start;
}
NSString *fromatParamKeys = [fn substringWithRange:NSMakeRange(start, length)];
// NSMutableDictionary *params
NSMutableDictionary *params = [NSMutableDictionary dictionary];
NSArray *paramKeys = [fromatParamKeys componentsSeparatedByString:@":"];
NSEnumerator *enumerator = [paramKeys objectEnumerator];
NSString *value = nil;
while((value = va_arg(arg_lists, NSString*))){
[params setValue:value forKey:enumerator.nextObject];
};
va_end(arg_lists);
[HttpRequestHelper request:route method:method params:params completion:completion];
}
+ (void)getUserInfo:(HttpRequestHelperCompletion)completion uid:(NSString *)uid {
[self makeRequest:@"user/get" method:HttpRequestHelperMethodGET completion:completion, __FUNCTION__, uid, nil];
}
///
/// @param completion
/// @param mobile
/// @param type XPEunm
+ (void)phoneSmsCode:(HttpRequestHelperCompletion)completion mobile:(NSString *)mobile type:(NSString *)type {
[self makeRequest:@"sms/getCode" method:HttpRequestHelperMethodPOST completion:completion, __FUNCTION__, mobile, type, nil];
}
///
/// @param complection
/// @param mobile
/// @param code
/// @param uid uid
/// @param ticket ticket
+ (void)checkMoblieCode:(HttpRequestHelperCompletion)complection
mobile:(NSString *)mobile
code:(NSString *)code
uid:(NSString *)uid
ticket:(NSString *)ticket {
[self makeRequest:@"sms/verify" method:HttpRequestHelperMethodPOST completion:complection, __FUNCTION__, mobile, code, uid, ticket,nil];
}
///
/// @param complection
/// @param userInfo
+ (void)completeUserInfo:(HttpRequestHelperCompletion)complection
userInfo:(NSDictionary *)userInfo {
[HttpRequestHelper request:@"user/v2/update" method:HttpRequestHelperMethodPOST params:userInfo completion:complection];
}
///
/// @param complection
/// @param uid uid
/// @param ticket ticketg
+ (void)getUserWalletInfo:(HttpRequestHelperCompletion)complection uid:(NSString *)uid ticket:(NSString *)ticket {
[self makeRequest:@"purse/query" method:HttpRequestHelperMethodGET completion:complection, __FUNCTION__, uid, ticket,nil];
}
///
/// @param complection
/// @param transcationIdStr
+ (void)requestCheckTranscationIds:(HttpRequestHelperCompletion)complection
transcationIdStr:(NSString *)transcationIdStr {
[self makeRequest:@"verify/checkIOSChargeRecord" method:HttpRequestHelperMethodPOST completion:complection, __FUNCTION__,transcationIdStr, nil];
}
/// /
/// @param complection
/// @param roomUid uid
/// @param state 0 1
/// @param position
/// @param ticket ticket
/// @param uid uid
+ (void)microMuteCompletion:(HttpRequestHelperCompletion)complection roomUid:(NSString *)roomUid state:(NSString *)state position:(NSString *)position ticket:(NSString *)ticket uid:(NSString *)uid {
[self makeRequest:@"room/mic/lockmic" method:HttpRequestHelperMethodPOST completion:complection, __FUNCTION__, roomUid, state, position, ticket, uid, nil];
}
/// /
/// @param complection
/// @param roomUid uid
/// @param state 10
/// @param position
/// @param ticket ticket
/// @param uid uid
+ (void)microLockCompletion:(HttpRequestHelperCompletion)complection roomUid:(NSString *)roomUid state:(NSString *)state position:(NSString *)position ticket:(NSString *)ticket uid:(NSString *)uid {
[self makeRequest:@"room/mic/lockpos" method:HttpRequestHelperMethodPOST completion:complection, __FUNCTION__, roomUid, state, position, ticket, uid, nil];
}
@end

View File

@@ -0,0 +1,28 @@
//
// DataUtils.h
// YYFaceAuth
//
// Created by chenran on 16/10/18.
// Copyright © 2016年 zhangji. All rights reserved.
//
#import <Foundation/Foundation.h>
@class AccountModel, ThirdUserInfo;
@interface AccountInfoStorage : NSObject
@property (nonatomic, strong, readonly) AccountModel *accountModel;
///如果是第三方登录的话 保存一下用户信息
@property (nonatomic,strong) ThirdUserInfo *thirdUserInfo;
+ (instancetype)instance;
- (instancetype)init NS_UNAVAILABLE;
+ (instancetype)new NS_UNAVAILABLE;
- (id)copy NS_UNAVAILABLE;
- (id)mutableCopy NS_UNAVAILABLE;
- (AccountModel *)getCurrentAccountInfo;
- (void)saveAccountInfo:(AccountModel *)accountInfo;
- (void)saveTicket:(NSString *)ticket;
- (NSString *)getTicket;
- (NSString *)getUid;
@end

View File

@@ -0,0 +1,94 @@
//
// DataUtils.m
// YYFaceAuth
//
// Created by chenran on 16/10/18.
// Copyright © 2016 zhangji. All rights reserved.
//
#define kFileName @"AccountInfo.data"
#define kDataKey @"accountInfo"
#import "AccountInfoStorage.h"
#import "AccountModel.h"
@interface AccountInfoStorage()
@property (nonatomic, copy) NSString *ticket;
@property (nonatomic, strong) AccountModel *accountModel;
@end
@implementation AccountInfoStorage
static AccountInfoStorage *_instance = nil;
+ (AccountInfoStorage *)instance {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_instance = [[self alloc] init];
}) ;
return _instance;
}
-(NSString *) getFilePath{
NSArray *array = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [[array objectAtIndex:0] stringByAppendingPathComponent:kFileName];
if (![[NSFileManager defaultManager] fileExistsAtPath:path]) {
[[NSFileManager defaultManager] createFileAtPath:path contents:nil attributes:nil];
}
return path;
}
- (AccountModel *)getCurrentAccountInfo
{
if (self.accountModel != nil) {
return self.accountModel;
}
NSData *data = [[NSData alloc] initWithContentsOfFile:[self getFilePath]];
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
//
self.accountModel = [unarchiver decodeObjectForKey:kDataKey];
[unarchiver finishDecoding];//finishDecoding
return self.accountModel;
}
- (void)saveAccountInfo:(AccountModel *)accountInfo
{
if (accountInfo == nil) {
accountInfo = [[AccountModel alloc] init];
}
self.accountModel = accountInfo;
NSMutableData *data = [[NSMutableData alloc] init];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[archiver encodeObject:accountInfo forKey:kDataKey];
[archiver finishEncoding];
[data writeToFile:[self getFilePath] atomically:YES];
}
- (void)saveTicket:(NSString *)t
{
self.ticket = t;
}
- (NSString *)getTicket
{
if (self.ticket == nil) {
return @"";
}
return self.ticket;
}
- (NSString *)getUid
{
AccountModel *am = [self getCurrentAccountInfo];
if (am == nil) {
return @"";
}
return am.uid;
}
@end

View File

@@ -0,0 +1,24 @@
//
// TokenModel.h
// xplan-ios
//
// Created by zu on 2021/9/8.
//
#import "NSObject+DDExtension.h"
NS_ASSUME_NONNULL_BEGIN
@interface AccountModel : NSObject
@property (nonatomic , assign) NSString *uid;
@property (nonatomic , copy) NSString *jti;
@property (nonatomic , copy) NSString *token_type;
@property (nonatomic , copy) NSString *refresh_token;
@property (nonatomic , copy) NSString *netEaseToken;
@property (nonatomic , copy) NSString *access_token;
@property (nonatomic , assign) NSNumber *expires_in;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,12 @@
//
// TokenModel.m
// xplan-ios
//
// Created by zu on 2021/9/8.
//
#import "AccountModel.h"
@implementation AccountModel
@end

View File

@@ -0,0 +1,26 @@
//
// BaseModel.h
// xplan-ios
//
// Created by zu on 2021/9/8.
//
#import "NSObject+DDExtension.h"
NS_ASSUME_NONNULL_BEGIN
@interface BaseModel : NSObject
@property (nonatomic , strong) id data;
@property (nonatomic , assign) NSInteger code;
@property (nonatomic , copy) NSString *message;
///注销的时间戳 因为后端返回的内容和code在同一层级 安卓已经发出去了 兼容就写在这里吧 请不要模仿
@property (nonatomic,assign) long long cancelDate;
///账号封禁返回的code
///时间
@property (nonatomic,copy) NSString * date;
///封禁的理由
@property (nonatomic,copy) NSString *reason;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,12 @@
//
// BaseModel.m
// xplan-ios
//
// Created by zu on 2021/9/8.
//
#import "BaseModel.h"
@implementation BaseModel
@end

View File

@@ -0,0 +1,20 @@
//
// LoginTicketInfo.h
// xplan-ios
//
// Created by 冯硕 on 2021/9/9.
//
#import "NSObject+DDExtension.h"
NS_ASSUME_NONNULL_BEGIN
@interface LoginTicketInfo : NSObject
@property(nonatomic, strong) NSString *issue_type;
///数组中的第一个 就是ticket 历史遗留问题
@property(nonatomic, strong) NSArray* tickets;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,12 @@
//
// LoginTicketInfo.m
// xplan-ios
//
// Created by on 2021/9/9.
//
#import "LoginTicketInfo.h"
@implementation LoginTicketInfo
@end

View File

@@ -0,0 +1,25 @@
//
// NSObject+AutoCoding.h
// YYMobileFramework
//
// Created by wuwei on 14/6/13.
// Copyright (c) 2014年 YY Inc. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface NSObject (AutoCoding) <NSSecureCoding>
// Coding
+ (NSDictionary *)codableProperties;
- (void)setWithCoder:(NSCoder *)aDecoder;
// Properties access
- (NSDictionary *)codableProperties;
- (NSDictionary *)dictionaryRepresentation;
// Loading / Saving
+ (instancetype)objectWithContentsOfFile:(NSString *)path;
- (BOOL)writeToFile:(NSString *)filePath atomically:(BOOL)useAuxiliaryFile;
@end

View File

@@ -0,0 +1,245 @@
//
// NSObject+AutoCoding.m
// YYMobileFramework
//
// Created by wuwei on 14/6/13.
// Copyright (c) 2014 YY Inc. All rights reserved.
//
#import "NSObject+AutoCoding.h"
#import <objc/runtime.h>
#pragma GCC diagnostic ignored "-Wgnu"
static NSString *const AutocodingException = @"AutocodingException";
@implementation NSObject (AutoCoding)
+ (BOOL)supportsSecureCoding
{
return YES;
}
+ (instancetype)objectWithContentsOfFile:(NSString *)filePath
{
//load the file
NSData *data = [NSData dataWithContentsOfFile:filePath];
//attempt to deserialise data as a plist
id object = nil;
if (data)
{
NSPropertyListFormat format;
object = [NSPropertyListSerialization propertyListWithData:data options:NSPropertyListImmutable format:&format error:NULL];
//success?
if (object)
{
//check if object is an NSCoded unarchive
if ([object respondsToSelector:@selector(objectForKey:)] && [(NSDictionary *)object objectForKey:@"$archiver"])
{
object = [NSKeyedUnarchiver unarchiveObjectWithData:data];
}
}
else
{
//return raw data
object = data;
}
}
//return object
return object;
}
- (BOOL)writeToFile:(NSString *)filePath atomically:(BOOL)useAuxiliaryFile
{
//note: NSData, NSDictionary and NSArray already implement this method
//and do not save using NSCoding, however the objectWithContentsOfFile
//method will correctly recover these objects anyway
//archive object
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:self];
return [data writeToFile:filePath atomically:useAuxiliaryFile];
}
+ (NSDictionary *)codableProperties
{
unsigned int propertyCount;
__autoreleasing NSMutableDictionary *codableProperties = [NSMutableDictionary dictionary];
objc_property_t *properties = class_copyPropertyList(self, &propertyCount);
for (unsigned int i = 0; i < propertyCount; i++)
{
//get property name
objc_property_t property = properties[i];
const char *propertyName = property_getName(property);
__autoreleasing NSString *key = @(propertyName);
//check if codable
//get property type
Class propertyClass = nil;
char *typeEncoding = property_copyAttributeValue(property, "T");
switch (typeEncoding[0])
{
case '@':
{
if (strlen(typeEncoding) >= 3)
{
char *className = strndup(typeEncoding + 2, strlen(typeEncoding) - 3);
__autoreleasing NSString *name = @(className);
NSRange range = [name rangeOfString:@"<"];
if (range.location != NSNotFound)
{
name = [name substringToIndex:range.location];
}
propertyClass = NSClassFromString(name) ?: [NSObject class];
free(className);
}
break;
}
case 'c':
case 'i':
case 's':
case 'l':
case 'q':
case 'C':
case 'I':
case 'S':
case 'L':
case 'Q':
case 'f':
case 'd':
case 'B':
{
propertyClass = [NSNumber class];
break;
}
case '{':
{
propertyClass = [NSValue class];
break;
}
default:
break;
}
free(typeEncoding);
if (propertyClass && [propertyClass conformsToProtocol:@protocol(NSSecureCoding)])
{
//check if there is a backing ivar
char *ivar = property_copyAttributeValue(property, "V");
if (ivar)
{
//check if ivar has KVC-compliant name
__autoreleasing NSString *ivarName = @(ivar);
if ([ivarName isEqualToString:key] || [ivarName isEqualToString:[@"_" stringByAppendingString:key]])
{
//no setter, but setValue:forKey: will still work
codableProperties[key] = propertyClass;
}
free(ivar);
}
else
{
//check if property is dynamic and readwrite
char *dynamic = property_copyAttributeValue(property, "D");
char *readonly = property_copyAttributeValue(property, "R");
if (dynamic && !readonly)
{
//no ivar, but setValue:forKey: will still work
codableProperties[key] = propertyClass;
}
free(dynamic);
free(readonly);
}
}
}
free(properties);
return codableProperties;
}
- (NSDictionary *)codableProperties
{
__autoreleasing NSDictionary *codableProperties = objc_getAssociatedObject([self class], _cmd);
if (!codableProperties)
{
codableProperties = [NSMutableDictionary dictionary];
Class subclass = [self class];
while (subclass != [NSObject class])
{
[(NSMutableDictionary *)codableProperties addEntriesFromDictionary:[subclass codableProperties]];
subclass = [subclass superclass];
}
codableProperties = [NSDictionary dictionaryWithDictionary:codableProperties];
//make the association atomically so that we don't need to bother with an @synchronize
objc_setAssociatedObject([self class], _cmd, codableProperties, OBJC_ASSOCIATION_RETAIN);
}
return codableProperties;
}
- (NSDictionary *)dictionaryRepresentation
{
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
for (__unsafe_unretained NSString *key in [self codableProperties])
{
id value = [self valueForKey:key];
if (value)
dict[key] = value;
else
dict[key] = @"nil";
}
return dict;
}
- (void)setWithCoder:(NSCoder *)aDecoder
{
BOOL secureAvailable = [aDecoder respondsToSelector:@selector(decodeObjectOfClass:forKey:)];
BOOL secureSupported = [[self class] supportsSecureCoding];
NSDictionary *properties = [self codableProperties];
for (NSString *key in properties)
{
id object = nil;
Class propertyClass = properties[key];
if (secureAvailable)
{
if ([propertyClass isEqual:[NSMutableAttributedString class]]) {
continue;
}
object = [aDecoder decodeObjectOfClass:propertyClass forKey:key];
}
else
{
if ([propertyClass isEqual:[NSMutableAttributedString class]]) {
continue;
}
object = [aDecoder decodeObjectForKey:key];
}
if (object)
{
if (secureSupported && ![object isKindOfClass:propertyClass])
{
[NSException raise:AutocodingException format:@"Expected '%@' to be a %@, but was actually a %@", key, propertyClass, [object class]];
}
[self setValue:object forKey:key];
}
}
}
- (instancetype)initWithCoder:(NSCoder *)aDecoder
{
[self setWithCoder:aDecoder];
return self;
}
- (void)encodeWithCoder:(NSCoder *)aCoder
{
for (NSString *key in [self codableProperties])
{
id object = [self valueForKey:key];
if (object) [aCoder encodeObject:object forKey:key];
}
}
@end

View File

@@ -0,0 +1,21 @@
//
// UserExpand.h
// xplan-ios
//
// Created by zu on 2021/9/14.
//
#import "NSObject+DDExtension.h"
NS_ASSUME_NONNULL_BEGIN
@interface UserExpand : NSObject
@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

View File

@@ -0,0 +1,12 @@
//
// UserExpand.m
// xplan-ios
//
// Created by zu on 2021/9/14.
//
#import "UserExpand.h"
@implementation UserExpand
@end

View File

@@ -0,0 +1,53 @@
//
// UserGameInfoVo.h
// xplan-ios
//
// Created by duoban on 2023/8/23.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@class UserGameTagInfo;
@interface UserGameInfoVo : NSObject
@property(nonatomic,copy) NSString *firstGameName;
@property(nonatomic,copy) NSString *firstLogo;
@property(nonatomic,copy) NSString *secondGameName;
@property(nonatomic,copy) NSArray<UserGameTagInfo *> *tags;
@property(nonatomic,copy) NSString *finishNum;
@property(nonatomic,copy) NSString *gameId;
@property(nonatomic,copy) NSString *gameName;
@property(nonatomic,copy) NSString *logo;
@property(nonatomic,copy) NSString *gameLogo;
@property(nonatomic,copy) NSString *price;
@property(nonatomic,copy) NSString *seq;
@property(nonatomic,copy) NSString *uid;
@property(nonatomic,copy) NSString *background;
@property(nonatomic,copy) NSString *tier;
@property(nonatomic,copy) NSString *amount;
@property(nonatomic,copy) NSString *orderNo;
@property(nonatomic,copy) NSString *inning;
@property(nonatomic,copy) NSString *toErBanNo;
@property(nonatomic,copy) NSString *toNick;
@property(nonatomic,copy) NSString *toAvatar;
@property(nonatomic,copy) NSString *fromNick;
@property(nonatomic,copy) NSString *fromAvatar;
@property(nonatomic,copy) NSString *createTime;
@property(nonatomic,copy) NSString *orderTime;
@property(nonatomic,copy) NSString *toUid;
@property(nonatomic,copy) NSString *fromUid;
@property(nonatomic,copy) NSString *tagRgb;
@property(nonatomic,copy) NSString *tagBg;
@property(nonatomic,copy) NSString *btnRgb;
@property(nonatomic,copy) NSString *btnBg;
@end
@interface UserGameTagInfo : NSObject
@property(nonatomic,copy) NSString *seq;
@property(nonatomic,copy) NSString *tagName;
@property(nonatomic,copy) NSString *tagVal;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,24 @@
//
// UserGameInfoVo.m
// xplan-ios
//
// Created by duoban on 2023/8/23.
//
#import "UserGameInfoVo.h"
@implementation UserGameInfoVo
+ (NSDictionary *)objectClassInArray {
return @{
@"tags":UserGameTagInfo.class,
};
}
@end
@implementation UserGameTagInfo
@end

View File

@@ -0,0 +1,139 @@
//
// UserInfoModel.h
// xplan-ios
//
// Created by zu on 2021/9/14.
//
#import "NSObject+DDExtension.h"
#import "UserExpand.h"
#import "UserLevelVo.h"
#import "UserInfoSkillVo.h"
#import "UserVipInfoVo.h"
#import "UserPhoto.h"
#import "UserGameInfoVo.h"
NS_ASSUME_NONNULL_BEGIN
@interface UserInfoModel : NSObject
@property (nonatomic , assign) NSInteger bindType;
@property (nonatomic , assign) NSInteger createTime;
@property (nonatomic , assign) BOOL parentMode;
@property (nonatomic , assign) BOOL isBindPhone;
@property (nonatomic , strong) UserExpand * 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 , assign) BOOL isBindApple;
@property (nonatomic , assign) NSInteger fansNum;
@property (nonatomic , assign) BOOL isBindBankCard;
@property (nonatomic , assign) BOOL hasRegPacket;
@property (nonatomic , assign) NSInteger platformRole;
@property (nonatomic , assign) NSInteger uid;
@property (nonatomic , assign) NSInteger defUser;
@property (nonatomic , copy) NSString * phone;
@property (nonatomic , copy) NSString * nick;
@property (nonatomic , assign) NSInteger remainDay;
@property (nonatomic , copy) NSString * avatar;
@property (nonatomic , copy) NSString * reviewingAvatar;
@property (nonatomic , assign) BOOL isReview;
@property (nonatomic , strong) UserInfoSkillVo * userInfoSkillVo;
@property (nonatomic , assign) BOOL newUser;
@property (nonatomic , assign) NSInteger followNum;
@property (nonatomic , assign) BOOL isBindPaymentPwd;
@property (nonatomic , assign) BOOL isBindXCZAccount;
@property (nonatomic , assign) BOOL isBindAlipay;
///是否绑定了密码
@property (nonatomic , assign) BOOL isBindPasswd;
@property (nonatomic, assign) NSInteger visitNum;///访客数量
@property (nonatomic, assign) NSInteger inRoomNum;///足迹
///是否需要展示限时首充列表
@property (nonatomic, assign) BOOL showLimitCharge;
///限时首充结束时间
@property (nonatomic, assign) long limitChargeEndTime;
///相册
@property (nonatomic, strong) NSArray<UserPhoto *> *privatePhoto;//相册
///签名
@property (nonatomic,copy) NSString *userDesc;
///出生日期
@property (nonatomic,assign) long birth;
///是否实名认证
@property (nonatomic,assign) BOOL isCertified;
///铭牌背景
@property (nonatomic, copy) NSString *nameplatePic;
///铭牌名称
@property (nonatomic, copy) NSString *nameplateWord;
///如果在房间有直播中字段
@property(nonatomic, copy) NSString * roomUid;
///如果在房间,房间的标题
@property (nonatomic, copy) NSString *roomTitle;
///用户信息中的 座驾 并不需要CarModel 映射一下吧
@property (nonatomic,copy) NSString *carEffect;
///座驾特效类型 0普通 1VAP特效
@property (nonatomic, assign) NSInteger otherViewType;
///用户信息中需要用VAP播放的座驾, 映射一下
@property (nonatomic, copy) NSString *viewUrl;
///用户信息中的 座驾昵称 并不需要CarModel 映射一下吧
@property (nonatomic,copy) NSString *carName;
///用户信息中的 头饰的动画 并不需要HeadwearModel 映射一下吧
@property (nonatomic,copy) NSString *headwearEffect;
///用户信息中的 头饰的动画 如果没有的话 就用这个 并不需要HeadwearModel 映射一下吧
@property (nonatomic,copy) NSString *headwearPic;
///头饰(新字段) 上麦的时候 在扩展字段中的 只用在坑位上
@property (nonatomic,copy) NSString *headWearUrl;
/// 是否在房间,用在发现新朋友
@property (nonatomic, copy) NSString * inRoomUid;
/// 是否在麦位,用在发现新朋友
@property (nonatomic, assign) BOOL inMic;
#pragma mark - 相亲房的字段
///是否为相亲模式VIP坑位
@property (nonatomic,assign) BOOL vipMic;
///帽子 相亲中收到礼物值最高的那个人 男神 女神都有
@property (nonatomic,copy) NSString *capUrl;
///是不是选择了人
@property (nonatomic,assign) BOOL hasSelectUser;
///所选择的麦序
@property (nonatomic,assign) int selectMicPosition;
///贵族信息
@property (nonatomic, strong) UserVipInfoVo *userVipInfoVO;
///当前使用的资料卡装扮
@property (nonatomic, copy) NSString *userInfoCardPic;
///麦位光圈链接
@property (nonatomic, copy) NSString *micCircle;
///麦位昵称颜色
@property (nonatomic, copy) NSString *micNickColor;
///技能卡图标列表
@property (nonatomic, strong) NSArray *absCardPics;
///跟随的 本地添加的字段
@property (nonatomic,copy) NSString *fromNick;
@property (nonatomic,copy) NSString *fromUid;
///安卓房间公屏气泡
@property (nonatomic, copy) NSString *androidBubbleUrl;
///iOS房间公屏气泡
@property (nonatomic, copy) NSString *iosBubbleUrl;
#pragma mark - 小游戏
/// 小游戏状态 0 未加入游戏1 加入游戏未准备2 加入游戏已准备 3 游戏中
///用户的参加PK的类型
///是否防被踢
@property (nonatomic, assign) BOOL preventKick;
///是否符合渠道打招呼
@property (nonatomic,assign) BOOL fromSayHelloChannel;
///是否是封号用户
@property (nonatomic,assign) BOOL banAccount;
///首页点单游戏信息
@property(nonatomic,strong) UserGameInfoVo *userGamePartnerVo;
///个人详情资料的点单游戏信息
@property(nonatomic,strong) NSArray<UserGameInfoVo *> *userGamePartner;
///pk时不能禁麦
@property(nonatomic,assign) BOOL isNoProhibitMic;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,34 @@
//
// UserInfoModel.m
// xplan-ios
//
// Created by zu on 2021/9/14.
//
#import "UserInfoModel.h"
@implementation UserInfoModel
//+ (NSDictionary *)objectClassInArray {
// return @{
// @"privatePhoto":UserPhoto.class,
// @"userGiftWall":UserGiftWallInfoModel.class,
// @"userLuckyBagGiftWall":UserGiftWallInfoModel.class,
// @"dynamicInfo":MonentsInfoModel.class,
// @"userGamePartner":UserGameInfoVo.class
// };
//}
/// id -> ID name -> other.name
+ (NSDictionary *)replacedKeyFromPropertyName {
return @{@"carEffect": @"carport.effect",
@"viewUrl": @"carport.viewUrl",
@"otherViewType": @"carport.otherViewType",
@"headwearEffect" : @"userHeadwear.effect",
@"headwearPic" : @"userHeadwear.pic",
@"carName": @"carport.name",
@"reviewingAvatar" : @"newAvatar"
};
}
@end

View File

@@ -0,0 +1,16 @@
//
// UserInfoSkillVo.h
// xplan-ios
//
// Created by zu on 2021/9/14.
//
#import "NSObject+DDExtension.h"
NS_ASSUME_NONNULL_BEGIN
@interface UserInfoSkillVo : NSObject
@property (nonatomic , assign) BOOL liveTag;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,12 @@
//
// UserInfoSkillVo.m
// xplan-ios
//
// Created by zu on 2021/9/14.
//
#import "UserInfoSkillVo.h"
@implementation UserInfoSkillVo
@end

View File

@@ -0,0 +1,35 @@
//
// UserLevelVo.h
// xplan-ios
//
// Created by zu on 2021/9/14.
//
#import "NSObject+DDExtension.h"
NS_ASSUME_NONNULL_BEGIN
typedef NS_ENUM(NSInteger, UserLevelType) {
UserLevelType_Common = 1,///普通人
UserLevelType_Offical = 2,///官方
UserLevelType_Robot = 3, ///机器人
};
@interface UserLevelVo : NSObject
@property (nonatomic , copy) NSString * experUrl;
@property (nonatomic , copy) NSString * experNewUrl;
@property (nonatomic , copy) NSString * charmNewUrl;
@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

View File

@@ -0,0 +1,18 @@
//
// UserLevelVo.m
// xplan-ios
//
// Created by zu on 2021/9/14.
//
#import "UserLevelVo.h"
@implementation UserLevelVo
//- (NSString *)charmNewUrl{
// return [NSString getCharmImageUrl:_charmUrl];;
//}
//- (NSString *)experNewUrl{
// return [NSString getWealthImageUrl:_experUrl];
//}
@end

View File

@@ -0,0 +1,18 @@
//
// UserPhoto.h
// xplan-ios
//
// Created by 冯硕 on 2021/9/23.
//
#import "NSObject+DDExtension.h"
NS_ASSUME_NONNULL_BEGIN
@interface UserPhoto : NSObject
@property (copy, nonatomic) NSString *photoUrl;
@property (copy, nonatomic) NSString *pid;
@property (nonatomic, assign) BOOL isReview;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,13 @@
//
// UserPhoto.m
// xplan-ios
//
// Created by on 2021/9/23.
//
#import "UserPhoto.h"
@implementation UserPhoto
@end

View File

@@ -0,0 +1,33 @@
//
// UserVipInfoVo.h
// xplan-ios
//
// Created by GreenLand on 2022/1/4.
// 贵族信息
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface UserVipInfoVo : NSObject
///贵族图标
@property (nonatomic, copy) NSString *vipIcon;
///贵族等级
@property (nonatomic, assign) NSInteger vipLevel;
//用户好友昵称颜色
@property (nonatomic, copy) NSString *friendNickColour;
///是否防被踢
@property (nonatomic, assign) BOOL preventKick;
///是否隐身进房
@property (nonatomic, assign) BOOL enterHide;
///贵族进房特效
@property (nonatomic, copy) NSString *enterRoomEffects;
///贵族名称
@property (nonatomic, copy) NSString *vipName;
///隐身访问主页
@property (nonatomic,assign) BOOL lookHomepageHide;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,12 @@
//
// UserVipInfoVo.m
// xplan-ios
//
// Created by GreenLand on 2022/1/4.
//
#import "UserVipInfoVo.h"
@implementation UserVipInfoVo
@end

View File

@@ -0,0 +1,36 @@
//
// BaseMvpPresenter.h
// xplan-ios
//
// Created by zu on 2021/8/31.
//
#import <Foundation/Foundation.h>
#import "BaseMvpProtocol.h"
#import "HttpRequestHelper.h"
NS_ASSUME_NONNULL_BEGIN
typedef void(^HttpSuccess)(BaseModel *data);
typedef void(^HttpFail)(NSInteger code, NSString * _Nullable msg);
@interface BaseMvpPresenter : NSObject
- (void)attatchView:(id)view;
- (id)getView;
- (void)detatchView;
- (void)logout;
- (HttpRequestHelperCompletion)createHttpCompletion:(HttpSuccess _Nonnull)success;
- (HttpRequestHelperCompletion)createHttpCompletion:(HttpSuccess _Nonnull)success showLoading:(BOOL)loading;
- (HttpRequestHelperCompletion)createHttpCompletion:(HttpSuccess _Nonnull)success errorToast:(BOOL)toast;
- (HttpRequestHelperCompletion)createHttpCompletion:(HttpSuccess _Nonnull)success showLoading:(BOOL)loading errorToast:(BOOL)toast;
- (HttpRequestHelperCompletion)createHttpCompletion:(HttpSuccess _Nonnull)success fail:(HttpFail _Nullable)fail;
- (HttpRequestHelperCompletion)createHttpCompletion:(HttpSuccess _Nonnull)success fail:(HttpFail _Nullable)fail showLoading:(BOOL)loading;
- (HttpRequestHelperCompletion)createHttpCompletion:(HttpSuccess _Nonnull)success fail:(HttpFail _Nullable)fail errorToast:(BOOL)toast;
- (HttpRequestHelperCompletion)createHttpCompletion:(HttpSuccess _Nonnull)success fail:(HttpFail _Nullable)fail showLoading:(BOOL)loading errorToast:(BOOL)toast;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,142 @@
//
// BaseMvpPresenter.m
// xplan-ios
//
// Created by zu on 2021/8/31.
//
#import "BaseMvpPresenter.h"
#import "AccountInfoStorage.h"
#import <NIMSDK/NIMSDK.h>
#import <QYSDK_NIM/QYSDK.h>
//#import "ClientConfig.h"
@interface BaseMvpPresenter()
@property (nonatomic, weak) id view;
@end
@implementation BaseMvpPresenter
- (void)attatchView:(id)view {
self.view = view;
}
- (id)getView {
return self.view;
}
- (void)logout {
// 1. logout
[[AccountInfoStorage instance] saveAccountInfo:nil];
[[AccountInfoStorage instance] saveTicket:nil];
if ([NIMSDK sharedSDK].loginManager.isLogined) {
[[NIMSDK sharedSDK].loginManager logout:nil];
}
[[QYSDK sharedSDK] logout:^(BOOL success) {
}];
///
// [[ClientConfig shareConfig] resetHeartBratTimer];
// 2.
[[self getView] tokenInvalid];
}
- (HttpRequestHelperCompletion)createHttpCompletion:(HttpSuccess)success {
return [self createHttpCompletion:success fail:nil];
}
- (HttpRequestHelperCompletion)createHttpCompletion:(HttpSuccess)success showLoading:(BOOL)loading {
return [self createHttpCompletion:success fail:nil showLoading:loading];
}
- (HttpRequestHelperCompletion)createHttpCompletion:(HttpSuccess)success errorToast:(BOOL)toast {
return [self createHttpCompletion:success fail:nil errorToast:toast];
}
- (HttpRequestHelperCompletion)createHttpCompletion:(HttpSuccess)success showLoading:(BOOL)loading errorToast:(BOOL)toast {
return [self createHttpCompletion:success fail:nil showLoading:loading errorToast:toast];
}
- (HttpRequestHelperCompletion)createHttpCompletion:(HttpSuccess)success fail:(HttpFail)fail {
return [self createHttpCompletion:success fail:fail showLoading:NO errorToast:YES];
}
- (HttpRequestHelperCompletion)createHttpCompletion:(HttpSuccess)success fail:(HttpFail)fail showLoading:(BOOL)loading {
return [self createHttpCompletion:success fail:fail showLoading:loading errorToast:YES];
}
- (HttpRequestHelperCompletion)createHttpCompletion:(HttpSuccess)success fail:(HttpFail)fail errorToast:(BOOL)toast {
return [self createHttpCompletion:success fail:fail showLoading:NO errorToast:toast];
}
- (HttpRequestHelperCompletion)createHttpCompletion:(HttpSuccess)success fail:(HttpFail)fail showLoading:(BOOL)loading errorToast:(BOOL)toast {
if (loading) {
[self.view dd_showAnchorGIFWaitView];
}
return ^(BaseModel *data, NSInteger code, NSString * _Nullable msg) {
if (loading) {
[self.view dd_HideWaitView];
}
if (code == 200) {
success(data);
return;
}
// switch (code) {
// case 401: //
// [self logout];
// return;
// case 407:
// case 408:
// [[self getView] accountBanned:data];
// return;
// case 1415: //
// [[self getView] completeUserInfo];
// return;
// case 3009: //
// [[self getView] accountCanceled:data.model2dictionary];
// return;
// case 31005: {//
// }
// break;
// case 30000: {// , toast
// }
// break;
// case 10111: //
// [self.view hideHUD];
// [[self getView] showRealNameAuthenticationTipsAlertView];
// if (fail) {
// fail(code, msg);
// }
// return;
// case 10108: //
// [self.view hideHUD];
// [[self getView] showRealNameAuthenticationTipsAlertView];
// if (fail) {
// fail(code, msg);
// }
// return;
// case 25000: {//
// }
// }
if (toast) {
[self.view dd_showErrorWithText:msg];
}
if (fail) {
fail(code, msg);
}
};
}
- (void)detatchView {
}
@end

View File

@@ -0,0 +1,27 @@
//
// BaseMvpProtocol.h
// xplan-ios
//
// Created by zu on 2021/8/31.
//
#import <Foundation/Foundation.h>
#import "DDBaseVC.h"
NS_ASSUME_NONNULL_BEGIN
@class BaseModel;
@protocol BaseMvpProtocol <NSObject, DDBaseVCDelegate>
- (void)tokenInvalid;
- (void)completeUserInfo;
- (void)accountCanceled:(NSDictionary *)data;
///实名认证弹窗
- (void)showRealNameAuthenticationTipsAlertView;
///封禁账号
- (void)accountBanned:(BaseModel *)data;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,21 @@
//
// MvpViewController.h
// xplan-ios
//
// Created by zu on 2021/8/31.
//
#import "DDBaseVC.h"
#import "BaseMvpPresenter.h"
NS_ASSUME_NONNULL_BEGIN
@interface MvpViewController<T> : DDBaseVC
@property (nonatomic, strong) __kindof T presenter;
- (__kindof T)createPresenter;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,110 @@
//
// MvpViewController.m
// xplan-ios
//
// Created by zu on 2021/8/31.
//
#import "MvpViewController.h"
#import "BaseMvpProtocol.h"
#import "BaseMvpPresenter.h"
//Tool
#import "TTPopup.h"
#import "DDAppColor.h"
@interface MvpViewController ()
@end
@implementation MvpViewController
- (__kindof id)presenter {
if (_presenter == nil) {
_presenter = [self createPresenter];
[_presenter attatchView:self];
}
return _presenter;
}
- (__kindof id)createPresenter {
return [[BaseMvpPresenter alloc] init];
}
- (void)viewDidLoad {
[super viewDidLoad];
}
- (void)tokenInvalid {
// LoginViewController *loginVC = [[LoginViewController alloc] init];
// BaseNavigationController * nav = [[BaseNavigationController alloc] initWithRootViewController:loginVC];
// nav.modalPresentationStyle = UIModalPresentationFullScreen;
// [self.navigationController presentViewController:nav animated:YES completion:nil];
}
- (void)accountCanceled:(NSDictionary *)data {
}
- (void)completeUserInfo {
}
///
- (void)showRealNameAuthenticationTipsAlertView {
// TTAlertConfig *config = [[TTAlertConfig alloc] init];
// config.message = @"为了营造更安全的网络环境\n保护您和他人的财产安全\n请先进行实名认证";
// config.messageLineSpacing = 4;
// config.confirmButtonConfig.title = @"前往认证";
// config.confirmButtonConfig.titleColor = UIColor.whiteColor;
// config.confirmButtonConfig.backgroundColor = [DDAppColor appMainColor];
//
// TTAlertMessageAttributedConfig *nameAttrConf = [[TTAlertMessageAttributedConfig alloc] init];
// nameAttrConf.text = @"实名认证";
// nameAttrConf.color = [DDAppColor appMainColor];
// config.messageAttributedConfig = @[nameAttrConf];
//
// @kWeakify(self);
// [TTPopup alertWithConfig:config confirmHandler:^{
// @kStrongify(self);
// XPWebViewController * webVC = [[XPWebViewController alloc] init];
// webVC.url = URLWithType(kIdentityURL);
// if([self isKindOfClass:[XPMineHalfRechargeViewController class]]){
// XPMineHalfRechargeViewController *payVC = (XPMineHalfRechargeViewController *)self;
// [payVC dismissViewControllerAnimated:YES completion:nil];
// [payVC.currentNav pushViewController:webVC animated:YES];
// return;
// }
//
// [self.navigationController pushViewController:webVC animated:YES];
// } cancelHandler:^{
// }];
}
///
- (void)accountBanned:(BaseModel *)data {
// TTAlertConfig * config = [[TTAlertConfig alloc] init];
// config.title = @"您被封号了";
// NSString *dateDes = [PLTimeUtil getDateWithYYMMDD:data.date];
// NSString * title = [NSString stringWithFormat:@"您的账号因%@被封禁\n解封时间%@", data.reason,dateDes];
// TTAlertMessageAttributedConfig * inviteAlertConfig = [[TTAlertMessageAttributedConfig alloc] init];
// inviteAlertConfig.text = dateDes;
// inviteAlertConfig.color = [DDAppColor appMainColor];
// inviteAlertConfig.font = [UIFont systemFontOfSize:15];
// config.message = title;
// config.messageAttributedConfig = @[inviteAlertConfig];
// [TTPopup alertWithConfig:config confirmHandler:^{
//
// } cancelHandler:^{
//
// }];
}
@end

View File

@@ -0,0 +1,19 @@
//
// ApiHost.h
// xplan-ios
//
// Created by zu on 2021/9/6.
//
#ifndef ApiHost_h
#define ApiHost_h
#ifdef DEBUG
#define API_HOST_H5_URL @"http://beta.h5.nnbc123.cn"
#define API_HOST_URL @"http://beta.api.nnbc123.cn"
#else
#define API_HOST_H5_URL @"https://h5.nnbc123.cn"
#define API_HOST_URL @"https://api.nnbc123.cn"
#endif
#endif /* ApiHost_h */

View File

@@ -0,0 +1,64 @@
//
// HttpRequestHelper.h
// xplan-ios
//
// Created by zu on 2021/9/3.
//
#import <Foundation/Foundation.h>
#import "BaseModel.h"
typedef NS_ENUM(NSUInteger, HttpRequestHelperMethod) {
HttpRequestHelperMethodPOST,
HttpRequestHelperMethodGET,
HttpRequestHelperMethodDELETE
};
static dispatch_once_t onceToken;
typedef void(^HttpRequestHelperCompletion)(BaseModel* _Nullable data, NSInteger code, NSString * _Nullable msg);
NS_ASSUME_NONNULL_BEGIN
@interface HttpRequestHelper : NSObject
+ (NSDictionary*)configBaseParmars:(NSDictionary *)parmars;
+ (void)GET:(NSString *)method
params:(NSDictionary *)params
success:(void (^)(BaseModel *data))success
failure:(void (^)(NSInteger resCode, NSString *message))failure;
+ (void)POST:(NSString *)method
params:(NSDictionary *)params
success:(void (^)(BaseModel *data))success
failure:(void (^)(NSInteger resCode, NSString *message))failure;
+ (void)DELETE:(NSString *)method
params:(NSDictionary *)params
success:(void (^)(BaseModel *data))success
failure:(void (^)(NSInteger resCode, NSString *message))failure;
+ (void)request:(NSString *)url
method:(HttpRequestHelperMethod)method
params:(NSDictionary *)params
success:(void (^)(BaseModel *data))success
failure:(void (^)(NSInteger resCode, NSString *message))failure;
+ (void)request:(NSString *)path
method:(HttpRequestHelperMethod)method
params:(NSDictionary *)params
completion:(HttpRequestHelperCompletion)completion;
/// 增加或编辑技能卡专用接口 Post 请求参数放入到 body 里 使用 application/json 类型传递
/// @param path 请求地址
/// @param params 参数
/// @param completion 回调
+ (void)postSkillCard:(NSString *)path
params:(NSString *)params
completion:(HttpRequestHelperCompletion)completion;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,346 @@
//
// HttpRequestHelper.m
// xplan-ios
//
// Created by zu on 2021/9/3.
//
#import "HttpRequestHelper.h"
#import "ApiHost.h"
#import "DDUtility.h"
#import "AccountInfoStorage.h"
#import "DDReachability.h"
#import <AFNetworking.h>
#import <Bugly/Bugly.h>
#import "TTAlertView.h"
#import "DDCurVCManager.h"
@implementation HttpRequestHelper
static BOOL isShowing = NO;
+(AFHTTPSessionManager *)requestManager
{
static AFHTTPSessionManager *manager = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
manager = [[AFHTTPSessionManager manager]initWithBaseURL:[NSURL URLWithString:API_HOST_URL]];
manager.responseSerializer = [AFJSONResponseSerializer serializer];
manager.requestSerializer.HTTPShouldHandleCookies = YES;
//
manager.securityPolicy.allowInvalidCertificates = YES;
AFSecurityPolicy *securityPolicy= [AFSecurityPolicy defaultPolicy];
manager.securityPolicy = securityPolicy;
//
[manager.securityPolicy setValidatesDomainName:NO];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html",@"text/plain",@"image/jpeg",@"image/png", nil];
manager.requestSerializer.timeoutInterval = 60;
});
return manager;
}
+ (void)showNoNetAlert {
if (isShowing == NO) {
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"温馨提示" message:@"请检查网络配置或确定设备是否联网" preferredStyle:UIAlertControllerStyleAlert];
[alert addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
isShowing = NO;
}]];
[alert addAction:[UIAlertAction actionWithTitle:@"设置" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
isShowing = NO;
NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url options:nil completionHandler:^(BOOL success) {
}];
}
}]];
[[DDCurVCManager share].dd_getCurVC presentViewController:alert animated:YES completion:nil];
isShowing = YES;
}
}
+ (void)GET:(NSString *)method
params:(NSDictionary *)params
success:(void (^)(BaseModel *data))success
failure:(void (^)(NSInteger resCode, NSString *message))failure
{
if ([AFNetworkReachabilityManager sharedManager].networkReachabilityStatus == 0) {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.01 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self showNoNetAlert];
failure(-1, @"请检查网络连接。");
NSException * extrion= [NSException exceptionWithName:method reason:@"接口没有网络" userInfo:nil];
[Bugly reportException:extrion];
});
return;
}
[self configHeaders];
params = [self configBaseParmars:params];
#ifdef DEBUG
NSLog(@"\nmethod:\n%@\nparameter:\n%@", method, params);
#endif
AFHTTPSessionManager *manager = [HttpRequestHelper requestManager];
[manager GET:method parameters:params headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
BaseModel *baseModel = [BaseModel DD_ModelWithDict:responseObject];
#ifdef DEBUG
NSLog(@"\n%@", [baseModel dd_toJSONString]);
#endif
success(baseModel);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
[self handleNetError:error method:method failure:failure];
}];
}
+ (void)POST:(NSString *)method
params:(NSDictionary *)params
success:(void (^)(BaseModel *data))success
failure:(void (^)(NSInteger resCode, NSString *message))failure
{
if ([AFNetworkReachabilityManager sharedManager].networkReachabilityStatus == 0) {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.01 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
failure(-1, @"请检查网络连接。");
NSException * extrion= [NSException exceptionWithName:method reason:@"接口没有网络" userInfo:nil];
[Bugly reportException:extrion];
});
return;
}
[self configHeaders];
params = [self configBaseParmars:params];
#ifdef DEBUG
NSLog(@"\nmethod:\n%@\nparameter:\n%@", method, params);
#endif
AFHTTPSessionManager *manager = [HttpRequestHelper requestManager];
[manager POST:method parameters:params headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
BaseModel *baseModel = [BaseModel DD_ModelWithDict:responseObject];
#ifdef DEBUG
NSLog(@"\n%@", [baseModel dd_toJSONString]);
#endif
success(baseModel);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
[self handleNetError:error method:method failure:failure];
}];
}
+ (void)DELETE:(NSString *)method
params:(NSDictionary *)params
success:(void (^)(BaseModel *data))success
failure:(void (^)(NSInteger resCode, NSString *message))failure
{
if ([AFNetworkReachabilityManager sharedManager].networkReachabilityStatus == 0) {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.01 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
failure(-1, @"请检查网络连接。");
NSException * extrion= [NSException exceptionWithName:method reason:@"接口没有网络" userInfo:nil];
[Bugly reportException:extrion];
});
return;
}
[self configHeaders];
params = [self configBaseParmars:params];
#ifdef DEBUG
NSLog(@"\nmethod:\n%@\nparameter:\n%@", method, params);
#endif
AFHTTPSessionManager *manager = [HttpRequestHelper requestManager];
[manager DELETE:method parameters:params headers:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
BaseModel *baseModel = [BaseModel DD_ModelWithDict:responseObject];
#ifdef DEBUG
NSLog(@"\n%@", [baseModel dd_toJSONString]);
#endif
success(baseModel);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
[self handleNetError:error method:method failure:failure];
}];
}
+ (void)request:(NSString *)url
method:(HttpRequestHelperMethod)method
params:(NSDictionary *)params
success:(void (^)(BaseModel *data))success
failure:(void (^)(NSInteger resCode, NSString *message))failure
{
switch (method) {
case HttpRequestHelperMethodGET: {
[self GET:url params:params success:success failure:failure];
}
break;
case HttpRequestHelperMethodPOST:{
[self POST:url params:params success:success failure:failure];
}
break;
case HttpRequestHelperMethodDELETE:{
[self DELETE:url params:params success:success failure:failure];
}
break;
}
}
+ (void)request:(NSString *)path
method:(HttpRequestHelperMethod)method
params:(NSDictionary *)params
completion:(HttpRequestHelperCompletion)completion
{
[self request:path method:method params:params success:^(BaseModel *data) {
if (completion) {
completion(data, data.code, data.message);
}
} failure:^(NSInteger resCode, NSString *message) {
if (completion) {
completion(nil, resCode, message);
}
}];
}
+ (void)configHeaders
{
AFHTTPSessionManager *client = [HttpRequestHelper requestManager];
if ([[AccountInfoStorage instance] getUid].length > 0) {
[client.requestSerializer setValue:[[AccountInfoStorage instance] getUid] forHTTPHeaderField:@"pub_uid"];
} else {
[client.requestSerializer setValue:nil forHTTPHeaderField:@"pub_uid"];
}
if ([[AccountInfoStorage instance] getTicket].length > 0) {
[client.requestSerializer setValue:[[AccountInfoStorage instance] getTicket] forHTTPHeaderField:@"pub_ticket"];
}else {
[client.requestSerializer setValue:nil forHTTPHeaderField:@"pub_ticket"];
}
}
+ (NSDictionary*)configBaseParmars:(NSDictionary *)parmars
{
NSDictionary *defaultBasciParame = @{
@"os" : @"iOS",
@"osVersion" : [DDUtility DD_SystemVersion],
@"netType" : ([DDUtility DD_NetworkStatus] == ReachableViaWiFi) ? @2 : @1,
@"ispType" : @([DDUtility DD_CarrierIdentifier]),
@"channel" : [DDUtility DD_GetAppSource] ? : @"",
@"model" : [DDUtility DD_ModelName],
@"deviceId" : [DDUtility DD_DeviceUniqueIdentification],
@"appVersion" : [DDUtility DD_AppVersion],
@"app" : [DDUtility DD_AppName]
};
if (!parmars||![parmars isKindOfClass:[NSDictionary class]]){
NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithDictionary:defaultBasciParame];
return dic;
}
NSMutableDictionary * dic = [NSMutableDictionary dictionaryWithDictionary:parmars];
for (NSString *parameKey in defaultBasciParame.allKeys) {
[dic setObject:defaultBasciParame[parameKey] forKey:parameKey];
}
return dic;
}
+ (void)handleNetError:(NSError *)error method:(NSString *)method
failure:(void (^)(NSInteger resCode, NSString *message))failure
{
#ifdef DEBUG
NSLog(@"\n%@", error);
#endif
// oauth/ticket
NSHTTPURLResponse *response = error.userInfo[@"com.alamofire.serialization.response.error.response"];
if (response && response.statusCode == 401) {
failure(response.statusCode, @"登录已过期。");
} else {
if (error.code == -1009 || error.code == -1001 || error.code == -1004 || error.code == -1003 || error.code == -1002 || error.code == 3840) {
failure(error.code, @"");
} else {
failure(error.code, error.localizedDescription.length > 0 ? error.localizedDescription : @"音萌开小差中~请稍后再试");
}
NSString * code = error.code ? [NSString stringWithFormat:@"%ld", error.code] : @"9999";
NSString * des = error.description.length > 0 ? error.description : @"接口报错信息未知";
NSException *exception = [NSException exceptionWithName:@"229181"
reason:method
userInfo:@{@"code":code, @"desc":des}];
[Bugly reportException:exception];
}
}
/// Post body 使 application/json
/// @param path
/// @param params
/// @param completion
+ (void)postSkillCard:(NSString *)path
params:(NSString *)params
completion:(HttpRequestHelperCompletion)completion{
if ([AFNetworkReachabilityManager sharedManager].networkReachabilityStatus == 0) {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.01 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
completion(nil, -1, @"请检查网络连接。");
});
return;
}
[self configHeaders];
NSDictionary *baseParams = [self configBaseParmars:nil];
#ifdef DEBUG
// NSLog(@"\nmethod:\n%@\nparameter:\n%@", method, params);
#endif
AFHTTPSessionManager *manager = [HttpRequestHelper requestManager];
NSString *url = API_HOST_URL;
NSString *urlPath = [NSString stringWithFormat:@"%@/%@", url ,path];
#ifdef DEBUG
NSLog(@"url:%@,parameter:%@",urlPath, baseParams);
#endif
__block NSString *requestUrl = @"";
[baseParams.allKeys enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSString *value = baseParams[obj];
requestUrl = [requestUrl stringByAppendingString:[NSString stringWithFormat:@"%@=%@&", obj, value]];
}];
urlPath = [NSString stringWithFormat:@"%@?%@", urlPath, requestUrl];
NSMutableURLRequest *request = [[AFJSONRequestSerializer serializer] requestWithMethod:@"POST" URLString:urlPath parameters:baseParams error:nil];
request.timeoutInterval= [[[NSUserDefaults standardUserDefaults] valueForKey:@"timeoutInterval"] longValue];
[request setValue:@"application/json; charset=UTF-8" forHTTPHeaderField:@"Content-Type"];
if ([[AccountInfoStorage instance] getUid].length > 0) {
[request setValue:[[AccountInfoStorage instance] getUid] forHTTPHeaderField:@"pub_uid"];
[manager.requestSerializer setValue:[[AccountInfoStorage instance] getUid] forHTTPHeaderField:@"pub_uid"];
} else {
[request setValue:nil forHTTPHeaderField:@"pub_uid"];
}
if ([[AccountInfoStorage instance] getTicket].length > 0) {
[request setValue:[[AccountInfoStorage instance] getTicket] forHTTPHeaderField:@"pub_ticket"];
[manager.requestSerializer setValue:[[AccountInfoStorage instance] getTicket] forHTTPHeaderField:@"pub_ticket"];
}else {
[request setValue:nil forHTTPHeaderField:@"pub_ticket"];
}
NSError *error;
[request setHTTPBody:[params dataUsingEncoding:NSUTF8StringEncoding]];
[[manager dataTaskWithRequest:request uploadProgress:nil downloadProgress:nil completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) {
if (responseObject) {
BaseModel *baseModel = [BaseModel DD_ModelWithDict:responseObject];
#ifdef DEBUG
NSLog(@"\n%@", [baseModel dd_toJSONString]);
#endif
if (baseModel.code == 200) {
if (completion) {
completion(baseModel, 200, nil);
}
} else {
if (completion) {
completion(nil, baseModel.code, baseModel.message);
}
}
}
if (error) {
[self handleNetError:error method:path failure:^(NSInteger resCode, NSString *message) {
completion(nil, resCode, message);
}];
}
}] resume];
}
@end

View File

@@ -591,4 +591,4 @@ SPEC CHECKSUMS:
PODFILE CHECKSUM: 4a3e8c3e3691165802b43178346af03c39e4ae9b
COCOAPODS: 1.14.2
COCOAPODS: 1.12.1