Base SDK와 Deployment Target의 의미
꼼꼼하게 공부하고 싶은 분은 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 버전으로 낮춰서 빌드해보면 된다.