아무도 내 질문에 대한 답변을 제출하지 않으므로 UNIX 쉘 스크립트를 사용하여 만든 무차별 솔루션이 여기에 있습니다.
1 단계 :
각 행은 하나 개 이상의 탭에 의해 분리 된 한쌍의 /로부터의 클래스 이름을 포함하는 "rename_classes.txt"파일을 만든다. 예 :
MyClassA ZZMyClassA
MyClassB ZZMyClassB
MyClassC ZZMyClassC
단계 # 2 :
복사는 쉘 스크립트에 다음 붙여 넣기 한 후 Xcode 프로젝트가 들어있는 디렉토리에서 스크립트를 실행합니다
#!/bin/bash
PROJECT_DIR=.
RENAME_CLASSES=rename_classes.txt
#First, we substitute the text in all of the files.
sed_cmd=`sed -e '[email protected]^@s/[[:<:]]@; [email protected][[:space:]]\{1,\}@[[:>:]]/@; [email protected][email protected]/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}
참고를 다음 :
- 이 스크립트 은 모든 referencesc 프로젝트 파일, XIB 파일, 스토리 보드 파일, .h, .m, .mm, & .cpp 소스 파일에있는 클래스에있는.
- 수정 된 각 파일에 대해 "[filename] .bak"라는 원본 내용의 백업 파일이 만들어집니다.
- 이 스크립트는 .h, .m, & .mm 파일의 이름 만 바꿉니다. .xib 파일과 스토리 보드는 의 이름을 수동으로 변경해야합니다.
- 원한다면 'PROJECT_DIR'을 다른 디렉토리로 설정할 수 있습니다.
- 'RENAME_CLASSES'는 1 단계에서 만든 파일을 가리켜 야합니다.
- 이름이 바뀌는 클래스와 동일한 이름의 그룹이있는 경우 그룹도 프로젝트 파일에서 이름이 바뀝니다.
- 4 개 이상의 프로젝트에서이 스크립트를 사용했으며 훌륭하게 작동했습니다.
현상금 기한이 끝나면 누구도 더 좋은 답변이 없으면이 답변을 수락합니다.
수동 XCODE-> refactor-> rename 클래스 인터페이스를 사용하여 모든 클래스 항목의 이름을 바꾸고 .h .m 파일 (여전히 많은 일상 작업) – Injectios
하지만 한 번에 하나의 엔티티 만 수행합니다. 그들 모두를 대량으로 할 수있는 방법이 있습니까? –
"tops"를 사용하여 스크립트를 작성할 수 있습니다 ... – Wain