2015-01-21 1 views
1

Xcode6에서 상속 및 관리 한 프레임 워크 파일과 프레임 워크 파일을 사용하는 데모 응용 프로그램이 있습니다. 나는 일반적으로 프레임 워크 프로젝트를 만들고, 생성 된 .framework 파일을 데모 응용 프로그램에 복사하고, 데모 응용 프로그램을 컴파일합니다.Xcode 6 누락 필수 사용자 지정 SDK 빌드의 아키텍처, 모든 아치를 올바르게 포함하는 방법?

최근 프레임 워크에서 필요한 아키텍처가 없으므로 내 데모 응용 프로그램을 빌드하지 못하는 문제가 발생합니다. 나는 SDK가 모든 아키텍쳐로 구축되도록 노력하고 있지만, 데모 어플리케이션이 무엇을 필요로하는지 알지 못한다. 이전에는 잘 돌아 갔지만 지금은 그렇지 않습니다.

이 SDK가 Xcode의 소비자가 필요로하는 아치로 제작되도록하려면 어떻게해야합니까?

아래 업데이트를 참조하십시오. 실행 스크립트가 대부분의 컴파일 작업을 수행하는 것으로 보이며 설정을 사용하는지 여부는 확실하지 않습니다.

데모 응용 프로그램 빌드에 오류 : SDK에

missing required architecture x86_64 in file 
Undefined symbols for architecture x86_64: 
    "_OBJC_CLASS_$_BeaconManager", referenced from: 
     objc-class-ref in StartViewController.o 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

빌드 설정. 가능한 한 완벽하게 아치 값을 확장했지만 도움이되지 않았습니다. .framework 파일은 모두 1MB에서 8MB로 증가했습니다.

enter image description here

UPDATE :

자체에 컴파일 더 많은 일을 할 것으로 보인다 빌드 스크립트가 있습니다. 이 스크립트가 자체적으로 아키텍처를 결정하는지 또는 Xcode에서 업데이트하려고 시도한 모든 설정을 여전히 준수하는지는 결정하지 않았습니다. 제가 배운 것은 SDK가 일단 만들어진 시뮬레이터에서 작동하지 않지만 데모 앱 + SDK가 실제 아이폰 장치에 장착되었을 때 작동한다는 것입니다.

xcodebuild -configuration ${CONFIGURATION} -target BeaconSDK -sdk iphoneos -SYMROOT=${SYMROOT} -OBJROOT=${OBJROOT} 

xcodebuild -configuration ${CONFIGURATION} -target BeaconSDK -sdk iphonesimulator -SYMROOT=${SYMROOT} -OBJROOT=${OBJROOT} 

INSTALL_DIR=${SRCROOT}/${TARGET_NAME} 
BUILD_DIR=${SRCROOT}/build 

DEVICE_DIR=${BUILD_DIR}/${CONFIGURATION}-iphoneos/${TARGET_NAME} 
SIMULATOR_DIR=${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME} 

# Create and renews the final product folder. 
rm -rf "${INSTALL_DIR}" 
mkdir -p "${INSTALL_DIR}" 
mkdir -p "${INSTALL_DIR}/Versions/A/Headers" 

xcrun -sdk iphoneos lipo -create ${SIMULATOR_DIR}/BeaconSDK ${DEVICE_DIR}/BeaconSDK -o ${INSTALL_DIR}/Versions/A/BeaconSDK 

# Copy the header files to the final product folder. 
cp -r "${SIMULATOR_DIR}/Headers/" "${INSTALL_DIR}/Versions/A/Headers/" 

mkdir -p "${INSTALL_DIR}/Versions/A/Resources" 

cp -r "${DEVICE_DIR}/" "${INSTALL_DIR}/Versions/A/Resources/" 

#create relative symbolic link. 
cd ${INSTALL_DIR} 

#link 
ln -s A Versions/Current 
ln -s Versions/A/BeaconSDK BeaconSDK 
ln -s Versions/A/Resources Resources 
ln -s Versions/A/Headers Headers 
+0

상속받은이 프레임 워크 파일은 바이너리 형식으로 만 제공되며 소스 코드로 제공 되었습니까? 바이너리로만 사용할 수있는 경우에는 해당 응용 프로그램에 적합한 아키텍처로 컴파일되지 않았을 수 있습니다. (이 경우 원본 바이너리를 제어 할 수 없다면 지원 목록에서 문제가되는 아키텍처를 제거하는 것이 좋습니다. –

+0

이 프레임 워크에 대한 소스 코드 및 XCode 프로젝트가 있습니다. 그것은 내 회사에서 모두 내부이지만, 나는 그것을 만들지 않았다. 이 경우에 x86_64를 Iphone6 ​​용 XCode 시뮬레이터에서 실행할 수 있어야합니다. – Miro

답변

0

디버깅 후 7 시간이 지나면 완전히 깨진 것입니다. 내가 깨어 났을 때 어떤 구조적인 오류없이 정상적으로 컴파일되었다. XCode가 설정을 업데이트하는 데 실패한 것은 이번이 처음이 아니며 몇 시간 또는 그 다음 날 변경 사항을 존중했습니다. 어떤 종류의 캐싱, 유지 된 값 등이 있는지 궁금합니다. 재부팅을하지 않았거나 밤새 Xcode를 닫지도 않았습니다.

0

프로젝트와 동일한 아키텍처 목록을 사용하여 프레임 워크를 다시 컴파일해야합니다. 64 비트 애플리케이션에 연결하려면 프레임 워크에 64 비트 슬라이스가 있어야합니다. 최신 컴파일러 설정으로 프레임 워크를 다시 작성한 것처럼 들리 셔도 좋습니다.

+0

완전히 채워지는 경우에도 아키텍처 설정이 도움이되지 않는 것처럼 보입니다. 위의 업데이트에 포함되어있는 관련성 높은 것으로 보이는 실행 스크립트를 발견했습니다. – Miro

관련 문제