iOS制作pod第三方库的framework
一.创建工程
1.选择Cocoa Touch Framework
2.更改xcode配置
注:Dead Code Stripping:舍弃无用代码
Link With Standard Library:用标准库连接
Mach-O Type:类型选择静态库
3.将Build Active Architecture Only 设置为NO(代表根据Arch 和Valid Arch来设定, 一般Debug模式下为yes,Release模式下为No):
注:Build Active Archiitecture Only指是否只对当前连接设备所支持的指令集编译,在debug模式下为了编译更快选择yes,而release模式下设为No,支持所选的所有架构
4.创建Podfile文件
引入第三方库,然后执行pod install
5.打开.xcworkspace文件,创建类
4.设置Headers
将需要公开的头文件拖置Public
二.创建demo联调
1.通过workspace文件打开步骤一的SDK项目
2.新建一个target,类型选择Single View App
3.编辑Podfile,如下所示:
4.执行pod install
5.选中demo的target,在Target Dependencies中将SDK和bundle的target加进来,并且在Link Binary With Libraries中添加SDK的framework, 在Copy Bundle Resource中添加bundle。这样的话,SDK有改动,demo引用的是最新版本。
将图中替换内容后的标红框的framework拉出来保存,此为制作完成的Framework
四.脚本编译出SDK供其它项目使用
1.在SDK项目中创建一个新target,类型选择Aggregate
2.选中新创建的target,在Build Phrases下添加一个Run Script,内容参考如下:
######### 打包脚本
#########BUILD_TIME=`date "+%y%m%d%H%M"`
#是否拷贝lib库 !!!!!!!!!!!!!COPY_LIBS=1
#clean and build 是否重新clean编译CLEAN_BUILD=0
#SDK名称SDK_NAME=${PROJECT_NAME}
#bundle名称BUNDLE_NAME=XGOverseaResource
#ios sdk工程路径PATH_SDK=${SRCROOT}
PATH_DEMO=$(dirname ${SRCROOT})/XGOverseaSDK/XGOverseaDemo
#workspace工程名称WORKSPACE=${PROJECT_NAME}.xcworkspace
echo "sdk工程路径:$PATH_SDK"
echo "sdk demo工程路径:$PATH_DEMO"
#输出路径OUTPUT=/Users/${USER}/Desktop/${SDK_NAME}_${BUILD_TIME}mkdir $OUTPUT
echo "输出路径:$OUTPUT"
echo "########### Build ##########"
if [ CLEAN_BUILD ];
then
#进入PlayerSDK目录cd $PATH_SDK
#执行clean命令xcodebuild clean
#执行build真机命令xcodebuild -workspace $WORKSPACE -scheme $SDK_NAME -sdk iphoneos -configuration Release
#build模拟器SDKxcodebuild -workspace $WORKSPACE -scheme $SDK_NAME -sdk iphonesimulator -configuration Release
fi
echo "########### Strip ##########"
#执行strip真机SDKstrip -x ${BUILD_DIR}/Release-iphoneos/$SDK_NAME.framework/$SDK_NAME
#cp 真机framework到outputcp -r ${BUILD_DIR}/Release-iphoneos/$SDK_NAME.framework $OUTPUT/$SDK_NAME.framework
#执行strip模拟器命令strip -x ${BUILD_DIR}/Release-iphonesimulator/$SDK_NAME.framework/$SDK_NAME
#删除framework原有的库文件rm -r $OUTPUT/$SDK_NAME.framework/$SDK_NAME
#合并SDK 输出到outputlipo -create ${BUILD_DIR}/Release-iphonesimulator/$SDK_NAME.framework/$SDK_NAME ${BUILD_DIR}/Release-iphoneos/$SDK_NAME.framework/$SDK_NAME -output $OUTPUT/$SDK_NAME.framework/$SDK_NAME
echo "########### Other framework ##########"
#SDK关联库SDKS_NAME=(AFNetworking FBSDKCoreKit FBSDKLoginKit FBSDKShareKit QMUIKit)
for var in ${SDKS_NAME[@]};
do
echo $var
#执行strip真机SDKstrip -x ${BUILD_DIR}/Release-iphoneos/$var/${var}.framework/$var
#cp 真机framework到outputcp -r ${BUILD_DIR}/Release-iphoneos/$var/${var}.framework $OUTPUT/$var.framework#执行strip模拟器命令strip -x ${BUILD_DIR}/Release-iphonesimulator/$var/${var}.framework/$var
#删除framework原有的库文件rm -r $OUTPUT/${var}.framework/$var
#合并SDK 输出到outputlipo -create ${BUILD_DIR}/Release-iphonesimulator/$var/${var}.framework/$var ${BUILD_DIR}/Release-iphoneos/$var/${var}.framework/$var -output $OUTPUT/${var}.framework/$var
done
echo "########### OUTPUT ##########"
#拷贝 Demo到release目录cp -R $PATH_DEMO $OUTPUT/echo "copy $PATH_DEMO to $OUTPUT/"
echo "########### Copy Bundle ##########"
#复制Bundle到outputcp -r ${BUILD_DIR}/Release-iphoneos/${BUNDLE_NAME}.bundle $OUTPUT/$BUNDLE_NAME.bundle
open /$OUTPUT
echo "########### FINISHED ##########"
3.编译target,会自动打开SDK所需framework所在的文件夹。
注:步骤二和步骤一示例名称有所不同,不用纠结,只为示例!
制作完成!!!