¿Cómo hago un marco grueso con la opción bitcode?

Entorno: XCode 7.0.1 Módulo: Objective-C Tipo de package: Framework

Hola, estoy intentando crear un framework para soportar armv7, armv7s, arm64, i386 y x86_64. Estoy usando agregado para hacer la biblioteca de grasa. Dentro del script agregado, estoy ejecutando dos commands xcodebuild 1. para armv7, armv7s y arm64 y 2. para architectures i386 y x86_64. Además, he configurado Habilitar Bitcode = YES y otras banderas C = -fembed-bitcode bajo la configuration de compilation objective. Como precaución, estoy agregando las opciones ENABLE_BITCODE = YES y OTHER_CFLAGS = "- fembed-bitcode" al command xcodebuild

Mis commands de compilation xcode son los siguientes:

#Build The framework Target for iPhoneOS xcodebuild -project "${PROJECT_FILE_PATH}" -target "${AN_TARGET}" ONLY_ACTIVE_ARCH=NO -configuration "${CONFIGURATION}" -sdk iphoneos BUILD_DIR="${BUILD_DIR}" OBJROOT="${OBJROOT}" BUILD_ROOT="${BUILD_ROOT}" CONFIGURATION_BUILD_DIR="${IPHONE_DEVICE_BUILD_DIR}" SYMROOT="${SYMROOT}" ARCHS="armv7 armv7s arm64" ENABLE_BITCODE=YES OTHER_CFLAGS="-fembed-bitcode" $ACTION #Build The framework Target for iPhoneSimulator xcodebuild -project "${PROJECT_FILE_PATH}" -target "${AN_TARGET}" ONLY_ACTIVE_ARCH=NO -configuration "${CONFIGURATION}" -sdk iphonesimulator BUILD_DIR="${BUILD_DIR}" OBJROOT="${OBJROOT}" BUILD_ROOT="${BUILD_ROOT}" CONFIGURATION_BUILD_DIR="${IPHONE_SIMULATOR_BUILD_DIR}" SYMROOT="${SYMROOT}" ARCHS="i386 x86_64" ENABLE_BITCODE=YES OTHER_CFLAGS="-fembed-bitcode" $ACTION 

después de ejecutar los dos commands anteriores, estoy combinando estas dos comstackciones para hacer un marco grueso binary usando el command a continuación

 # create a fat Framework lipo -create "${IPHONE_DEVICE_BUILD_DIR}/${PROJECT_NAME}.framework/${PROJECT_NAME}" "${IPHONE_SIMULATOR_BUILD_DIR}/${PROJECT_NAME}.framework/${PROJECT_NAME}" - output "${FRAMEWORK_FOLDER}/${AN_END_USER_FRAMEWORK_NAME}" 

El problema que enfrenta iam es después de la creación del lipo, no puedo usarlo en la aplicación habilitada con código de bits. Después de ejecutar otool -l framework_binary | grep -LLVM otool -l framework_binary | grep -LLVM , no veo las banderas habilitadas con código de bits o __LLVM.

Lipo elimina el bitcode del binary gordo. ¿Hay alguna forma en que pueda retener bitcode mientras se ejecuta el command lipo?

Corrección: según la respuesta de Nestor, ejecuté el command otool -l -arch armv7 framework_binary | grep LLVM como otool -l -arch armv7 framework_binary | grep LLVM otool -l -arch armv7 framework_binary | grep LLVM y para mi sorpresa, pude ver el segname __LLVM clang. Sin embargo, cuando integro el mismo marco binary de grasa en mi proyecto, funciona bien en el simulador, pero arroja el siguiente error mientras se ejecuta en el dispositivo: ld: 'MyBinary' no contiene bitcode. Debe rebuildlo con el código de bits activado (configuration Xcode ENABLE_BITCODE), get una biblioteca actualizada del proveedor o inhabilitar el código de bits para este objective. para architecture armv7

Afortunadamente es solo un problema con los informes de otool , no con lipo ; Tienes que agregar el parámetro -arch :

 otool -arch arm64 -l myLipoOutput.a 

Fuente: http://www.openradar.me/radar?id=6301306440384512

Esto es algo raro, no hay mucha documentation para hacer esto, al final uso este command:

 xcodebuild -project ${PROJECT_NAME}.xcodeproj -target ${FRAMEWORK_NAME} ONLY_ACTIVE_ARCH=NO BITCODE_GENERATION_MODE=bitcode FRAMEWORK_SEARCH_PATHS="${FRAMEWORK_SEARCH_PARTH} ${SRCROOT}/**" -sdk ${SIMULATOR_SDK} -configuration ${CONFIGURATION} clean build CONFIGURATION_BUILD_DIR=${BUILD_DIR}/${CONFIGURATION}-${SIMULATOR_SDK} 2>&1 xcodebuild -project ${PROJECT_NAME}.xcodeproj -target ${FRAMEWORK_NAME} -sdk ${DEVICE_SDK} ONLY_ACTIVE_ARCH=NO BITCODE_GENERATION_MODE=bitcode FRAMEWORK_SEARCH_PATHS="${FRAMEWORK_SEARCH_PARTH} ${SRCROOT}/**" -configuration ${CONFIGURATION} clean build CONFIGURATION_BUILD_DIR=${BUILD_DIR}/${CONFIGURATION}-${DEVICE_SDK} 2>&1 

Agregue el indicador de código de bits BITCODE_GENERATION_MODE = al command xcodebuild

Intente utilizar el file para las secciones del arm en lugar de comstackr

 xcodebuild -scheme "${SCHEME}" -workspace "${WORKSPACE}" -configuration "${CONFIGURATION}" -sdk iphoneos ARCHS="arm64 armv7 armv7s" CONFIGURATION_BUILD_DIR="${CONFIGURATION_BUILD_DIR}/arm" CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO ONLY_ACTIVE_ARCH=NO archive 

Después de eso, ejecute lipo para fusionar el simulador y los arms.

Y después de eso ejecute otool -arch arm64 -l myLipoOutput.a y debería funcionar.

Parece un error en Xcode 7.0.1. He tenido el mismo problema y la modificación de Xcode a la versión 7 lo solucionó.

Actualización: en realidad, puede ser un error en Xcode 7 que se corrigió en 7.0.1, esta respuesta SO resolvió el problema para mí.