From 09a372bc45fde16fd42257ab6f78b8deeecf720b Mon Sep 17 00:00:00 2001
From: 杨锴 <841720330@qq.com>
Date: 星期三, 16 四月 2025 16:38:05 +0800
Subject: [PATCH] fix bug

---
 XQMuse/Root/CLPlayer/CLPlayerView.swift              |   21 +
 XQMuse/Config/StoreKit/XQMuseStoreKit.storekit       |   10 
 XQMuse/Root/Network/NetworkRequest.swift             |    6 
 XQMuse/Root/TreeGroup/TreeTeskVC.swift               |  148 ++++++++-----
 Pods/Pods.xcodeproj/project.pbxproj                  |   32 +-
 XQMuse/Root/Course/VC/CourseVCTeacherSpecialVC.swift |   72 +++++
 XQMuse/SceneDelegate.swift                           |    4 
 XQMuse/Root/PayMusicView/PayMusicVC.swift            |   42 ++-
 /dev/null                                            |    0 
 XQMuse/Root/Home/HomeVC.swift                        |   57 ++--
 XQMuse/Root/Me/MeVC.swift                            |    7 
 XQMuse/Config/Enums/Enums.swift                      |   22 ++
 XQMuse/Root/Home/View/HomeTopMenuView.swift          |   49 ++++
 XQMuse/Root/Me/VC/LogoutAccountVC.swift              |    1 
 XQMuse/Root/Course/VC/CourseVCOfficalCommentVC.swift |   17 +
 XQMuse.xcodeproj/project.pbxproj                     |   76 +-----
 XQMuse/Root/Home/VC/BackgroundVoiceVC.swift          |   52 ++++
 XQMuse/Root/Me/VC/VIPCenterVC.swift                  |   24 +
 XQMuse/Root/Course/View/CourseDetailHeaderView.swift |    2 
 XQMuse/Info.plist                                    |    2 
 20 files changed, 414 insertions(+), 230 deletions(-)

diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj
index 2d3a6b5..d99727d 100644
--- a/Pods/Pods.xcodeproj/project.pbxproj
+++ b/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",
diff --git a/XQMuse.xcodeproj/project.pbxproj b/XQMuse.xcodeproj/project.pbxproj
index a5bb53b..a6495d2 100644
--- a/XQMuse.xcodeproj/project.pbxproj
+++ b/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",
diff --git a/XQMuse/Config/Enums/Enums.swift b/XQMuse/Config/Enums/Enums.swift
index 68597b9..a31b06e 100644
--- a/XQMuse/Config/Enums/Enums.swift
+++ b/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"
diff --git a/XQMuse/Config/StoreKit/XQMuseStoreKit.storekit b/XQMuse/Config/StoreKit/XQMuseStoreKit.storekit
index 1fc0aa3..53ee723 100644
--- a/XQMuse/Config/StoreKit/XQMuseStoreKit.storekit
+++ b/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,
diff --git a/XQMuse/Info.plist b/XQMuse/Info.plist
index b3b64e3..0d38288 100644
--- a/XQMuse/Info.plist
+++ b/XQMuse/Info.plist
@@ -23,6 +23,8 @@
 			</array>
 		</dict>
 	</array>
+	<key>ITSAppUsesNonExemptEncryption</key>
+	<false/>
 	<key>LSApplicationQueriesSchemes</key>
 	<array>
 		<string>weixin</string>
diff --git a/XQMuse/Root/CLPlayer/CLPlayerView.swift b/XQMuse/Root/CLPlayer/CLPlayerView.swift
index 39797f5..827076e 100644
--- a/XQMuse/Root/CLPlayer/CLPlayerView.swift
+++ b/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
+            }
         }
     }
 
diff --git a/XQMuse/Root/Course/VC/CourseVCOfficalCommentVC.swift b/XQMuse/Root/Course/VC/CourseVCOfficalCommentVC.swift
index 6b4a7e6..f8cd103 100644
--- a/XQMuse/Root/Course/VC/CourseVCOfficalCommentVC.swift
+++ b/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()
diff --git a/XQMuse/Root/Course/VC/CourseVCTeacherSpecialVC.swift b/XQMuse/Root/Course/VC/CourseVCTeacherSpecialVC.swift
index f5faa14..df8b29c 100644
--- a/XQMuse/Root/Course/VC/CourseVCTeacherSpecialVC.swift
+++ b/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 {
diff --git a/XQMuse/Root/Course/View/CourseDetailHeaderView.swift b/XQMuse/Root/Course/View/CourseDetailHeaderView.swift
index 36f4835..4cb8808 100644
--- a/XQMuse/Root/Course/View/CourseDetailHeaderView.swift
+++ b/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() {
diff --git a/XQMuse/Root/Home/HomeVC.swift b/XQMuse/Root/Home/HomeVC.swift
index c9d1add..afabaac 100644
--- a/XQMuse/Root/Home/HomeVC.swift
+++ b/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)
         }
