iOS保姆式教学编写framework和Bundle
一、最近在学习如何编写SDK,下面介绍一下如何生成framework和Bundle
1.创建framework项目 ,File-->ios -->Framework
image.png
2.需要把要编译的源码移植到项目中,一开始项目会默认生成xxx.h文件,如果原来的源代码中没有xx.h文件,就可以使用的那个当前项目xx.h作为framework的头文件,如果有的话,可以直接删除
image.png
3.如果发现项目没有Products这个文件的话,到项目所在文件,右键xcodeproj显示包内容,搜索productRefGroup,把mainGroup的值复制给productRefGroup,关闭,xcode会自动刷新出来
image.png
4.修改配置参数
image.png
5.项目中如果用到了pch文件需要设置pch文件路径
image.png
6.设置开放的头文件,把开放文件从project移动到public
image.png
7.清空Bundle资源文件
image.png
8.创建Bundle文件
image.png
image.png
9.配置Bundle
image.png
image.png
10.添加图片和xib的资源
image.png
11.准备工作做完后,就可以编译Bundle了,command + B 编译完后,就可以直接移植到需要的宿主APP了
image.png
12.整合真机和模拟器framework,创建整合项目Aggregate
image.png
13.添加脚本
image.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
image.png
image.png
15.最后编译整合项目,command+b 编译好后,会直接打开文件,这是最终的framework
image.png
二、集成Framework
1.导入framework和Bundle文件
image.png
2.添加所需要的库
image.png
三、处理集成framework后报错问题:
1.源码中包含三方包,添加-lstdc++,出现报错信息
image.png
-
Other Linker 添加 $(OTHER_LDFLAGS) -ObjC 解决selector not recognized 运行报错
image.png
3.importFramework
image.png
4.编译。运行,自此framework集成全部完成,这个过程是痛苦的,也是查找了很多的资料,解决了一个有一个问题,也希望能帮助到需要帮助的人