Framework的制作
一、制作过程.
1.以SDWebImage为例
-
创建framework工程
-
修改Build Settings中配置
- 下载好最新的SD,地址:https://github.com/rs/SDWebImage,拷贝源码到此工程;或者直接使用SD现有的工程,修改以上配置信息;然后修改为Release,如下图:
- 点击Edit Scheme :
- 修改Build Configuration:
- 编译 cmd+b ,这里需要编译两次一次是真机设备,一次是模拟器;编译完成后,打开下图SDWebImage.framework所在的目录:
- 打开终端:cd 到Products所在的目录(可以直接将Products拖到终端):
- 如下:
- 下面通过命令合并真机设备和模拟器framework:
- 将新生成的framework替换Release-iphoneos或者Release-iphonesimulator下面的:
- 将替换完的SDWebImage.framework拷贝到项目中如图:
- 下面就可以修改项目中SDWebImage.podspec的引入方式为s.ios.vendored_frameworks = ‘Frameworks/SDWebImage.framework’;完事!!!
2.自动化
- 分别编译模拟器和真机,自动执行脚本生成framework
首先添加Run Script
- 在工程目录下添加文件夹ToolScripts,把脚本createFramework.sh放进去;
- 先编译模拟器,再编译真机;会看到如下弹窗:合并完成。
二.遇到的问题
- 编译到最后出现个弹窗:
这是因为自己制作的framwork和项目中的bundle不一致造成的,在制作之前,先修改SDWebImage的和项目中的保持一致,再重复以上步骤,最后cmd+shift+k清理一下缓存即可。
#!/bin/sh
echo "SYMROOT = $SYMROOT"
echo "SYMROOT = ${BUILD_DIR}/${CONFIGURATION}"
echo "SYMROOT = ${BUILD_DIR}/${CONFIGURATION}${EFFECTIVE_PLATFORM_NAME}"
bundleID=${PRODUCT_BUNDLE_IDENTIFIER}
CURRENTCONFIG_DEVICE_DIR=${BUILD_DIR}/${CONFIGURATION}${EFFECTIVE_PLATFORM_NAME}
JfBuildDir=${BUILD_DIR}
JfExecutablePath=${EXECUTABLE_PATH}
JfExecutableName=${EXECUTABLE_NAME}
JfExecutableFolderPath=${EXECUTABLE_FOLDER_PATH}
echo "JfBuildDir = $JfBuildDir"
echo "JfExecutablePath = $JfExecutablePath"
echo "JfExecutableName = $JfExecutableName"
echo "90-> ${CURRENTCONFIG_DEVICE_DIR}"
echo "error:message"
echo "warning:message"
cd ${JfBuildDir}
framework="IJKMediaFramework"
[ -f "$framework" ] && rm "$framework"
dire="compoundFramework/"
[ -d "$dire" ] && rm -rf "$dire"
mkdir "$dire"
if [ -d "Release-iphoneos" ] && [ -d "Release-iphonesimulator" ]; then
echo "composition framework"
lipo -create Release-iphoneos/${JfExecutablePath} Release-iphonesimulator/${JfExecutablePath} -compound ${JfExecutableName}
cp -rf Release-iphoneos/* ${dire}
cp -f ${JfExecutableName} ${dire}/${JfExecutableFolderPath}
rm -f ${JfExecutableName}
open ${dire}
fi