# 白牌项目一个月改造计划 ## 项目背景 - **目标**:基于现有 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个关键icon)(2天) 3. 主题色全局替换(1天) 4. TabBar 重新设计(2天) 5. 登录页重写(2天) 6. 首页重写(3天) 7. 测试和提审(3天) 这个方案可以达到约 50-60% 的差异化,适合时间极度紧张的情况。 --- ## 附录:工具清单 ### 开发工具 - Xcode Refactor 功能(批量重命名) - AppCode(IntelliJ 的 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-09(30天)