iOS静态库开发中对Bitcode的支持
1.bitcode
bitcode是LLVM编译器将C/C++/OC/Swift等前端变成语言编译成多种不同芯片上的机器指令过程中的中间代码。并且这个中间代码是CPU无关的。
原本我们的APP里要包含多种支持CPU架构的代码。支持Bitcode的优势就是在提交store后,苹果再动态生成相应CPU的APP版本,这样每个版本的APP就相对小了很多。
相关bitcode的详细介绍参看这篇文章:http://www.jianshu.com/p/f42a33f5eb61
2.SDK开发中bitcode的支持:
(1)通过在build setting中对OTHER_CFLAGS字段的release时添加-fembed-bitcode
(2)新建target,新建Aggregate,添加编译规则如下:
# define output folder environment variable UNIVERSAL_OUTPUTFOLDER=${BUILD_DIR}/${CONFIGURATION}-universal # Step 1. Build Device and Simulator versions xcodebuild -target TARGETNAME ONLY_ACTIVE_ARCH=NO -configuration Release -sdk iphoneos BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" xcodebuild -target TARGETNAME -configuration Release -sdk iphonesimulator BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" # make sure the output directory exists mkdir -p "${UNIVERSAL_OUTPUTFOLDER}" # Step 2. Create universal binary file using lipo lipo -create -output "${UNIVERSAL_OUTPUTFOLDER}/lib${PROJECT_NAME}.a" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/lib${PROJECT_NAME}.a" "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/lib${PROJECT_NAME}.a" # Last touch. copy the header files. Just for convenience cp -R "${BUILD_DIR}/${CONFIGURATION}-iphoneos/include" "${UNIVERSAL_OUTPUTFOLDER}/"
同时也这是将SDK中模拟器和真机编译后的SDK包合并的方法。
在真机编译时加上 OTHER_CFLAGS="-fembed-bitcode" ,就能支持bitcode了。
___________________________________________________
专注iOS/前端开发,广泛涉猎多种平台和技术,欢迎交流
可以在微博关注并@沈z伟