创建静态库可能出于以下几个理由:
1.你想将一些你和你团队中的同事们经常使用的类打包并轻松的分享给周围其他人。
2.你想让一些通用代码处于自己的掌控之下,以便于修复和升级。
3.你想将库共享给其他人,但不想让他们看到你的源代码。
本教程假定你有了一个单独的静态库工程,或者项目中其中一个target是静态库
假定工程名为test 静态库target名为 testLib
在Xcode菜单中选择File/New/Target,选择iOS/Other并点击Aggregate 命名为merge
在工程导航视图中选中test,然后选择刚刚建立的merge target。切换到Build Phases标签;
点击 "加号按钮",在弹出的菜单中选择New Run Script Phases
填入
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# define static library target name LIB_NAME="testLib" # define output folder environment variable UNIVERSAL_OUTPUTFOLDER=${BUILD_DIR}/${CONFIGURATION}-universal DEVICE_DIR=${BUILD_DIR}/${CONFIGURATION}-iphoneos SIMULATOR_DIR=${BUILD_DIR}/${CONFIGURATION}-iphonesimulator # Step 1. Build Device and Simulator versions # insert such -arch i386 before BUILD_DIR assign arch xcodebuild -target "${LIB_NAME}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" xcodebuild -target "${LIB_NAME}" -configuration ${CONFIGURATION} -sdk iphonesimulator BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" # Cleaning the oldest and make sure the output directory exists if [ -d "${UNIVERSAL_OUTPUTFOLDER}" ] then rm -rf "${UNIVERSAL_OUTPUTFOLDER}" fi mkdir -p "${UNIVERSAL_OUTPUTFOLDER}" # Step 2. Create universal binary file using lipo lipo -create "${DEVICE_DIR}/lib${LIB_NAME}.a" "${SIMULATOR_DIR}/lib${LIB_NAME}.a" -output "${UNIVERSAL_OUTPUTFOLDER}/lib${LIB_NAME}.a" # Last touch. copy the header files. Just for convenience cp -R "${DEVICE_DIR}/include" "${UNIVERSAL_OUTPUTFOLDER}/" #open the universal dir open "${UNIVERSAL_OUTPUTFOLDER}/" #delete DEVICE and SIMULATOR build file #rm -rf "${DEVICE_DIR}" #rm -rf "${SIMULATOR_DIR}" |
注意:其中LIB_NAME="testLib" 为对应要合并的静态库target名称
本脚本根据merge target的debug 或者 release 来决定打出的.a为debug 或者 release
run merge target 即可弹出合并后的静态库路径
转载请注明:天狐博客 » iOS开发之Xcode中合并通用静态库脚本