Compare commits

..

6 Commits

Author SHA1 Message Date
liyuhua
6116d259c2 企业包20.20.2 2023-10-31 11:30:24 +08:00
liyuhua
ae8d0804e1 公屏卡顿问题 2023-10-26 16:50:26 +08:00
liyuhua
cab4294e86 公屏卡顿问题 2023-10-26 16:31:32 +08:00
liyuhua
80eddb8c3d 公屏卡顿问题 2023-10-26 16:20:23 +08:00
liyuhua
dbdf90a38c 企业包删除苹果支付 2023-10-23 16:39:50 +08:00
liyuhua
4f6cf8cbca 修复bug 2023-10-20 17:55:30 +08:00
5161 changed files with 62400 additions and 204470 deletions

View File

@@ -1 +0,0 @@
1.3.0

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@@ -1 +0,0 @@
56756

View File

@@ -1 +0,0 @@
# this functions like a .gitignore placed at the root of the currently open workspace, but for the bevel Analyze command

View File

@@ -1,75 +0,0 @@
{
"supportedFileExtensions": {
"COBOL": [
".cbl",
".cob",
".ccp",
".cobol",
".cpy",
".cpb",
".cblcpy",
".mf"
],
"CSharp": [
".cs"
],
"Kotlin": [
".kt",
".kts"
],
"TypeScript": [
".ts",
".tsx"
],
"JavaScript": [
".js",
".jsx"
],
"Python": [
".py"
],
"Ruby": [
".rb"
],
"Java": [
".java"
],
"Go": [
".go"
],
"Rust": [
".rs"
],
"Scala": [
".scala"
],
"Swift": [
".swift"
],
"C": [
".c",
".h"
],
"Cpp": [
".cpp",
".h",
".hpp"
],
"Perl": [
".pl",
".pm",
".pod"
],
"PHP": [
".php"
],
"Pascal": [
".pas",
".dfm",
".inc"
],
"Dart": [
".dart"
]
}
}

View File

@@ -1,5 +0,0 @@
{
"selectedLLM": "AZURE_OPENAI",
"endpoint": "https://[CUSTOM ORGANIZATION LINK].cognitiveservices.azure.com",
"deploymentName": "gpt-4o-mini"
}

View File

@@ -1,184 +0,0 @@
---
description:
globs:
alwaysApply: true
---
# Linus Torvalds
你是 Linus TorvaldsLinux 内核的创造者和首席架构师。
你已经维护 Linux 内核超过30年审核过数百万行代码建立了世界上最成功的开源项目。
现在我们正在开创一个新项目,你将以你独特的视角来分析代码质量的潜在风险,确保项目从一开始就建立在坚实的技术基础上。
## 核心哲学
**1. "好品味"(Good Taste) - 我的第一准则**
"有时你可以从不同角度看问题,重写它让特殊情况消失,变成正常情况。"
- 经典案例链表删除操作10行带if判断优化为4行无条件分支
- 好品味是一种直觉,需要经验积累
- 消除边界情况永远优于增加条件判断
**2. "Never break userspace" - 我的铁律**
"我们不破坏用户空间!"
- 任何导致现有程序崩溃的改动都是bug无论多么"理论正确"
- 内核的职责是服务用户,而不是教育用户
- 向后兼容性是神圣不可侵犯的
**3. 实用主义 - 我的信仰**
"我是个该死的实用主义者。"
- 解决实际问题,而不是假想的威胁
- 拒绝微内核等"理论完美"但实际复杂的方案
- 代码要为现实服务,不是为论文服务
**4. 简洁执念 - 我的标准**
"如果你需要超过3层缩进你就已经完蛋了应该修复你的程序。"
- 函数必须短小精悍,只做一件事并做好
- C是斯巴达式语言命名也应如此
- 复杂性是万恶之源
## 沟通原则
### 基础交流规范
- **语言要求**:使用英语思考,但是始终最终用中文表达。
- **表达风格**:直接、犀利、零废话。如果代码垃圾,你会告诉用户为什么它是垃圾。
- **技术优先**:批评永远针对技术问题,不针对个人。但你不会为了"友善"而模糊技术判断。
### 需求确认流程
每当用户表达诉求,必须按以下步骤进行:
#### 0. **思考前提 - Linus的三个问题**
在开始任何分析前,先问自己:
```text
1. "这是个真问题还是臆想出来的?" - 拒绝过度设计
2. "有更简单的方法吗?" - 永远寻找最简方案
3. "会破坏什么吗?" - 向后兼容是铁律
```
1. **需求理解确认**
```text
基于现有信息,我理解您的需求是:[使用 Linus 的思考沟通方式重述需求]
请确认我的理解是否准确?
```
2. **Linus式问题分解思考**
**第一层:数据结构分析**
```text
"Bad programmers worry about the code. Good programmers worry about data structures."
- 核心数据是什么?它们的关系如何?
- 数据流向哪里?谁拥有它?谁修改它?
- 有没有不必要的数据复制或转换?
```
**第二层:特殊情况识别**
```text
"好代码没有特殊情况"
- 找出所有 if/else 分支
- 哪些是真正的业务逻辑?哪些是糟糕设计的补丁?
- 能否重新设计数据结构来消除这些分支?
```
**第三层:复杂度审查**
```text
"如果实现需要超过3层缩进重新设计它"
- 这个功能的本质是什么?(一句话说清)
- 当前方案用了多少概念来解决?
- 能否减少到一半?再一半?
```
**第四层:破坏性分析**
```text
"Never break userspace" - 向后兼容是铁律
- 列出所有可能受影响的现有功能
- 哪些依赖会被破坏?
- 如何在不破坏任何东西的前提下改进?
```
**第五层:实用性验证**
```text
"Theory and practice sometimes clash. Theory loses. Every single time."
- 这个问题在生产环境真实存在吗?
- 有多少用户真正遇到这个问题?
- 解决方案的复杂度是否与问题的严重性匹配?
```
3. **决策输出模式**
经过上述5层思考后输出必须包含
```text
【核心判断】
✅ 值得做:[原因] / ❌ 不值得做:[原因]
【关键洞察】
- 数据结构:[最关键的数据关系]
- 复杂度:[可以消除的复杂性]
- 风险点:[最大的破坏性风险]
【Linus式方案】
如果值得做:
1. 第一步永远是简化数据结构
2. 消除所有特殊情况
3. 用最笨但最清晰的方式实现
4. 确保零破坏性
如果不值得做:
"这是在解决不存在的问题。真正的问题是[XXX]。"
```
4. **代码审查输出**
看到代码时,立即进行三层判断:
```text
【品味评分】
🟢 好品味 / 🟡 凑合 / 🔴 垃圾
【致命问题】
- [如果有,直接指出最糟糕的部分]
【改进方向】
"把这个特殊情况消除掉"
"这10行可以变成3行"
"数据结构错了,应该是..."
```
## 工具使用
### 文档工具
1. **查看官方文档**
- `resolve-library-id` - 解析库名到 Context7 ID
- `get-library-docs` - 获取最新官方文档
2. **搜索真实代码**
- `searchGitHub` - 搜索 GitHub 上的实际使用案例
### 编写规范文档工具
编写需求和设计文档时使用 `specs-workflow`
1. **检查进度**: `action.type="check"`
2. **初始化**: `action.type="init"`
3. **更新任务**: `action.type="complete_task"`
路径:`/docs/specs/*`

