문제

앱을 업그레이드하려고합니다 (클라크) 10.6 호환성을 제공합니다.

내 계획은 사용중인 OSX 버전에 따라 두 가지 다른 코드 경로를 사용하는 것입니다.

10.5에서는 특정 Cocoa API에 의존하지 않는 완전히 사용자 정의 코드로 구성된 하나의 컨트롤러를 사용합니다. 10.6에서는 동일한 추상 클래스를 기반으로 새 Corelocation API를 동일한 인터페이스로 랩핑하는 다른 컨트롤러를 사용합니다. 런타임에 앱은 OS 버전을 감지하여 컨트롤러간에 전환됩니다.

이것은 10.6 SDK를 위해 제작 된 10.6에서 잘 작동하지만, 같은 빌드는 다음과 같이 10.5로 날아갑니다.

10/09/2009 18:30:50 [0x0-0x12f12f].uk.co.tomtaylor.Clarke[4575] dyld: unknown required load command 0x80000022 
10/09/2009 18:30:51 com.apple.launchd[403] ([0x0-0x12f12f].uk.co.tomtaylor.Clarke[4575]) Exited abnormally: Trace/BPT trap 

10.5 SDK를 위해 빌드하면 분명히 Corelocation 물건을 컴파일 할 수 없습니다.

이 응용 프로그램에 단일 바이너리를 제공 할 수 있기를 바랍니다. 10.5에서 Corelocation API를 '숨기기'하는 방법이 있습니까?

도움이 되었습니까?

해결책

대상의 빌드 설정을 변경 하여이 문제를 해결할 수 있어야합니다.

  1. 기본 SDK를 10.6으로 설정하십시오
  2. 배포 SDK를 10.5로 설정하십시오

다른 팁

배포 SDK 트릭은 두 플랫폼 모두에서 동일한 프레임 워크를 가지고 있지만 새로운 호출에서 새로운 호출을 할 때만 작동합니다. Corelocation의 경우 전체 프레임 워크가 10.5에 누락되므로 프레임 워크에 동적으로 바인딩 할 수 없기 때문에 앱이로드되지 않습니다.

위의 작업을 수행하고 약한 프레임 워크로 Corelocation을 추가해야합니다. 링크 프레임 워크 및 바이너리 빌드 단계를 선택하고 세부 사항보기에서 Corelocation을 찾고 중간 열 변경 "필수"에서 "약한"으로 변경하십시오.

앱을 빌드하면 Xcode는 -weak_framework corelocation을 링커로 전달하고 Corelocation이 있는지 여부에 관계없이 모든 10.5 및 10.6 시스템에 앱이로드됩니다. 그러나 실제로 10.6에 실행되지 않는 한 Corelocation 방법을 호출하지 않아야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top