chore: Initial clean commit

- Removed YuMi/Library/ (138 MB, not tracked)
- Removed YuMi/Resources/ (23 MB, not tracked)
- Removed old version assets (566 files, not tracked)
- Excluded Pods/, xcuserdata/ and other build artifacts
- Clean repository optimized for company server deployment
This commit is contained in:
edwinQQQ
2025-10-09 16:19:14 +08:00
commit a35a711be6
5582 changed files with 408913 additions and 0 deletions

View File

@@ -0,0 +1,319 @@
# 白牌项目一个月改造计划
## 项目背景
- **目标**:基于现有 YuMi 项目创建白牌版本,规避 App Store 审查
- **时间**1个月
- **约束**:保留大部分基建代码和 SDK功能可适当裁剪
- **核心策略**:三层剥离法(标识层 100% + 视觉层 80% + 代码结构层 30%
---
## Week 1: 标识层改造100%- 不可逆的关键改动
### Day 1-2: 项目基础标识
- [ ] 创建新的 Xcode Project新 Bundle ID、新证书
- [ ] 全局替换类名前缀5个前缀
- `YM``新前缀1`(如 `LK`
- `XP``新前缀2`(如 `SL`
- `PI``新前缀3`(如 `MT`
- `Moli``新前缀4`(如 `Nova`
- `MS``新前缀5`(如 `AS`
- [ ] 替换所有宏定义前缀
- `YUMI``新宏前缀`
- [ ] 修改全局常量文件
- `YUMIConstant.h/m` → 重命名 + 内容修改
- `YUMIHtmlUrl.h/m` → 重命名 + 内容修改
### Day 3: 文件和模块重命名
- [ ] 重命名核心模块文件夹
- `YMLogin``新名字`
- `YMMessage``新名字`
- `YMMine``新名字`
- `YMMonents``新名字`
- `YMNewHome``新名字`
- `YMRoom``新名字`
- `YMTabbar``新名字`
- [ ] 重命名 Pod 项目名
- `YuMi.podspec` → 新名字
- [ ] 修改 Podfile 引用
### Day 4-5: 字符串常量清理
- [ ] 扫描所有硬编码字符串grep "YuMi|Moli|YUMI"
- [ ] 替换 UserDefaults/Keychain 的 key 前缀
- [ ] 替换所有中文文案为新的品牌名(可选保留,用新马甲名)
- [ ] 修改多语言文件(.strings
---
## Week 2: 视觉层改造80%- UI/UX 大改
### Day 6-7: 资源文件全量替换
- [ ] **图片资源批量处理**2971个文件
- 编写脚本批量重命名所有图片
- 更换核心 icon登录、TabBar、导航栏按钮等
- 调整配色方案(主题色、渐变色)
- 工具:使用 Python/Shell 脚本 + ImageMagick
- [ ] **SVGA 动画资源**
- 重命名所有 .svga 文件
- 替换关键动画(登录动画、礼物动画)
- [ ] **App Icon 和启动图**
- 全新设计 AppIcon
- 替换 LaunchScreen
### Day 8-9: UI 组件库改造
- [ ] 颜色系统重构
- 修改 `DJDKMIMOMColor.h/m` 为新的色值
- 建立新的 UIColor 扩展类(不要用原类名)
- [ ] 通用 UI 组件重写
- `MoliAvatar` → 新的头像组件(改渲染逻辑)
- `SexAgeLabel` → 新样式
- `MoliMoneyLabel` → 新样式
- 所有渐变效果改变方向或色值
- [ ] 字体系统(可选)
- 替换默认字体为另一种商业字体
### Day 10-12: TabBar 和导航栏重构
- [ ] **TabBar 结构调整**
- 更改 Tab 数量5个→4个或6个
- 更改 Tab 顺序(如:首页/消息/我的 → 消息/首页/我的)
- 完全重写 `XPTabBar.h/m` 布局逻辑
- 新的选中/未选中动画效果
- [ ] **导航栏样式**
- `BaseViewController` 的导航栏改为新样式
- 所有返回按钮、右侧按钮图标更换
- 导航栏背景色/透明度调整
---
## Week 3: 代码结构层改造30%- 关键差异化
### Day 13-15: 核心页面 UI 重构
- [ ] **登录页面**`YMLogin` 模块)
- 完全重写 UI 布局(从竖向改横向?)
- 登录方式顺序调整
- 新的视觉风格
- [ ] **首页**`YMNewHome` 模块)
- 房间列表布局改变(瀑布流→网格?)
- 筛选器位置和样式调整
- Banner 尺寸和位置变化
- [ ] **房间页**`YMRoom` 模块)
- ⚠️ 这是最大的模块1059个文件
- **策略**:只改 UI 层,不动业务逻辑
- 拆分 `XPRoomViewController.m`4605行
- 提取礼物模块为独立 ViewController
- 提取 PK 模块为独立 ViewController
- 提取底部控制栏为独立 View
### Day 16-17: 消息和动态模块
- [ ] **消息列表**`YMMessage` 模块)
- Cell 样式完全重写
- 时间显示格式改变
- 头像位置调整
- [ ] **动态/朋友圈**`YMMonents` 模块)
- 布局方式改变(卡片式→列表式?)
- 交互手势调整(点赞动画、评论入口)
### Day 18-19: 个人中心模块
- [ ] **我的页面**`YMMine` 模块)
- 顶部个人信息卡片重新设计
- 设置项图标和顺序调整
- 等级/财富展示方式改变
---
## Week 4: 功能裁剪和测试
### Day 20-21: 功能裁剪(可选)
根据实际情况,可以移除以下模块以降低相似度:
- [ ] 移除小游戏模块(如果有独特的游戏)
- [ ] 移除特定的礼物动画
- [ ] 简化某些复杂的 H5 页面
- [ ] 移除品牌相关的活动页面
### Day 22-23: 网络层包装
- [ ]`HttpRequestHelper` 外包一层新 API
- [ ] 更改请求头字段名User-Agent, Custom-Headers
- [ ] 参数加密方式微调(如果可以服务端配合)
### Day 24-28: 全面测试
- [ ] 核心功能冒烟测试
- 登录/注册
- 首页浏览
- 进入房间
- 发送消息
- 充值流程(测试环境)
- [ ] UI 自动化测试(截图对比)
- [ ] 崩溃率监控(集成 Bugly/Firebase
- [ ] 内存泄漏检测
### Day 29-30: 提审准备
- [ ] 准备新的 App Store 截图5-10张
- [ ] 撰写新的应用描述(完全不同的文案)
- [ ] 准备审核说明(强调差异化功能)
- [ ] 最终检查清单
---
## 关键技术方案
### 1. 批量类名替换脚本
```bash
#!/bin/bash
# rename_classes.sh
OLD_PREFIX="YM"
NEW_PREFIX="LK"
# 查找所有 .h 和 .m 文件
find ./YuMi -type f \( -name "*.h" -o -name "*.m" \) -exec sed -i '' "s/${OLD_PREFIX}/${NEW_PREFIX}/g" {} +
# 重命名文件
find ./YuMi -type f -name "${OLD_PREFIX}*" | while read file; do
newname=$(echo "$file" | sed "s/${OLD_PREFIX}/${NEW_PREFIX}/g")
mv "$file" "$newname"
done
```
### 2. 图片资源批量处理
```python
#!/usr/bin/env python3
# rename_images.py
import os
import hashlib
from PIL import Image
def rename_images(root_dir):
for dirpath, dirnames, filenames in os.walk(root_dir):
for filename in filenames:
if filename.endswith(('.png', '.jpg', '.jpeg')):
old_path = os.path.join(dirpath, filename)
# 生成新的随机名称基于内容hash
new_name = hashlib.md5(open(old_path,'rb').read()).hexdigest()[:16]
new_path = os.path.join(dirpath, new_name + os.path.splitext(filename)[1])
os.rename(old_path, new_path)
print(f"Renamed: {filename} -> {new_name}")
if __name__ == "__main__":
rename_images("./YuMi/Assets.xcassets")
```
### 3. 拆分超大类工具XPRoomViewController
使用 Category 方式拆分,不改变主类:
```objc
// XPRoomViewController+Gift.h
@interface XPRoomViewController (Gift)
- (void)setupGiftUI;
- (void)handleGiftAction;
@end
// XPRoomViewController+PK.h
@interface XPRoomViewController (PK)
- (void)setupPKUI;
- (void)handlePKAction;
@end
```
### 4. 颜色系统替换
```objc
// 新建 AppTheme.h
@interface AppTheme : NSObject
+ (UIColor *)primaryColor; // 主色调
+ (UIColor *)secondaryColor; // 辅助色
+ (UIColor *)accentColor; // 强调色
@end
// 全局替换所有硬编码颜色
// 旧: [UIColor colorWithHex:0xFF6B9D]
// 新: [AppTheme primaryColor]
```
---
## 风险控制
### 高风险点
1. **类名替换可能误伤字符串**
- 解决:先 grep 找出所有字符串常量,手动检查
- 工具:`grep -r "\".*YM.*\"" ./YuMi`
2. **图片批量重命名导致找不到资源**
- 解决:先做映射表,然后用脚本全局替换代码中的引用
- 保留原图副本,出错可回滚
3. **第三方 SDK 回调失败**
- 原因:某些 SDK 使用类名字符串反射
- 解决:保留涉及 SDK 的类名不变,或在映射表中特殊处理
4. **TabBar 结构改变导致通知/跳转失败**
- 原因:很多业务逻辑硬编码了 Tab index
- 解决:全局搜索 `selectedIndex` 和 TabBar 相关跳转
### 测试检查清单
- [ ] 所有第三方登录Facebook/Google/Apple
- [ ] 支付流程(内购/第三方支付)
- [ ] IM 消息收发
- [ ] 直播推流和拉流
- [ ] 深度链接Deep Link
- [ ] 推送通知
- [ ] 分享功能
---
## 成功标准
### App Store 审查通过标准
1. ✅ 二进制代码相似度 < 30%类名方法名完全不同
2. 所有截图视觉差异明显配色布局icon
3. Bundle ID 和签名完全不同
4. 应用描述和关键词无重叠
5. 核心功能可正常使用
### 技术债务评估
- 预计技术债务中等
- 后续维护需要同步维护两套代码建议用 Git 分支管理
- 代码质量不会比原项目更差因为会顺便重构
---
## 备选方案
如果 30 天时间不够可以采用 **最小可行方案**MVP
### 最小改造清单15天
1. 类名全局替换2天
2. 核心图片替换50个关键icon2天
3. 主题色全局替换1天
4. TabBar 重新设计2天
5. 登录页重写2天
6. 首页重写3天
7. 测试和提审3天
这个方案可以达到约 50-60% 的差异化适合时间极度紧张的情况
---
## 附录:工具清单
### 开发工具
- Xcode Refactor 功能批量重命名
- AppCodeIntelliJ OC IDE重构能力更强
- Shell 脚本批量文件操作
- Python 脚本图片处理文本替换
### 设计工具
- Sketch/Figma重新设计 UI
- ImageMagick批量图片处理
- Lottie/SVGA Player动画资源处理
### 测试工具
- Charles/Proxyman抓包测试网络
- Instruments性能和内存测试
- Xcode UI Testing自动化测试
---
**制定人**: Linus Mode AI
**创建时间**: 2025-10-09
**预计完成时间**: 2025-11-0930天