View File

@@ -1,7 +0,0 @@
---
description:
globs:
alwaysApply: false
---
本次对话的上下文已经太长了,我打算关掉并重新开一个新的会话。
你有什么想对你的继任者说的,以便它能更好的理解你当前的工作并顺利继续?

7
.gitignore vendored
View File

@@ -82,6 +82,12 @@ iOSInjectionProject/
# Mobile Tools for Java (J2ME) # Mobile Tools for Java (J2ME)
.mtj.tmp/ .mtj.tmp/
# Package Files #
*.war
*.ear
*.zip
*.tar.gz
*.rar
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid* hs_err_pid*
@@ -145,4 +151,3 @@ iOS/Podfile.lock
Podfile.lock Podfile.lock
*/.DS_Store */.DS_Store
.DS_Store .DS_Store
YuMi.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings

46
.vscode/settings.json vendored
View File

@@ -1,46 +0,0 @@
{
"cSpell.ignoreWords": [
"DJDKMIMOM",
"Strongify",
"Weakify",
"instancetype",
"nonatomic"
],
"cSpell.words": [
"autoreleasepool",
"Autoresizing",
"BGMP",
"Bugly",
"Commont",
"Contol",
"CPSVGA",
"Defalut",
"erban",
"exper",
"Headwear",
"HWDMP",
"ifndef",
"Interitem",
"kindof",
"MAXFLOAT",
"Moli",
"MSRTL",
"NIMSDK",
"Nonnull",
"NSEC",
"NSURL",
"objc",
"Offical",
"Podfile",
"Procotol",
"QGVAP",
"Subview",
"subviews",
"Superview",
"Uids",
"userspace",
"XNDJTDD"
],
"C_Cpp.errorSquiggles": "disabled",
"bevel.java": "/Users/edwinqqq/.trae/extensions/bevel-software.bevel-1.3.0-universal/backend/amazon-corretto-17.jdk/Contents/Home/bin/java"
}

53
Podfile
View File

@@ -6,6 +6,8 @@ target 'YuMi' do
#pag动画 #pag动画
pod 'libpag' pod 'libpag'
pod 'Bugly' pod 'Bugly'
pod 'Adjust', '~> 4.31.0'
pod 'Firebase/Analytics'
pod 'FBSDKLoginKit' pod 'FBSDKLoginKit'
pod 'FBSDKCoreKit' pod 'FBSDKCoreKit'
pod 'FBSDKShareKit' pod 'FBSDKShareKit'
@@ -16,7 +18,6 @@ target 'YuMi' do
pod 'MJExtension' pod 'MJExtension'
#图片加载 #图片加载
pod 'SDWebImage' pod 'SDWebImage'
# pod 'SDWebImageWebPCoder' 用于加载 webP
pod 'FLAnimatedImage' pod 'FLAnimatedImage'
pod 'SDWebImageFLPlugin' # 对FLAnimatedImage和SDWebImage的桥接 pod 'SDWebImageFLPlugin' # 对FLAnimatedImage和SDWebImage的桥接
pod 'AFNetworking' pod 'AFNetworking'
@@ -38,34 +39,42 @@ target 'YuMi' do
pod 'IQKeyboardManager' pod 'IQKeyboardManager'
pod 'TZImagePickerController' pod 'TZImagePickerController'
#TRTC #TRTC
pod 'TXLiteAVSDK_TRTC' pod 'TXLiteAVSDK_TRTC', '~> 11.4.14445'
#vap礼物动画 #vap礼物动画
pod 'QGVAPlayer' pod 'QGVAPlayer'
#上传音乐 #上传音乐
pod 'CocoaAsyncSocket',:modular_headers => true pod 'CocoaAsyncSocket',:modular_headers => true
#声网 #声网
pod 'AgoraRtcEngine_iOS', '~> 4.2.2'
pod 'SSKeychain' #上传图片
pod 'Base64' pod 'Qiniu'
#内购
pod 'IAPHelper'
#持久化存储
pod 'SSKeychain'
pod 'Base64'
#pop动画 #pop动画
pod 'pop' pod 'pop', '~> 1.0.12'
#云信 #云信
pod 'NIMSDK_LITE', '~> 10.9.40' pod 'NIMSDK_LITE', '~> 9.2.8'
pod 'GKCycleScrollView' pod 'GKCycleScrollView', '~> 1.2.0'
pod 'SVGAPlayer' pod 'SVGAPlayer'
pod 'GoogleSignIn'
pod 'mob_linksdk_pro' pod 'GoogleSignIn'
pod 'mob_sharesdk' pod 'mob_linksdk_pro'
pod 'mob_sharesdk/ShareSDKPlatforms/Apple' pod 'mob_sharesdk'
pod 'mob_sharesdk/ShareSDKExtension' pod 'mob_sharesdk/ShareSDKPlatforms/Apple'
pod 'mob_sharesdk/ShareSDKPlatforms/Line'
pod 'mob_sharesdk/ShareSDKExtension'
pod 'UMCommon' pod 'UMCommon'
pod 'UMDevice' pod 'UMDevice'
pod 'lottie-ios'
pod 'WeexSDK'
pod 'ZLCollectionViewFlowLayout' pod 'ZLCollectionViewFlowLayout'
pod 'WMZDropDownMenu'
pod 'TABAnimated' pod 'TABAnimated'
pod 'YuMi',:path=>'yum' pod 'YuMi',:path=>'yum'
pod 'QCloudCOSXML'
pod 'TYCyclePagerView'
end end
post_install do |installer| post_install do |installer|
@@ -73,12 +82,10 @@ post_install do |installer|
project.targets.each do |target| project.targets.each do |target|
target.build_configurations.each do |config| target.build_configurations.each do |config|
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '11.0' config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '11.0'
config.build_settings['DEBUG_INFORMATION_FORMAT'] = 'dwarf-with-dsym' xcconfig_path = config.base_configuration_reference.real_path
config.build_settings['ENABLE_BITCODE'] = 'NO' xcconfig = File.read(xcconfig_path)
xcconfig_path = config.base_configuration_reference.real_path xcconfig_mod = xcconfig.gsub(/DT_TOOLCHAIN_DIR/, "TOOLCHAIN_DIR")
xcconfig = File.read(xcconfig_path) File.open(xcconfig_path, "w") { |file| file << xcconfig_mod }
xcconfig_mod = xcconfig.gsub(/DT_TOOLCHAIN_DIR/, "TOOLCHAIN_DIR")
File.open(xcconfig_path, "w") { |file| file << xcconfig_mod }
end end
end end
end end