diff --git a/XQMuse/Root/Home/VC/BackgroundVoiceVC.swift b/XQMuse/Root/Home/VC/BackgroundVoiceVC.swift
index 7188235..3714435 100644
--- a/XQMuse/Root/Home/VC/BackgroundVoiceVC.swift
+++ b/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{
diff --git a/XQMuse/Root/Home/View/HomeTopMenuView.swift b/XQMuse/Root/Home/View/HomeTopMenuView.swift
index d813fe2..96250c9 100644
--- a/XQMuse/Root/Home/View/HomeTopMenuView.swift
+++ b/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
diff --git a/XQMuse/Root/Me/MeVC.swift b/XQMuse/Root/Me/MeVC.swift
index 229b346..56c9053 100644
--- a/XQMuse/Root/Me/MeVC.swift
+++ b/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()
diff --git a/XQMuse/Root/Me/VC/LogoutAccountVC.swift b/XQMuse/Root/Me/VC/LogoutAccountVC.swift
index 5193d74..454f68a 100644
--- a/XQMuse/Root/Me/VC/LogoutAccountVC.swift
+++ b/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) {
diff --git a/XQMuse/Root/Me/VC/VIPCenterVC.swift b/XQMuse/Root/Me/VC/VIPCenterVC.swift
index 12d3190..1b0410f 100644
--- a/XQMuse/Root/Me/VC/VIPCenterVC.swift
+++ b/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
         }
 
diff --git a/XQMuse/Root/Network/NetworkRequest.swift b/XQMuse/Root/Network/NetworkRequest.swift
index 700804c..a8007fb 100644
--- a/XQMuse/Root/Network/NetworkRequest.swift
+++ b/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))
 																								}
diff --git a/XQMuse/Root/PayMusicView/PayMusicVC.swift b/XQMuse/Root/PayMusicView/PayMusicVC.swift
index da1beae..abcf9b3 100644
--- a/XQMuse/Root/PayMusicView/PayMusicVC.swift
+++ b/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
diff --git a/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-1.png b/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-1.png
deleted file mode 100644
index 58f4538..0000000
--- a/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-1.png
+++ /dev/null
Binary files differ
diff --git a/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-10.png b/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-10.png
deleted file mode 100644
index 11fc3df..0000000
--- a/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-10.png
+++ /dev/null
Binary files differ
diff --git a/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-2.png b/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-2.png
deleted file mode 100644
index 1b228ff..0000000
--- a/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-2.png
+++ /dev/null
Binary files differ
diff --git a/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-3.png b/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-3.png
deleted file mode 100644
index 212d4cd..0000000
--- a/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-3.png
+++ /dev/null
Binary files differ
diff --git a/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-4.png b/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-4.png
deleted file mode 100644
index d83606d..0000000
--- a/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-4.png
+++ /dev/null
Binary files differ
diff --git a/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-5.png b/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-5.png
deleted file mode 100644
index 8595004..0000000
--- a/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-5.png
+++ /dev/null
Binary files differ
diff --git a/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-6.png b/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-6.png
deleted file mode 100644
index 86b613a..0000000
--- a/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-6.png
+++ /dev/null
Binary files differ
diff --git a/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-7.png b/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-7.png
deleted file mode 100644
index c3cf531..0000000
--- a/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-7.png
+++ /dev/null
Binary files differ
diff --git a/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-8.png b/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-8.png
deleted file mode 100644
index e09511b..0000000
--- a/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-8.png
+++ /dev/null
Binary files differ
diff --git a/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-9.png b/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-9.png
deleted file mode 100644
index da6dc53..0000000
--- a/XQMuse/Root/TreeGroup/Pngs/apngb-animated-level-9.png
+++ /dev/null
Binary files differ
diff --git a/XQMuse/Root/TreeGroup/Pngs/apngb-animated_sun.png b/XQMuse/Root/TreeGroup/Pngs/apngb-animated_sun.png
deleted file mode 100644
index dd51412..0000000
--- a/XQMuse/Root/TreeGroup/Pngs/apngb-animated_sun.png
+++ /dev/null
Binary files differ
diff --git a/XQMuse/Root/TreeGroup/TreeTeskVC.swift b/XQMuse/Root/TreeGroup/TreeTeskVC.swift
index a4421cc..5cd1190 100644
--- a/XQMuse/Root/TreeGroup/TreeTeskVC.swift
+++ b/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)
+                }
+            }
+        }
+    }
+}
diff --git a/XQMuse/SceneDelegate.swift b/XQMuse/SceneDelegate.swift
index 0b9d815..2b9e30c 100644
--- a/XQMuse/SceneDelegate.swift
+++ b/XQMuse/SceneDelegate.swift
@@ -63,6 +63,10 @@
 				}
 
 				func needLogin(){
+        if JQ_currentNavigationController() is LoginNav{
+            return
+        }
+
 								UserViewModel.clearToken()
 								UserViewModel.clearLoginInfo()
 								UserViewModel.clearAvatarInfo()

--
Gitblit v1.7.1