Pods/Pods.xcodeproj/project.pbxproj
@@ -14629,7 +14629,7 @@ GCC_PREFIX_HEADER = "Target Support Files/EmptyDataSet-Swift/EmptyDataSet-Swift-prefix.pch"; INFOPLIST_FILE = "Target Support Files/EmptyDataSet-Swift/EmptyDataSet-Swift-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -14873,7 +14873,7 @@ GCC_PREFIX_HEADER = "Target Support Files/UserDefaultsStore/UserDefaultsStore-prefix.pch"; INFOPLIST_FILE = "Target Support Files/UserDefaultsStore/UserDefaultsStore-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -14907,7 +14907,7 @@ GCC_PREFIX_HEADER = "Target Support Files/VTMagic/VTMagic-prefix.pch"; INFOPLIST_FILE = "Target Support Files/VTMagic/VTMagic-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -15163,7 +15163,7 @@ GCC_PREFIX_HEADER = "Target Support Files/AliyunOSSiOS/AliyunOSSiOS-prefix.pch"; INFOPLIST_FILE = "Target Support Files/AliyunOSSiOS/AliyunOSSiOS-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -15219,7 +15219,7 @@ GCC_PREFIX_HEADER = "Target Support Files/SwiftyStoreKit/SwiftyStoreKit-prefix.pch"; INFOPLIST_FILE = "Target Support Files/SwiftyStoreKit/SwiftyStoreKit-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -15742,7 +15742,7 @@ GCC_PREFIX_HEADER = "Target Support Files/VTMagic/VTMagic-prefix.pch"; INFOPLIST_FILE = "Target Support Files/VTMagic/VTMagic-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -15911,7 +15911,7 @@ GCC_PREFIX_HEADER = "Target Support Files/SPPageMenu/SPPageMenu-prefix.pch"; INFOPLIST_FILE = "Target Support Files/SPPageMenu/SPPageMenu-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -16058,7 +16058,7 @@ GCC_PREFIX_HEADER = "Target Support Files/AliyunOSSiOS/AliyunOSSiOS-prefix.pch"; INFOPLIST_FILE = "Target Support Files/AliyunOSSiOS/AliyunOSSiOS-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -16113,7 +16113,7 @@ GCC_PREFIX_HEADER = "Target Support Files/SPPageMenu/SPPageMenu-prefix.pch"; INFOPLIST_FILE = "Target Support Files/SPPageMenu/SPPageMenu-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -16260,7 +16260,7 @@ GCC_PREFIX_HEADER = "Target Support Files/EmptyDataSet-Swift/EmptyDataSet-Swift-prefix.pch"; INFOPLIST_FILE = "Target Support Files/EmptyDataSet-Swift/EmptyDataSet-Swift-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -16392,7 +16392,7 @@ GCC_PREFIX_HEADER = "Target Support Files/HandyJSON/HandyJSON-prefix.pch"; INFOPLIST_FILE = "Target Support Files/HandyJSON/HandyJSON-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -16444,7 +16444,7 @@ GCC_PREFIX_HEADER = "Target Support Files/JQTools/JQTools-prefix.pch"; INFOPLIST_FILE = "Target Support Files/JQTools/JQTools-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 10.0; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -17400,7 +17400,7 @@ GCC_PREFIX_HEADER = "Target Support Files/SwiftyStoreKit/SwiftyStoreKit-prefix.pch"; INFOPLIST_FILE = "Target Support Files/SwiftyStoreKit/SwiftyStoreKit-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -17610,7 +17610,7 @@ GCC_PREFIX_HEADER = "Target Support Files/JQTools/JQTools-prefix.pch"; INFOPLIST_FILE = "Target Support Files/JQTools/JQTools-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 10.0; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -18040,7 +18040,7 @@ GCC_PREFIX_HEADER = "Target Support Files/UserDefaultsStore/UserDefaultsStore-prefix.pch"; INFOPLIST_FILE = "Target Support Files/UserDefaultsStore/UserDefaultsStore-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -18317,7 +18317,7 @@ GCC_PREFIX_HEADER = "Target Support Files/HandyJSON/HandyJSON-prefix.pch"; INFOPLIST_FILE = "Target Support Files/HandyJSON/HandyJSON-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", XQMuse.xcodeproj/project.pbxproj
@@ -112,7 +112,6 @@ 135B1D202C8863D10089A9BE /* Types.swift in Sources */ = {isa = PBXBuildFile; fileRef = 135B1D1F2C8863D10089A9BE /* Types.swift */; }; 135B1D222C8868170089A9BE /* Models.swift in Sources */ = {isa = PBXBuildFile; fileRef = 135B1D212C8868170089A9BE /* Models.swift */; }; 135B1D252C8947630089A9BE /* UserViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 135B1D242C8947630089A9BE /* UserViewModel.swift */; }; 135C2A502C7EC48D00CC2A67 /* apngb-animated_sun.png in Resources */ = {isa = PBXBuildFile; fileRef = 135C2A4F2C7EC48D00CC2A67 /* apngb-animated_sun.png */; }; 135C2A652C7F033300CC2A67 /* CLAnimationTransitioning.swift in Sources */ = {isa = PBXBuildFile; fileRef = 135C2A512C7F033300CC2A67 /* CLAnimationTransitioning.swift */; }; 135C2A662C7F033300CC2A67 /* CLFullScreenController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 135C2A522C7F033300CC2A67 /* CLFullScreenController.swift */; }; 135C2A672C7F033300CC2A67 /* CLFullScreenLeftController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 135C2A532C7F033300CC2A67 /* CLFullScreenLeftController.swift */; }; @@ -166,6 +165,7 @@ 137ECAD32C783C2000C338BE /* bg.mov in Resources */ = {isa = PBXBuildFile; fileRef = 137ECAD22C783C2000C338BE /* bg.mov */; }; 137ECAD62C783C7700C338BE /* TreeTeskVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 137ECAD42C783C7700C338BE /* TreeTeskVC.swift */; }; 137ECAD72C783C7700C338BE /* TreeTeskVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 137ECAD52C783C7700C338BE /* TreeTeskVC.xib */; }; 1381BBA12DAF7D2B000717EB /* apngb-animated-flow.png in Resources */ = {isa = PBXBuildFile; fileRef = 1381BBA02DAF7D2B000717EB /* apngb-animated-flow.png */; }; 13846C782C9163BB0078B68F /* TreeTeskDetailVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13846C762C9163BB0078B68F /* TreeTeskDetailVC.swift */; }; 13846C792C9163BB0078B68F /* TreeTeskDetailVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13846C772C9163BB0078B68F /* TreeTeskDetailVC.xib */; }; 1385DFFA2C6C4EBC00AADB1F /* RefreshModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1385DFF92C6C4EBC00AADB1F /* RefreshModel.swift */; }; @@ -252,26 +252,15 @@ 13A6594F2C6F641100F731FA /* CourseDetail_2_Inner_TCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13A6594C2C6F641100F731FA /* CourseDetail_2_Inner_TCell.swift */; }; 13B021DB2C75DD0600414769 /* BankWithdrawVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B021DA2C75DD0600414769 /* BankWithdrawVC.xib */; }; 13B021DC2C75DD0600414769 /* BankWithdrawVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13B021D92C75DD0600414769 /* BankWithdrawVC.swift */; }; 13B06A082C78A0D300477FA9 /* apngb-animated-level-1.png in Resources */ = {isa = PBXBuildFile; fileRef = 13B06A072C78A0D300477FA9 /* apngb-animated-level-1.png */; }; 13BA27132C81B6DD006D4CD1 /* SourceHanSerifCN-Light.otf in Resources */ = {isa = PBXBuildFile; fileRef = 13BA27122C81B6DD006D4CD1 /* SourceHanSerifCN-Light.otf */; }; 13BF65D82C80402500E20F0E /* bg_movie.mov in Resources */ = {isa = PBXBuildFile; fileRef = 13BF65D72C80402500E20F0E /* bg_movie.mov */; }; 13BF65DC2C80407600E20F0E /* PlanGuideVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13BF65DA2C80407600E20F0E /* PlanGuideVC.swift */; }; 13BF65DD2C80407600E20F0E /* PlanGuideVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13BF65DB2C80407600E20F0E /* PlanGuideVC.xib */; }; 13BF65EB2C804BE100E20F0E /* apngb-animated-flow.png in Resources */ = {isa = PBXBuildFile; fileRef = 13BF65EA2C804BE100E20F0E /* apngb-animated-flow.png */; }; 13C583882C86A29A0071BCBE /* apngb-animated-level-2.png in Resources */ = {isa = PBXBuildFile; fileRef = 13C583872C86A29A0071BCBE /* apngb-animated-level-2.png */; }; 13C5838A2C86A42B0071BCBE /* apngb-animated-level-3.png in Resources */ = {isa = PBXBuildFile; fileRef = 13C583892C86A42B0071BCBE /* apngb-animated-level-3.png */; }; 13C5838C2C86A4770071BCBE /* apngb-animated-level-4.png in Resources */ = {isa = PBXBuildFile; fileRef = 13C5838B2C86A4770071BCBE /* apngb-animated-level-4.png */; }; 13C5838E2C86A4F90071BCBE /* apngb-animated-level-5.png in Resources */ = {isa = PBXBuildFile; fileRef = 13C5838D2C86A4F90071BCBE /* apngb-animated-level-5.png */; }; 13C834ED2D12D1E100B08AE2 /* BlackListVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13C834EC2D12D1E100B08AE2 /* BlackListVC.swift */; }; 13C834F02D12D37700B08AE2 /* BlackUserTCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13C834EE2D12D37700B08AE2 /* BlackUserTCell.swift */; }; 13C834F12D12D37700B08AE2 /* BlackUserTCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13C834EF2D12D37700B08AE2 /* BlackUserTCell.xib */; }; 13C9DDCD2C8EE1F20008946B /* Home_Style_5_TCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13C9DDCC2C8EE1F20008946B /* Home_Style_5_TCell.xib */; }; 13C9DDCE2C8EE1F20008946B /* Home_Style_5_TCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13C9DDCB2C8EE1F20008946B /* Home_Style_5_TCell.swift */; }; 13C9DDD42C8EE8EB0008946B /* apngb-animated-level-7.png in Resources */ = {isa = PBXBuildFile; fileRef = 13C9DDCF2C8EE8EB0008946B /* apngb-animated-level-7.png */; }; 13C9DDD52C8EE8EB0008946B /* apngb-animated-level-6.png in Resources */ = {isa = PBXBuildFile; fileRef = 13C9DDD02C8EE8EB0008946B /* apngb-animated-level-6.png */; }; 13C9DDD62C8EE8EB0008946B /* apngb-animated-level-8.png in Resources */ = {isa = PBXBuildFile; fileRef = 13C9DDD12C8EE8EB0008946B /* apngb-animated-level-8.png */; }; 13C9DDD72C8EE8EB0008946B /* apngb-animated-level-9.png in Resources */ = {isa = PBXBuildFile; fileRef = 13C9DDD22C8EE8EB0008946B /* apngb-animated-level-9.png */; }; 13C9DDD82C8EE8EB0008946B /* apngb-animated-level-10.png in Resources */ = {isa = PBXBuildFile; fileRef = 13C9DDD32C8EE8EB0008946B /* apngb-animated-level-10.png */; }; 13CBC5D92C73532B00BC66C7 /* MeVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13CBC5D82C73532B00BC66C7 /* MeVC.xib */; }; 13CBCCDF2C74793D00C67701 /* NoticeCenterSysDetailVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13CBCCDD2C74793D00C67701 /* NoticeCenterSysDetailVC.swift */; }; 13CBCCE02C74793D00C67701 /* NoticeCenterSysDetailVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13CBCCDE2C74793D00C67701 /* NoticeCenterSysDetailVC.xib */; }; @@ -433,7 +422,6 @@ 135B1D1F2C8863D10089A9BE /* Types.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Types.swift; sourceTree = "<group>"; }; 135B1D212C8868170089A9BE /* Models.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Models.swift; sourceTree = "<group>"; }; 135B1D242C8947630089A9BE /* UserViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserViewModel.swift; sourceTree = "<group>"; }; 135C2A4F2C7EC48D00CC2A67 /* apngb-animated_sun.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "apngb-animated_sun.png"; sourceTree = "<group>"; }; 135C2A512C7F033300CC2A67 /* CLAnimationTransitioning.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CLAnimationTransitioning.swift; sourceTree = "<group>"; }; 135C2A522C7F033300CC2A67 /* CLFullScreenController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CLFullScreenController.swift; sourceTree = "<group>"; }; 135C2A532C7F033300CC2A67 /* CLFullScreenLeftController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CLFullScreenLeftController.swift; sourceTree = "<group>"; }; @@ -487,6 +475,7 @@ 137ECAD22C783C2000C338BE /* bg.mov */ = {isa = PBXFileReference; lastKnownFileType = video.quicktime; path = bg.mov; sourceTree = "<group>"; }; 137ECAD42C783C7700C338BE /* TreeTeskVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TreeTeskVC.swift; sourceTree = "<group>"; }; 137ECAD52C783C7700C338BE /* TreeTeskVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = TreeTeskVC.xib; sourceTree = "<group>"; }; 1381BBA02DAF7D2B000717EB /* apngb-animated-flow.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "apngb-animated-flow.png"; sourceTree = "<group>"; }; 13846C762C9163BB0078B68F /* TreeTeskDetailVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TreeTeskDetailVC.swift; sourceTree = "<group>"; }; 13846C772C9163BB0078B68F /* TreeTeskDetailVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = TreeTeskDetailVC.xib; sourceTree = "<group>"; }; 1385DFF92C6C4EBC00AADB1F /* RefreshModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RefreshModel.swift; sourceTree = "<group>"; }; @@ -575,26 +564,15 @@ 13A6594D2C6F641100F731FA /* CourseDetail_2_Inner_TCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CourseDetail_2_Inner_TCell.xib; sourceTree = "<group>"; }; 13B021D92C75DD0600414769 /* BankWithdrawVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BankWithdrawVC.swift; sourceTree = "<group>"; }; 13B021DA2C75DD0600414769 /* BankWithdrawVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = BankWithdrawVC.xib; sourceTree = "<group>"; }; 13B06A072C78A0D300477FA9 /* apngb-animated-level-1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "apngb-animated-level-1.png"; sourceTree = "<group>"; }; 13BA27122C81B6DD006D4CD1 /* SourceHanSerifCN-Light.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SourceHanSerifCN-Light.otf"; sourceTree = "<group>"; }; 13BF65D72C80402500E20F0E /* bg_movie.mov */ = {isa = PBXFileReference; lastKnownFileType = video.quicktime; path = bg_movie.mov; sourceTree = "<group>"; }; 13BF65DA2C80407600E20F0E /* PlanGuideVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlanGuideVC.swift; sourceTree = "<group>"; }; 13BF65DB2C80407600E20F0E /* PlanGuideVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = PlanGuideVC.xib; sourceTree = "<group>"; }; 13BF65EA2C804BE100E20F0E /* apngb-animated-flow.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "apngb-animated-flow.png"; sourceTree = "<group>"; }; 13C583872C86A29A0071BCBE /* apngb-animated-level-2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "apngb-animated-level-2.png"; sourceTree = "<group>"; }; 13C583892C86A42B0071BCBE /* apngb-animated-level-3.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "apngb-animated-level-3.png"; sourceTree = "<group>"; }; 13C5838B2C86A4770071BCBE /* apngb-animated-level-4.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "apngb-animated-level-4.png"; sourceTree = "<group>"; }; 13C5838D2C86A4F90071BCBE /* apngb-animated-level-5.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "apngb-animated-level-5.png"; sourceTree = "<group>"; }; 13C834EC2D12D1E100B08AE2 /* BlackListVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlackListVC.swift; sourceTree = "<group>"; }; 13C834EE2D12D37700B08AE2 /* BlackUserTCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlackUserTCell.swift; sourceTree = "<group>"; }; 13C834EF2D12D37700B08AE2 /* BlackUserTCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = BlackUserTCell.xib; sourceTree = "<group>"; }; 13C9DDCB2C8EE1F20008946B /* Home_Style_5_TCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Home_Style_5_TCell.swift; sourceTree = "<group>"; }; 13C9DDCC2C8EE1F20008946B /* Home_Style_5_TCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = Home_Style_5_TCell.xib; sourceTree = "<group>"; }; 13C9DDCF2C8EE8EB0008946B /* apngb-animated-level-7.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "apngb-animated-level-7.png"; sourceTree = "<group>"; }; 13C9DDD02C8EE8EB0008946B /* apngb-animated-level-6.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "apngb-animated-level-6.png"; sourceTree = "<group>"; }; 13C9DDD12C8EE8EB0008946B /* apngb-animated-level-8.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "apngb-animated-level-8.png"; sourceTree = "<group>"; }; 13C9DDD22C8EE8EB0008946B /* apngb-animated-level-9.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "apngb-animated-level-9.png"; sourceTree = "<group>"; }; 13C9DDD32C8EE8EB0008946B /* apngb-animated-level-10.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "apngb-animated-level-10.png"; sourceTree = "<group>"; }; 13CBC5D82C73532B00BC66C7 /* MeVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MeVC.xib; sourceTree = "<group>"; }; 13CBCCDD2C74793D00C67701 /* NoticeCenterSysDetailVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NoticeCenterSysDetailVC.swift; sourceTree = "<group>"; }; 13CBCCDE2C74793D00C67701 /* NoticeCenterSysDetailVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = NoticeCenterSysDetailVC.xib; sourceTree = "<group>"; }; @@ -1000,19 +978,8 @@ 137ECADB2C78578A00C338BE /* Pngs */ = { isa = PBXGroup; children = ( 1381BBA02DAF7D2B000717EB /* apngb-animated-flow.png */, 138995352C943A4300BC7F78 /* droop */, 13C9DDD02C8EE8EB0008946B /* apngb-animated-level-6.png */, 13C9DDCF2C8EE8EB0008946B /* apngb-animated-level-7.png */, 13C9DDD12C8EE8EB0008946B /* apngb-animated-level-8.png */, 13C9DDD22C8EE8EB0008946B /* apngb-animated-level-9.png */, 13C9DDD32C8EE8EB0008946B /* apngb-animated-level-10.png */, 13BF65EA2C804BE100E20F0E /* apngb-animated-flow.png */, 135C2A4F2C7EC48D00CC2A67 /* apngb-animated_sun.png */, 13B06A072C78A0D300477FA9 /* apngb-animated-level-1.png */, 13C583872C86A29A0071BCBE /* apngb-animated-level-2.png */, 13C583892C86A42B0071BCBE /* apngb-animated-level-3.png */, 13C5838B2C86A4770071BCBE /* apngb-animated-level-4.png */, 13C5838D2C86A4F90071BCBE /* apngb-animated-level-5.png */, ); path = Pngs; sourceTree = "<group>"; @@ -1481,14 +1448,12 @@ 13FF0B462C75C820008E26CF /* WalletVC.xib in Resources */, 130B765E2C6C4C33006371AF /* HomeItemListVC.xib in Resources */, 1304526C2CB4CB210049FB3A /* StoreKitTestCertificate.cer in Resources */, 13C9DDD72C8EE8EB0008946B /* apngb-animated-level-9.png in Resources */, 13F24E3D2C75866100D2BA90 /* BindPhone_3_VC.xib in Resources */, 13CBC5D92C73532B00BC66C7 /* MeVC.xib in Resources */, 13DC34F02C913E7F007E1B61 /* TreeTeskFirstRuleView.xib in Resources */, 1385E0072C6C558200AADB1F /* HomeRelaxBanner_2_CCell.xib in Resources */, 131111822C749085002877FC /* StudyListVC.xib in Resources */, 132EB01D2C6B32B200990429 /* RegisterVC.xib in Resources */, 13C9DDD42C8EE8EB0008946B /* apngb-animated-level-7.png in Resources */, 137ECAD32C783C2000C338BE /* bg.mov in Resources */, 13E5C9852D5D97E400671533 /* bg_water.mov in Resources */, 1336EFA92C6DEC6B0075E070 /* PaymentOrderResultTopView.xib in Resources */, @@ -1498,9 +1463,7 @@ 13846C792C9163BB0078B68F /* TreeTeskDetailVC.xib in Resources */, 1333DC7E2C72E7A500D8ACAE /* CourseSendGiftView.xib in Resources */, 132C40292C816003002E3270 /* SourceHanSerifCN-Medium.otf in Resources */, 13C9DDD52C8EE8EB0008946B /* apngb-animated-level-6.png in Resources */, 137ABE352C6B3F64003A91C5 /* ForgotPasswordVC.xib in Resources */, 13C5838A2C86A42B0071BCBE /* apngb-animated-level-3.png in Resources */, 13A0A8A52C746B5600DF08B6 /* CommonDatePickerView.xib in Resources */, 13A37A012C75C1DE0038D5C8 /* LevelVC.xib in Resources */, 1324A6452C805B4000AA5098 /* FlyFlowerSong.otf in Resources */, @@ -1512,7 +1475,6 @@ 138FE0DF2C757B2A00A964E8 /* BindPhone_1_VC.xib in Resources */, 138995402C943AA700BC7F78 /* static-level-3.png in Resources */, 13FB6D842C6EEFE900A0685D /* MenuListTCell.xib in Resources */, 13B06A082C78A0D300477FA9 /* apngb-animated-level-1.png in Resources */, 138F0C362C7597CA0072A16C /* HelpCenterVC.xib in Resources */, 131CE0FB2C91299400D1234A /* TreeTeskListView.xib in Resources */, 138995432C943AA700BC7F78 /* static-level-2.png in Resources */, @@ -1521,7 +1483,6 @@ 13A0EAA82D57134300ABC2F6 /* UpdateVersionView.xib in Resources */, 1377768E2C6AFD25004FF994 /* LoginVC.xib in Resources */, 134CC7E02C73283700EAEFB7 /* PavilionSearchVC.xib in Resources */, 13C5838C2C86A4770071BCBE /* apngb-animated-level-4.png in Resources */, 130913EE2C6DE67E00418201 /* HomeRelaxBanner_2_1_CCell.xib in Resources */, 13CBCCE02C74793D00C67701 /* NoticeCenterSysDetailVC.xib in Resources */, 132C7EF32C8FE3BF00A4CA18 /* ChooseOptTitleView.xib in Resources */, @@ -1531,7 +1492,6 @@ 13391E022C73334000B9513F /* PavilionDetailVC.xib in Resources */, 13EC08902C74990B00E00128 /* EmptyCCell.xib in Resources */, 1377B4172C6DCC4300CF7CA5 /* Home_Style_4_Inner_1_CCell.xib in Resources */, 13C9DDD62C8EE8EB0008946B /* apngb-animated-level-8.png in Resources */, 13FB6D8C2C6EFB5400A0685D /* CourseDetailHeaderView.xib in Resources */, 1324A64D2C80706700AA5098 /* PlanGuide_1_VC.xib in Resources */, 13985D9F2C69B2440046B6DC /* Assets.xcassets in Resources */, @@ -1549,7 +1509,6 @@ 13985DC32C69E0BF0046B6DC /* HomeTopMenuCCell.xib in Resources */, 13A6594A2C6F4F2D00F731FA /* CourseDetail_2_TCell.xib in Resources */, 139C165E2C6A0AC600A924D9 /* Home_Style_3_TCell.xib in Resources */, 135C2A502C7EC48D00CC2A67 /* apngb-animated_sun.png in Resources */, 13BF65DD2C80407600E20F0E /* PlanGuideVC.xib in Resources */, 137175C82C6C3C6D00B38EF1 /* Agenda-Light.otf in Resources */, 13CBCCE42C747C3D00C67701 /* NoticeCenterUserRepeaceDetailVC.xib in Resources */, @@ -1562,27 +1521,23 @@ 130F94672C7DAB27003A348B /* SearchHistoryCCell.xib in Resources */, 139C165A2C6A053000A924D9 /* Home_Style_2_TCell.xib in Resources */, 1306028E2C917D3E0019ECDE /* TreeTeskEnergyExchangeRecordTCell.xib in Resources */, 13C583882C86A29A0071BCBE /* apngb-animated-level-2.png in Resources */, 1300BD3B2C6DFB1C000BCA5E /* VIPCenterVC.xib in Resources */, 139466482C6B8E0200F6FB15 /* UpdatePhoneVC.xib in Resources */, 134A453A2C6E167D00538D78 /* CourseOfficalCommendTopCCell.xib in Resources */, 1304526A2CB4CA310049FB3A /* XQMuseStoreKit.storekit in Resources */, 13BA27132C81B6DD006D4CD1 /* SourceHanSerifCN-Light.otf in Resources */, 132C7EF72C8FE9BB00A4CA18 /* ChooseOptTitleTCell.xib in Resources */, 13C9DDD82C8EE8EB0008946B /* apngb-animated-level-10.png in Resources */, 13271D852C75EF8200DE1328 /* AddBankInfoVC.xib in Resources */, 1377B40D2C6D936A00CF7CA5 /* CommentUserInputContentTCell.xib in Resources */, 137175CC2C6C412A00B38EF1 /* BackgroundVoiceVC.xib in Resources */, 130602882C91790B0019ECDE /* TreeTeskExchangeSuccessView.xib in Resources */, 13ED09482C916FD30018BB10 /* TreeTeskEnergyTCell.xib in Resources */, 138995492C943AA700BC7F78 /* static-level-1.png in Resources */, 13BF65EB2C804BE100E20F0E /* apngb-animated-flow.png in Resources */, 13FAD54E2C901D6300566998 /* SearchContentVC.xib in Resources */, 137776932C6AFE69004FF994 /* SearchVC.xib in Resources */, 132DB8FF2C74826D00EF33A7 /* SettingVC.xib in Resources */, 13463E9F2CDE2D1E00DD0C53 /* VIPAgreementVC.xib in Resources */, 13985DBF2C69DDF90046B6DC /* HomeTopMenuView.xib in Resources */, 13C5838E2C86A4F90071BCBE /* apngb-animated-level-5.png in Resources */, 1385E00B2C6C57A900AADB1F /* HomeItemDetailVC.xib in Resources */, 138F9E112CF422B200075C5D /* PurchaseMethodView.xib in Resources */, 138995422C943AA700BC7F78 /* static-level-9.png in Resources */, @@ -1618,6 +1573,7 @@ 13E160202C6CB8930027F781 /* CommentListVC.xib in Resources */, 139228B12C6B8374006F3CB6 /* Popup_1_View.xib in Resources */, 137ECAD02C78268B00C338BE /* LoginTreatyVC.xib in Resources */, 1381BBA12DAF7D2B000717EB /* apngb-animated-flow.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1989,7 +1945,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 15; CURRENT_PROJECT_VERSION = 23; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = M9T3KVL537; ENABLE_USER_SCRIPT_SANDBOXING = NO; @@ -2002,10 +1958,10 @@ INFOPLIST_FILE = XQMuse/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = "泉疗愈"; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.healthcare-fitness"; INFOPLIST_KEY_NSCameraUsageDescription = "$(PRODUCT_NAME)需要使用相机来上传头像"; INFOPLIST_KEY_NSLocationAlwaysUsageDescription = "$(PRODUCT_NAME)需要使用定位来展示您附近的疗愈馆"; INFOPLIST_KEY_NSLocationWhenInUseUsageDescription = "$(PRODUCT_NAME)需要使用定位来展示您附近的疗愈馆"; INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "$(PRODUCT_NAME)需要使用相册来上传头像"; INFOPLIST_KEY_NSCameraUsageDescription = "XQMuse需要使用相机来上传头像"; INFOPLIST_KEY_NSLocationAlwaysUsageDescription = "XQMuse需要使用定位来展示您附近的疗愈馆"; INFOPLIST_KEY_NSLocationWhenInUseUsageDescription = "XQMuse需要使用定位来展示您附近的疗愈馆"; INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "XQMuse需要使用相册来上传头像"; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; @@ -2015,7 +1971,7 @@ "$(inherited)", "@executable_path/Frameworks", ); MARKETING_VERSION = 1.0.4; MARKETING_VERSION = 1.0.10; OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", @@ -2147,7 +2103,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 15; CURRENT_PROJECT_VERSION = 23; DEVELOPMENT_TEAM = ""; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = M9T3KVL537; ENABLE_USER_SCRIPT_SANDBOXING = NO; @@ -2160,10 +2116,10 @@ INFOPLIST_FILE = XQMuse/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = "泉疗愈"; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.healthcare-fitness"; INFOPLIST_KEY_NSCameraUsageDescription = "$(PRODUCT_NAME)需要使用相机来上传头像"; INFOPLIST_KEY_NSLocationAlwaysUsageDescription = "$(PRODUCT_NAME)需要使用定位来展示您附近的疗愈馆"; INFOPLIST_KEY_NSLocationWhenInUseUsageDescription = "$(PRODUCT_NAME)需要使用定位来展示您附近的疗愈馆"; INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "$(PRODUCT_NAME)需要使用相册来上传头像"; INFOPLIST_KEY_NSCameraUsageDescription = "XQMuse需要使用相机来上传头像"; INFOPLIST_KEY_NSLocationAlwaysUsageDescription = "XQMuse需要使用定位来展示您附近的疗愈馆"; INFOPLIST_KEY_NSLocationWhenInUseUsageDescription = "XQMuse需要使用定位来展示您附近的疗愈馆"; INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "XQMuse需要使用相册来上传头像"; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; @@ -2173,7 +2129,7 @@ "$(inherited)", "@executable_path/Frameworks", ); MARKETING_VERSION = 1.0.4; MARKETING_VERSION = 1.0.10; OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", XQMuse/Config/Enums/Enums.swift
@@ -55,6 +55,12 @@ case level_9 = 9 case level_10 = 10 static var sunAni:String{ get{ return "https://xqgwzh.obs.cn-south-1.myhuaweicloud.com/1744626206206sunshine.png" } } var aniResource:String{ switch self { case .level_1:return "apngb-animated-level-1" @@ -70,6 +76,22 @@ } } var aniResourceUrl:String{ switch self { case .level_1:return "https://xqgwzh.obs.cn-south-1.myhuaweicloud.com/1744625964828apngb_level_1.png" case .level_2:return "https://xqgwzh.obs.cn-south-1.myhuaweicloud.com/1744625964828apngb_level_2.png" case .level_3:return "https://xqgwzh.obs.cn-south-1.myhuaweicloud.com/1744625964828apngb_level_3.png" case .level_4:return "https://xqgwzh.obs.cn-south-1.myhuaweicloud.com/1744625964828apngb_level_4.png" case .level_5:return "https://xqgwzh.obs.cn-south-1.myhuaweicloud.com/1744625964828apngb_level_5.png" case .level_6:return "https://xqgwzh.obs.cn-south-1.myhuaweicloud.com/1744625964828apngb_level_6.png" case .level_7:return "https://xqgwzh.obs.cn-south-1.myhuaweicloud.com/1744625964828apngb_level_7.png" case .level_8:return "https://xqgwzh.obs.cn-south-1.myhuaweicloud.com/1744625964828apngb_level_8.png" case .level_9:return "https://xqgwzh.obs.cn-south-1.myhuaweicloud.com/1744625964828apngb_level_9.png" case .level_10:return "https://xqgwzh.obs.cn-south-1.myhuaweicloud.com/1744625964828apngb_level_10.png" } } var staticDroopResource:String{ switch self { case .level_1:return "static-level-1" XQMuse/Config/StoreKit/XQMuseStoreKit.storekit
@@ -32,13 +32,13 @@ "internalID" : "DDDE321B", "localizations" : [ { "description" : "购买6个月会员", "displayName" : "半年会员", "description" : "购买3个月会员", "displayName" : "季度会员", "locale" : "zh_CN" } ], "productID" : "com.XQMuse.VIP.semester.0", "referenceName" : "购买半年会员", "referenceName" : "购买季度会员", "type" : "NonRenewingSubscription" }, { @@ -200,9 +200,9 @@ { "displayPrice" : "200", "eligibility" : [ "new", "existing", "expired", "new" "expired" ], "internalID" : "F62AF748", "isStackable" : true, XQMuse/Info.plist
@@ -23,6 +23,8 @@ </array> </dict> </array> <key>ITSAppUsesNonExemptEncryption</key> <false/> <key>LSApplicationQueriesSchemes</key> <array> <string>weixin</string> XQMuse/Root/CLPlayer/CLPlayerView.swift
@@ -8,6 +8,7 @@ import AVFoundation import SnapKit import UIKit import JQTools extension CLPlayerView { enum CLWaitReadyToPlayState { @@ -235,15 +236,17 @@ if config.rotateStyle == .small, isFullScreen { return } if config.rotateStyle == .fullScreen, !isFullScreen { return } switch UIDevice.current.orientation { case .portrait: dismiss() case .landscapeLeft: presentWithOrientation(.left) case .landscapeRight: presentWithOrientation(.right) default: break if let vc = JQ_currentViewController() as? CourseVC,vc.pageViewController.currentPage == 1{ switch UIDevice.current.orientation { case .portrait: dismiss() case .landscapeLeft: presentWithOrientation(.left) case .landscapeRight: presentWithOrientation(.right) default: break } } } XQMuse/Root/Course/VC/CourseVCOfficalCommentVC.swift
@@ -28,6 +28,16 @@ private var bannerModels = [CommonBannerModel]() private var viewModel = CourseVCOfficalViewModel() override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) Services.getCourseBannerList().subscribe(onNext: {data in for (index,v) in (data.data ?? []).enumerated(){ self.bannerModels.append(CommonBannerModel(index: index, id: v.id, name: v.name, resource:v.imageUrl.jq_urlEncoded(), mediaType: .imageUrl,courseId: v.courseId)) } self.collectionView.reloadData() }).disposed(by: disposeBag) } override func viewDidLoad() { super.viewDidLoad() @@ -41,12 +51,7 @@ self.collectionView.reloadData() }).disposed(by: disposeBag) Services.getCourseBannerList().subscribe(onNext: {data in for (index,v) in (data.data ?? []).enumerated(){ self.bannerModels.append(CommonBannerModel(index: index, id: v.id, name: v.name, resource:v.imageUrl.jq_urlEncoded(), mediaType: .imageUrl,courseId: v.courseId)) } self.collectionView.reloadData() }).disposed(by: disposeBag) viewModel.configure(collectionView) viewModel.beginRefresh() XQMuse/Root/Course/VC/CourseVCTeacherSpecialVC.swift
@@ -32,15 +32,13 @@ cell0!.backgroundColor = UIColor(hexString: "#f6f6f6") cell1!.backgroundColor = UIColor(hexString: "#f6f6f6") Services.tutorInfo().subscribe(onNext: { data in if let m = data.data{ self.model = m self.cell0!.setContent(title: "导师简介", content: m.tutorIntroduction) self.cell1!.setItems(m.list) self.tableView?.reloadData() self.headerView.updateVideoUrl(m.videoUrl,autoPlay: false,placeHoderImageUrl: m.coverUrl.jq_urlEncoded(),delegate: self) } }).disposed(by: disposeBag) getData() // LoginSuccess_Noti NotificationCenter.default.rx.notification(LoginSuccess_Noti).take(until: self.rx.deallocated).subscribe {[unowned self] _ in self.getData() }.disposed(by: disposeBag) self.cell0?.webView.scrollView.rx.observe(CGSize.self, "contentSize").map { (size) -> CGFloat? in @@ -53,6 +51,23 @@ if height > self.cell0?.cons_webHei.constant ?? 0{ self.cell0?.cons_webHei.constant = height self.tableView?.reloadData() } } }).disposed(by: disposeBag) } private func getData(){ Services.tutorInfo().subscribe(onNext: {[weak self] data in guard let weakSelf = self else { return } if let m = data.data{ weakSelf.model = m weakSelf.cell0!.setContent(title: "导师简介", content: m.tutorIntroduction) weakSelf.cell1!.setItems(m.list) weakSelf.tableView?.reloadData() if let videoUrl = weakSelf.model?.videoUrl.jq_urlEncoded(),videoUrl.jq_isVideo{ weakSelf.checkCacheAudio(from: URL(string:videoUrl)!) { state, url in weakSelf.headerView.updateVideoUrl(videoUrl,autoPlay: false,placeHoderImageUrl: m.coverUrl.jq_urlEncoded(),delegate: self) } } } }).disposed(by: disposeBag) @@ -93,6 +108,45 @@ override var shouldAutorotate: Bool{ return true } internal func checkCacheAudio(from url: URL, completion: @escaping (Bool,URL) -> Void) { let cacheDirectory = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask).first!.appendingPathComponent("Masters") let videoCacheUrl = cacheDirectory.appendingPathComponent(url.lastPathComponent.jq_md5String() + "." + url.pathExtension) // 检查缓存中是否已存在文件 if FileManager.default.fileExists(atPath: videoCacheUrl.path) { print("启用缓存") completion(true,videoCacheUrl) return }else{ completion(false,url) print("没有缓存:执行下载") } // 使用URLSession下载视频 let downloadTask = URLSession.shared.downloadTask(with: url) { tempLocalUrl, response, error in print("执行下载任务") if let tempLocalUrl = tempLocalUrl, error == nil { do { let temp = videoCacheUrl if !(FileManager.default.fileExists(atPath: cacheDirectory.path)){ try FileManager.default.createDirectory(at: cacheDirectory, withIntermediateDirectories: true) } try FileManager.default.moveItem(at: tempLocalUrl, to: temp) } catch let e { print("视频缓存失败:catch:\(e)") } } else { print("视频缓存失败:\(error?.localizedDescription ?? "")") } } downloadTask.resume() } } extension CourseVCTeacherSpecialVC:UITableViewDataSource{ func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { XQMuse/Root/Course/View/CourseDetailHeaderView.swift
@@ -16,7 +16,7 @@ @IBOutlet weak var image_cover: UIImageView! @IBOutlet weak var icon: UIImageView! private var videoView:VideoView? private(set) var videoView:VideoView? override func awakeFromNib() { XQMuse/Root/Home/HomeVC.swift
@@ -54,6 +54,7 @@ viewModel?.userFirstOpenTreeTask = true UserDefaultSettingViewModel.saveSetting(viewModel!) self?.navigationController?.tabBarController?.selectedIndex = 2 self?.toPlanGuide() } }).disposed(by: disposeBag) @@ -71,7 +72,6 @@ if AudioPlayer.getSharedInstance().bgmPlayer != nil && PayMusicVC.getCurrentStatus() != .pause{ AudioPlayer.getSharedInstance().bgmPlayer?.play() // AudioPlayer.getSharedInstance().masterPlayer?.play() return } @@ -113,30 +113,7 @@ switch state{ case .notRestricted: if UserDefaultSettingViewModel.getSetting()?.userFirstLaunch ?? true{ DispatchQueue.main.async {[weak self] in guard let weakSelf = self else { return } let vc = LoginTreatyVC() vc.topIndex = 0 vc.clickHandle { state in if !state{ exit(0) }else{ if var m = UserDefaultSettingViewModel.getSetting(){ m.userFirstLaunch = false UserDefaultSettingViewModel.saveSetting(m) } //跳转计划引导 let nav = BaseNav(rootViewController: PlanGuideVC(isFromFist: true)) nav.modalPresentationStyle = .fullScreen weakSelf.present(nav, animated: true) } } vc.modalPresentationStyle = .custom weakSelf.present(vc, animated: true) } } self?.toPlanGuide() DispatchQueue.main.async { self?.getBGMData() self?.tableView.mj_header?.beginRefreshing() @@ -389,6 +366,32 @@ } } private func toPlanGuide(){ if UserDefaultSettingViewModel.getSetting()?.userFirstLaunch ?? true{ DispatchQueue.main.async {[weak self] in guard let weakSelf = self else { return } let vc = LoginTreatyVC() vc.topIndex = 0 vc.clickHandle { state in if !state{ exit(0) }else{ if var m = UserDefaultSettingViewModel.getSetting(){ m.userFirstLaunch = false UserDefaultSettingViewModel.saveSetting(m) } //跳转计划引导 let nav = BaseNav(rootViewController: PlanGuideVC(isFromFist: true)) nav.modalPresentationStyle = .fullScreen weakSelf.present(nav, animated: true) } } vc.modalPresentationStyle = .custom weakSelf.present(vc, animated: true) } } } private func updateBGMData(userDefaultSettingModel:UserDefaultSettingModel){ if AudioPlayer.getSharedInstance().bgmPlayer != nil && PayMusicVC.getCurrentStatus() != .pause{ AudioPlayer.getSharedInstance().bgmPlayer?.play() @@ -416,10 +419,6 @@ }else{ self.titleItems[0] = TitleItem(title: "每日疗愈", subTitle: "Daily Meditation") } // self.tableView.reloadRows(at: [IndexPath(row: 0, section: 0)], with: .none) // self.tableView.reloadRows(at: [IndexPath(row: 1, section: 0)], with: .none) self.tableView.reloadData() }).disposed(by: disposeBag) } XQMuse/Root/Home/VC/BackgroundVoiceVC.swift
@@ -107,9 +107,6 @@ v1.jq_borderColor = .white v1.jq_cornerRadius = 8.5 // slider_voice.setThumbImage(v1.qmui_snapshotLayerImage(), for: .normal) // slider_voice.setThumbImage(v1.qmui_snapshotLayerImage(), for: .highlighted) collectionView.collectionViewLayout = TestLeftRightCollectionViewFlowLayout(width: JQ_ScreenW, height: 213.5) collectionView.delegate = self collectionView.dataSource = self @@ -182,11 +179,11 @@ collectionView.scrollToItem(at: indexPath, at: .centeredHorizontally, animated: true) guard let URL = URL(string: model.audioFile.jq_urlEncoded()) else { return } tempPlayer = AVPlayer(url: URL) // tempPlayer?.volume = slider_voice.value tempPlayer!.play() isPlaying = true checkCacheAudio(from: URL) {[unowned self] state, url in self.tempPlayer = AVPlayer(url: url) self.tempPlayer!.play() self.isPlaying = true } collectionView.reloadData() } @@ -210,6 +207,45 @@ } return cell } internal func checkCacheAudio(from url: URL, completion: @escaping (Bool,URL) -> Void) { let cacheDirectory = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask).first!.appendingPathComponent("BGMs") let videoCacheUrl = cacheDirectory.appendingPathComponent(url.lastPathComponent.jq_md5String() + "." + url.pathExtension) // 检查缓存中是否已存在文件 if FileManager.default.fileExists(atPath: videoCacheUrl.path) { print("启用缓存") completion(true,videoCacheUrl) return }else{ completion(false,url) print("没有缓存:执行下载") } // 使用URLSession下载视频 let downloadTask = URLSession.shared.downloadTask(with: url) { tempLocalUrl, response, error in print("执行下载任务") if let tempLocalUrl = tempLocalUrl, error == nil { do { let temp = videoCacheUrl if !(FileManager.default.fileExists(atPath: cacheDirectory.path)){ try FileManager.default.createDirectory(at: cacheDirectory, withIntermediateDirectories: true) } try FileManager.default.moveItem(at: tempLocalUrl, to: temp) } catch let e { print("视频缓存失败:catch:\(e)") } } else { print("视频缓存失败:\(error?.localizedDescription ?? "")") } } downloadTask.resume() } } extension BackgroundVoiceVC:UICollectionViewDelegateFlowLayout{ XQMuse/Root/Home/View/HomeTopMenuView.swift
@@ -31,7 +31,7 @@ private var disposeBag = DisposeBag() private var defaultItems = [HomeTopMenuItem]() private var clouse:((HomeTopMenuItem)->Void)? private let session = URLSession.shared private var aVPlayerLayer:AVPlayerLayer? override func awakeFromNib() { @@ -82,7 +82,9 @@ } if let videoUrl = model.backUrl,videoUrl.isEmpty == false{ setPlayer(url: URL(string: videoUrl)!) checkCacheAudio(from: URL(string: videoUrl)!) {[unowned self] state, url in self.setPlayer(url: url) } return } @@ -109,6 +111,49 @@ } } // 下载视频并缓存,如果没有缓存,原路返回并异步下载 internal func checkCacheAudio(from url: URL, completion: @escaping (Bool,URL) -> Void) { let cacheDirectory = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask).first!.appendingPathComponent("bgVideos") let videoCacheUrl = cacheDirectory.appendingPathComponent(url.lastPathComponent.jq_md5String() + "." + url.pathExtension) // 检查缓存中是否已存在文件 if FileManager.default.fileExists(atPath: videoCacheUrl.path) { print("启用缓存") completion(true,videoCacheUrl) return }else{ completion(false,url) print("没有缓存:执行下载") } // 使用URLSession下载视频 let downloadTask = session.downloadTask(with: url) { tempLocalUrl, response, error in print("执行下载任务") if let tempLocalUrl = tempLocalUrl, error == nil { do { let temp = videoCacheUrl if !(FileManager.default.fileExists(atPath: cacheDirectory.path)){ try FileManager.default.createDirectory(at: cacheDirectory, withIntermediateDirectories: true) } try FileManager.default.moveItem(at: tempLocalUrl, to: temp) } catch let e { print("视频缓存失败:catch:\(e)") } } else { print("视频缓存失败:\(error?.localizedDescription ?? "")") } } downloadTask.resume() } func resetItems(_ items:[HomeTopMenuItem]){ defaultItems.removeAll() defaultItems = items XQMuse/Root/Me/MeVC.swift
@@ -68,6 +68,9 @@ let loginNav = LoginNav(rootViewController: LoginVC()) loginNav.modalPresentationStyle = .fullScreen JQ_currentViewController().present(loginNav, animated: true) }else{ getData() queryNotice() } //通讯录通讯录通讯录 @@ -113,9 +116,6 @@ } needLaunch = false getData() queryNotice() } override func setUI() { @@ -182,7 +182,6 @@ if let model = data.data{ UserViewModel.saveAvatarInfo(model) self?.setUserUI(model: model) } }) {[weak self] error in let model = UserViewModel.getAvatarInfo() XQMuse/Root/Me/VC/LogoutAccountVC.swift
@@ -42,6 +42,7 @@ Services.deleteUser().subscribe(onNext: {data in CommonAlertView.show(title: "提示", content: "注销成功", cancelStr: nil, completeStr: "确定", isSingle: true) { state in if state{ UserDefaultSettingViewModel.clearSetting() sceneDelegate?.needLogin() self.navigationController?.popToRootViewController(animated: false) DispatchQueue.main.asyncAfter(delay: 0.5) { XQMuse/Root/Me/VC/VIPCenterVC.swift
@@ -93,6 +93,22 @@ self.webView.loadHTMLString(string.jq_wrapHtml(), baseURL: nil) } }).disposed(by: disposeBag) Services.getUserDetail(showProgress: false).subscribe(onNext: {[weak self]data in if let model = data.data{ if model.isVip == .yes{ self?.bg_vip.image = UIImage(named: "bg_vip") self?.label_vipHint.text = "您将享受所有会员专享音频,尽情畅游泉疗愈世界" self?.label_expirtTime.text = model.vipExpireTime.components(separatedBy: " ").first! + "到期" }else{ self?.bg_vip.image = UIImage(named: "bg_vip_u") self?.label_vipHint.text = "升级为会员,解锁会员专属体验" self?.label_expirtTime.text = "你还未开通会员服务" } } }) { _ in }.disposed(by: disposeBag) } override func setRx() { @@ -358,7 +374,7 @@ priorDayPrice = product.price.doubleValue / 365.0 // case "com.XQmuse.Non.renewing.half.year.1": case "com.XQmuse.non.renewable.sub.quarter.1": priorDayPrice = product.price.doubleValue / 180.0 priorDayPrice = product.price.doubleValue / 90.0 // case "com.XQmuse.Non.renewing.month.1": case "com.XQmuse.non.renewable.sub.month.1": priorDayPrice = product.price.doubleValue / 30.0 @@ -395,14 +411,14 @@ lable_priorDay.text = String(format: "¥%.2lf/天", vipContentModel.monthlyVipIos / 30.0) case 1: // price = vipContentModel.quarterlyVipIos label_title.text = "半年会员" label_title.text = "季度会员" formartPrice = vipContentModel.quarterlyVipIos.jq_formatFloat lable_priorDay.text = String(format: "¥%.2lf/天", vipContentModel.quarterlyVipIos / 30.0) lable_priorDay.text = String(format: "¥%.2lf/天", vipContentModel.quarterlyVipIos / 90) case 2: // price = vipContentModel.annualVipIos label_title.text = "年度会员" formartPrice = vipContentModel.annualVipIos.jq_formatFloat lable_priorDay.text = String(format: "¥%.2lf/天", vipContentModel.annualVipIos / 30.0) lable_priorDay.text = String(format: "¥%.2lf/天", vipContentModel.annualVipIos / 365) default:break } XQMuse/Root/Network/NetworkRequest.swift
@@ -239,13 +239,15 @@ if let next = BaseResponse<T>.deserialize(from: jsonString){ switch next.code{ case 200:ob.onNext(next) case 401:ob.onError(NetRequestError.InvaildSession) case 401: ob.onError(NetRequestError.InvaildSession) sceneDelegate?.needLogin() case 501: sceneDelegate?.needLogin() ob.onError(NetRequestError.InvaildSession) default: if !ignoreAlert{ alertError(msg: "网络连接超时") alertError(msg: "\(next.msg)") } ob.onError(NetRequestError.Other(next.code,next.msg)) } XQMuse/Root/PayMusicView/PayMusicVC.swift
@@ -507,27 +507,27 @@ /// 播放场景音乐 func playSceneAt(_ url:String){ guard let URL = URL(string: url.jq_urlEncoded()) else { return } scenePlayer?.pause() checkCacheAudio(from: URL(string: url.jq_urlEncoded())!) {[weak self] state, url in guard let weakSelf = self else { return } weakSelf.scenePlayer?.pause() if scenePlayer == nil{ scenePlayer = AVPlayer(url: URL) }else{ scenePlayer?.replaceCurrentItem(with: AVPlayerItem(url: URL)) } if weakSelf.scenePlayer == nil{ weakSelf.scenePlayer = AVPlayer(url: url) }else{ weakSelf.scenePlayer?.replaceCurrentItem(with: AVPlayerItem(url: url)) } do { try AVAudioSession.sharedInstance().setActive(false) try AVAudioSession.sharedInstance().setCategory(.ambient, mode: .default, options: []) } catch { print(error) do { try AVAudioSession.sharedInstance().setActive(false) try AVAudioSession.sharedInstance().setCategory(.ambient, mode: .default, options: []) } catch { print(error) } DispatchQueue.main.asyncAfter(delay: 0.5) { weakSelf.scenePlayer?.play() } } DispatchQueue.main.asyncAfter(delay: 0.5) { self.scenePlayer?.play() // self.scenePlayer?.allowsExternalPlayback = false // self.scenePlayer?.usesExternalPlaybackWhileExternalScreenIsActive = false } } func dellocScene(){ @@ -651,14 +651,18 @@ // 检查缓存中是否已存在文件 if FileManager.default.fileExists(atPath: videoCacheUrl.path) { print("启用缓存") completion(true,videoCacheUrl) return }else{ completion(false,url) print("没有缓存:执行下载") } // 使用URLSession下载视频 let downloadTask = session.downloadTask(with: url) { tempLocalUrl, response, error in let downloadTask = session.downloadTask(with: url) { tempLocalUrl, response, error in print("执行下载任务") if let tempLocalUrl = tempLocalUrl, error == nil { do { let temp = videoCacheUrl XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-1.pngBinary files differ
XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-10.pngBinary files differ
XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-2.pngBinary files differ
XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-3.pngBinary files differ
XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-4.pngBinary files differ
XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-5.pngBinary files differ
XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-6.pngBinary files differ
XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-7.pngBinary files differ
XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-8.pngBinary files differ
XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-9.pngBinary files differ
XQMuse/Root/TreeGroup/Pngs/apngb-animated_sun.pngBinary files differ
XQMuse/Root/TreeGroup/TreeTeskVC.swift
@@ -9,6 +9,7 @@ import AVKit import JQTools import APNGKit import SDWebImage import UserDefaultsStore let TreeTaskUpdate_Noti = Notification.Name.init(rawValue: "TreeTaskUpdate_Noti") @@ -146,17 +147,21 @@ view_group_inner.jq_addCorners(corner: [.topLeft,.bottomRight], radius: 8) let path = JQ_LibaryPath + "/tree_img/" SDImageCacheHealper.cache(namespace:"treeCache", path: path, url: TreeLevel.sunAni) { [unowned self] data in guard let originData = data else {return} if let sunApngImage = try? APNGImage(data: originData){ sunApngImage.numberOfPlays = 2 aPNGSunImageView = APNGImageView(image: sunApngImage) view.addSubview(aPNGSunImageView!) aPNGSunImageView?.layer.zPosition = -998 aPNGSunImageView!.snp.makeConstraints { make in make.edges.equalToSuperview() } aPNGSunImageView!.startAnimating() } } if let sunApngImage = try? APNGImage(fileURL: Bundle.main.url(forResource: "apngb-animated_sun", withExtension: "png")!){ sunApngImage.numberOfPlays = 2 aPNGSunImageView = APNGImageView(image: sunApngImage) view.addSubview(aPNGSunImageView!) aPNGSunImageView?.layer.zPosition = -998 aPNGSunImageView!.snp.makeConstraints { make in make.edges.equalToSuperview() } aPNGSunImageView!.startAnimating() } updateAni() view.addSubview(taskListView) @@ -417,63 +422,65 @@ private func updateAni(_ needAni:Bool = true){ guard let treeLevel = currentLevel else {return} guard let animateUrl = Bundle.main.url(forResource: treeLevel.aniResource, withExtension: "png") else {return} guard let staticDroopUrl = Bundle.main.url(forResource: treeLevel.staticDroopResource, withExtension: "png") else {return} if let treeApngImage = try? APNGImage(fileURL: animateUrl){ let path = JQ_LibaryPath + "/tree_img/" SDImageCacheHealper.cache(namespace:"treeCache", path: path, url: treeLevel.aniResourceUrl) { [unowned self] data in guard let dataOrigin = data else {return} if let treeApngImage = try? APNGImage(data: dataOrigin){ if treeLevel == .level_1{ treeApngImage.numberOfPlays = 1 }else{ treeApngImage.numberOfPlays = 0 } if treeLevel == .level_1{ treeApngImage.numberOfPlays = 1 }else{ treeApngImage.numberOfPlays = 0 } if aPNGTreeImageView == nil{ aPNGTreeImageView = APNGImageView(image: treeApngImage) aPNGTreeImageView?.tag = 10101 aPNGTreeImageView!.contentMode = .redraw let tap = UITapGestureRecognizer(target: self, action: #selector(jumpAction)) aPNGTreeImageView!.addGestureRecognizer(tap) } if self.aPNGTreeImageView == nil{ self.aPNGTreeImageView = APNGImageView(image: treeApngImage) self.aPNGTreeImageView?.tag = 10101 self.aPNGTreeImageView!.contentMode = .redraw let tap = UITapGestureRecognizer(target: self, action: #selector(jumpAction)) self.aPNGTreeImageView!.addGestureRecognizer(tap) } if view.viewWithTag(10101) == nil{ view.addSubview(aPNGTreeImageView!) } if view.viewWithTag(10101) == nil{ view.addSubview(self.aPNGTreeImageView!) } let scale:Double = 0.55 //放大倍数 let scale:Double = 0.55 //放大倍数 aPNGTreeImageView!.snp.remakeConstraints { make in make.centerX.equalToSuperview().offset(-10) make.bottom.equalToSuperview().offset(-220) make.width.equalTo(642 * scale) make.height.equalTo(731 * scale) } self.aPNGTreeImageView!.snp.remakeConstraints { make in make.centerX.equalToSuperview().offset(-10) make.bottom.equalToSuperview().offset(-220) make.width.equalTo(642 * scale) make.height.equalTo(731 * scale) } let duration = needAni ? 0.6:0 UIView.animate(withDuration: duration) { self.aPNGTreeImageView?.alpha = 0 let duration = needAni ? 0.6:0 UIView.animate(withDuration: duration) { self.aPNGTreeImageView?.alpha = 0 }completion: { state in if state{ self.aPNGTreeImageView!.image = treeApngImage UIView.animate(withDuration: 0.5, delay: 0.2) { self.aPNGTreeImageView?.alpha = 1 }completion: { _ in self.aPNGTreeImageView!.startAnimating() }completion: { state in if state{ self.aPNGTreeImageView!.image = treeApngImage UIView.animate(withDuration: 0.5, delay: 0.2) { self.aPNGTreeImageView?.alpha = 1 }completion: { _ in self.aPNGTreeImageView!.startAnimating() if self.treeInfoModel?.status == .yes{ self.aPNGTreeImageView?.stopAnimating() self.aPNGTreeImageView?.image = nil self.aPNGTreeImageView?.staticImage = UIImage(contentsOfFile: staticDroopUrl.droppedScheme()!.absoluteString) }else{ self.aPNGTreeImageView?.staticImage = nil self.aPNGTreeImageView?.image = treeApngImage if self.treeInfoModel?.status == .yes{ self.aPNGTreeImageView?.stopAnimating() self.aPNGTreeImageView?.image = nil self.aPNGTreeImageView?.staticImage = UIImage(contentsOfFile: staticDroopUrl.droppedScheme()!.absoluteString) }else{ self.aPNGTreeImageView?.staticImage = nil self.aPNGTreeImageView?.image = treeApngImage } } } } } } } } } } } } @@ -490,3 +497,32 @@ // } } } class SDImageCacheHealper{ static func cache(namespace:String,path:String,url:String,clouse:@escaping (Data?)->Void){ let image = SDImageCache(namespace: namespace.jq_md5String(), diskCacheDirectory: path) let loader = SDImageLoadersManager.shared let manager = SDWebImageManager(cache: image, loader: loader) //过滤链接,去除参数,保证缓存的KEY被MD5后不变 manager.cacheKeyFilter = SDWebImageCacheKeyFilter(block: { url in let img = url.absoluteString.components(separatedBy: "?").first return img }) if let localImgData = image.diskImageData(forKey: url){ clouse(localImgData) }else{ let originUrl = URL(string: url) manager.loadImage(with: originUrl, progress: nil) { imageData, data,error, cacheType, finished, imageUrl in if error != nil{ clouse(nil) } if data != nil{ clouse(data) } } } } } XQMuse/SceneDelegate.swift
@@ -63,6 +63,10 @@ } func needLogin(){ if JQ_currentNavigationController() is LoginNav{ return } UserViewModel.clearToken() UserViewModel.clearLoginInfo() UserViewModel.clearAvatarInfo()