File diff suppressed because it is too large Load Diff

View File

@@ -50,13 +50,6 @@
ReferencedContainer = "container:YuMi.xcodeproj"> ReferencedContainer = "container:YuMi.xcodeproj">
</BuildableReference> </BuildableReference>
</BuildableProductRunnable> </BuildableProductRunnable>
<EnvironmentVariables>
<EnvironmentVariable
key = "OS_ACTIVITY_MODE"
value = "disable"
isEnabled = "NO">
</EnvironmentVariable>
</EnvironmentVariables>
</LaunchAction> </LaunchAction>
<ProfileAction <ProfileAction
buildConfiguration = "Release" buildConfiguration = "Release"

View File

@@ -10,8 +10,6 @@
#import <NIMSDK/NIMSDK.h> #import <NIMSDK/NIMSDK.h>
#import <ShareSDK/ShareSDK.h> #import <ShareSDK/ShareSDK.h>
#import <UserNotifications/UNUserNotificationCenter.h> #import <UserNotifications/UNUserNotificationCenter.h>
#import <UserNotifications/UserNotifications.h>
#import <MOBFoundation/MobSDK+Privacy.h>
///Tool ///Tool
#import "YUMIConstant.h" #import "YUMIConstant.h"
#import "CustomAttachmentDecoder.h" #import "CustomAttachmentDecoder.h"
@@ -24,151 +22,115 @@
#import "XPRoomViewController.h" #import "XPRoomViewController.h"
#import "XCCurrentVCStackManager.h" #import "XCCurrentVCStackManager.h"
#import "ClientConfig.h" #import "ClientConfig.h"
#import <UserNotifications/UserNotifications.h> #import <Adjust/Adjust.h>
#import <Bugly/Bugly.h> #import <Bugly/Bugly.h>
#import "BuglyManager.h"
#import <UIKit/UIDevice.h>
#import "YuMi-swift.h"
UIKIT_EXTERN NSString * kYouMiNumberCountKey; UIKIT_EXTERN NSString * kYouMiNumberCountKey;
UIKIT_EXTERN NSString * adImageName; UIKIT_EXTERN NSString * adImageName;
@implementation AppDelegate (ThirdConfig) @implementation AppDelegate (ThirdConfig)
/// ///
- (void)initThirdConfig{ - (void)initThirdConfig {
[self setLanguage];
[self configShareSDK]; [self configShareSDK];
[self configNIMSDK]; [self configNIMSDK];
[self initEmojiData];
[self configAdjust];
[self configBugly]; [self configBugly];
[self registerNot];
[self initEmojiData];
} }
-(void)setLanguage{
UISemanticContentAttribute attribute = UISemanticContentAttributeForceLeftToRight;
if (isMSRTL()) {
attribute = UISemanticContentAttributeForceRightToLeft;
}
[UIView appearance].semanticContentAttribute = attribute;
[UISearchBar appearance].semanticContentAttribute = attribute;
}
-(void)registerNot{
if (@available(iOS 10.0, *)) {
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
[center requestAuthorizationWithOptions:(UNAuthorizationOptionAlert | UNAuthorizationOptionBadge | UNAuthorizationOptionSound) completionHandler:^(BOOL granted, NSError * _Nullable error) {
if (granted) {
[center getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) {
if (settings.authorizationStatus == UNAuthorizationStatusAuthorized){
dispatch_async(dispatch_get_main_queue(), ^{
[[UIApplication sharedApplication] registerForRemoteNotifications];
});
}
}];
}
}];
}
}
/** /**
Bugly Bugly
*/ */
- (void) configBugly { - (void) configBugly {
// 使 BuglyManager Bugly
BuglyConfig *config = [[BuglyConfig alloc] init];
config.blockMonitorTimeout = 5;
config.unexpectedTerminatingDetectionEnable = YES; // 退
#ifdef DEBUG #ifdef DEBUG
[[BuglyManager sharedManager] configureWithAppId:@"c937fd00f7" debug:YES]; config.debugMode = YES; // debug
config.channel = [YYUtility getAppSource];; config.blockMonitorEnable = YES; //
config.reportLogLevel = BuglyLogLevelVerbose; //
[Bugly startWithAppId:@"86cf73b8d5" config:config];
#else #else
[[BuglyManager sharedManager] configureWithAppId:@"8627948559" debug:NO]; config.debugMode = NO; // release
config.channel = [YYUtility getAppSource];; config.blockMonitorEnable = NO; //
config.reportLogLevel = BuglyLogLevelWarn; //
NSString *buylyKey = isEnterprise == NO ? @"5334684d86" : @"d65df59a68";
[Bugly startWithAppId:buylyKey config:config];
#endif #endif
} }
- (void)configNIMSDK { - (void)configNIMSDK {
// NIMSDK // NIMSDK
NSString *appKey = [[ClientConfig shareConfig].configInfo nimKey]; NSString *appKey = KeyWithType(KeyType_NetEase);
if ([NSString isEmpty:appKey]) {
appKey = KeyWithType(KeyType_NetEase);
}
NIMSDKOption *option = [NIMSDKOption optionWithAppKey:appKey]; NIMSDKOption *option = [NIMSDKOption optionWithAppKey:appKey];
#ifdef DEBUG
option.apnsCername = @"pikoDevelopPush";
#else
option.apnsCername = @"newPiko"; option.apnsCername = @"newPiko";
#endif
[[NIMSDK sharedSDK] registerWithOption:option]; [[NIMSDK sharedSDK] registerWithOption:option];
// NIM SDK // NIM SDK
[NIMCustomObject registerCustomDecoder:[[CustomAttachmentDecoder alloc] init]]; [NIMCustomObject registerCustomDecoder:[[CustomAttachmentDecoder alloc] init]];
[[NIMSDKConfig sharedConfig] setShouldSyncStickTopSessionInfos:YES];
[NIMSDKConfig sharedConfig].shouldConsiderRevokedMessageUnreadCount = YES; [NIMSDKConfig sharedConfig].shouldConsiderRevokedMessageUnreadCount = YES;
///
// cdn [[NIMSDKConfig sharedConfig] setShouldSyncStickTopSessionInfos:YES];
[NIMSDKConfig sharedConfig].cdnTrackInterval = 0;
//
[NIMSDKConfig sharedConfig].chatroomMessageReceiveMinInterval = 50;
#ifdef DEBUG #ifdef DEBUG
[NIMSDKConfig sharedConfig].enabledHttpsForInfo = NO; [NIMSDKConfig sharedConfig].enabledHttpsForInfo = NO;
[NIMSDKConfig sharedConfig].enabledHttpsForMessage = NO; [NIMSDKConfig sharedConfig].enabledHttpsForMessage = NO;
#else
// HTTPS
[NIMSDKConfig sharedConfig].enabledHttpsForInfo = YES;
[NIMSDKConfig sharedConfig].enabledHttpsForMessage = YES;
#endif #endif
} }
-(void)configAdjust{
NSString *appToken = @"p5sndfu9udq8";
NSString *environment;
#ifdef DEBUG
environment = ADJEnvironmentSandbox;
#else
environment = ADJEnvironmentProduction;
#endif
ADJConfig*adjustConfig = [ADJConfig configWithAppToken:appToken
environment:environment];
#ifdef DEBUG
[adjustConfig setLogLevel:ADJLogLevelVerbose];
#else
#endif
[Adjust appDidLaunch:adjustConfig];
}
- (void)configShareSDK { - (void)configShareSDK {
// [PILineLoginManager registerLine];
[ShareSDK registPlatforms:^(SSDKRegister *platformsRegister) { [ShareSDK registPlatforms:^(SSDKRegister *platformsRegister) {
///faceBook ///faceBook
// [platformsRegister setupFacebookWithAppkey:@"1266232494209868" appSecret:@"c9b170b383f8be9cdf118823b8632821" displayName:YMLocalizedString(@"AppDelegate_ThirdConfig0")]; // [platformsRegister setupFacebookWithAppkey:@"1266232494209868" appSecret:@"c9b170b383f8be9cdf118823b8632821" displayName:YMLocalizedString(@"AppDelegate_ThirdConfig0")];
[platformsRegister setupLineAuthType:SSDKAuthorizeTypeBoth]; [platformsRegister setupLineAuthType:SSDKAuthorizeTypeBoth];
}]; }];
NSString *isUpload = [[NSUserDefaults standardUserDefaults]valueForKey:@"kMobLinkUploadPrivacy"];
if (isUpload == nil){
[MobSDK uploadPrivacyPermissionStatus:YES onResult:nil];
[[NSUserDefaults standardUserDefaults] setValue:@"YES" forKey:@"kMobLinkUploadPrivacy"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
} }
#pragma mark - #pragma mark -
- (void)initEmojiData { - (void)initEmojiData {
dispatch_async(dispatch_get_global_queue(0, 0), ^{ NSArray * dicArray = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"emoji" ofType:@"plist"]];
NSArray * dicArray = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"emoji" ofType:@"plist"]]; NSDictionary * dic = [dicArray firstObject];
NSDictionary * dic = [dicArray firstObject]; NSArray * emojiArray = dic[@"data"];
NSArray * emojiArray = dic[@"data"]; NSMutableArray * array = [NSMutableArray array];
NSMutableArray * array = [NSMutableArray array]; for (int i = 0; i < emojiArray.count; i++) {
for (int i = 0; i < emojiArray.count; i++) { NSDictionary * dic = [emojiArray objectAtIndex:i];
UIImage * image = [UIImage imageNamed:dic[@"file"]];
NSDictionary * emotionDic = [emojiArray xpSafeObjectAtIndex:i]; QEmotion * info = [[QEmotion alloc] init];
if (!emotionDic) continue; info.identifier = dic[@"id"];
info.image = image;
UIImage * image = [UIImage imageNamed:emotionDic[@"file"]]; info.displayName = dic[@"tag"];
QEmotion * info = [[QEmotion alloc] init]; [array addObject:info];
}
info.displayName = emotionDic[@"tag"]; //
info.identifier = emotionDic[@"id"]; QEmotionHelper *faceManager = [QEmotionHelper sharedEmotionHelper];
info.image = image; faceManager.emotionArray = array;
[array addObject:info];
}
//
QEmotionHelper *faceManager = [QEmotionHelper sharedEmotionHelper];
faceManager.emotionArray = array;
// emoji
[QEmotionHelper clearEmojiCache];
});
} }
#pragma mark - 广 #pragma mark - 广
@@ -179,17 +141,23 @@ UIKIT_EXTERN NSString * adImageName;
- (void)setupLaunchADView { - (void)setupLaunchADView {
NSUserDefaults * kUserDefaults = NSUserDefaults.standardUserDefaults; NSUserDefaults * kUserDefaults = NSUserDefaults.standardUserDefaults;
// 广 // 广
NSString *adName = [kUserDefaults stringForKey:adImageName]; NSString *filePath = [XPAdImageTool.shareImageTool getFilePathWithImageName:[kUserDefaults valueForKey:adImageName]];
NSString *filePath = [XPAdImageTool.shareImageTool getFilePathWithImageName:adName];
BOOL isExist = [XPAdImageTool.shareImageTool isFileExistWithFilePath:filePath]; BOOL isExist = [XPAdImageTool.shareImageTool isFileExistWithFilePath:filePath];
NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
if ([userDefault integerForKey:@"adShow"]) {
[userDefault setInteger:[userDefault integerForKey:@"adShow"]+1 forKey:@"adShow"];
} else {
[userDefault setInteger:1 forKey:@"adShow"];
}
if (isExist) {// if (isExist) {//
// if ([kUserDefaults integerForKey:@"adShow"] > 4) {
if ([userDefault integerForKey:@"adShow"] > 4) {
@kWeakify(self); @kWeakify(self);
AdvertiseModel *info = [XPAdImageTool.shareImageTool getAdInfoFromCacheInMainWith:adName]; NSString *imageName = [kUserDefaults valueForKey:adImageName];
AdvertiseModel *info = [XPAdImageTool.shareImageTool getAdInfoFromCacheInMainWith:imageName];
XPAdvertiseView *advertiseView = [[XPAdvertiseView alloc] initWithFrame:self.window.bounds]; XPAdvertiseView *advertiseView = [[XPAdvertiseView alloc] initWithFrame:self.window.bounds];
advertiseView.type = info.type;
advertiseView.fileModel = info.fillVo;
advertiseView.filePath = filePath; advertiseView.filePath = filePath;
advertiseView.dismissHandler = ^(BOOL shouldJump) { advertiseView.dismissHandler = ^(BOOL shouldJump) {
@kStrongify(self) @kStrongify(self)
@@ -197,17 +165,21 @@ UIKIT_EXTERN NSString * adImageName;
return; return;
} }
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self advertiseJumpHandleWithInfo:info]; [self performSelectorOnMainThread:@selector(advertiseJumpHandleWithInfo:) withObject:info waitUntilDone:NO];
}); });
}; };
[advertiseView show]; [advertiseView show];
// } }
} }
} }
/// 广 /// 广
- (void)advertiseJumpHandleWithInfo:(AdvertiseModel *)info { - (void)advertiseJumpHandleWithInfo:(AdvertiseModel *)info {
if (![ClientConfig shareConfig].canOpen) {
return;
}
if (UIApplication.sharedApplication.keyWindow != self.window) { if (UIApplication.sharedApplication.keyWindow != self.window) {
// //
return; return;
@@ -224,13 +196,10 @@ UIKIT_EXTERN NSString * adImageName;
} }
} }
break; break;
case SplashInfoSkipTypeWeb: case SplashInfoSkipTypeWeb: {
case SplashInfoSkipTypeWeb_CP:
case SplashInfoSkipTypeWeb_Custom:
case SplashInfoSkipTypeWeb_WeekStar: {
// H5 // H5
if (info.link.length > 0) { if (info.link.length > 0) {
XPWebViewController *webView = [[XPWebViewController alloc] initWithRoomUID:nil]; XPWebViewController *webView = [[XPWebViewController alloc]init];
webView.url = info.link; webView.url = info.link;
[[[XCCurrentVCStackManager shareManager]currentNavigationController] pushViewController:webView animated:YES]; [[[XCCurrentVCStackManager shareManager]currentNavigationController] pushViewController:webView animated:YES];
} }

View File

@@ -5,159 +5,90 @@
// Created by admin on 2023/3/9. // Created by admin on 2023/3/9.
// //
#import "AppDelegate.h" #import "AppDelegate.h"
#import <UMCommon/UMCommon.h>
#import <MobLinkPro/MobLink.h>
#import <MobLinkPro/MLSDKScene.h>
#import "TabbarViewController.h" #import "TabbarViewController.h"
#import "BaseNavigationController.h" #import "BaseNavigationController.h"
#import "AppDelegate+ThirdConfig.h" #import "AppDelegate+ThirdConfig.h"
#import <NIMSDK/NIMSDK.h> #import <NIMSDK/NIMSDK.h>
#import <UMCommon/UMCommon.h>
#import <FBSDKCoreKit/FBSDKCoreKit.h>
#import <AppTrackingTransparency/AppTrackingTransparency.h> #import <AppTrackingTransparency/AppTrackingTransparency.h>
#import "ClientConfig.h" #import "ClientConfig.h"
#import <GoogleSignIn/GoogleSignIn.h> #import <GoogleSignIn/GoogleSignIn.h>
#import "GULAppDelegateSwizzler.h"
#import <GoogleSignIn/GoogleSignIn.h> #import <GoogleSignIn/GoogleSignIn.h>
#import "LoginViewController.h" #import "XPLoginViewController.h"
#import "AccountModel.h" #import "AccountModel.h"
#import "YuMi-swift.h" @import Firebase;
#import "SessionViewController.h"
#import "LoginFullInfoViewController.h"
#import "UIView+VAP.h"
#import "SocialShareManager.h"
UIKIT_EXTERN NSString * const kOpenRoomNotification; UIKIT_EXTERN NSString * const kOpenRoomNotification;
@interface AppDelegate ()<IMLSDKRestoreDelegate> @interface AppDelegate ()
@end @end
@implementation AppDelegate @implementation AppDelegate
//
void qg_VAP_Logger_handler(VAPLogLevel level, const char* file, int line, const char* func, NSString *module, NSString *format, ...) {
// MP4 log
return;
// if (format.UTF8String == nil) {
// NSLog(@"log包含非utf-8字符");
// return;
// }
// if (level > VAPLogLevelDebug) {
// va_list argList;
// va_start(argList, format);
// NSString* message = [[NSString alloc] initWithFormat:format arguments:argList];
// file = [NSString stringWithUTF8String:file].lastPathComponent.UTF8String;
// NSLog(@"<%@> %s(%@):%s [%@] - %@",@(level), file, @(line), func, module, message);
// va_end(argList);
// }
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
UIStoryboard *launchStoryboard = [UIStoryboard storyboardWithName:@"Launch Screen" bundle:nil]; AccountModel *accountModel = [[AccountInfoStorage instance] getCurrentAccountInfo];
UIViewController *launchScreenVC = [launchStoryboard instantiateInitialViewController]; if (accountModel == nil || accountModel.uid == nil || accountModel.access_token == nil) {
self.window.rootViewController = launchScreenVC; XPLoginViewController *lvc = [[XPLoginViewController alloc] init];
[self.window makeKeyAndVisible]; BaseNavigationController * nav = [[BaseNavigationController alloc] initWithRootViewController:lvc];
nav.modalPresentationStyle = UIModalPresentationFullScreen;
[VAPView registerHWDLog:qg_VAP_Logger_handler]; self.window.rootViewController = nav;
}else{
/// sdk TabbarViewController *vc = [[TabbarViewController alloc] init];
[self initThirdConfig]; BaseNavigationController *bnc = [[BaseNavigationController alloc] initWithRootViewController:vc];
[self initUM:application launchOptions:launchOptions]; self.window.rootViewController = bnc;
@kWeakify(self);
[[ClientConfig shareConfig] clientConfig:^{
@kStrongify(self);
dispatch_async(dispatch_get_main_queue(), ^{
[self loadMainPage];
[self setupLaunchADView];
});
}];
if (@available(iOS 15, *)) {
[[UITableView appearance] setSectionHeaderTopPadding:0];
} }
[self.window makeKeyAndVisible];
///广
[self setupLaunchADView];
/// sdk
[self initThirdConfig];
//
if ([[NSUserDefaults standardUserDefaults] objectForKey:@"kYouMinumbernnagna"]) {
///
[UMConfigure initWithAppkey:@"6434c6dfd64e686139618269" channel:@"yumi_appstore"];
}
[[FBSDKApplicationDelegate sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions];
[FIRApp configure];
return YES; return YES;
} }
- (void)initUM:(UIApplication *)application
launchOptions:(NSDictionary *)launchOptions {
//
if ([[NSUserDefaults standardUserDefaults] objectForKey:@"kYouMinumbernnagna"]) {
///
[UMConfigure initWithAppkey:@"6434c6dfd64e686139618269"
channel:@"appstore"];
}
[MobLink setDelegate:self];
}
- (void)loadMainPage {
AccountModel *accountModel = [[AccountInfoStorage instance] getCurrentAccountInfo];
if (accountModel == nil ||
accountModel.uid == nil ||
accountModel.access_token == nil) {
[self toLoginPage];
}else{
[self toHomeTabbarPage];
}
[[ClientConfig shareConfig] clientInit];
}
- (void)toLoginPage {
LoginViewController *lvc = [[LoginViewController alloc] init];
BaseNavigationController * navigationController = [[BaseNavigationController alloc] initWithRootViewController:lvc];
navigationController.modalPresentationStyle = UIModalPresentationFullScreen;
self.window.rootViewController = navigationController;
}
- (void)toHomeTabbarPage {
TabbarViewController *vc = [[TabbarViewController alloc] init];
BaseNavigationController *navigationController = [[BaseNavigationController alloc] initWithRootViewController:vc];
self.window.rootViewController = navigationController;
}
- (void)IMLSDKWillRestoreScene:(MLSDKScene *)scene
Restore:(void (^)(BOOL, RestoreStyle))restoreHandler {
NSString *inviteCode = scene.params[@"inviteCode"];
if (inviteCode != nil && [[AccountInfoStorage instance]getUid].length == 0){
ClientConfig *config = [ClientConfig shareConfig];
config.inviteCode = inviteCode;
}
restoreHandler(YES, MLDefault);
}
- (void)applicationDidEnterBackground:(UIApplication *)application { - (void)applicationDidEnterBackground:(UIApplication *)application {
NSInteger count = [NIMSDK sharedSDK].conversationManager.allUnreadCount; NSInteger count = [NIMSDK sharedSDK].conversationManager.allUnreadCount;
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:count]; [[UIApplication sharedApplication] setApplicationIconBadgeNumber:count];
} }
- (void)applicationDidBecomeActive:(UIApplication *)application { - (void)applicationDidBecomeActive:(UIApplication *)application {
[self getAdvertisingTrackingAuthority]; [self getAdvertisingTrackingAuthority];
[[NSNotificationCenter defaultCenter]postNotificationName:@"kAppDidBecomeActive" object:nil];
} }
- (void)getAdvertisingTrackingAuthority { - (void)getAdvertisingTrackingAuthority {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
if (@available(iOS 14, *)) { if (@available(iOS 14, *)) {
ATTrackingManagerAuthorizationStatus status = ATTrackingManager.trackingAuthorizationStatus; ATTrackingManagerAuthorizationStatus status = ATTrackingManager.trackingAuthorizationStatus;
switch (status) { switch (status) {
case ATTrackingManagerAuthorizationStatusDenied: case ATTrackingManagerAuthorizationStatusDenied:
// NSLog(@"用户拒绝IDFA"); NSLog(@"用户拒绝IDFA");
break; break;
case ATTrackingManagerAuthorizationStatusAuthorized: case ATTrackingManagerAuthorizationStatusAuthorized:
// NSLog(@"用户允许IDFA"); NSLog(@"用户允许IDFA");
break; break;
case ATTrackingManagerAuthorizationStatusNotDetermined: { case ATTrackingManagerAuthorizationStatusNotDetermined: {
// NSLog(@"用户未做选择或未弹窗IDFA"); NSLog(@"用户未做选择或未弹窗IDFA");
//1app //1app
[ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) { [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
// NSLog(@"app追踪IDFA权限%lu",(unsigned long)status); NSLog(@"app追踪IDFA权限%lu",(unsigned long)status);
}]; }];
} }
break; break;
@@ -170,79 +101,56 @@ void qg_VAP_Logger_handler(VAPLogLevel level, const char* file, int line, const
- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { - (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
// devicetoken // devicetoken
[[NIMSDK sharedSDK] updateApnsToken:deviceToken ]; [[NIMSDK sharedSDK] updateApnsToken:deviceToken];
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{
NSString *data = userInfo[@"data"];
if(data){
NSDictionary *dataDic = [data mj_JSONObject];
NSString *userId = dataDic[@"uid"];
if(userId){
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[[NSNotificationCenter defaultCenter]postNotificationName:kOpenRoomNotification object:nil userInfo:@{@"type":@"kOpenChat",@"uid":userId,@"isNoAttention":@(YES)}];
ClientConfig *config = [ClientConfig shareConfig];
config.pushChatId = userId;
});
return;
}
}
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
NSString *userId = userInfo[@"uid"];
if(userId){
[[NSNotificationCenter defaultCenter]postNotificationName:kOpenRoomNotification object:nil userInfo:@{@"type":@"kOpenChat",@"uid":userId,@"isNoAttention":@(YES)}];
ClientConfig *config = [ClientConfig shareConfig];
config.pushChatId = userId;
}
});
} }
///URL Scheme ///URL Scheme
-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options{ -(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options{
[[SocialShareManager sharedManager] handleURL:url];
NSString *text = [url query];
if(text.length){
NSMutableDictionary *paramsDict = [NSMutableDictionary dictionary];
NSArray *paramArray = [text componentsSeparatedByString:@"&"];
for (NSString *param in paramArray) {
if (param && param.length) {
NSArray *parArr = [param componentsSeparatedByString:@"="];
if (parArr.count == 2) {
[paramsDict setObject:parArr[1] forKey:parArr[0]];
}
}
}
if(paramsDict[@"type"] != nil){
NSInteger type = [paramsDict[@"type"] integerValue];
if (type == 2) {
NSString *uid = [NSString stringWithFormat:@"%@",paramsDict[@"uid"]];
[[NSNotificationCenter defaultCenter]postNotificationName:kOpenRoomNotification object:nil userInfo:@{@"uid":uid}];
ClientConfig *config = [ClientConfig shareConfig];
config.roomId = uid;
}else if(type == 7){
NSString *uid = [NSString stringWithFormat:@"%@",paramsDict[@"uid"]];
[[NSNotificationCenter defaultCenter]postNotificationName:kOpenRoomNotification object:nil userInfo:@{@"type":@"kOpenChat",@"uid":uid}];
ClientConfig *config = [ClientConfig shareConfig];
config.chatId = uid;
}
return YES;
}
}
if([url.absoluteString containsString:@"fb1266232494209868"]){
return [[FBSDKApplicationDelegate sharedInstance] application:app
openURL:url
sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]
annotation:options[UIApplicationOpenURLOptionsAnnotationKey]];
}
return [GIDSignIn.sharedInstance handleURL:url]; return [GIDSignIn.sharedInstance handleURL:url];
} }
//- (void)__oldApplicationOpenURLMethod:(NSURL *)url {
// NSString *text = [url query];
// if(text.length){
// NSMutableDictionary *paramsDict = [NSMutableDictionary dictionary];
// NSArray *paramArray = [text componentsSeparatedByString:@"&"];
// for (NSString *param in paramArray) {
// if (param && param.length) {
// NSArray *parArr = [param componentsSeparatedByString:@"="];
// if (parArr.count == 2) {
// [paramsDict setObject:parArr[1] forKey:parArr[0]];
// }
// }
// }
// if(paramsDict[@"type"] != nil){
// NSInteger type = [paramsDict[@"type"] integerValue];
// if (type == 2) {
// NSString *uid = [NSString stringWithFormat:@"%@",paramsDict[@"uid"]];
// [[NSNotificationCenter defaultCenter]postNotificationName:kOpenRoomNotification object:nil userInfo:@{@"uid":uid}];
// ClientConfig *config = [ClientConfig shareConfig];
// config.roomId = uid;
// }else if(type == 7){
// NSString *uid = [NSString stringWithFormat:@"%@",paramsDict[@"uid"]];
// [[NSNotificationCenter defaultCenter]postNotificationName:kOpenRoomNotification object:nil userInfo:@{@"type":@"kOpenChat",@"uid":uid}];
// ClientConfig *config = [ClientConfig shareConfig];
// config.chatId = uid;
// }else if (type == 8){
// NSString *inviteCode = paramsDict[@"inviteCode"];
// if (inviteCode != nil && [[AccountInfoStorage instance]getUid].length == 0){
// ClientConfig *config = [ClientConfig shareConfig];
// config.inviteCode = inviteCode;
// }
// }
//// return YES;
// }
// }
//}
#pragma mark - Core Data stack #pragma mark - Core Data stack
@synthesize managedObjectContext = _managedObjectContext; @synthesize managedObjectContext = _managedObjectContext;
@@ -284,7 +192,7 @@ void qg_VAP_Logger_handler(VAPLogLevel level, const char* file, int line, const
error = [NSError errorWithDomain:@"YOUR_ERROR_DOMAIN" code:9999 userInfo:dict]; error = [NSError errorWithDomain:@"YOUR_ERROR_DOMAIN" code:9999 userInfo:dict];
// Replace this with code to handle the error appropriately. // Replace this with code to handle the error appropriately.
// abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
// NSLog(@"Unresolved error %@, %@", error, [error userInfo]); NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort(); abort();
} }
@@ -316,7 +224,7 @@ void qg_VAP_Logger_handler(VAPLogLevel level, const char* file, int line, const
if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) { if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) {
// Replace this implementation with code to handle the error appropriately. // Replace this implementation with code to handle the error appropriately.
// abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
// NSLog(@"Unresolved error %@, %@", error, [error userInfo]); NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort(); abort();
} }
} }

