iOS保姆式教学编写framework和Bundle
一、最近在学习如何编写SDK,下面介绍一下如何生成framework和Bundle
1.创建framework项目 ,File-->ios -->Framework
![](https://img.haomeiwen.com/i1346223/40ec6a7a2aa1b813.png)
2.需要把要编译的源码移植到项目中,一开始项目会默认生成xxx.h文件,如果原来的源代码中没有xx.h文件,就可以使用的那个当前项目xx.h作为framework的头文件,如果有的话,可以直接删除
![](https://img.haomeiwen.com/i1346223/c120c9e3ef7af526.png)
3.如果发现项目没有Products这个文件的话,到项目所在文件,右键xcodeproj显示包内容,搜索productRefGroup,把mainGroup的值复制给productRefGroup,关闭,xcode会自动刷新出来
![](https://img.haomeiwen.com/i1346223/0e88119f2cda9f14.png)
4.修改配置参数
![](https://img.haomeiwen.com/i1346223/30e4525ac30a7599.png)
5.项目中如果用到了pch文件需要设置pch文件路径
![](https://img.haomeiwen.com/i1346223/6a5e9339bfabc2b3.png)
6.设置开放的头文件,把开放文件从project移动到public
![](https://img.haomeiwen.com/i1346223/5b5ee2a9d9b498c4.png)
7.清空Bundle资源文件
![](https://img.haomeiwen.com/i1346223/9d64cbe0c630cde3.png)
8.创建Bundle文件
![](https://img.haomeiwen.com/i1346223/80c42a1002305b85.png)
![](https://img.haomeiwen.com/i1346223/1848e554c401fd03.png)
9.配置Bundle
![](https://img.haomeiwen.com/i1346223/f13d1805b276264e.png)
![](https://img.haomeiwen.com/i1346223/d6bd324aa15ca18c.png)
10.添加图片和xib的资源
![](https://img.haomeiwen.com/i1346223/e34a5706f2a417af.png)
11.准备工作做完后,就可以编译Bundle了,command + B 编译完后,就可以直接移植到需要的宿主APP了
![](https://img.haomeiwen.com/i1346223/36492e151f702c77.png)
12.整合真机和模拟器framework,创建整合项目Aggregate
![](https://img.haomeiwen.com/i1346223/b1098d8ecaeb1d89.png)
13.添加脚本
![](https://img.haomeiwen.com/i1346223/7eabe4eb4fdcaf2f.png)
下面是脚本
!/bin/sh
要build的target名
TARGET_NAME=1 ]]
then
TARGET_NAME={SRCROOT}/${PROJECT_NAME}_Products/"
创建输出目录,并删除之前的framework文件
mkdir -p "{UNIVERSAL_OUTPUT_FOLDER}/${TARGET_NAME}.framework"
分别编译模拟器和真机的Framework
xcodebuild -target "{CONFIGURATION} -sdk iphoneos BUILD_DIR="
{BUILD_ROOT}" clean build
xcodebuild -target "{CONFIGURATION} -sdk iphonesimulator BUILD_DIR="
{BUILD_ROOT}" clean build
拷贝framework到univer目录
cp -R "{CONFIGURATION}-iphonesimulator/
{UNIVERSAL_OUTPUT_FOLDER}"
合并framework,输出最终的framework到build目录
lipo -create -output "{TARGET_NAME}.framework/
{BUILD_DIR}/
{TARGET_NAME}.framework/
{BUILD_DIR}/
{TARGET_NAME}.framework/${TARGET_NAME}"
删除编译之后生成的无关的配置文件
dir_path="{TARGET_NAME}.framework/"
for file in ls {file} =~ ".xcconfig" ]]
then
rm -f "{file}"
fi
done
判断build文件夹是否存在,存在则删除
if [ -d "{SRCROOT}/build"
fi
rm -rf "{CONFIGURATION}-iphonesimulator" "
{CONFIGURATION}-iphoneos"
打开合并后的文件夹
open "${UNIVERSAL_OUTPUT_FOLDER}"
把以上脚本直接复制就可以
14.分别编译模拟器和真机环境下的frmaework
![](https://img.haomeiwen.com/i1346223/aa7503f70ca70d7a.png)
![](https://img.haomeiwen.com/i1346223/6ef00f3b70e54cdd.png)
15.最后编译整合项目,command+b 编译好后,会直接打开文件,这是最终的framework
![](https://img.haomeiwen.com/i1346223/a8ed76cc4f5fa9cd.png)
二、集成Framework
1.导入framework和Bundle文件
![](https://img.haomeiwen.com/i1346223/028e27b6de64cb7b.png)
2.添加所需要的库
![](https://img.haomeiwen.com/i1346223/25a71b100a94b6cf.png)
三、处理集成framework后报错问题:
1.源码中包含三方包,添加-lstdc++,出现报错信息
![](https://img.haomeiwen.com/i1346223/6fc7bd3e00ccd375.png)
-
Other Linker 添加 $(OTHER_LDFLAGS) -ObjC 解决selector not recognized 运行报错
image.png
3.importFramework
![](https://img.haomeiwen.com/i1346223/27467cc24f054fca.png)
4.编译。运行,自此framework集成全部完成,这个过程是痛苦的,也是查找了很多的资料,解决了一个有一个问题,也希望能帮助到需要帮助的人