2014-10-02 2 views
4

Xcode를 사용하고 있으며 스토리 보드 2 개와 xib 10 개를 포함하여 200 개 이상의 소스 파일이있는 Objective-C, iOS 프로젝트가 있습니다. 이 프로젝트는 클래스에 2 자리 접두어를 사용하지 않습니다. 이제 클래스를 두 개의 문자 네임 스페이스를 사용하지 않는 다른 프로젝트에 추가해야합니다. 많은 명명 충돌이있을 것입니다.Objective-C Project에 2 글자 접두어/네임 스페이스를 어떻게 추가합니까?

Xcode 프로젝트의 모든 소스 파일과 클래스에 2 또는 3 자의 접두사를 추가하는 가장 좋은 방법은 무엇입니까? 이를 수행 할 수있는 자동화 된 도구가 있습니까?

+1

수동 XCODE-> refactor-> rename 클래스 인터페이스를 사용하여 모든 클래스 항목의 이름을 바꾸고 .h .m 파일 (여전히 많은 일상 작업) – Injectios

+0

하지만 한 번에 하나의 엔티티 만 수행합니다. 그들 모두를 대량으로 할 수있는 방법이 있습니까? –

+0

"tops"를 사용하여 스크립트를 작성할 수 있습니다 ... – Wain

답변

4

아무도 내 질문에 대한 답변을 제출하지 않으므로 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 개 이상의 프로젝트에서이 스크립트를 사용했으며 훌륭하게 작동했습니다.

현상금 기한이 끝나면 누구도 더 좋은 답변이 없으면이 답변을 수락합니다.

+0

참고 사항 :이 방법은 "접두어 붙이기"와 관련이 없습니다. 어떤 방식 으로든 파일의 이름을 변경하는 데 사용할 수 있습니다. 전의. (이름 바꾸기 FileABC -> NewFileDEF) –