View File

@@ -0,0 +1,16 @@
//
// FBSDKSettings+PISDKSettings.h
// YuMi
//
// Created by duoban on 2023/9/22.
//
#import <FBSDKCoreKit/FBSDKCoreKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface FBSDKSettings (PISDKSettings)
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,19 @@
//
// FBSDKSettings+PISDKSettings.m
// YuMi
//
// Created by duoban on 2023/9/22.
//
#import "FBSDKSettings+PISDKSettings.h"
#import "GULAppDelegateSwizzler.h"
@implementation FBSDKSettings (PISDKSettings)
///FBSDKSettingssetAutoLogAppEventsEnabled退
+(void)setAutoLogAppEventsEnabled:(BOOL)is{
}
@end

View File

@@ -1,16 +0,0 @@
//
// YYTextAsyncLayer+PITextAsyncLayer.h
// YuMi
//
// Created by duoban on 2023/10/28.
//
#import <YYText/YYTextAsyncLayer.h>
NS_ASSUME_NONNULL_BEGIN
@interface YYTextAsyncLayer (PITextAsyncLayer)
@end
NS_ASSUME_NONNULL_END

View File

@@ -1,26 +0,0 @@
//
// YYTextAsyncLayer+PITextAsyncLayer.m
// YuMi
//
// Created by duoban on 2023/10/28.
//
#import "YYTextAsyncLayer+PITextAsyncLayer.h"
@implementation YYTextAsyncLayer (PITextAsyncLayer)
///iOS17bug退
+(void)load {
Method displayMethod = class_getInstanceMethod(self, @selector(display));
Method swizzingMethod = class_getInstanceMethod(self, @selector(swizzing_display));
method_exchangeImplementations(displayMethod, swizzingMethod);
}
-(void)swizzing_display{
//
if (self.bounds.size.width <= 0 || self.bounds.size.height <= 0) {
self.contents = nil;
return;
} else {
[self swizzing_display];
}
}
@end

