2009-11-15 2 views
7

클라이언트가 blah-device.a와 blah-simulator.a라는 두 개의 미리 컴파일 된 라이브러리를 제공합니다. 디바이스 컴파일 모드와 시뮬레이터 컴파일 모드에서 blah-device.a를 사용하도록 xcode에 지시하려면 어떻게해야합니까?iPhone 용 XCode에서 다른 빌드 프로파일에 대해 서로 다른 미리 컴파일 된 라이브러리를 연결하는 방법은 무엇입니까?

제 의뢰인은 나에게이 지침

  1. 열기 (그룹] & 파일 패널로) 대상 그룹의 프로젝트 아이콘을 마우스 오른쪽 단추로 클릭 한 다음 추가를 선택>을 제공합니다 기존 프레임 워크.
  2. 링크 된 라이브러리 섹션에서 라이브러리 추가 아이콘 (+) 아이콘 을 클릭 한 다음 기타 추가를 클릭합니다.
  3. 장치에서 직접 개발하기위한 blah-device.a 또는 에서 을 개발할 때 사용하는 blah-simulator.a를 선택하고 추가를 클릭합니다.

은 이미 그러나이 지침은 다른 프로필을 쉽게 구축하지 않습니다, 거기에 헤더 파일을 복사.

SIMULATOR 프로파일로 빌드 할 때 디바이스 프로파일로 빌드 할 때 blah-device.a와 blah-simulator.a를 연결할 때 Xcode를 어떻게 연결합니까?

도움을 주시면 대단히 감사하겠습니다.

답변

5

더 쉬운 방법이 있습니다. 하나의 대상 아래에서 "라이브러리 검색 경로"를 복제하고 각각에 대해 다른 아키텍처를 설정할 수 있습니다. 그런 다음 시뮬레이터 및 장치에 대해 다른 경로를 설정할 수 있습니다.

1

가장 쉬운 방법은 기존 타겟을 복제하여 두 개의 별도 타겟을 만드는 것입니다. 이름 하나 "Foo Device"와 다른 "Foo Simulator". 그런 다음 XCode에서 blah-device.a를 마우스 오른쪽 버튼으로 클릭하고 대상 탭을 선택한 다음 "Foo Device"대상이 켜져 있고 "Foo Simulator"대상이 OFF로 선택되어 있는지 확인하십시오.

balah-simulator.a에 대해 반복하지만 "Foo Device"대상이 OFF이고 "Foo Simulator"대상이 켜져 있는지 확인합니다.

이제 시뮬레이터를 빌드하려면 Active SDK 팝업에서 시뮬레이터를 선택하고 타겟 팝업에서 "Foo Simulator"를 선택하십시오. 장치 테스트의 경우 장치 및 "Foo Device"대상을 선택하십시오.

+0

덕분에 다른 연결 경로의를 사용할 수 있습니다! 어쨌든 다른 타겟없이이 작업을 수행하고 Xcode 프로필 빌드 설정 만 사용하면됩니까? – CVertex

+0

문제는 blah-device.a와 blah-simulator.a가 동일한 기호를 내보내는 것입니다. 이 문제를 해결하는 한 가지 방법은 헤더의 #if TARGET_IPHONE_SIMULATOR ...를 기반으로 테스트하고 Foo를 FooDevice 대 FooSimulator의 전처리 매크로로 정의하는 것입니다. 그런 다음 두 라이브러리를 모두 포함 할 수 있으며 오른쪽 심볼이 링크됩니다. 그러나 두 라이브러리에 동일한 링커 심볼이 포함되어 있으면 중복 심볼 오류가 발생합니다. 이 경우 유일한 방법은 하나의 상황에서 다른 상황과의 연결을 제외시키는 것입니다. 링커 경로 값을 가지고도 할 수 있지만 여러 대상을 사용하는 것이 훨씬 쉽습니다. – Ramin

14

나중에 참조 할 수 있도록 이러한 상황을 처리하는 좋은 방법은 다른 아키텍처의 .a를 XCode에 포함 할 수있는 단일 아키텍처로 변환하는 것입니다. 당신은 사러 명령 행 도구를 사용하여이 작업을 수행 할 수 있습니다

사러 libx.a liby.a -create - 출력 libz.a

libx.a가의 ARMv6 및 ARMv7과 liby.a가 I386 경우 예를 들어 결과 라이브러리 libz.a는 armv6, armv7 및 i386이됩니다.

lipo -info를 통해 .a 파일을 검사 할 수도 있습니다.

희망이 도움이됩니다.:)

2

당신은 다른 라이브러리 linking path's

+0

좋은 팁입니다. 감사합니다! – natevw

관련 문제