diff --git a/QXLive.xcodeproj/project.pbxproj b/QXLive.xcodeproj/project.pbxproj index 2f3b6f6..d84cc20 100644 --- a/QXLive.xcodeproj/project.pbxproj +++ b/QXLive.xcodeproj/project.pbxproj @@ -12,7 +12,9 @@ 95C29EA62E19166700F2524D /* QXLiveScreen.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 95C29E9D2E19166700F2524D /* QXLiveScreen.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; 95C29EAB2E19173300F2524D /* AgoraReplayKitExtension.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 95C292A42E18ED0C00F2524D /* AgoraReplayKitExtension.xcframework */; }; 95C29EAD2E191D6800F2524D /* ReplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 95C2925B2E18BBF800F2524D /* ReplayKit.framework */; }; - 95C304262E4A05E3004B2D82 /* QXLiveScreen.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 95C29E9D2E19166700F2524D /* QXLiveScreen.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + 95C327442E4C4068004B2D82 /* AgoraReplayKitExtension.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 95C292A42E18ED0C00F2524D /* AgoraReplayKitExtension.xcframework */; }; + 95C327452E4C4068004B2D82 /* ReplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 95C2925B2E18BBF800F2524D /* ReplayKit.framework */; }; + 95C327502E4C40AB004B2D82 /* QXLiveScreenDev.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 95C3274A2E4C4068004B2D82 /* QXLiveScreenDev.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; 95C3EFEF2E49F44A004B2D82 /* ReplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 95C2925B2E18BBF800F2524D /* ReplayKit.framework */; }; 95C3EFF02E49F44A004B2D82 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 95F205062DEF0AD20031E710 /* libz.tbd */; }; 95C3EFF12E49F44A004B2D82 /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 95F205042DEF0AC20031E710 /* CoreTelephony.framework */; }; @@ -58,12 +60,12 @@ remoteGlobalIDString = 95C29E9C2E19166700F2524D; remoteInfo = QXLiveScreen; }; - 95C304242E4A05D7004B2D82 /* PBXContainerItemProxy */ = { + 95C3274E2E4C4099004B2D82 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 9593D70F2DB9C95C0082CA57 /* Project object */; proxyType = 1; - remoteGlobalIDString = 95C29E9C2E19166700F2524D; - remoteInfo = QXLiveScreen; + remoteGlobalIDString = 95C327412E4C4068004B2D82; + remoteInfo = QXLiveScreenDev; }; /* End PBXContainerItemProxy section */ @@ -85,7 +87,7 @@ dstPath = ""; dstSubfolderSpec = 13; files = ( - 95C304262E4A05E3004B2D82 /* QXLiveScreen.appex in Embed Foundation Extensions */, + 95C327502E4C40AB004B2D82 /* QXLiveScreenDev.appex in Embed Foundation Extensions */, ); name = "Embed Foundation Extensions"; runOnlyForDeploymentPostprocessing = 0; @@ -106,6 +108,8 @@ 95C292AB2E18ED4A00F2524D /* MetalKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MetalKit.framework; path = System/Library/Frameworks/MetalKit.framework; sourceTree = SDKROOT; }; 95C292AE2E18ED6300F2524D /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; }; 95C29E9D2E19166700F2524D /* QXLiveScreen.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = QXLiveScreen.appex; sourceTree = BUILT_PRODUCTS_DIR; }; + 95C3274A2E4C4068004B2D82 /* QXLiveScreenDev.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = QXLiveScreenDev.appex; sourceTree = BUILT_PRODUCTS_DIR; }; + 95C3274C2E4C4068004B2D82 /* QXLiveScreen copy-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "QXLiveScreen copy-Info.plist"; path = "/Users/qixing/Desktop/项目/羽声/featherVoice/QXLiveScreen copy-Info.plist"; sourceTree = ""; }; 95C3F0022E49F44A004B2D82 /* QXLiveDev.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = QXLiveDev.app; sourceTree = BUILT_PRODUCTS_DIR; }; 95F204FA2DEF0AA10031E710 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; 95F204FC2DEF0AAC0031E710 /* libiconv.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libiconv.tbd; path = usr/lib/libiconv.tbd; sourceTree = SDKROOT; }; @@ -136,6 +140,13 @@ ); target = 95C29E9C2E19166700F2524D /* QXLiveScreen */; }; + 95C3274B2E4C4068004B2D82 /* Exceptions for "QXLiveScreen" folder in "QXLiveScreenDev" target */ = { + isa = PBXFileSystemSynchronizedBuildFileExceptionSet; + membershipExceptions = ( + Info.plist, + ); + target = 95C327412E4C4068004B2D82 /* QXLiveScreenDev */; + }; 95C3F0032E49F44A004B2D82 /* Exceptions for "QXLive" folder in "QXLiveDev" target */ = { isa = PBXFileSystemSynchronizedBuildFileExceptionSet; membershipExceptions = ( @@ -179,6 +190,7 @@ exceptions = ( 95C29EAA2E19166700F2524D /* Exceptions for "QXLiveScreen" folder in "QXLiveScreen" target */, 95C3F25C2E49F646004B2D82 /* Exceptions for "QXLiveScreen" folder in "QXLiveDev" target */, + 95C3274B2E4C4068004B2D82 /* Exceptions for "QXLiveScreen" folder in "QXLiveScreenDev" target */, ); path = QXLiveScreen; sourceTree = ""; @@ -227,6 +239,15 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 95C327432E4C4068004B2D82 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 95C327442E4C4068004B2D82 /* AgoraReplayKitExtension.xcframework in Frameworks */, + 95C327452E4C4068004B2D82 /* ReplayKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 95C3EFEE2E49F44A004B2D82 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -293,6 +314,7 @@ 9593D7182DB9C95C0082CA57 /* Products */, 2B243E5E8CFE9B1EF0A08846 /* Pods */, 4B6F40DB8328A2B2BB1BF79D /* Frameworks */, + 95C3274C2E4C4068004B2D82 /* QXLiveScreen copy-Info.plist */, ); sourceTree = ""; }; @@ -304,6 +326,7 @@ 9593D73C2DB9C95E0082CA57 /* QXLiveUITests.xctest */, 95C29E9D2E19166700F2524D /* QXLiveScreen.appex */, 95C3F0022E49F44A004B2D82 /* QXLiveDev.app */, + 95C3274A2E4C4068004B2D82 /* QXLiveScreenDev.appex */, ); name = Products; sourceTree = ""; @@ -398,6 +421,26 @@ productReference = 95C29E9D2E19166700F2524D /* QXLiveScreen.appex */; productType = "com.apple.product-type.app-extension"; }; + 95C327412E4C4068004B2D82 /* QXLiveScreenDev */ = { + isa = PBXNativeTarget; + buildConfigurationList = 95C327472E4C4068004B2D82 /* Build configuration list for PBXNativeTarget "QXLiveScreenDev" */; + buildPhases = ( + 95C327422E4C4068004B2D82 /* Sources */, + 95C327432E4C4068004B2D82 /* Frameworks */, + 95C327462E4C4068004B2D82 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + fileSystemSynchronizedGroups = ( + 95C29E9F2E19166700F2524D /* QXLiveScreen */, + ); + name = QXLiveScreenDev; + productName = QXLiveScreen; + productReference = 95C3274A2E4C4068004B2D82 /* QXLiveScreenDev.appex */; + productType = "com.apple.product-type.app-extension"; + }; 95C3EFE92E49F44A004B2D82 /* QXLiveDev */ = { isa = PBXNativeTarget; buildConfigurationList = 95C3EFFF2E49F44A004B2D82 /* Build configuration list for PBXNativeTarget "QXLiveDev" */; @@ -413,7 +456,7 @@ buildRules = ( ); dependencies = ( - 95C304252E4A05D7004B2D82 /* PBXTargetDependency */, + 95C3274F2E4C4099004B2D82 /* PBXTargetDependency */, ); fileSystemSynchronizedGroups = ( 9593D7192DB9C95C0082CA57 /* QXLive */, @@ -470,6 +513,7 @@ 9593D73B2DB9C95E0082CA57 /* QXLiveUITests */, 95C29E9C2E19166700F2524D /* QXLiveScreen */, 95C3EFE92E49F44A004B2D82 /* QXLiveDev */, + 95C327412E4C4068004B2D82 /* QXLiveScreenDev */, ); }; /* End PBXProject section */ @@ -503,6 +547,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 95C327462E4C4068004B2D82 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 95C3EFFA2E49F44A004B2D82 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -656,6 +707,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 95C327422E4C4068004B2D82 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 95C3EFED2E49F44A004B2D82 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -681,10 +739,10 @@ target = 95C29E9C2E19166700F2524D /* QXLiveScreen */; targetProxy = 95C29EA42E19166700F2524D /* PBXContainerItemProxy */; }; - 95C304252E4A05D7004B2D82 /* PBXTargetDependency */ = { + 95C3274F2E4C4099004B2D82 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = 95C29E9C2E19166700F2524D /* QXLiveScreen */; - targetProxy = 95C304242E4A05D7004B2D82 /* PBXContainerItemProxy */; + target = 95C327412E4C4068004B2D82 /* QXLiveScreenDev */; + targetProxy = 95C3274E2E4C4099004B2D82 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ @@ -698,7 +756,7 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = QXLive/QXLive.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 2; + CURRENT_PROJECT_VERSION = 3; DEVELOPMENT_TEAM = 8798G5VMH9; ENABLE_USER_SCRIPT_SANDBOXING = NO; FRAMEWORK_SEARCH_PATHS = ( @@ -733,7 +791,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.3; + MARKETING_VERSION = 1.1.0; PRODUCT_BUNDLE_IDENTIFIER = com.qxcm.qxlive; PRODUCT_NAME = "$(TARGET_NAME)"; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; @@ -758,7 +816,7 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = QXLive/QXLive.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 2; + CURRENT_PROJECT_VERSION = 3; DEVELOPMENT_TEAM = 8798G5VMH9; ENABLE_USER_SCRIPT_SANDBOXING = NO; FRAMEWORK_SEARCH_PATHS = ( @@ -793,7 +851,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.3; + MARKETING_VERSION = 1.1.0; PRODUCT_BUNDLE_IDENTIFIER = com.qxcm.qxlive; PRODUCT_NAME = "$(TARGET_NAME)"; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; @@ -1046,6 +1104,58 @@ }; name = Release; }; + 95C327482E4C4068004B2D82 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_ENTITLEMENTS = QXLiveScreen/QXLiveScreen.entitlements; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 8798G5VMH9; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = "QXLiveScreen copy-Info.plist"; + INFOPLIST_KEY_CFBundleDisplayName = "羽声"; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.qxcm.qxlive.test.QXLiveScreen; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 95C327492E4C4068004B2D82 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_ENTITLEMENTS = QXLiveScreen/QXLiveScreen.entitlements; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 8798G5VMH9; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = "QXLiveScreen copy-Info.plist"; + INFOPLIST_KEY_CFBundleDisplayName = "羽声"; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.qxcm.qxlive.test.QXLiveScreen; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; 95C3F0002E49F44A004B2D82 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = F5E37D2ED830731B446A7058 /* Pods-QXLive.debug.xcconfig */; @@ -1091,7 +1201,7 @@ "@executable_path/Frameworks", ); MARKETING_VERSION = 1.0.2; - PRODUCT_BUNDLE_IDENTIFIER = com.qxcm.qxlive; + PRODUCT_BUNDLE_IDENTIFIER = com.qxcm.qxlive.test; PRODUCT_NAME = "$(TARGET_NAME)"; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; SUPPORTS_MACCATALYST = NO; @@ -1151,7 +1261,7 @@ "@executable_path/Frameworks", ); MARKETING_VERSION = 1.0.2; - PRODUCT_BUNDLE_IDENTIFIER = com.qxcm.qxlive; + PRODUCT_BUNDLE_IDENTIFIER = com.qxcm.qxlive.test; PRODUCT_NAME = "$(TARGET_NAME)"; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; SUPPORTS_MACCATALYST = NO; @@ -1213,6 +1323,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 95C327472E4C4068004B2D82 /* Build configuration list for PBXNativeTarget "QXLiveScreenDev" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 95C327482E4C4068004B2D82 /* Debug */, + 95C327492E4C4068004B2D82 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 95C3EFFF2E49F44A004B2D82 /* Build configuration list for PBXNativeTarget "QXLiveDev" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/QXLive.xcodeproj/xcshareddata/xcschemes/QXLiveScreenDev.xcscheme b/QXLive.xcodeproj/xcshareddata/xcschemes/QXLiveScreenDev.xcscheme new file mode 100644 index 0000000..e61af29 --- /dev/null +++ b/QXLive.xcodeproj/xcshareddata/xcschemes/QXLiveScreenDev.xcscheme @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/QXLive.xcodeproj/xcuserdata/qixing.xcuserdatad/xcschemes/xcschememanagement.plist b/QXLive.xcodeproj/xcuserdata/qixing.xcuserdatad/xcschemes/xcschememanagement.plist index 19d1a65..ab8efc3 100644 --- a/QXLive.xcodeproj/xcuserdata/qixing.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/QXLive.xcodeproj/xcuserdata/qixing.xcuserdatad/xcschemes/xcschememanagement.plist @@ -12,13 +12,18 @@ QXLiveDev.xcscheme_^#shared#^_ orderHint - 64 + 63 QXLiveScreen.xcscheme_^#shared#^_ orderHint 1 + QXLiveScreenDev.xcscheme_^#shared#^_ + + orderHint + 64 + SuppressBuildableAutocreation diff --git a/QXLive.xcworkspace/xcuserdata/qixing.xcuserdatad/UserInterfaceState.xcuserstate b/QXLive.xcworkspace/xcuserdata/qixing.xcuserdatad/UserInterfaceState.xcuserstate index 4751670..6b7289e 100644 Binary files a/QXLive.xcworkspace/xcuserdata/qixing.xcuserdatad/UserInterfaceState.xcuserstate and b/QXLive.xcworkspace/xcuserdata/qixing.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/QXLive.xcworkspace/xcuserdata/qixing.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/QXLive.xcworkspace/xcuserdata/qixing.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist index 1549c06..e9c6d20 100644 --- a/QXLive.xcworkspace/xcuserdata/qixing.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ b/QXLive.xcworkspace/xcuserdata/qixing.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -208,38 +208,6 @@ landmarkType = "7"> - - - - - - - - + +NS_ASSUME_NONNULL_BEGIN + +@interface QXAppStartViewController : UIViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/QXLive/Base/QXAppStartViewController.m b/QXLive/Base/QXAppStartViewController.m new file mode 100644 index 0000000..f07dda9 --- /dev/null +++ b/QXLive/Base/QXAppStartViewController.m @@ -0,0 +1,107 @@ +// +// QXAppStartViewController.m +// QXLive +// +// Created by 启星 on 2025/8/12. +// + +#import "QXAppStartViewController.h" +#import "AppDelegate.h" +@interface QXAppStartViewController () +@property (nonatomic,strong)UIImageView *bgImaegView; +@end + +@implementation QXAppStartViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + self.bgImaegView = [[UIImageView alloc] initWithFrame:[UIScreen mainScreen].bounds]; + self.bgImaegView.image = [UIImage imageNamed:@"启动页"];; + self.bgImaegView.contentMode = UIViewContentModeScaleAspectFill; + [self.view addSubview:self.bgImaegView]; +// [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loginSuccess) name:noticeUserLogin object:nil]; + [self getAppTheme]; +} +-(void)viewDidDisappear:(BOOL)animated{ + [super viewDidDisappear:animated]; +// [[NSNotificationCenter defaultCenter] removeObserver:self]; +} +-(void)getAppTheme{ + NSString *themeUrl = [NSString stringWithFormat:@"%@%@",ServerUrl,QXAppTheme]; + [[QXRequset shareInstance] getWithUrl:themeUrl parameters:@{} needCache:NO success:^(id responseObject) { + [QXConfig defaultConfig]; + QXThemeModel *model = [QXThemeModel yy_modelWithJSON:responseObject[@"data"]]; + if (model.theme_color && model.theme_color.length > 0) { + QXConfig.shared.themeColor = [UIColor colorWithHexString:model.theme_color]; + } +// QXConfig.shared.themeColor = [UIColor colorWithHexString:@"#ff0000"]; + if (model.btn_text_color && model.btn_text_color.length > 0) { + QXConfig.shared.btnTextColor = [UIColor colorWithHexString:model.btn_text_color]; + } + if (model.app_bg && model.app_bg.length > 0) { + QXConfig.shared.backgroundImage = model.app_bg; + } + QXTabbarModel *tabbarIndex1 = QXConfig.shared.tabbarArray[0]; + QXTabbarModel *tabbarIndex2 = QXConfig.shared.tabbarArray[1]; + QXTabbarModel *tabbarIndex3 = QXConfig.shared.tabbarArray[2]; + QXTabbarModel *tabbarIndex4 = QXConfig.shared.tabbarArray[3]; + + if (model.home_nor && model.home_nor.length > 0) { + tabbarIndex1.normalImage = model.home_nor; + } + if (model.home_sel && model.home_sel.length > 0) { + tabbarIndex1.selectedImage = model.home_sel; + } + + if (model.find_nor && model.find_nor.length > 0) { + tabbarIndex2.normalImage = model.find_nor; + } + if (model.find_sel && model.find_sel.length > 0) { + tabbarIndex2.selectedImage = model.find_sel; + } + + if (model.msg_nor && model.msg_nor.length > 0) { + tabbarIndex3.normalImage = model.msg_nor; + } + if (model.msg_sel && model.msg_sel.length > 0) { + tabbarIndex3.selectedImage = model.msg_sel; + } + + if (model.mine_nor && model.mine_nor.length > 0) { + tabbarIndex4.normalImage = model.mine_nor; + } + if (model.mine_sel && model.mine_sel.length > 0) { + tabbarIndex4.selectedImage = model.mine_sel; + } + QXConfig.shared.tabbarArray = @[tabbarIndex1,tabbarIndex2,tabbarIndex3,tabbarIndex4]; + AppDelegate *delegate = (AppDelegate*)[UIApplication sharedApplication].delegate; + [delegate changeRootViewControllerIsTabbar]; + NSLog(@"请求成功"); + } fail:^(NSError *error, NSString *msg, NSURLSessionDataTask *task) { + NSLog(@"请求失败"); + [self alertNetworkError]; + }]; +} +-(void)loginSuccess{ + [self getAppTheme]; +} +-(void)alertNetworkError{ + MJWeakSelf + UIAlertController *al = [UIAlertController alertControllerWithTitle:@"网络错误" message:@"" preferredStyle:(UIAlertControllerStyleAlert)]; + [al addAction:[UIAlertAction actionWithTitle:@"重试" style:(UIAlertActionStyleDefault) handler:^(UIAlertAction * _Nonnull action) { + [weakSelf getAppTheme]; + }]]; + [self presentViewController:al animated:YES completion:nil]; +} +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/QXLive/Base/QXBaseViewController.m b/QXLive/Base/QXBaseViewController.m index 44b84f8..4320201 100644 --- a/QXLive/Base/QXBaseViewController.m +++ b/QXLive/Base/QXBaseViewController.m @@ -54,7 +54,7 @@ if (![imageUrl isExist]) { return; } - if ([imageUrl hasPrefix:@"http"]) { + if ([imageUrl hasPrefix:@"http"] || [imageUrl hasPrefix:@"https"]) { [self.bgImageView sd_setImageWithURL:[NSURL URLWithString:imageUrl] placeholderImage:nil]; }else{ self.bgImageView.image = [UIImage imageNamed:imageUrl]; @@ -64,6 +64,7 @@ if (!_bgImageView) { _bgImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)]; _bgImageView.contentMode = UIViewContentModeScaleAspectFill; + _bgImageView.clipsToBounds = YES; } return _bgImageView; } diff --git a/QXLive/Base/QXGlobal.m b/QXLive/Base/QXGlobal.m index 9faf888..66f9604 100644 --- a/QXLive/Base/QXGlobal.m +++ b/QXLive/Base/QXGlobal.m @@ -194,7 +194,7 @@ return; } navagationController = (QXBaseNavigationController*)KEYWINDOW.rootViewController; - navagationController.interactivePopGestureRecognizer.enabled = NO; +// navagationController.interactivePopGestureRecognizer.enabled = NO; if (_miniView) { [_miniView removeFromSuperview]; _miniView = nil; diff --git a/QXLive/Config/QXAgoraEngine.m b/QXLive/Config/QXAgoraEngine.m index d2061f8..ff3acde 100755 --- a/QXLive/Config/QXAgoraEngine.m +++ b/QXLive/Config/QXAgoraEngine.m @@ -53,7 +53,7 @@ - (void)initializeAgoraEngine { self.agoraKit = [AgoraRtcEngineKit sharedEngineWithAppId:AgoraAuthId delegate:self]; [self.agoraKit enableAudioVolumeIndication:200 smooth:3 reportVad:NO]; - + [self.agoraKit getCurrentMonotonicTimeInMs]; [self.agoraKit setAudioProfile:AgoraAudioProfileMusicHighQualityStereo]; [self.agoraKit setAudioScenario:AgoraAudioScenarioChorus]; diff --git a/QXLive/Config/QXConfig.h b/QXLive/Config/QXConfig.h index b54bf12..ee8bc82 100644 --- a/QXLive/Config/QXConfig.h +++ b/QXLive/Config/QXConfig.h @@ -53,4 +53,43 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic,strong)NSString *title; @end + +@interface QXThemeModel : NSObject +/** + app背景图片 app_bg + 首页选中 home_sel + 首页正常 home_nor + 广场选中 find_sel + 广场正常 find_nor + 消息选中 msg_sel + 消息正常 msg_nor + 我的选中 mine_sel + 我的正常 mine_nor + 主题色 theme_color + 按钮文字色 btn_text_color + */ +/// app背景图片 +@property (nonatomic,strong)NSString *app_bg; +/// 首页选中 +@property (nonatomic,strong)NSString *home_sel; +/// 首页正常 +@property (nonatomic,strong)NSString *home_nor; +/// 广场选中 +@property (nonatomic,strong)NSString *find_sel; +/// 广场正常 +@property (nonatomic,strong)NSString *find_nor; +/// 消息选中 +@property (nonatomic,strong)NSString *msg_sel; +/// 消息正常 +@property (nonatomic,strong)NSString *msg_nor; +/// 我的选中 +@property (nonatomic,strong)NSString *mine_sel; +/// 我的正常 +@property (nonatomic,strong)NSString *mine_nor; +/// 主题色 +@property (nonatomic,strong)NSString *theme_color; +/// 按钮颜色 +@property (nonatomic,strong)NSString *btn_text_color; +@end + NS_ASSUME_NONNULL_END diff --git a/QXLive/Config/QXConfig.m b/QXLive/Config/QXConfig.m index 17e5f27..33e5a7f 100644 --- a/QXLive/Config/QXConfig.m +++ b/QXLive/Config/QXConfig.m @@ -105,3 +105,8 @@ @end +@implementation QXThemeModel + + + +@end diff --git a/QXLive/HomePage(声播)/Controlller/房间/QXRoomViewController.m b/QXLive/HomePage(声播)/Controlller/房间/QXRoomViewController.m index 6471ea9..c500beb 100644 --- a/QXLive/HomePage(声播)/Controlller/房间/QXRoomViewController.m +++ b/QXLive/HomePage(声播)/Controlller/房间/QXRoomViewController.m @@ -120,7 +120,7 @@ QXRoomUserInfoViewDelegate } } self.navigationController.viewControllers = marr; - self.navigationController.interactivePopGestureRecognizer.enabled = NO; +// self.navigationController.interactivePopGestureRecognizer.enabled = NO; } -(void)viewDidDisappear:(BOOL)animated{ [super viewDidDisappear:animated]; @@ -749,7 +749,7 @@ QXRoomUserInfoViewDelegate -(void)userDidTakeOffWithUserInfo:(QXUserHomeModel *)userInfo{ if ([userInfo.user_id isEqualToString:QXGlobal.shareGlobal.loginModel.user_id]) { [[QXGlobal shareGlobal] quitRoomWithRoomId:self.roomId]; - self.navigationController.interactivePopGestureRecognizer.enabled = YES; +// self.navigationController.interactivePopGestureRecognizer.enabled = YES; [self.navigationController popViewControllerAnimated:YES]; } } diff --git a/QXLive/HomePage(声播)/View/房间/QXRoomTitleView.m b/QXLive/HomePage(声播)/View/房间/QXRoomTitleView.m index cef12d5..aeda875 100644 --- a/QXLive/HomePage(声播)/View/房间/QXRoomTitleView.m +++ b/QXLive/HomePage(声播)/View/房间/QXRoomTitleView.m @@ -380,12 +380,12 @@ } -(void)miniRoom{ - self.navigationController.interactivePopGestureRecognizer.enabled = YES; +// self.navigationController.interactivePopGestureRecognizer.enabled = YES; [self.navigationController popViewControllerAnimated:YES]; } -(void)leaveRoom{ [[QXGlobal shareGlobal]quitRoomWithRoomId:self.roomId]; - self.navigationController.interactivePopGestureRecognizer.enabled = YES; +// self.navigationController.interactivePopGestureRecognizer.enabled = YES; [self.navigationController popViewControllerAnimated:YES]; } diff --git a/QXLive/HomePage(声播)/View/房间/麦位视图/QXRoomSeatContentView.m b/QXLive/HomePage(声播)/View/房间/麦位视图/QXRoomSeatContentView.m index af1f332..16bc1de 100644 --- a/QXLive/HomePage(声播)/View/房间/麦位视图/QXRoomSeatContentView.m +++ b/QXLive/HomePage(声播)/View/房间/麦位视图/QXRoomSeatContentView.m @@ -397,13 +397,17 @@ -(UIImageView *)noUserImageView{ if (!_noUserImageView) { - _noUserImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"room_seat_icon"]]; + UIImage *image = [UIImage imageNamed:@"room_seat_icon"]; +// image = [image imageByTintColor:QXConfig.themeColor]; + _noUserImageView = [[UIImageView alloc] initWithImage:image]; } return _noUserImageView; } -(UIImageView *)offlineImageView{ if (!_offlineImageView) { - _offlineImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"room_user_offline"]]; + UIImage *image = [UIImage imageNamed:@"room_user_offline"]; +// image = [image imageByTintColor:QXConfig.themeColor]; + _offlineImageView = [[UIImageView alloc] initWithImage:image]; _offlineImageView.contentMode = UIViewContentModeScaleToFill; _offlineImageView.hidden = YES; } diff --git a/QXLive/HomePage(声播)/View/房间/麦位视图/QXRoomSeatTypeCabinView.m b/QXLive/HomePage(声播)/View/房间/麦位视图/QXRoomSeatTypeCabinView.m index 5b7464a..0be75d1 100644 --- a/QXLive/HomePage(声播)/View/房间/麦位视图/QXRoomSeatTypeCabinView.m +++ b/QXLive/HomePage(声播)/View/房间/麦位视图/QXRoomSeatTypeCabinView.m @@ -275,12 +275,12 @@ } -(void)miniRoom{ - self.navigationController.interactivePopGestureRecognizer.enabled = YES; +// self.navigationController.interactivePopGestureRecognizer.enabled = YES; [self.navigationController popViewControllerAnimated:YES]; } -(void)leaveRoom{ [[QXGlobal shareGlobal]quitRoomWithRoomId:self.roomModel.room_info.room_id]; - self.navigationController.interactivePopGestureRecognizer.enabled = YES; +// self.navigationController.interactivePopGestureRecognizer.enabled = YES; [self.navigationController popViewControllerAnimated:YES]; } @end diff --git a/QXLive/Login(登录)/Controlller/QXFillUserInfoViewController.xib b/QXLive/Login(登录)/Controlller/QXFillUserInfoViewController.xib index ab80f9d..3312f4d 100755 --- a/QXLive/Login(登录)/Controlller/QXFillUserInfoViewController.xib +++ b/QXLive/Login(登录)/Controlller/QXFillUserInfoViewController.xib @@ -410,7 +410,7 @@ - + diff --git a/QXLive/Message(音信)/View/QXSystemTopView.m b/QXLive/Message(音信)/View/QXSystemTopView.m index c498d27..df88195 100644 --- a/QXLive/Message(音信)/View/QXSystemTopView.m +++ b/QXLive/Message(音信)/View/QXSystemTopView.m @@ -45,7 +45,8 @@ }]; self.bottomView = [[UIView alloc] initWithFrame:CGRectMake(0, self.systemView.bottom, SCREEN_WIDTH, 8)]; - self.bottomView.backgroundColor = RGB16(0xececec); +// self.bottomView.backgroundColor = RGB16(0xececec); + self.bottomView.backgroundColor = [UIColor clearColor]; [self addSubview:self.bottomView]; } -(void)setModel:(QXMessageModel *)model{ diff --git a/QXLive/Other/AppDelegate.m b/QXLive/Other/AppDelegate.m index e513a73..f6b0162 100644 --- a/QXLive/Other/AppDelegate.m +++ b/QXLive/Other/AppDelegate.m @@ -14,6 +14,7 @@ #import #import #import +#import "QXAppStartViewController.h" #if DEBUG #import #endif @@ -29,15 +30,8 @@ [QXConfig defaultConfig]; self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; self.window.backgroundColor = [UIColor whiteColor]; - if ([QXGlobal shareGlobal].isLogin && [[QXGlobal shareGlobal].loginModel.sex isEqualToString:@"0"]) { - QXFillUserInfoViewController *vc = [[QXFillUserInfoViewController alloc] init]; - self.window.rootViewController = vc; - }else{ - self.tabbarVC = [[QXTabbarController alloc] init]; - QXBaseNavigationController *na = [[QXBaseNavigationController alloc] initWithRootViewController:self.tabbarVC]; - na.navigationBarHidden = YES; - self.window.rootViewController = na; - } + QXAppStartViewController *startVC = [[QXAppStartViewController alloc] init]; + self.window.rootViewController = startVC; [Bugly startWithAppId:@"38d154fc5f"]; SDImageWebPCoder *webPCoder = [SDImageWebPCoder sharedCoder]; [[SDImageCodersManager sharedManager] addCoder:webPCoder]; @@ -61,10 +55,15 @@ [AvoidCrash becomeEffective]; } -(void)changeRootViewControllerIsTabbar{ - self.tabbarVC = [[QXTabbarController alloc] init]; - QXBaseNavigationController *na = [[QXBaseNavigationController alloc] initWithRootViewController:self.tabbarVC]; - na.navigationBarHidden = YES; - self.window.rootViewController = na; + if ([QXGlobal shareGlobal].isLogin && [[QXGlobal shareGlobal].loginModel.sex isEqualToString:@"0"]) { + QXFillUserInfoViewController *vc = [[QXFillUserInfoViewController alloc] init]; + self.window.rootViewController = vc; + }else{ + self.tabbarVC = [[QXTabbarController alloc] init]; + QXBaseNavigationController *na = [[QXBaseNavigationController alloc] initWithRootViewController:self.tabbarVC]; + na.navigationBarHidden = YES; + self.window.rootViewController = na; + } } diff --git a/QXLive/Other/Base.lproj/LaunchScreen.storyboard b/QXLive/Other/Base.lproj/LaunchScreen.storyboard index e764de5..d7ea64e 100644 --- a/QXLive/Other/Base.lproj/LaunchScreen.storyboard +++ b/QXLive/Other/Base.lproj/LaunchScreen.storyboard @@ -17,7 +17,7 @@ - + diff --git a/QXLive/Other/NoitceAndKey.h b/QXLive/Other/NoitceAndKey.h index 9f5d2b8..41232d4 100644 --- a/QXLive/Other/NoitceAndKey.h +++ b/QXLive/Other/NoitceAndKey.h @@ -27,6 +27,10 @@ static NSInteger const AddressOfMQTTPort = 1883; static NSInteger const AppPushId = 46164; static NSString *const AgoraAuthId = @"05b406b4541e413887d8d2bf9be8642c"; + +//一键登录AuthSDKInfo +static NSString *const AuthSDKKey = @"Q8xhyn+MAyHw8FQLjKOWU8ZrZMXsuflPGSxDvwKu8ULvm8eZBPNLfezCsyuKzISPIGbMK5oR6fX/TyIdFwBjfL2lUteddxG+fu8aBuyScR066oDRhj66x97xM+9n6lnog9MOdMvGryx6PkZa1/un0IoX46SfrjpitnzYZvfFlavVDOq50iO4piAU/idOWnyY+1bQAnBQsfr8ZKHTAbpR2aUn4C6R37MvtXHnmD+o3Qjx0SbCxpsvs9h91/VBQ2+XEIynDIPDM+0="; + #else static NSString *const WechatAppId = @"wxc7681513be9f926b"; @@ -47,7 +51,11 @@ static NSInteger const AddressOfMQTTPort = 1883; static NSInteger const AppPushId = 46163; +///声网 static NSString *const AgoraAuthId = @"4a521d6f1c6343998b1c8fd425dea02a"; + +//一键登录AuthSDKInfo +static NSString *const AuthSDKKey = @"hKYFcoI6vIdz9/yOCs3XJ/fUQ0u3DHGa5UPONdSJfSccjVtn3sHBRecwepn5iNIgOYWq8xgUc4LtWqSjpveHIYzJx0YcQm/j5IXdVKe74RI+4vT00UwP8oQSZ2w0a18Sbbd8uKgFys8CUyQZWfMZXHIVuHmNBHRHZ1xoX2sCCCl56U3vQ11ZSpJdeZW4wvQ8qeQ56Q4wyW5hyo/yFU1sxohn1ApS6FbbXXwroWV57aK1R9+zaBOqn41NCKlvKsSD"; #endif /// 声网 @@ -74,8 +82,7 @@ static NSString *const CHAT_IMG_FILE_BASE_PATH = @"emchat/image/ios/"; static NSString *const CHAT_VIDEO_FILE_BASE_PATH = @"emchat/videos/ios"; static NSString *const CHAT_AUDIO_FILE_BASE_PATH = @"emchat/audio/ios/"; -//一键登录AuthSDKInfo -static NSString *const AuthSDKKey = @"hKYFcoI6vIdz9/yOCs3XJ/fUQ0u3DHGa5UPONdSJfSccjVtn3sHBRecwepn5iNIgOYWq8xgUc4LtWqSjpveHIYzJx0YcQm/j5IXdVKe74RI+4vT00UwP8oQSZ2w0a18Sbbd8uKgFys8CUyQZWfMZXHIVuHmNBHRHZ1xoX2sCCCl56U3vQ11ZSpJdeZW4wvQ8qeQ56Q4wyW5hyo/yFU1sxohn1ApS6FbbXXwroWV57aK1R9+zaBOqn41NCKlvKsSD"; + /// 本地存储 diff --git a/QXLive/Other/QXApi.h b/QXLive/Other/QXApi.h index 92c2517..bd1d95e 100644 --- a/QXLive/Other/QXApi.h +++ b/QXLive/Other/QXApi.h @@ -21,6 +21,8 @@ static NSString * QXGuidePage = @"api/banner/get_banner_qidonglist"; static NSString * QXAppVersion = @"api/Version/get_app_version"; /// 协议 static NSString * QXAppProtocol = @"api/Page/page_show"; +/// 获取主题配置 +static NSString * QXAppTheme = @"api/Theme/get_theme_data"; #pragma mark - 登录 /// 验证码登录获取账号列表 diff --git a/QXLive/Tabbar/TabbarCustomView/QXTabBarButton.m b/QXLive/Tabbar/TabbarCustomView/QXTabBarButton.m index a1188d7..22e6d86 100644 --- a/QXLive/Tabbar/TabbarCustomView/QXTabBarButton.m +++ b/QXLive/Tabbar/TabbarCustomView/QXTabBarButton.m @@ -96,8 +96,16 @@ /// @param title 标题文字 - (void)setTabBarImageUrl:(NSString *)imageUrl selectedImg:(nonnull NSString *)imageName title:(nonnull NSString *)title { self.titleLbl.text = title; - [self.iconBtn setBackgroundImage:[UIImage imageNamed:imageUrl] forState:UIControlStateNormal]; - [self.iconBtn setBackgroundImage:[UIImage imageNamed:imageName] forState:UIControlStateSelected]; + if ([imageUrl hasPrefix:@"http"] || [imageUrl hasPrefix:@"https"]) { + [self.iconBtn sd_setBackgroundImageWithURL:[NSURL URLWithString:imageUrl] forState:UIControlStateNormal placeholderImage:nil]; + }else{ + [self.iconBtn setBackgroundImage:[UIImage imageNamed:imageUrl] forState:UIControlStateNormal]; + } + if ([imageName hasPrefix:@"http"] || [imageName hasPrefix:@"https"]) { + [self.iconBtn sd_setBackgroundImageWithURL:[NSURL URLWithString:imageName] forState:UIControlStateSelected placeholderImage:nil]; + }else{ + [self.iconBtn setBackgroundImage:[UIImage imageNamed:imageName] forState:UIControlStateSelected]; + } } - (void)heartAnimationWithView:(UIView*)view{ diff --git a/QXLiveScreen copy-Info.plist b/QXLiveScreen copy-Info.plist new file mode 100644 index 0000000..1e09972 --- /dev/null +++ b/QXLiveScreen copy-Info.plist @@ -0,0 +1,15 @@ + + + + + NSExtension + + NSExtensionPointIdentifier + com.apple.broadcast-services-upload + NSExtensionPrincipalClass + SampleHandler + RPBroadcastProcessMode + RPBroadcastProcessModeSampleBuffer + + +