Altruistic Programmer's Blog (KR)

이타주의 프로그래머의 블로그

Base SDK와 Deployment Target의 의미

without comments

꼼꼼하게 공부하고 싶은 분은 SDK Compatibility Guide를 보시라.
(http://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/cross_development)

Weak Link란?

  • 링크할 때 라이브러리에 심볼(변수, 함수, 클래스 등)이 없어도 에러가 나지 않는다.
  • 앱이 로딩될 때 심볼이 없어도 에러가 나지 않는다.
  • 그래서 런타임에 심볼이 있는지 확인하고 써야한다.

Strong Link란?

  • 링크할때나 로딩할때 심볼이 없으면 에러가 난다.

Base SDK 버전이란?

  • 내 앱이 사용할 제일 높은 SDK(혹은 OS) 버전
  • 이 버전보다 높은 버전에 새로 생긴 API는 쓸 수 없다. 

Deployment Target 버전이란?

  • 내 앱이 사용할 제일 낮은 SDK (혹은 OS) 버전
  • 이 버전보다 높은 버전의 SDK에 있는 API는 Weak Link가 된다.
  • 이 버전과 같거나 낮은 버전의 SDK에 있는 API는 Strong Link가 된다.

그래서 어떻게 쓸까?

  • 내 앱이 지원할 OS의 최저, 최고 버전을 정한다.
  • Base SDK에 최고 버전을 설정한다.
  • Deployment Target에 최저 버전을 설정한다.
  • Weak Link가 되는 심볼에 대해서는 런타임에 존재하는지 확인한 다음에 써야한다.
  • Strong Link가 되는 심볼은 컴파일 타임에 에러가 발생한다.

주의 사항

  • 베이스 클래스가 존재하지 않는 경우 자식 클래스도 존재하지 않는 것으로 간주한다.
  • 클래스 인터페이스에 정의한 델리게이트가 존재하지 않는 경우 앱 실행시에 런타임 에러가 난다.

  • 특정 OS 버전에서 발생할 수 있는 문제점을 컴파일 에러로 발생시키려면 Base SDK를 해당 OS 버전으로 낮춰서 빌드해보면 된다.

Written by muscly

April 29th, 2011 at 9:09 pm

Posted in 프로그래밍

Objective-C 2.0에서 프라이빗 프로퍼티 정의하기

without comments

클래스의 헤더에 프로퍼티를 숨기고 싶은 경우에는 클래스 익스텐션을 사용할 수 있다.

// A.h
@interface A : NSObject {

}
-(void)setXXX:(int)i;
-(int)xxx;
@end

// A.m
#import "A.h"
@interface A()
@property int m; // HERE
@end

@implementation A
@synthesize m; // AND HERE
-(void)setXXX:(int)i {
self.m = i;
}
-(int)xxx {
return self.m;
}
@end

카테고리보다 클래스 익스텐션이 좋은 이유는

  1. 프로퍼티를 정의할 수 있다
  2. 메소드를 선언만하고 구현하지 않으면 에러가 난다.

Written by muscly

April 29th, 2011 at 8:17 pm

Posted in 프로그래밍

오브젝트 파일의 CPU 아키텍쳐 확인하기

without comments

오픈소스 라이브러리를 빌드에서 XCode에서 링크하려고 하면 아키텍쳐가 맞지 않는다고 에러가 날 때가 있다. 아래와 같이 하면 .a 파일 안의 .o 파일들이 어떤 CPU 아키텍쳐를 대상으로 빌드되었는지 확인할 수 있다.

otool -hv libxxxx.a

분명히 잘 빌드한 것 같은데 링크가 안되서 봤더니 x86_64라고 나온다. 강제로 -arch i386 을 넣고 빌드하니 시뮬레이터용으로 링크가 잘 된다.

참고로, 위에서 v 옵션을 빼면 cputype과 cpusubtype이 숫자로 나오는데, /usr/include/mach/machine.h 를 보면 그 숫자들의 의미를 확인할 수 있다. (그냥 v 옵션 넣고 쓰면 됨…)

Written by muscly

March 31st, 2011 at 8:20 pm

Posted in 프로그래밍

다국어 블로그로 변신

with 5 comments

한국어 외에도 일어, 영어 포스팅을 할 수 있도록 블로그를 정비했습니다. 오른쪽 위에 보시면 국기가 보입니다. 아직은 모자라지만, 언젠가는 술술 일어와 영어 포스팅을 할 수 있으면 좋겠네요.

마침 오늘 PayPal에 가입해서 100만원정도 결제를 했더니 영어를 쓰는 여자분에게서 전화가 왔습니다. 밥먹다 말고 어찌나 당황했던지. 왜 자꾸 일본어만 나오는지. 부끄럽네요. ^^;;

Written by muscly

May 8th, 2010 at 5:35 pm

Posted in 기타

Tagged with

글쓰기 생각쓰기

with 2 comments

나는 책을 배송받으면 머리말과 목차를 간단히 읽어보고는 책꽂이에 꽂아둔다. 보통은 빨라야 3개월, 늦으면 1년이 넘어서야 다시 꺼내는데, 이번에는 이례적으로 배송받은 날 바로 읽기 시작했다. 

머리말을 읽으면서 읽기 쉽다는 인상을 받았다. 본문은 책 표지만큼이나 간결하고 명료하다. '한 번 읽어볼까'라는 마음이 들기 시작해서 완전히 읽기까지 순식간이다. 저자인 윌리엄 진서씨는 책의 내용을 몸소 실천하고 있었다.

인간미와 온기. 간결함과 명료함. 자신의 이야기를 쓸 것. 자신을 위해 쓸 것. 정직할 것 등과 같은 원칙들과 도입부에서 독자를 끌어당기는 법. 문장과 문장. 문단과 문단 사이에서 독자를 놓치지 않는 법. 마무리 짓는 법과 같은 기술들을 전수해준다. 훌륭한 인용문들과 함께 설명하고 있어서 재미있고 이해하기 쉬웠다. 여러 인용문을 읽다보니 소설과 실용서적외에도 다양한 읽을 거리가 있다는 생각이 들었다.

원문이 영어인지라 영어에 대한 내용도 많다. 문법책에 나오지 않는 문법이나 단어 선택과 같이 내가 고민하던 것들을 미국인들도 고민하고 있다니 큰 위로가 되었다.  

(책에서 배운 걸 최대한 활용해서 써봤음. ^^;;)

Written by muscly

May 2nd, 2010 at 12:23 am

Posted in 독후감