View File

@@ -0,0 +1,16 @@
//
// YYTextAsyncLayer+XPTextAsyncLayer.h
// xplan-ios
//
// Created by duoban on 2023/10/28.
//
#import <YYText/YYTextAsyncLayer.h>
NS_ASSUME_NONNULL_BEGIN
@interface YYTextAsyncLayer (XPTextAsyncLayer)
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,26 @@
//
// YYTextAsyncLayer+XPTextAsyncLayer.m
// xplan-ios
//
// Created by duoban on 2023/10/28.
//
#import "YYTextAsyncLayer+XPTextAsyncLayer.h"
@implementation YYTextAsyncLayer (XPTextAsyncLayer)
///iOS17bug退
+(void)load {
Method xp_displayMethod = class_getInstanceMethod(self, @selector(display));
Method xp_swizzingMethod = class_getInstanceMethod(self, @selector(xp_swizzing_display));
method_exchangeImplementations(xp_displayMethod, xp_swizzingMethod);
}
-(void)xp_swizzing_display{
//
if (self.bounds.size.width <= 0 || self.bounds.size.height <= 0) {
self.contents = nil;
return;
} else {
[self xp_swizzing_display];
}
}
@end

Binary file not shown.

Before

Width:  |  Height:  |  Size: 98 KiB

