본문 바로가기

iOS Programming

Xcode에서 Subversion 이용하기

CVS (Concurrent Versions System)는 소프트웨어 게발에 있어 많은 유용한 환경을 제공합니다.
필자는 CVS가 유용을 넘어서 디버깅과 공동작업, 개발자의 실수나 시스템 오류를 복구할 수 있는 개발에 있어 꼭 갖추어야 할 필수 환경이라 생각합니다. 
윈도우 개발환경에서 비쥬얼스튜디오에 포함된 Visual SourceSafe를 주로 이용했었는데,
Mac의 Xcode에서는 Subversion이 있다는 것을 알게 되었습니다.
Subversion외에도 다른 툴이 몇가지 있긴 하지만 Xcode 3.x for OS X Leopard에 기본적으로 포함된 Subversion을 이용하는 방법을 알아 보겠습니다.

먼저 소스 파일들을 보관할 수 있는 저장소가 필요합니다.  Xcode에서는 이를 Repository라고 합니다.
Repository를 위한 디렉토리를 생성하기 위해 터미널을 실행합니다.
필자는 타임캡슐로의 백업을 위해 제 홈디렉토리에 Repository를 만들어 보았습니다.

mkdir -p /Users/Joon/Subversion_Repository

그리고  svnadmin 커맨드를 이용하여 Wizsoft라는 이름의 Repository를 생성합니다.

svnadmin create /Users/Joon/Subversion_Repository/Wizsoft

그리고 아래와 같이 3개의 폴더를 Repository에 생성합니다.
Xcode내에서 생성하는 방법도 있지만 터미널에서 /tmp 폴더에 만들어서 import시키는 방법을 이용해 보겠습니다.
import 후 해당 임시 폴더는 삭제합니다.

mkdir -p /tmp/Wizsoft/trunk /tmp/Wizsoft/branches /tmp/Wizsoft/tags
svn import /tmp/Wizsoft/ file:///Users/Joon/Subversion_Repository/Wizsoft -m "Initial import"
rm -rf /tmp/Wizsoft

그 다음 해당 Repository의 소유자를 root로 변경하고 권한을 설정합니다.
이 때 해당 계정의 비밀번호를 물어오면 비밀번호를 입력합니다.

sudo chown -R root:admin /Users/Joon/Subversion_Repository
sudo chmod -R ug+rwX,o= /Users/Joon/Subversion_Repository

여기까지 Repository 생성을 완료 하였습니다.
이제 Xcode에서 해당 Repository를 등록해야 하는데, 그 전에 네트워크 공유 설정을 한 가지 확인해야 합니다.
아래 그림과 같이 시스템 환경설정의 공유에서 원격 로그인이 체크되어 있는지 확인합니다. 만일 체크가 안되어 있다면 체크를 켭니다.
 
그런 다음 Xcode를 실행하여 SCM메뉴에서 Configure SCM Repository 메뉴를 선택합니다.
아래와 같이 Repository를 추가하고

Repository이름을 입력하고 SCM System으로 Subversion을 지정합니다. 


그리고 아래와 같이   Scheme : svn+ssh / Host : localhost / Path : (Repository경로) / User : 자신계정 / Password 등을 입력하면
URL이 자동으로 구상되며 연결에 성공하면 Authenticated 메시지를 볼 수 있습니다.
그리고 OK 버튼을 클릭합니다.


여기까지 Repository와 Xcode와 연결 설정이 완료되었습니다.
이제 프로젝트 파일들을 Repository로 올려야 하는데 올리기 전에 해당 프로젝트 폴더로 가서 build 폴더이렇게 하는 이유는 Repository 공간도 절약하고 build 내의 파일들 때문에 commit이 제대로 안되는 문제를 막기 위함입니다.

이제 Repository로 프로젝트 파일들을 올려 보겠습니다.
Xcode에서 SCM메뉴의 Repositories 메뉴를 선택합니다.
추가된 Repository의 trunk를 선택하고 import 아이콘 버튼을 클릭합니다.

올리고자 하는 프로젝트 폴드를 선택하고 import 버튼을 클릭합니다.

해당 프로젝트가 Repository에 임포팅 되었습니다.


이제 해당 Repository와 실제 프로젝트 작업폴더와 연결을 해주어야 하는데 간단하게 check out 한 번 해주면 됩니다.
(import 단계에서는 import만 수행할 뿐 작업폴더와 연결되지는 않습니다.)
Checkout을 하기 전에 기존 프로젝트폴더를 백업받고 모두 지우시기 바랍니다.
앞단계에서 Repository에 import된 프로젝트 폴더를 선택하고 Checkout 버튼을 클릭합니다. 

실제 작업폴더를 지정합니다. 대부분의 경우 조금 전 import시킨 폴더의 상위 폴더가 될 것입니다.


Checkout이 끝나면  Xcode에서 바로 열것인지를 물어옵니다.
한 번 열어볼까요? 


사실 프로젝트는 그냥 열리고 변화는 찾을 수 없습니다.
프로젝트 세팅을 하나 변경을 해줘야 Xcode편집기와 완전 통합이 이루어집니다.
Project 메뉴의 Edit Project Settings 메뉴를 선택합니다.
Configure Roots & SCM 버튼을 클릭하고  SCM을 Subversion을 지정한 다음 Repository를 지정해 줍니다.

Xcode 편집기의 파일 목록 헤더 부분에서 마우스 오른쪽 버튼 클릭하여 SCM을 체크합니다.

소스의 내용을 수정(5번째 줄 주석 라인에 "(Joon)"을 추가해 보았습니다)하고 저장을 하니 아래와 같이
해당 파일이 수정되었다는 의미로 M(Modified가 아닐까 합니다)이 표시됩니다.

이제 수정된 파일을 다시 Repository로 올려 보겠습니다.
Xcode SCM메뉴에서 Commit Entire Project 메뉴를 선택하고
commit comment를 입력하고 commit 버튼을 클릭합니다.

변경된 내용이 제대로 올라 갔는지 한 번 살펴 보겠습니다.
조금 전 변경 및 commit  한 파일에서 마우스 오른쪽 버튼을 누르고 Get Annotations 메뉴를  선택해 봅니다.
5번째 줄을 보니 4월3일 오후 4시25분에 수정된 내용 ((Joon)  추가)이 반영 되었네요.


여기까지 Xcode에서 Subversion을 이용하는 방법을 알아 보았습니다.

필자는 아직 공동작업이 없어서 확인을 못했습니다만
파일을 수정할 경우 다른 사람이 수정해 놓은 파일을 자동으로 checkout 해 오는지 확인을 못하였습니다.
아시는 분 덧글 부탁드립니다. ^^