iOS靜態庫開發中對Bitcode的支援
阿新 • • 發佈:2019-02-01
1.bitcode
bitcode是LLVM編譯器將C/C++/OC/Swift等前端變成語言編譯成多種不同晶片上的機器指令過程中的中間程式碼。並且這個中間程式碼是CPU無關的。
原本我們的APP裡要包含多種支援CPU架構的程式碼。支援Bitcode的優勢就是在提交store後,蘋果再動態生成相應CPU的APP版本,這樣每個版本的APP就相對小了很多。
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了。