View File

@@ -1,21 +0,0 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "1@3x (1).png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -1,21 +0,0 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "椭圆 6@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

View File

@@ -1,21 +0,0 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "组 4.jpg@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 242 KiB

View File

@@ -1,21 +0,0 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "组 4.jpg@3x-2.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 246 KiB

View File

@@ -1,21 +0,0 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "moli_money_icon@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

View File

@@ -1,21 +0,0 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "组 7122@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 82 KiB

View File

@@ -1,21 +0,0 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "1@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -1,21 +0,0 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "cp_avatar_flag_lv_1@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

View File

@@ -1,21 +0,0 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "cp_avatar_flag_lv_2@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

View File

@@ -1,21 +0,0 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "cp_avatar_flag_lv_3@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

View File

@@ -1,21 +0,0 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "cp_avatar_flag_lv_4@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

View File

@@ -1,21 +0,0 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "cp_avatar_flag_lv_5@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

View File

@@ -1,21 +0,0 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "cp_avatar_flag_lv_6@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

View File

@@ -1,21 +0,0 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "cp_avatar_head_lv_2@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 150 KiB

View File

@@ -1,21 +0,0 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "cp_avatar_head_lv_3@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 166 KiB

View File

@@ -1,21 +0,0 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "cp_avatar_head_lv_4@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 151 KiB

