参考:http://www.cnblogs.com/bomo/p/4760791.html

http://www.jianshu.com/p/a1dc024a8a15

https://www.cnblogs.com/richard-youth/p/4856841.html

静态库和动态库的存在形式

静态库: .a 和 .framework

动态库: .dylib 和 .framework

静态库和动态库在使用上的区别

静态库:链接时,静态库会被完整地复制到可执行文件中, 被多次使用就有多份冗余拷贝 (左图所示)

动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存 (右图所示)


需要注意的是:项目中如果使用了自制的动态库,不能被上传到 AppStore!


制作 .a

1、新建项目-> 选择 “Cocoa Touch Static Library”

2、添加库需要包含的源代码,将你工程里的代码添加到打静态库工程里:

iOS之静态库

4.添加需要暴露的投文件

4.iOS之静态库

5.iOS之静态库

静态库有四中;真机debug,真机release,模拟器debug,模拟器release;

各自生成的静态库不能同时导入到应用中,如果要同时支持,需要合成后使用;

合成步骤:

(真机+模拟器)

如果,你的调试需要不断在真机和模拟器之间切换。那么,制作一个通用的静态库.a文件是一个好想法。

这样,使用该静态库文件就可以在真机和模拟器上调试。

制作过程也是非常简单。动手吧:

建议将Release的真机和模拟器的版本合并!----这样就可以通用了,不管是真机debug或release,还是模拟器debug还是release;

注意Debug和Release的iphonesimulator版本不能合并!只能将真机和模拟器的版本合并!

打开终端,执行以下操作:

一、在终端输入:lipo  -create

二、将release-iphonesimulator下的.a拖进终端,输入一个空格;

三、继续将release-iphoneos 下.a 拖进终端,输入空格;

四、继续输入:-output ,打个空格;

五、输入合并后的.a所要放的文件路径(

lipo  -create /Users/wofu/Desktop/SDK/Release-iphoneos/libWofuSDK.a /Users/wofu/Desktop/SDK/Release-iphonesimulator/libWofuSDK.a -output /Users/wofu/Desktop/SDK/WofuSDKLib.a 

注意:最后的/WofuSDKLib.a需要自己加上 ),回车,在相应的文件下即可生成一个.a,该.a即是合并后的.a

吧原来单个静态库中的.a文件用合成后的.a文件替换掉,导入APP中,就可以用了,一般需要在APP中修改bit code为NO,Other Link flags添加-ObjC,这样可以保证编译的时候能链接上静态库。

iOS之静态库



一些额外的配置:(可以不配置)

参考:http://www.jianshu.com/p/11710e7ab661

一种配置方案


了解了每个设置的意思,个人觉得对于一个普通的app来说可以这样配置这些设置:

  • Generate Debug Symbols:DEBUG和RELEASE下均设为YES(和Xcode默认一致);
  • Debug Information Level:DEBUG和RELEASE下均设为Compiler default(和Xcode默认一致);
  • Deployment Postprocessing:DEBUG下设为NO,RELEASE下设为YES,这样RELEASE模式下就可以去除符号缩减app的大小(但是似乎设置为YES后,会牵涉一些和bitcode有关的设置,对于bitcode暂时还不太了解(´・_・`));
  • Strip Linked Product:DEBUG下设为NO,RELEASE下设为YES,用于RELEASE模式下缩减app的大小;
  • Strip Style:DEBUG和RELEASE下均设为All Symbols(和Xcode默认一致);
  • Strip Debug Symbols During Copy:DEBUG下设为NO,RELEASE下设为YES
  • Debug Information Format:DEBUG下设为DWARF,RELEASE下设为DWARF with dSYM File,dSYM文件需要用于符号化crash log(和Xcode默认一致);





相关文章: