diff --git a/QXLive.xcodeproj/project.pbxproj b/QXLive.xcodeproj/project.pbxproj
index 8772869..2f3b6f6 100644
--- a/QXLive.xcodeproj/project.pbxproj
+++ b/QXLive.xcodeproj/project.pbxproj
@@ -12,6 +12,7 @@
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, ); }; };
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 */; };
@@ -57,6 +58,13 @@
remoteGlobalIDString = 95C29E9C2E19166700F2524D;
remoteInfo = QXLiveScreen;
};
+ 95C304242E4A05D7004B2D82 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 9593D70F2DB9C95C0082CA57 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 95C29E9C2E19166700F2524D;
+ remoteInfo = QXLiveScreen;
+ };
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
@@ -77,6 +85,7 @@
dstPath = "";
dstSubfolderSpec = 13;
files = (
+ 95C304262E4A05E3004B2D82 /* QXLiveScreen.appex in Embed Foundation Extensions */,
);
name = "Embed Foundation Extensions";
runOnlyForDeploymentPostprocessing = 0;
@@ -404,6 +413,7 @@
buildRules = (
);
dependencies = (
+ 95C304252E4A05D7004B2D82 /* PBXTargetDependency */,
);
fileSystemSynchronizedGroups = (
9593D7192DB9C95C0082CA57 /* QXLive */,
@@ -671,6 +681,11 @@
target = 95C29E9C2E19166700F2524D /* QXLiveScreen */;
targetProxy = 95C29EA42E19166700F2524D /* PBXContainerItemProxy */;
};
+ 95C304252E4A05D7004B2D82 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 95C29E9C2E19166700F2524D /* QXLiveScreen */;
+ targetProxy = 95C304242E4A05D7004B2D82 /* PBXContainerItemProxy */;
+ };
/* End PBXTargetDependency section */
/* Begin XCBuildConfiguration section */
@@ -683,7 +698,7 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = QXLive/QXLive.entitlements;
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 1;
+ CURRENT_PROJECT_VERSION = 2;
DEVELOPMENT_TEAM = 8798G5VMH9;
ENABLE_USER_SCRIPT_SANDBOXING = NO;
FRAMEWORK_SEARCH_PATHS = (
@@ -703,7 +718,7 @@
);
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = QXLive/Info.plist;
- INFOPLIST_KEY_CFBundleDisplayName = "羽声";
+ INFOPLIST_KEY_CFBundleDisplayName = "羽声语音";
INFOPLIST_KEY_NSCameraUsageDescription = "访问您的相机,允许可以开启直播和录制视频";
INFOPLIST_KEY_NSLocationWhenInUseUsageDescription = "访问您的位置,系统将获取您附近的用户进行推荐展示";
INFOPLIST_KEY_NSMicrophoneUsageDescription = "访问您的麦克风,允许可以录制声音以便在聊天室进行语音聊天";
@@ -718,7 +733,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
- MARKETING_VERSION = 1.0.2;
+ MARKETING_VERSION = 1.0.3;
PRODUCT_BUNDLE_IDENTIFIER = com.qxcm.qxlive;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
@@ -743,7 +758,7 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = QXLive/QXLive.entitlements;
CODE_SIGN_STYLE = Automatic;
- CURRENT_PROJECT_VERSION = 1;
+ CURRENT_PROJECT_VERSION = 2;
DEVELOPMENT_TEAM = 8798G5VMH9;
ENABLE_USER_SCRIPT_SANDBOXING = NO;
FRAMEWORK_SEARCH_PATHS = (
@@ -763,7 +778,7 @@
);
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = QXLive/Info.plist;
- INFOPLIST_KEY_CFBundleDisplayName = "羽声";
+ INFOPLIST_KEY_CFBundleDisplayName = "羽声语音";
INFOPLIST_KEY_NSCameraUsageDescription = "访问您的相机,允许可以开启直播和录制视频";
INFOPLIST_KEY_NSLocationWhenInUseUsageDescription = "访问您的位置,系统将获取您附近的用户进行推荐展示";
INFOPLIST_KEY_NSMicrophoneUsageDescription = "访问您的麦克风,允许可以录制声音以便在聊天室进行语音聊天";
@@ -778,7 +793,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
- MARKETING_VERSION = 1.0.2;
+ MARKETING_VERSION = 1.0.3;
PRODUCT_BUNDLE_IDENTIFIER = com.qxcm.qxlive;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
@@ -1076,7 +1091,7 @@
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0.2;
- PRODUCT_BUNDLE_IDENTIFIER = com.qxcm.qxlive.test;
+ PRODUCT_BUNDLE_IDENTIFIER = com.qxcm.qxlive;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
SUPPORTS_MACCATALYST = NO;
@@ -1136,7 +1151,7 @@
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0.2;
- PRODUCT_BUNDLE_IDENTIFIER = com.qxcm.qxlive.test;
+ PRODUCT_BUNDLE_IDENTIFIER = com.qxcm.qxlive;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
SUPPORTS_MACCATALYST = NO;
diff --git a/QXLive.xcodeproj/xcshareddata/xcschemes/QXLiveScreen.xcscheme b/QXLive.xcodeproj/xcshareddata/xcschemes/QXLiveScreen.xcscheme
index 05dd2b8..35da550 100644
--- a/QXLive.xcodeproj/xcshareddata/xcschemes/QXLiveScreen.xcscheme
+++ b/QXLive.xcodeproj/xcshareddata/xcschemes/QXLiveScreen.xcscheme
@@ -43,8 +43,8 @@
buildForAnalyzing = "YES">
@@ -74,8 +74,8 @@
runnableDebuggingMode = "0">
@@ -93,8 +93,8 @@
runnableDebuggingMode = "0">
diff --git a/QXLive.xcworkspace/xcuserdata/qixing.xcuserdatad/UserInterfaceState.xcuserstate b/QXLive.xcworkspace/xcuserdata/qixing.xcuserdatad/UserInterfaceState.xcuserstate
index 556b935..4751670 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 2247d38..1549c06 100644
--- a/QXLive.xcworkspace/xcuserdata/qixing.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
+++ b/QXLive.xcworkspace/xcuserdata/qixing.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
@@ -16,38 +16,6 @@
stopOnStyle = "0">
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/QXLive/Base/NSURLSession+QX.h b/QXLive/Base/NSURLSession+QX.h
new file mode 100644
index 0000000..f65adba
--- /dev/null
+++ b/QXLive/Base/NSURLSession+QX.h
@@ -0,0 +1,17 @@
+//
+// NSURLSession+BJX.h
+// BJXGame
+//
+// Created by apple on 2022/11/7.
+// Copyright © 2022 鑫创. All rights reserved.
+//
+
+#import
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface NSURLSession (QX)
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/QXLive/Base/NSURLSession+QX.m b/QXLive/Base/NSURLSession+QX.m
new file mode 100644
index 0000000..a105247
--- /dev/null
+++ b/QXLive/Base/NSURLSession+QX.m
@@ -0,0 +1,37 @@
+//
+// NSURLSession+BJX.m
+// BJXGame
+//
+// Created by apple on 2022/11/7.
+// Copyright © 2022 鑫创. All rights reserved.
+//
+
+#import "NSURLSession+QX.h"
+#import
+
+@implementation NSURLSession (QX)
++ (void)load{
+ Method method1 = class_getClassMethod([NSURLSession class],@selector(sessionWithConfiguration:));
+ Method method2 = class_getClassMethod([NSURLSession class],@selector(px_sessionWithConfiguration:));
+ method_exchangeImplementations(method1, method2);
+
+ Method method3 =class_getClassMethod([NSURLSession class],@selector(sessionWithConfiguration:delegate:delegateQueue:));
+ Method method4 =class_getClassMethod([NSURLSession class],@selector(px_sessionWithConfiguration:delegate:delegateQueue:));
+ method_exchangeImplementations(method3, method4);
+}
+
+
+
++ (NSURLSession*)px_sessionWithConfiguration:(NSURLSessionConfiguration*)configuration delegate:(nullable id)delegate delegateQueue:(nullable NSOperationQueue*)queue{
+ if(configuration) configuration.connectionProxyDictionary=@{};
+ return [self px_sessionWithConfiguration:configuration delegate:delegate delegateQueue:queue];
+}
+
+
+
++ (NSURLSession*)px_sessionWithConfiguration:(NSURLSessionConfiguration*)configuration{
+ if(configuration) configuration.connectionProxyDictionary=@{};
+ return [self px_sessionWithConfiguration:configuration];
+}
+
+@end
diff --git a/QXLive/Base/QXGlobal.m b/QXLive/Base/QXGlobal.m
index d81e1aa..9faf888 100644
--- a/QXLive/Base/QXGlobal.m
+++ b/QXLive/Base/QXGlobal.m
@@ -19,6 +19,7 @@
#import "QXRoomMessageManager.h"
#import "QXTimer.h"
#import
+#import "QXManagerMqtt.h"
@interface QXGlobal()
@property (nonatomic,assign)BOOL isLogin;
@@ -52,7 +53,9 @@
[self removeLocalData];
[self removeMemory];
AppDelegate *appdelegate = (AppDelegate*)[UIApplication sharedApplication].delegate;
+ /// 移除推送监听
[TIMPushManager removePushListener:appdelegate];
+ /// 移除会话监听
[[V2TIMManager sharedInstance] removeConversationListener:appdelegate];
[TIMPushManager unRegisterPush:^{
//success
@@ -68,6 +71,8 @@
na.modalPresentationStyle = UIModalPresentationFullScreen;
[self.getKeyWindow.rootViewController presentViewController:na animated:YES completion:nil];
self.isShowLoginVC = YES;
+ /// 断开mqtt连接
+ [[QXManagerMqtt sharedInstance] disconnect];
}
-(void)saveLoginData:(NSString *)userInfoJson{
@@ -114,7 +119,7 @@
[[NSUserDefaults standardUserDefaults] synchronize];
}
-(void)removeMemory{
- self.loginModel = nil;
+ QXGlobal.shareGlobal.loginModel = nil;
}
-(void)showView:(UIView *)view popType:(PopViewType)popType tapDismiss:(BOOL)tapDismiss finishBlock:(showFinishBlock)finishBlock{
self.alertViewController = [[QXAlertViewController alloc] init];
diff --git a/QXLive/Base/WKWebView+QX.h b/QXLive/Base/WKWebView+QX.h
new file mode 100644
index 0000000..89c5e35
--- /dev/null
+++ b/QXLive/Base/WKWebView+QX.h
@@ -0,0 +1,17 @@
+//
+// WKWebView+QX.h
+// YBLive
+//
+// Created by 启星 on 2025/4/16.
+// Copyright © 2025 cat. All rights reserved.
+//
+
+#import
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface WKWebView (QX)
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/QXLive/Base/WKWebView+QX.m b/QXLive/Base/WKWebView+QX.m
new file mode 100644
index 0000000..4843ebf
--- /dev/null
+++ b/QXLive/Base/WKWebView+QX.m
@@ -0,0 +1,50 @@
+//
+// WKWebView+QX.m
+// YBLive
+//
+// Created by 启星 on 2025/4/16.
+// Copyright © 2025 cat. All rights reserved.
+//
+
+#import "WKWebView+QX.h"
+
+@implementation WKWebView (QX)
++ (void)load{
+ Method method1 = class_getInstanceMethod([self class],@selector(loadRequest:));
+ Method method2 = class_getInstanceMethod([self class],@selector(qx_loadRequest:));
+ method_exchangeImplementations(method1, method2);
+
+}
+-(void)qx_loadRequest:(NSURLRequest*)request{
+ if ([self isProxyEnabled]) {
+ [self qx_loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"https:www.baidu.com"]]];
+ }else{
+ [self qx_loadRequest:request];
+ }
+}
+
+
+
+
+-(BOOL)isProxyEnabled{
+ NSArray *criticalDomains = @[
+ H5ServerUrl,
+ ServerUrl,
+ ];
+ NSDictionary *proxySettings = (__bridge NSDictionary *)CFNetworkCopySystemProxySettings();
+ for (NSString *domain in criticalDomains) {
+ NSArray *proxies = (__bridge NSArray *)CFNetworkCopyProxiesForURL(
+ (__bridge CFURLRef)[NSURL URLWithString:domain],
+ (__bridge CFDictionaryRef)proxySettings
+ );
+ // 检查每个域名的代理情况...
+ for (NSDictionary *proxy in proxies) {
+ NSString *proxyType = proxy[(NSString *)kCFProxyTypeKey];
+ if (![proxyType isEqualToString:(NSString *)kCFProxyTypeNone]) {
+ return YES; // 存在代理或 VPN
+ }
+ }
+ }
+ return NO;
+}
+@end
diff --git a/QXLive/Config/QXManagerMqtt.m b/QXLive/Config/QXManagerMqtt.m
index 214ec15..e1b94a1 100755
--- a/QXLive/Config/QXManagerMqtt.m
+++ b/QXLive/Config/QXManagerMqtt.m
@@ -201,8 +201,8 @@
QXLOG(@"断开连接 error = %@",[error description]);
}];
[self.mySessionManager setDelegate:nil];
- self.mySessionManager = nil;
[self.subedDict removeAllObjects];
+ _mySessionManager = nil;
}
- (void)reConnect {
if (self.mySessionManager && self.mySessionManager.port) {
diff --git a/QXLive/HomePage(声播)/View/房间/QXAppstoreHomeView.m b/QXLive/HomePage(声播)/View/房间/QXAppstoreHomeView.m
index 6e37293..a88d2a3 100644
--- a/QXLive/HomePage(声播)/View/房间/QXAppstoreHomeView.m
+++ b/QXLive/HomePage(声播)/View/房间/QXAppstoreHomeView.m
@@ -9,6 +9,7 @@
#import "QXHomeRoomCell.h"
#import
#import "QXBanner.h"
+#import "QXTimer.h"
#import "QXHomePageNetwork.h"
@@ -24,6 +25,7 @@
@property (nonatomic,assign)NSInteger currentIndex;
@property (nonatomic,strong)NSMutableArray *dataArray;
@property (nonatomic,strong)NSMutableArray *topArray;
+@property (nonatomic,strong)QXTimer *timer;
@end
@implementation QXAppstoreHomeView
@@ -71,9 +73,9 @@
[self getTopRoomList];
[self getAllRoomList];
}
--(void)startAnimate{
- [self performSelector:@selector(startOptimizedInfiniteFlip) afterDelay:3];
-}
+//-(void)startAnimate{
+// [self performSelector:@selector(startOptimizedInfiniteFlip) afterDelay:3];
+//}
//-(void)setDataArray:(NSArray *)dataArray{
// _dataArray = dataArray;
@@ -104,7 +106,7 @@
weakSelf.roomModel = list.firstObject;
weakSelf.rommView.roomModel = weakSelf.roomModel;
[weakSelf.topArray addObjectsFromArray:list];
- [weakSelf startAnimate];
+ [weakSelf startTimer];
}
[self.scrollView.mj_header endRefreshing];
} failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
@@ -126,6 +128,20 @@
[self.scrollView.mj_header endRefreshing];
}];
}
+-(void)startTimer{
+ MJWeakSelf
+ [self stopTimer];
+ _timer = [QXTimer scheduledTimerWithTimeInterval:5 repeats:YES queue:dispatch_get_main_queue() block:^{
+ QXLOG(@"动画3s执行");
+ [weakSelf startOptimizedInfiniteFlip];
+ }];
+// CABasicAnimation *scaleAnim = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
+// scaleAnim.duration = 1.5/2;
+// scaleAnim.autoreverses = YES;
+// scaleAnim.fromValue = @1.0;
+// scaleAnim.toValue = @1.1;
+// [self.rommView.layer addAnimation:scaleAnim forKey:@"scaleAnimation"];
+}
- (void)startOptimizedInfiniteFlip {
self.currentIndex++;
if (self.currentIndex > self.topArray.count-1) {
@@ -149,18 +165,19 @@
// self.isFront = !self.isFront;
// 添加延迟后继续动画
- dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
- [self startOptimizedInfiniteFlip];
- });
+// dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+// [self startOptimizedInfiniteFlip];
+// });
}];
// 添加辅助动画(轻微弹跳效果)
- CABasicAnimation *scaleAnim = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
- scaleAnim.duration = flipDuration/2;
- scaleAnim.autoreverses = YES;
- scaleAnim.fromValue = @1.0;
- scaleAnim.toValue = @1.1;
- [self.rommView.layer addAnimation:scaleAnim forKey:@"scaleAnimation"];
+
+}
+-(void)stopTimer{
+ if (_timer) {
+ [_timer invalidate];
+ _timer = nil;
+ }
}
#pragma mark - UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout
-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{
diff --git a/QXLive/Network/QXRequest.m b/QXLive/Network/QXRequest.m
index 8eabdcc..8b42ef3 100644
--- a/QXLive/Network/QXRequest.m
+++ b/QXLive/Network/QXRequest.m
@@ -261,6 +261,8 @@ static NSInteger HTTP_ERROR_CODE = 0;
[manager.requestSerializer setValue:appVersion forHTTPHeaderField:@"App-Version"];
if ([QXGlobal shareGlobal].isLogin) {
[manager.requestSerializer setValue:[QXGlobal shareGlobal].loginModel.token forHTTPHeaderField:@"token"];
+ }else{
+ [manager.requestSerializer setValue:@"" forHTTPHeaderField:@"token"];
}
switch (type) {
case GET: {
diff --git a/QXLive/Other/AppDelegate+Login.m b/QXLive/Other/AppDelegate+Login.m
index 6da024e..9460b7e 100644
--- a/QXLive/Other/AppDelegate+Login.m
+++ b/QXLive/Other/AppDelegate+Login.m
@@ -14,7 +14,8 @@
#import "QXLoginNetwork.h"
#import "QXMineNetwork.h"
#import "QXMessageServices.h"
-
+#import "QXManagerMqtt.h"
+#import "OpenUDID.h"
@implementation AppDelegate (Login)
-(void)configThirdPartLogin{
@@ -67,6 +68,8 @@
[[QXLocationManager shareManager] startLoction];
[QXLocationManager shareManager].delegate = self;
[self getUserInfo];
+ NSString *clientId = [OpenUDID value];
+ [[QXManagerMqtt sharedInstance] bindWithUserName:@"public" password:@"" cliendId:clientId isSSL:NO];
}
-(void)onKickedOffline{
diff --git a/QXLive/Other/AppDelegate.m b/QXLive/Other/AppDelegate.m
index 088803d..e513a73 100644
--- a/QXLive/Other/AppDelegate.m
+++ b/QXLive/Other/AppDelegate.m
@@ -14,8 +14,6 @@
#import
#import
#import
-#import "QXManagerMqtt.h"
-#import "OpenUDID.h"
#if DEBUG
#import
#endif
@@ -44,8 +42,6 @@
SDImageWebPCoder *webPCoder = [SDImageWebPCoder sharedCoder];
[[SDImageCodersManager sharedManager] addCoder:webPCoder];
[self configThirdPartLogin];
- NSString *clientId = [OpenUDID value];
- [[QXManagerMqtt sharedInstance] bindWithUserName:@"public" password:@"" cliendId:clientId isSSL:NO];
#if DEBUG
[[LLDebugTool sharedTool] startWorking];
#endif
diff --git a/QXLive/Other/Assets.xcassets/启动页.imageset/Contents.json b/QXLive/Other/Assets.xcassets/启动页.imageset/Contents.json
new file mode 100644
index 0000000..111ee58
--- /dev/null
+++ b/QXLive/Other/Assets.xcassets/启动页.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "启动页.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/QXLive/Other/Assets.xcassets/启动页.imageset/启动页.png b/QXLive/Other/Assets.xcassets/启动页.imageset/启动页.png
new file mode 100644
index 0000000..8969d58
Binary files /dev/null and b/QXLive/Other/Assets.xcassets/启动页.imageset/启动页.png differ
diff --git a/QXLive/Other/Base.lproj/LaunchScreen.storyboard b/QXLive/Other/Base.lproj/LaunchScreen.storyboard
index 865e932..e764de5 100644
--- a/QXLive/Other/Base.lproj/LaunchScreen.storyboard
+++ b/QXLive/Other/Base.lproj/LaunchScreen.storyboard
@@ -1,8 +1,11 @@
-
-
+
+
+
-
+
+
+
@@ -11,15 +14,32 @@
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
diff --git a/QXLive/QXLiveDev.plist b/QXLive/QXLiveDev.plist
index 5cd9c09..50c3c65 100644
--- a/QXLive/QXLiveDev.plist
+++ b/QXLive/QXLiveDev.plist
@@ -13,7 +13,7 @@
Editor
CFBundleURLSchemes
- qxlive
+ qxlivetest