2010-03-30 5 views
2

Mac OS X 10.6 전용 기술을 활용하지만 10.5 Leopard에 대한 이전 버전과의 호환성을 포기하지 않고 응용 프로그램을 구축하고 있습니다.XCode 프레임 워크의 약한 연결 문제를 방지하려면 어떻게해야합니까?

방법이 나는 이것이 기본 SDK로 10.6 SDK를 설정하는 것입니다 수행 약한 연결하는 모든 프레임 워크와 10.5 전개 대상 설정에 설명 된대로 :

http://developer.apple.com/mac/library/DOCUMENTATION/MacOSX/Conceptual/BPFrameworks/Concepts/WeakLinking.html

이 잘 작동; Snow Leopard라는 콜을하기 전에 셀렉터가 실제로 존재하는지 확인해야합니다. 또는 전화를 걸기 전에 OS 버전을 확인할 수 있습니다.

문제는 이것이 매우 허약하다는 것입니다. 10.6이라는 단일 전화를 걸면 레오파드 호환이 가능합니다. 따라서 정상적인 코드 코드 완성 기능을 사용하는 것은 위험 할 수 있습니다.

제 질문 : 릴리스 빌드를 수행하기 전에 어떤 호출이 10.5에 정의되어 있지 않은지 확인하는 방법이 있습니까? 어떤 종류의 정적 분석, 아니면 그냥 트릭 (다른 SDK를 설정 한 타겟?)이 할 수 있습니다.

분명히 Leopard 시스템에서 테스트하기 전에 테스트해야합니다. 그렇지만 모든 릴리스 이전에 프로그램의 모든 경로를 통과 할 수는 없습니다.

모든 조언을 주시면 감사하겠습니다.

안부,

프랭크

답변

1

당신은 10.5 대상 SDK를 변경할 수 있습니다. 그러면 컴파일러는 warning: definition for '-snowLeopardOnlyMethod:' not found 메시지를 출력합니다.

+0

감사합니다, 나는 내가 I는 10.6로 설정 "기본 SDK"와 "배포 대상"을 가지고 이 이미 10.5로 설정 ... 10.5로 설정해야 이해 확실하지 않다. 거기에는 snowLeopardOnlyMethod가 전혀 없습니다. 아무 곳에서나 경고합니다. Base SDK를 10.5로 변경하면 물론 많은 오류가 발생하지만 문제는 이전 코드가 컴파일되지 않아서 많은 오류와 경고가 발생하고 컴파일러가 잠시 후 오류를 생성하지 않으므로 계속 진행됩니다. 오류 메시지를 통해 손으로 모든 메서드를 10.6 API 만 catch 할 수는 없습니다. 나는 뭔가를 놓치고 있다고 확신하지만, 어디에서? –

+0

'snowLeopardOnlyMethod :'는 메소드 이름의 예일뿐입니다 ('exampleMethod :'일 수도 있습니다). Apple에서 사용하는 용어에 대해 알아 보려면 http://developer.apple.com/mac/library/documentation/DeveloperTools/Conceptual/cross_development/Configuring/configuring.html을 읽어 보시기 바랍니다. –

+0

안녕하세요, Benedict, 링크를 제공해 주셔서 감사합니다. 나는 그것을 읽은 것을 읽었다. Apple은 "배포 OS 버전"(일명 MACOSX_DEPLOYMENT_TARGET)과 "기본 SDK (일명 SDKROOT)에 대해 말합니다."대상 SDK "는"기본 SDK "/ SDKROOT를 의미합니다. 그림 2- 1에 연결된 문서의 Mac OS X 10.6 호출에 "이 API를 사용하지 마십시오"라는 메시지가 표시됩니다. 따라서 조언을 따르는 데 문제가 있습니다. 일시적으로 기본 SDK를 10.6으로 재설정하면 앞에서 언급 한 문제가 발생합니다 내 첫 코멘트. –

관련 문제