標籤:arch res 複製 pen settings tar run 檔案 frame
建立Aggregate來合并模擬器和真機通用的framework
然後在Build Phases下New Run Script Phase建立合并指令碼:
# ConstantsSF_TARGET_NAME=${PROJECT_NAME}#自訂的用來存放最後合并的frameworkUNIVERSAL_OUTPUTFOLDER=${BUILD_DIR}/${CONFIGURATION}-universal#IPHONE_DEVICE_BUILD_DIR=${BUILD_DIR}/${CONFIGURATION}-iphoneosWORKSPACE_NAME=${PROJECT_NAME}.xcworkspaceYO_SCHEME=${PROJECT_NAME}#clean build是先清除原來的buildxcodebuild -workspace ${WORKSPACE_NAME} -scheme ${YO_SCHEME} -sdk iphonesimulator -configuration"${CONFIGURATION}"clean buildxcodebuild -workspace ${WORKSPACE_NAME} -scheme ${YO_SCHEME} -sdk iphoneos -configuration"${CONFIGURATION}"clean build# build project#xcodebuild -project "${PROJECT_FILE_PATH}" -target "${TARGET_NAME}" -configuration "${CONFIGURATION}" -sdk iphoneos BUILD_DIR="${BUILD_DIR}" OBJROOT="${OBJROOT}" BUILD_ROOT="${BUILD_ROOT}" CONFIGURATION_BUILD_DIR="${IPHONE_DEVICE_BUILD_DIR}/arm64" SYMROOT="${SYMROOT}" ARCHS=‘arm64‘ VALID_ARCHS=‘arm64‘ $ACTION#xcodebuild -project "${PROJECT_FILE_PATH}" -target "${TARGET_NAME}" -configuration "${CONFIGURATION}" -sdk iphoneos BUILD_DIR="${BUILD_DIR}" OBJROOT="${OBJROOT}" BUILD_ROOT="${BUILD_ROOT}" CONFIGURATION_BUILD_DIR="${IPHONE_DEVICE_BUILD_DIR}/armv7" SYMROOT="${SYMROOT}" ARCHS=‘armv7 armv7s‘ VALID_ARCHS=‘armv7 armv7s‘ $ACTION# Copy the framework structure to the universal folder (clean it first)#因為framework的合并,lipo只是合并了最後的二進位可執行檔,所以其它的需要我們自己複製過來#先移除原來的rm -rf "${UNIVERSAL_OUTPUTFOLDER}"mkdir -p "${UNIVERSAL_OUTPUTFOLDER}"cp -R "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework" "${UNIVERSAL_OUTPUTFOLDER}/${PROJECT_NAME}.framework"#合并模擬器和真機的架構lipo -create "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework/${PROJECT_NAME}""${BUILD_DIR}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework/${PROJECT_NAME}"-output"${UNIVERSAL_OUTPUTFOLDER}/${PROJECT_NAME}.framework/${PROJECT_NAME}"open "${UNIVERSAL_OUTPUTFOLDER}"
對於以上的指令碼,其中用到了很多的 xcode預定義的變數,這些變數怎麼來的呢?你可以在命令列下, 輸入
xcodebuild -workspace YohunlUtilsLib.xcworkspace -scheme YohunlUtilsLib -sdk iphonesimulator -configuration Debug -showBuildSettings > xcodebuild_showBuildSettings.txt
來將所有的xcode預定義變數都匯入到文本xcodebuild_showBuildSettings.txt 中,然後你就可以選用你需要的啦
當然了,我們一般都應該合并release模式的,而不是debug模式的framework
查看.framework的資訊:
lipo -info aa.framework/aa
顯示:
Architectures in the fat file: aa.framework/aa are: armv7 arm64
說明我們產生的真機framework:aa.framework 包含了兩種架構 armv7 arm64
分離架構(以分離armv7為例)
目前的目錄建立檔案夾,用於存放分離後的架構,和分離出的.o檔案
mkdir armV7
分離出armv7架構到檔案夾armV7下:
lipo aa.framework/aa -thin armv7 -output ./armv7/aa_armv7
分離armv7架構所有的.o檔案
cd armV7ar -x aa_armv7
ios .a和.framework