参考: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、添加库需要包含的源代码,将你工程里的代码添加到打静态库工程里:
4.
5.
静态库有四中;真机debug,真机release,模拟器debug,模拟器release;
各自生成的静态库不能同时导入到应用中,如果要同时支持,需要合成后使用;
合成步骤:
(真机+模拟器)
如果,你的调试需要不断在真机和模拟器之间切换。那么,制作一个通用的静态库.a文件是一个好想法。
这样,使用该静态库文件就可以在真机和模拟器上调试。
制作过程也是非常简单。动手吧:
建议将Release的真机和模拟器的版本合并!----这样就可以通用了,不管是真机debug或release,还是模拟器debug还是release;
打开终端,执行以下操作:
一、在终端输入: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一些额外的配置:(可以不配置)
参考: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默认一致);