下面介绍一下具体生成步骤:
1、新建一个framework&library库。IOS 下的cocoa touch static library。然后输入product name 为JsonModel
2、把JsonMdel.h和JsonMdel.m删除。导入自己的文件
3、修改scheme,设为release版本。
4、 将有用的头文件显示出来
OK,选译ios device编译运行。成功后将在目录的build/products/release-iphoneos/下产生一个libJsonModel.a文件。
注,这里产生的是真机使用的.a文件。
选译iphonesimulator 进行编译一次,同样会在build/products/release-iphonesimulator/下产生一个libJsonModel.a文件。
这里是虚拟机使用的.a文件。
下面来看一下这两个文件有什么不同之处,使用lipo -info命令。
打开终端。
进入到相应的目录。
真机的:libJsonModel.a文件信息。
input file libJsonModel.a is not a fat file
Non-fat file: libJsonModel.a is architecture: armv7
如图:
模拟器的:libJsonModel.a文件信息。
input file libJsonModel.a is not a fat file
Non-fat file: libJsonModel.a is architecture: i386
如图:
如果使用真机和模拟器通用,则需要将这两个文件合并,使用命令lipo -create xxxx/libJsonModel.a xxxxx/libJsonModel.a -output JsonModel.a
同样可以使用lipo -info 来查看这个合并的JsonModel.a
可以看到architectures in the fat file: JsonModel.a are: i386 armv7
如图:
OK,打包完成。这个静态库比起framework是不是简单了许多呢。
如果你在静态库工程中使用了category,那么你可能会碰到链接问题,解决的办法就是需要同时在生成静态库的工程和使用静态库的工程中使用“-all_load”编译选项,即在对应target的"Build Settings"中的“Other Linker Flags”选项添加“-all_load”。注意:使用静态库的工程中是一定要加该编译选项的!!至于生成静态库的工程中加不加没有试过,不过建议还是加上该编译选项。