我使用XCODE,有Objy-C,IOS项目,有200个+源文件,包括2个故事板和10个XIB。此项目的类不使用2个字母的前缀。现在,它的类需要添加到另一个也不使用两个字母名称空间的项目中。将会有大量的命名冲突。
向xcode项目中的每个源文件和类添加2或3个字母前缀的最佳方法是什么?有什么自动化工具可以做到这一点吗?
最佳答案
由于没有其他人提交我问题的答案,下面是我使用unix shell脚本创建的强力解决方案。
步骤1:
创建一个“rename_classes.txt”文件,其中每一行包含一个由一个或多个选项卡分隔的类名称from/to对。
例子:
MyClassA ZZMyClassA
MyClassB ZZMyClassB
MyClassC ZZMyClassC
步骤2:
将下面的内容复制并粘贴到shell脚本中,然后从包含XCODE项目的目录中执行脚本:
#!/bin/bash
PROJECT_DIR=.
RENAME_CLASSES=rename_classes.txt
#First, we substitute the text in all of the files.
sed_cmd=`sed -e 's@^@s/[[:<:]]@; s@[[:space:]]\{1,\}@[[:>:]]/@; s@$@/g;@' ${RENAME_CLASSES} `
find ${PROJECT_DIR} -type f \
\( -name "*.pbxproj" -or -name "*.h" -or -name "*.m" -or -name "*.mm" -or -name "*.cpp" -or -name "*.xib" -or -name "*.storyboard" \) \
-exec sed -i.bak "${sed_cmd}" {} +
# Now, we rename the .h/.m files
while read line; do
class_from=`echo $line | sed "s/[[:space:]]\{1,\}.*//"`
class_to=`echo $line | sed "s/.*[[:space:]]\{1,\}//"`
find ${PROJECT_DIR} -type f -regex ".*[[:<:]]${class_from}[[:>:]][^\/]*\.[hm]*" -print | egrep -v '.bak$' | \
while read file_from; do
file_to=`echo $file_from | sed "s/\(.*\)[[:<:]]${class_from}[[:>:]]\([^\/]*\)/\1${class_to}\2/"`
echo mv "${file_from}" "${file_to}"
mv "${file_from}" "${file_to}"
done
done < ${RENAME_CLASSES}
注意以下几点:
此脚本将更新对在
项目文件、xib文件、脚本文件、.h、.m、.mm和.cpp源文件。
对于每个修改的文件,将创建具有原始内容的备份文件名为“文件名”BAK。
此脚本仅重命名.h、.m和.mm文件。文件和故事板将
需要手动重命名。
如果需要,可以将“project_dir”设置为其他目录。
“重命名类”应指向在步骤1中创建的文件。
如果有与被重命名类相同的组,则组也将在项目文件中重命名。
我已经在4+项目中使用了这个脚本,它工作得很好。
如果在赏金期结束时没有人有更好的答案,我会接受这个答案(我自己的)。