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

아이폰 정적 라이브러리 템플릿과 기존 프로젝트에 정적 라이브러리 추가하기

by 백룡화검 2012. 6. 21.

출처 : http://lambert.tistory.com/341


다양한 아이폰 프로젝트를 진행하면서, 재사용할 수 있는 라이브러리가 축적되고 있다. 그런데 iOS SDK는 커스텀 프레임워크(Custom Framework)나 동적 라이브러리(Dynamic Library)를 지원하지 않는다. 그래서 비교적 손쉽게, 소스 코드의 재활용을 위해, 선택할 수 있는 방법이 바로 정적 라이브러리(Static Library)를 사용하는 것이다.


자신만의 라이브러리를 사용하는 방법을 다음의 6단계로 간단히 요약할 수 있다. (단계 1은 옵션이다.)
설명은 다음의 단계별로 진행한다.

  1. Xcode용 정적 라이브러리 템플릿 추가
  2. 라이브러리의 모든 소스 코드를 포함한 프로젝트 생성
  3. 설정을 포함한 정적 라이브러리 타겟 생성
  4. 라이브러리를 사용할 프로젝트 생성
  5. 메인 프로젝트에서 정적 라이브러리 프로젝트 임포트
  6. 정적 라이브러리 링크

1.  Xcode용 정적 라이브러리 템플릿 추가
다음에 첨부한 iPhone-OS-Static-Library.zip의 압축을 푼 후, 다음 두 가지 방법 중 하나를 선택하여, 해당 위치에 복사한다. 템플릿의 추가는 다음 두 가지 방법이 있다.  본 포스트에서는 User Templates를 사용한다. 복사하는 위치가 다르므로 주의하라.  User Templates의 경우에는 .../Xcode/ 이하의 폴더는 새로 생성하면 된다. 단 "Prject Templates"의 띄어 쓰기에 주의하라!

* User Templates의 경우 "사용자 이름"은 임의로 입력하면 된다. 
  • iPhone OS에 템플릿 추가
    : /Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Project Templates/Application/iPhone-OS-Static-Library
  • User Templates에 템플릿 추가
    : /Users/사용자계정/Library/Application Support/Developer/Shared/Xcode/Project Templates/사용자이름(임의로...)/iPhone-OS-Static-Library


템플릿을 추가한 후 Xcode에서 New Project...를 선택하면 다음 그림과 같이 새로 추가한 템플릿을 볼 수 있을 것이다.


2. 라이브러리의 모든 소스 코드를 포함한 프로젝트 생성
1단계의 마직막 내용과 같이 정적 라이브러리 개발 용 프로젝트를 신규로 생성한다.  본 예에서는 프로젝트 명을 LPLibraryKit이라고 했다.
그리고 정말 중요한 라이브러리 클래스들을 생성한다. 단 주의할 점이 있다. 예를  위해 UIView를 상속하는 LPView라는 클래스를 생성할 것이다.  단, 다음 그림과 같이 Location과 Targets를 설정한다.  Location 항목의 "include" 폴더는 다른 프로젝트의 "Header Search Paths" 설정에서 참조할 폴더이다.


테스트를 위해 LPLibraryKit.h에 LPView.h를 임포트하고 DemoViewController.m 클래스의 loadView 메소드를 다음과 같이 수정한다.

- (void)loadView {

UIScreen *screen = [UIScreen mainScreen];

// Load your primary view here for the demo

self.view = [[LPView alloc] initWithFrame:[screen applicationFrame]];

}


그리고, LPView.m 클래스의 initWithFrame: 메소드 역시 다음과 같이 수정한다. 간단히 로그만 찍어 보는 예이다.

- (id)initWithFrame:(CGRect)frame {

    if ((self = [super initWithFrame:frame])) {

        // Initialization code

  NSLog(@"Static Library test");

    }

    return self;

}


그리고 빌드앤런! 로그가 찍히면된다.
참고로 여기서 빌드를 했는지 안했는지에 따라 이후에 이어지는 과정에서 한 가지 확인할 사항이 있으므로, 기억해 두자.
이 단계에서 또는 나중에 할 일은, 실제 라이브러리를 추가하는 것이다. 물론 재활용할 소스 이므로 비즈니스 로직이 제외된 일반화된 소스여야 할 것이다.

3. 설정을 포함한 정적 라이브러리 타겟 생성
본 예에서는 이 과정을 템플릿을 사용함으로써 건너 뛴다. 직접 처리하기 위해서는 템플릿의 구조와 설정 등을 참고하면 된다.


4. 라이브러리를 사용할 프로젝트 생성
 이제 라이브러르를 사용할 실제 프로젝트를 생성할 단계이다. 예에서는 Test라는 이름으로 프로젝트를 생성하였다. 

5. 메인 프로젝트에서 정적 라이브러리 프로젝트 임포트
프로젝트를 생성한 후 LPLibrarKit 프로젝트에서 LPLibraryKit.xcodeproj를 Test 프로젝트로 드래그한다. 단 다음 그림을 참고하라. "Copy items into destination group's folder(if needed)" 항목을 체크하지 않았다. 나중에 라이브러리 프로젝트의 추가 및 변경 사항을 자동으로 반영하기 위해서는 이 방법이 더 좋다.



6.  정적 라이브러리 링크
정적 라이브러리 링크는 다른 오픈 소스 라이브러리를 추가해 본 경험이 있다면 익숙할 것이다. 그러면 기억을 되 살려서, 다음의 설정 과정을 진행한다.

우선 Test 프로젝트에 임포트한 LPLibraryKit.xcodeproj를 살펴 보면 다음 그림과 같이 빨간 색일 수도 있다. 이 것은 걱정하지 않아도 된다. 아직 빌드한 적이 없다는 표시일 뿐이다.


다음 단계는 Xcode에서 Test 프로젝트의 Targets의 Test 하위의 "Link Binary With Libraries" 아래에 "libLPLibraryKitMobile.a"를 드래그한다.


다음 단계는 Test 타켓을 더블클릭(또 는 마우스 오른쪽 버튼 >  Get Info, 또는 타겟 선택 후 커맨드+I)하여  Info(예: Target "Test" Info) 창을 연다. 그리고 "General" 탭을 클릭하여 윗쪽 항목인 "Direct Dependencies"의 "+" 버튼을 클릭한다. 그러면 아래의 그림과 같은 창을 볼 수 있을 것이다.
이 창에서 "LPLibraryKitMoibl"을 선택 후 "Add Target" 버튼을 클릭한다. 그러면 Test 타겟에 LPLibraryKitMobiel 항목이 추가될 것이다.



이제 남은 것은 타겟의 인포 항목에서 Build 탭을 클릭하여 다음 두 가지 설정을 한는 것이다.
물론 Test 타겟을 더블클릭한다. 또한 Build 항목의 상위 두 가지 설정이 다음 그림과 같은지 확인한다.
  • Header Search Paths: 정적 라이브러리의 include 폴더 경로
    : 예 - /Users/lambert/XcodeProjects/LPLibraryKit/include
  • Other Linker Flags: -ObjC and -all_load
여기까지가  정적 라이브러리 생성과 추가의 방법이다.  이제 남은 일은 재사용 가능한 소스를 코딩하는 일만 남았다.