2010-07-01 5 views
3

시뮬레이터와 ARM 프로세서 모두에 대한 정적 라이브러리를 빌드 한 다음이 둘을 범용 라이브러리로 결합해야하는 iPhone SDK 프로젝트가 있습니다.iPhone SDK 4의 다중 플랫폼 타겟팅

이전까지 저는 iPhone SDK 3+ 이상을 사용하여 각각 하나의 시뮬레이터와 하나의 ARM에 대해 별도의 타겟을 생성 한 다음 쉘 스크립트를 사용하여 이들을 결합하는 세 번째 타겟을 만들어이를 수행했습니다. 구성 대상 각각에 대한 배포 대상/빌드 설정은 각각의 아키텍처 등으로 설정됩니다. 또한 iPhone SDK 3+를 사용하면 기본 XCode의 왼쪽 위 모서리에있는 드롭 다운 메뉴에서 "Base SDK"를 선택할 수있었습니다 창문.

모든 유명했다 - 나는 지금 4

을 SDK로 업그레이드, 왼쪽 상단의 드롭 다운 메뉴에는 "기본 SDK"목록이 없습니다. 또한 컴파일러는 대상 배포 설정을 완전히 무시하는 것으로 보입니다. 대상 중 하나가 "iPhone 장치"로 설정되고 다른 대상이 "iPhone 시뮬레이터"로 설정된 경우에도 대상은 드롭 다운 메뉴에 설정된 것과 동일하게 구성됩니다. SDK 3 모든 것이 완벽하게 작동에, 다시 한번

offending menu

:

내가 충분히 명확하지 한 경우

, 여기에 공격 잘못된 전술 우리 모두가 알 메뉴와 사랑입니다. 이제 SDK 4에서 "장치"로 설정하면 ARM 용으로 빌드 된 두 개의 라이브러리가 생깁니다. 시뮬레이터로 설정하면 시뮬레이터 용으로 빌드 된 두 개의 라이브러리가 생깁니다.

누구나이 불홍기에 대한 해결책을 알고 있습니까?

감사합니다.

업데이트 : "xcodebuild"명령 줄 도구가 여전히 작동합니다. 즉, 각 대상의 배포 매개 변수에 따라 올바른 아키텍처를 빌드합니다.

따라서, 건설 엑스 코드의 GUI를 사용하기보다는, 정말 같은 xcodebuild 호출하는 쉘 스크립트 사용할 수 있습니다

 
xcodebuild -target device-target -configuration Debug 
xcodebuild -target sim-target -configuration Debug 

하는 것은 여전히 ​​진정한 해결책을 찾기 위해 좋은 것, 그러나 이것은을 얻을 것이다 이제 끝내야 할 직업.

+1

매우 혼란 스럽습니다. 약간의 통찰력을 위해 이것을 읽으십시오 - http://stackoverflow.com/questions/3092386/base-sdk-3-0-to-sdk-4-0 – Jason

답변

3

예, 애플은 모든 XCode 컨트롤과 옵션을 모른 것 같습니다. 앱을 끝 마치면 베타 SDK를 설치하지 않거나 GM/공개 SDK를 설치하지 않습니다. I 을 알면 업그레이드가 중단됩니다.

어쨌든, 각각을 빌드하고 libs를 함께 링크하는 외부 대상 또는 쉘 스크립트 대상을 작성할 수 있어야합니다. 내 bag-o-tricks 라이브러리와 비슷한 쉘 스크립트가 있습니다. Xcode 프로젝트 설정에서 BaseSDK를 iPhone Device 4.0 SDK로 설정했습니다. 빌드 스크립트는 대략 다음과 같습니다.

xcodebuild -parallelizeTargets -configuration Debug -sdk iphoneos4.0 -target StaticLibs 
xcodebuild -parallelizeTargets -configuration Debug -sdk iphonesimulator4.0 -target StaticLibs 
xcodebuild -parallelizeTargets -configuration Release -sdk iphoneos4.0 -target StaticLibs 
xcodebuild -parallelizeTargets -configuration Release -sdk iphonesimulator4.0 -target StaticLibs 
mkdir -p build/Debug-dist build/Release-dist 
lipo build/Debug-iphoneos/libfoo.a build/Debug-iphonesimulator/libfoo.a -create -output build/Debug-dist/libfoo.a 
lipo build/Release-iphoneos/libfoo.a build/Release-iphonesimulator/libfoo.a -create -output build/Release-dist/libfoo.a 

좋아요, 이것은 풀린 버전입니다. 내 실제 스크립트는 for thing in ${LIST_OF_STUFF}; do ... 루프가 많아 빌드를 자동화하고 모든 포함 파일을 복사하며 전체 SDK를 롤업합니다.

patch to Core-Plot을 제출하여 SDK 생성을 자동화했습니다. 이 패치를 참조로 사용하는 경우 SDKSettings에서 GCC_VERSION 키/값 쌍을 제거하십시오.plist 또는 그것에 반대하는 응용 프로그램은 실패합니다.

+0

글쎄 존, 충분히 가깝습니다, 고마워요! 그것은 내가 생각해 낸 것과 비슷하지만, 나는 당신을 더 좋아한다고 생각합니다. 나는 Xcode의 환경 설정이나 뭔가에서 숨겨진 체크 박스에 대해 알아 내기를 원했지만 현상금은 다른 질문에 현상금을 넣어야하기 때문에 너만큼 좋다. ;-) – Tom

0

iPhone sdk 4.0에서 사과는 3.2보다 낮은 모든 iOS 버전을 제거했습니다. iPhone 용으로 제작하면 4.0 용으로 자동 빌드되며, iPad 용으로 제작하면 3.2로 컴파일됩니다.

1

필자가 이해하는 한, 설정의 "Base SDK"는 SDK에서 가능한 한 최상이어야하고 "iPhone OS Deployment Target"(설정에서도)이 가장 낮아야합니다.

예를 들어, iPhone OS 3.1.2 이상용으로 응용 프로그램을 컴파일하려면 "Base SDK"를 4.0으로 설정하고 "iPhone OS Deployment Target"을 3.1.2로 설정해야합니다.