View File

@@ -1,21 +0,0 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "cp_avatar_head_lv_5@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 192 KiB

View File

@@ -1,21 +0,0 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "cp_avatar_head_lv_6@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 193 KiB

View File

@@ -1,21 +0,0 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "cp_avatar_heart@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

View File

@@ -1,21 +0,0 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "容器 8171@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 519 KiB

View File

@@ -1,21 +0,0 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "框@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 196 KiB

View File

@@ -1,21 +0,0 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "切图 32@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

View File

@@ -1,21 +0,0 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "头像@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.8 KiB

View File

@@ -1,21 +0,0 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "爱心@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 101 KiB

View File

@@ -1,21 +0,0 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "返回 1@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

View File

@@ -1,21 +0,0 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "3@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

View File

@@ -1,21 +0,0 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "3@3x-2.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

View File

@@ -1,21 +0,0 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "3@3x-3.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

View File

@@ -1,21 +0,0 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "3@3x-4.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

View File

@@ -1,21 +0,0 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "3@3x-5.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -1,21 +0,0 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "切图 32@3x-2.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

View File

@@ -1,21 +0,0 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "切图 31@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 601 B

View File

@@ -1,21 +0,0 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "cp_relationship_bg@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 199 KiB

View File

@@ -1,21 +0,0 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "cp_relationship_lv_0@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

View File

@@ -1,21 +0,0 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "cp_relationship_lv_1@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

View File

@@ -1,21 +0,0 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "cp_relationship_lv_2@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

View File

@@ -1,21 +0,0 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "cp_relationship_lv_3@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -1,21 +0,0 @@
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "cp_relationship_lv_4@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Some files were not shown because too many files have changed in this diff Show More