Files
real-e-party-iOS/issues/scripts/1_rename_classes.sh
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

323 lines
9.7 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# 类名批量替换脚本
# 用法: ./1_rename_classes.sh
set -e # 遇到错误立即退出
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN}白牌项目 - 类名批量替换工具${NC}"
echo -e "${GREEN}========================================${NC}"
# 项目根目录
PROJECT_ROOT="/Users/edwinqqq/Local/Company Projects/peko-ios"
YUMI_DIR="$PROJECT_ROOT/YuMi"
# 备份提醒
echo -e "${YELLOW}⚠️ 重要:此脚本会修改大量文件!${NC}"
echo -e "${YELLOW}请确保你已经:${NC}"
echo -e "${YELLOW}1. 提交了所有未保存的更改${NC}"
echo -e "${YELLOW}2. 创建了新的 Git 分支${NC}"
echo -e "${YELLOW}3. 做好了回滚准备${NC}"
echo ""
read -p "确认继续?(y/N): " confirm
if [[ "$confirm" != "y" && "$confirm" != "Y" ]]; then
echo "已取消操作"
exit 0
fi
# ==========================================
# 第一步:定义新前缀
# ==========================================
echo ""
echo -e "${GREEN}[Step 1] 请输入新的类名前缀${NC}"
echo ""
read -p "YM 替换为 (例如: LK): " NEW_PREFIX_YM
read -p "XP 替换为 (例如: SL): " NEW_PREFIX_XP
read -p "PI 替换为 (例如: MT): " NEW_PREFIX_PI
read -p "Moli 替换为 (例如: Nova): " NEW_PREFIX_MOLI
read -p "MS 替换为 (例如: AS): " NEW_PREFIX_MS
# 验证输入
if [[ -z "$NEW_PREFIX_YM" || -z "$NEW_PREFIX_XP" || -z "$NEW_PREFIX_PI" || -z "$NEW_PREFIX_MOLI" || -z "$NEW_PREFIX_MS" ]]; then
echo -e "${RED}❌ 错误:所有前缀都必须输入${NC}"
exit 1
fi
echo ""
echo -e "${GREEN}替换映射:${NC}"
echo " YM → $NEW_PREFIX_YM"
echo " XP → $NEW_PREFIX_XP"
echo " PI → $NEW_PREFIX_PI"
echo " Moli → $NEW_PREFIX_MOLI"
echo " MS → $NEW_PREFIX_MS"
echo ""
read -p "确认以上映射正确?(y/N): " confirm_mapping
if [[ "$confirm_mapping" != "y" && "$confirm_mapping" != "Y" ]]; then
echo "已取消操作"
exit 0
fi
# ==========================================
# 第二步:创建临时白名单(不应该被替换的字符串)
# ==========================================
echo ""
echo -e "${GREEN}[Step 2] 扫描可能误伤的字符串常量...${NC}"
# 创建临时目录
TEMP_DIR="$PROJECT_ROOT/issues/temp_rename"
mkdir -p "$TEMP_DIR"
# 查找所有包含旧前缀的字符串常量
grep -rn "\".*YM.*\"" "$YUMI_DIR" --include="*.m" --include="*.h" > "$TEMP_DIR/string_constants_YM.txt" 2>/dev/null || true
grep -rn "\".*XP.*\"" "$YUMI_DIR" --include="*.m" --include="*.h" > "$TEMP_DIR/string_constants_XP.txt" 2>/dev/null || true
grep -rn "\".*Moli.*\"" "$YUMI_DIR" --include="*.m" --include="*.h" > "$TEMP_DIR/string_constants_Moli.txt" 2>/dev/null || true
echo -e "${YELLOW}找到的字符串常量已保存到:${NC}"
echo " $TEMP_DIR/string_constants_*.txt"
echo -e "${YELLOW}请检查这些文件,确保没有不应该被替换的内容${NC}"
echo ""
read -p "检查完成后按回车继续..."
# ==========================================
# 第三步:替换文件内容
# ==========================================
echo ""
echo -e "${GREEN}[Step 3] 开始替换文件内容...${NC}"
# 函数:替换文件内容
replace_in_files() {
local old_prefix=$1
local new_prefix=$2
local file_count=0
echo " 替换 $old_prefix$new_prefix ..."
# 查找所有 .h 和 .m 文件
while IFS= read -r file; do
# 跳过 Pods 目录
if [[ "$file" == *"/Pods/"* ]]; then
continue
fi
# 执行替换(使用 Perl 的正则,更精确)
# 只替换类名、方法名、属性名,不替换字符串字面量
perl -i -pe "s/\b${old_prefix}([A-Z][a-zA-Z0-9]*)/${new_prefix}\1/g" "$file"
((file_count++))
# 显示进度
if ((file_count % 50 == 0)); then
echo " 已处理 $file_count 个文件..."
fi
done < <(find "$YUMI_DIR" -type f \( -name "*.h" -o -name "*.m" \))
echo -e "${GREEN} ✓ 完成!共处理 $file_count 个文件${NC}"
}
# 依次替换各个前缀
replace_in_files "YM" "$NEW_PREFIX_YM"
replace_in_files "XP" "$NEW_PREFIX_XP"
replace_in_files "PI" "$NEW_PREFIX_PI"
replace_in_files "Moli" "$NEW_PREFIX_MOLI"
replace_in_files "MS" "$NEW_PREFIX_MS"
# 特殊处理YUMI全大写
echo " 替换 YUMI → ${NEW_PREFIX_YM}I ..."
find "$YUMI_DIR" -type f \( -name "*.h" -o -name "*.m" \) -exec sed -i '' "s/YUMI/${NEW_PREFIX_YM}I/g" {} +
# ==========================================
# 第四步:重命名文件
# ==========================================
echo ""
echo -e "${GREEN}[Step 4] 重命名文件...${NC}"
rename_files() {
local old_prefix=$1
local new_prefix=$2
local file_count=0
echo " 重命名 ${old_prefix}* → ${new_prefix}* ..."
# 查找所有以旧前缀开头的文件
find "$YUMI_DIR" -type f \( -name "${old_prefix}*.h" -o -name "${old_prefix}*.m" \) | while read file; do
# 跳过 Pods 目录
if [[ "$file" == *"/Pods/"* ]]; then
continue
fi
dir=$(dirname "$file")
filename=$(basename "$file")
newname=$(echo "$filename" | sed "s/^${old_prefix}/${new_prefix}/")
if [[ "$filename" != "$newname" ]]; then
mv "$file" "$dir/$newname"
((file_count++))
fi
done
echo -e "${GREEN} ✓ 完成!共重命名 $file_count 个文件${NC}"
}
rename_files "YM" "$NEW_PREFIX_YM"
rename_files "XP" "$NEW_PREFIX_XP"
rename_files "PI" "$NEW_PREFIX_PI"
rename_files "Moli" "$NEW_PREFIX_MOLI"
rename_files "MS" "$NEW_PREFIX_MS"
# ==========================================
# 第五步:重命名文件夹
# ==========================================
echo ""
echo -e "${GREEN}[Step 5] 重命名模块文件夹...${NC}"
cd "$YUMI_DIR/Modules"
# 重命名模块文件夹
if [ -d "YMLogin" ]; then
mv "YMLogin" "${NEW_PREFIX_YM}Login"
echo " ✓ YMLogin → ${NEW_PREFIX_YM}Login"
fi
if [ -d "YMMessage" ]; then
mv "YMMessage" "${NEW_PREFIX_YM}Message"
echo " ✓ YMMessage → ${NEW_PREFIX_YM}Message"
fi
if [ -d "YMMine" ]; then
mv "YMMine" "${NEW_PREFIX_YM}Mine"
echo " ✓ YMMine → ${NEW_PREFIX_YM}Mine"
fi
if [ -d "YMMonents" ]; then
mv "YMMonents" "${NEW_PREFIX_YM}Monents"
echo " ✓ YMMonents → ${NEW_PREFIX_YM}Monents"
fi
if [ -d "YMNewHome" ]; then
mv "YMNewHome" "${NEW_PREFIX_YM}NewHome"
echo " ✓ YMNewHome → ${NEW_PREFIX_YM}NewHome"
fi
if [ -d "YMRoom" ]; then
mv "YMRoom" "${NEW_PREFIX_YM}Room"
echo " ✓ YMRoom → ${NEW_PREFIX_YM}Room"
fi
if [ -d "YMTabbar" ]; then
mv "YMTabbar" "${NEW_PREFIX_YM}Tabbar"
echo " ✓ YMTabbar → ${NEW_PREFIX_YM}Tabbar"
fi
if [ -d "YMRTC" ]; then
mv "YMRTC" "${NEW_PREFIX_YM}RTC"
echo " ✓ YMRTC → ${NEW_PREFIX_YM}RTC"
fi
if [ -d "YMWeb" ]; then
mv "YMWeb" "${NEW_PREFIX_YM}Web"
echo " ✓ YMWeb → ${NEW_PREFIX_YM}Web"
fi
# ==========================================
# 第六步:更新 Xcode 项目文件引用
# ==========================================
echo ""
echo -e "${GREEN}[Step 6] 更新 Xcode 项目文件引用...${NC}"
XCODEPROJ="$PROJECT_ROOT/YuMi.xcodeproj/project.pbxproj"
if [ -f "$XCODEPROJ" ]; then
# 备份原文件
cp "$XCODEPROJ" "$XCODEPROJ.backup"
# 替换项目文件中的引用
sed -i '' "s/YM/${NEW_PREFIX_YM}/g" "$XCODEPROJ"
sed -i '' "s/XP/${NEW_PREFIX_XP}/g" "$XCODEPROJ"
sed -i '' "s/PI/${NEW_PREFIX_PI}/g" "$XCODEPROJ"
sed -i '' "s/Moli/${NEW_PREFIX_MOLI}/g" "$XCODEPROJ"
sed -i '' "s/MS/${NEW_PREFIX_MS}/g" "$XCODEPROJ"
sed -i '' "s/YUMI/${NEW_PREFIX_YM}I/g" "$XCODEPROJ"
echo -e "${GREEN} ✓ Xcode 项目文件已更新${NC}"
else
echo -e "${RED} ⚠️ 未找到 Xcode 项目文件${NC}"
fi
# ==========================================
# 第七步:生成替换报告
# ==========================================
echo ""
echo -e "${GREEN}[Step 7] 生成替换报告...${NC}"
REPORT_FILE="$TEMP_DIR/rename_report.txt"
cat > "$REPORT_FILE" <<EOF
========================================
类名批量替换报告
========================================
执行时间: $(date)
替换映射:
YM → $NEW_PREFIX_YM
XP → $NEW_PREFIX_XP
PI → $NEW_PREFIX_PI
Moli → $NEW_PREFIX_MOLI
MS → $NEW_PREFIX_MS
已重命名的模块文件夹:
YMLogin → ${NEW_PREFIX_YM}Login
YMMessage → ${NEW_PREFIX_YM}Message
YMMine → ${NEW_PREFIX_YM}Mine
YMMonents → ${NEW_PREFIX_YM}Monents
YMNewHome → ${NEW_PREFIX_YM}NewHome
YMRoom → ${NEW_PREFIX_YM}Room
YMTabbar → ${NEW_PREFIX_YM}Tabbar
YMRTC → ${NEW_PREFIX_YM}RTC
YMWeb → ${NEW_PREFIX_YM}Web
注意事项:
1. 请在 Xcode 中重新打开项目
2. Clean Build Folder (Shift + Cmd + K)
3. 尝试编译,查看是否有错误
4. 检查 Podfile 是否需要更新
5. 运行完整的功能测试
如果出现问题,可以通过 Git 回滚:
git reset --hard HEAD
git clean -fd
备份文件位置:
$XCODEPROJ.backup
========================================
EOF
echo -e "${GREEN} ✓ 报告已生成:$REPORT_FILE${NC}"
cat "$REPORT_FILE"
# ==========================================
# 完成
# ==========================================
echo ""
echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN}✅ 类名批量替换完成!${NC}"
echo -e "${GREEN}========================================${NC}"
echo ""
echo -e "${YELLOW}下一步操作:${NC}"
echo "1. 在 Xcode 中打开项目(可能需要关闭后重新打开)"
echo "2. Product → Clean Build Folder"
echo "3. 尝试编译项目,解决任何编译错误"
echo "4. 运行 2_rename_assets.py 脚本替换图片资源"
echo ""
echo -e "${YELLOW}查看详细报告:${NC}"
echo " cat $REPORT_FILE"
echo ""