最近在做自己公司游戏渠道的iOS端SDK,需要导出framework,遇到几个坑,Mark下,其余的资料就不写了,简书上很多,主要说下重点和遇到的坑
创建静态库项目,
TARGETS –> Build Setting –> 搜索linking,需要设置的选项如下
【Dead Code Stripping】设置为NO
【Link With Standard Libraries】设置为NO
最后将Mach-O Type设为Static Library //静态库
//动态库的区别,
//【Link With Standard Libraries】设置为YES,(个人经历设置成NO会报错)
//最后将Mach-O Type设为Dynamic Library //动态库库
Build Setting –> Build Active Architecture Only】菜单中,将其设置为NO
PS:如果此选项设为YES,会导致其编译时只生成当前机器的框架,将其设置为NO后,编译后生成的framework同时兼容多个
Architectures -> 添加 armv7s
这里开始比较蒙蔽,后来慢慢摸索出来了
命令格式:lipo -create 真机里.framework文件的绝对路径 第二个模拟器里.framework文件的绝对路径 -output 最终的.framework文件路径。 记得每一个文件路径输入后都需要用 空格 隔开哦
然后用输出在桌面上的SDK替换掉前面Debug-iphoneos文件夹中的framework包里面的SDK,(如果生成有扩展名的去掉扩展名,修改名字和framework包里面的SDK一样)
这里遇到了一个坑,自己写的类没事,引用了第三方的开源的就报错,奇葩,研究了大半天终于搞掂
把导出的framework拖进项目,如果导出的包如果包含其他第三方开源可能会报错,修改如下
Other linker flags = 添加 -ObjC 和 -all_load
另外素材需要导出Bundle.bundle包,现在创建的好像都是Mac os的,没法编译(难道是我打开方式不对?),只需将Base SDK修改成Latest iOS就可以了
动态库可以包含素材,读取方式
[NSBundle bundleForClass:[self class]]