Files
real-e-party-iOS/issues/white-label-refactor-plan.md
edwinQQQ a35a711be6 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
2025-10-09 16:19:14 +08:00

9.6 KiB
Raw Blame History

白牌项目一个月改造计划

项目背景

  • 目标:基于现有 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.m4605行
      • 提取礼物模块为独立 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. 批量类名替换脚本

#!/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. 图片资源批量处理

#!/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 方式拆分,不改变主类:

// XPRoomViewController+Gift.h
@interface XPRoomViewController (Gift)
- (void)setupGiftUI;
- (void)handleGiftAction;
@end

// XPRoomViewController+PK.h
@interface XPRoomViewController (PK)
- (void)setupPKUI;
- (void)handlePKAction;
@end

4. 颜色系统替换

// 新建 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天