본문 바로가기
프로그래밍/iOS

Xcode 프로젝트 템플릿을 이용해 iOS 프로젝트 시작점 제어

by 백룡화검 2012. 6. 21.

여러번 iOS(아이폰, 아이팟터치) 관련 어플을 만들면서 다음과 같은 필요성이 생겼습니다. 

1. 공통 라이브러리(클래스 집합)
2. 공통 리소스(XIB 및 이미지, 각종 설정, DB등 집합)
3. 외부 라이브러리 사용
4. 한번에 만들어지는 프로젝트 

1번 공통라이브러리는 클래스 집합입니다. 누구나 프로젝트를 진행하다보면 나만의 코드조각, 클래스들이 만들어집니다. 이게 쌓이고 쌓여서 프로젝트때 마다 Xcode상에 기존코드파일을 복사해서 삽입하는 경험을 해보셨나요? 이 부분을 해결할 수 있는 가장 좋은 방법은 정적 라이브러리(static library)를 구성하는 방법입니다. 가장 쉽고 빠르죠. 다음 문서를 보면 바로 이해할 수 있습니다.

아이폰용 정적 라이브러리 만들기 : http://goo.gl/Kq8BM

이제 2번 공통 리소스 부분을 살펴보죠. 
정 적 라이브러리 단점은 말그대로 클래스 수준의 코드들만 패키지화 된다는 겁니다. 즉 이미지, XIB 파일등은 라이브러리에 포함되지 않기 때문에 뭔가 프레임워크화 시키기가 어렵다는 겁니다. 누구나 개발하다 보면 라이브러리 수준을 넘어서 프레임워크 수준으로 만들어야하는 경우가 발생할 겁니다. 이러한 이유로 프레임워크 수준으로 되어버린 공통소스는 정적 라이브러리로 관리한다는 것은 뭔가 반은 하고 반은 못하는 이것도 저것도 아닌게 됩니다. 쓰기가 조금 꺼름직하지요.


참고로 위 이미지는 제가 만든 어플들의 커뮤니티 부분입니다.(좌측부터 2011토정비결s, 바른생활, 뒷담화) 겉모양은 조금씩 다른것 같지만 커뮤니티 자체는 모두 공통입니다. 이런 어플을 앞으로 수십개 더 만들겁니다. 결국 프레임워크 도입이 당연시 되겠지요. 

3번의 경우 외부 라이브러리를 사용하는 경우입니다. 프레임워크 수준으로 발전된 공통소스가 어떤 특정 외부 라이브러리를 사용하는 경우는 얼마든지 발생할 수 있죠. 가령 QR코드 리더기가 필요할때 내가 다 만들지 않고 ZXing과 같은 라이브러리를 가져와 쓸겁니다. 

[iPhone/QR Code] XZing QR코드 리더 사용하기 : http://goo.gl/yL1U9

그 런데, 이게 또 일반 프로젝트에 추가해서 사용하는 법은 어렵지 않으나 뭔가 기존 정적 라이브러리 프로젝트에 추가해서 개발하는 것도 뭔가 설정하는 것이 복잡하고 어떻게 해야할지도 모르겠더군요. 컴파일 옵션을 전부 뒤져가면서 설정하면 되겠지만 시간도 그렇고 어짜피 리소스 관리도 안되는 정적 라이브러리를 도입하기도 꺼름직하거든요.

1,2,3 번과 같은 문제점이 생기면서 자연스럽게 의문이 생긴것은 뭔가 기존 코드, 리소스, 라이브러리를 담은 프로젝트를 한번에 만드는 방법이 없을까 고민하게 되었습니다. 제 경험상 Eclipse기반에서 ActionScript나 Flex 프로젝트를 진행할때는 ANT를 이용해서 최초 프로젝트 구성이나 소스코드까지 모두 한번에 만들어 줄 수 있었습니다. 

프로젝트 템플릿 ant : http://diebuster.com/flash/123 

하지만 아이폰 개발때 XCode에서는 어떻게 해야하지 였습니다. 뭔가 IDE가 Eclipse처럼 편하지도 않고 플러그인도 없고 이런 불편한 XCode를 기대해도 되는가 였습니다. 그런데 답은 의외로 간단한 곳에 있었습니다.

바로 프로젝트 템플릿(Project Template)!

그게 머릿속에 번개처럼 지나가면서..... 
있을거야라는 막연한 기대감에 검색해봤는데 있더군요. ㅜㅜ;;; 감동~


프로젝트 템플릿을 이용하면 여러분의 프로젝트 시작점을 마음대로 조정할 수 있습니다. 다음과 같은 장점이 있겠네요.

1. 프로젝트 생성때마다 똑같은 설정을 반복할 필요 없다.
2. 프로젝트 생성때마다 공통 코드 및 리소스를 추가하는 노력이 필요없다.
3. 외부 라이브러리를 추가해서 적용하기 수월하다.
4. 커스텀 로그출력 또는 Configuration 수정을 통한 컴파일 옵션 적용등 프로젝트 생성시 손이 많이 가는 부분을 한번의 설정으로 거의 끝낼 수 있다.
5. 결국 한방에 내가 원하는 프로젝트 시작점을 제어할 수 있다.

공 통 코드 및 리소스를 버전관리를 하면서 템플릿도 그때그때 만들어주면 수월할겁니다. 가령 /MyFramework 라는 디렉토리에 1.0.0 만들어놓고 여기에 코드 및 리소스를 넣어두었다고 가정하죠. 이것에 대한 템플릿을 1.0.0으로 만들었다면 다음에 프레임워크를 개선할때 1.0.1로 코드와 리소스를 복사해 MyFramework안에 넣고 템플릿을 기존 1.0.0로 복사하면 끝이라는 겁니다. 그렇게 하면 기존 프로젝트와는 연관없이 유지보수도 되겠군요.

아~ 왜 이 방법을 이제 생각했을까요? 
무식하면 손발... 그리고 머리가 고생합니다.
생각하면서 개발해요~ ㅋ