如何向Objective-C Project大量添加2个字母的前缀/命名空间?

时间:2014-10-02 16:38:08

标签: objective-c xcode namespaces naming-conventions

我正在使用XCode,并且拥有一个Objective-C,iOS项目,包含200个源文件,包括2个故事板和10个xib。此项目的类不使用2个字母的前缀。现在,它的类需要添加到另一个也不使用2个字母命名空间的项目中。会有很多命名冲突。

为XCode项目中的每个源文件和类添加2或3个字母前缀的最佳方法是什么?有没有自动化工具可以做到这一点?

1 个答案:

答案 0 :(得分:4)

由于没有其他人提交我的问题的答案,这里是我使用UNIX Shell Scripts创建的一个强力解决方案。

第1步
创建一个" rename_classes.txt"文件,其中每行包含一对一个或多个选项卡分隔的类名。 例如:

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,&amp; .cpp源文件。
  • 对于每个修改过的文件,将创建一个包含原始内容的备份文件,名为&#34; [filename] .bak&#34;。
  • 此脚本仅重命名.h,.m和&amp; .mm文件。 .xib文件和Storyboard会 需要手工重命名。
  • &#39; PROJECT_DIR&#39;如果需要,可以设置为另一个目录。
  • &#39; RENAME_CLASSES&#39;应该指向在步骤#1中创建的文件。
  • 如果有一些组名称与正在重命名的类名称相同,则组也将在项目文件中重命名。
  • 我在4个以上的项目中使用过这个脚本,而且效果很好。

如果在赏金期结束时没有人有更好的答案,我会接受这个答案(我自己的答案)。