最近项目要加快开发速度,所以想到了把一大堆第三方库打成静态包的方法,以下记录一下流程,以防以后用到忘记了
1.创建一个静态库工程,不多讲,百度都有
2.将静态库文件拉进项目的主工程,因为我主项目用的cocoapods管理,所以在podfile文件里面需要修改以下,使cocoapods管理两个工程文件
platform :ios,'8.0'
inhibit_all_warnings!
#use_frameworks! 使用这行以后makeframework工程打不了静态库文件
source 'https://github.com/CocoaPods/Specs.git'
workspace 'xxx.xcworkspace'
defshared_pods
pod 'a'
pod'b'
end
target'主工程名称'do
shared_pods
end
target '项目名称' do
project'MakeFrameWork/MakeFrameWork.xcodeproj' //项目静态库工程,写上路径,不然cocoapods找不到的
pod'YYKit'
pod'SDWebImage'
pod'FMDB', '~> 2.6.2' # 为了兼容GYDataCenter
end
3.接下来 pod install
4.为静态库工程弄一个编译的脚本,打出来的包就可以自动合并了(选中progect 在targets下的+号添加一个aggregate的 target,然后复制下面的脚本就可以了) 注意,用脚本编译的话如果出错是不会报错的,而是直接显示success 所以要看弹出的文件夹里的framework里面有没有 真的静态库文件,如果只是一个header,那就是有错误。
#!/bin/sh
#要build的target名
TARGET_NAME=${PROJECT_NAME}
if[[ $1]]
then
TARGET_NAME=$1
fi
UNIVERSAL_OUTPUT_FOLDER="${SRCROOT}/${PROJECT_NAME}_Products/"
#创建输出目录,并删除之前的framework文件
mkdir -p "${UNIVERSAL_OUTPUT_FOLDER}"
rm -rf "${UNIVERSAL_OUTPUT_FOLDER}/${TARGET_NAME}.framework"
#分别编译模拟器和真机的Framework
xcodebuild -target"${TARGET_NAME}"ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR="${BUILD_DIR}"BUILD_ROOT="${BUILD_ROOT}"clean build
xcodebuild -target"${TARGET_NAME}"ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphonesimulator BUILD_DIR="${BUILD_DIR}"BUILD_ROOT="${BUILD_ROOT}"clean build
#拷贝framework到univer目录
cp -R "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework" "${UNIVERSAL_OUTPUT_FOLDER}"
#合并framework,输出最终的framework到build目录
lipo -create -output "${UNIVERSAL_OUTPUT_FOLDER}/${TARGET_NAME}.framework/${TARGET_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework/${TARGET_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${TARGET_NAME}.framework/${TARGET_NAME}"
#删除编译之后生成的无关的配置文件
dir_path="${UNIVERSAL_OUTPUT_FOLDER}/${TARGET_NAME}.framework/"
forfileinls $dir_path
do
if[[ ${file} =~".xcconfig"]]
then
rm -f "${dir_path}/${file}"
fi
done
#判断build文件夹是否存在,存在则删除
if [ -d "${SRCROOT}/build" ]
then
rm -rf "${SRCROOT}/build"
fi
rm -rf "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator" "${BUILD_DIR}/${CONFIGURATION}-iphoneos"
#打开合并后的文件夹
open "${UNIVERSAL_OUTPUT_FOLDER}"
5.编译中会遇到一个 lpods-framework xxx not a library 的问题,记不太得了,把build phases下的Link Binary with Library 下的a包删除就可以解决了
6.编译通过以后在主工程的general里把生成的a包拉进去就可以直接关联了,然后运行 OK,节约生命,从我做起