【iOS开发-115】静态库的制作以及第三方框架iOS Universal Framework,DEBUG和RELEASE

(1)概念介绍

——我们平时在项目中用的最多的就是开源的第三方库,这种库是开源的,我们不仅能用,还能查看源代码甚至可以修改源代码。

——与开源库对应的就是闭源,闭源库分为动态库和静态库。动态库就是.dylib或者.framework结尾的文件。就是苹果官方提供给我们用的那些库。开发者不能在项目中使用自制的动态库,否则无法上传到APPStore。

——所以,对于闭源库,我们主要讨论的是静态库。静态库的样子就是用户拿到的文件有很多头文件.h+资源包+编译过的一个二进制文件.a(.framework)。即没有公开的那些文件都被编译进了.a或.framework里面。如果是为了保护知识产权什么的可以用静态库。

——.a静态库需要结合.h文件和资源包给用户使用。而生成.framework的话里面已经包含.h和资源文件,可直接给用户使用。

——如果库涉及图片等资源,可以用放在与.a或.framework同名的bundle文件中。新建文件,修改后缀为bundle即可。

——静态库多次被使用就会多次被拷贝,产生冗余,但是没办法,我们不能使用自制的动态库(不重复拷贝)。


(2)制作.a静态库的主要步骤

——选择静态库,起个名字,然后把需要制作的库的.h和.m文件都拖拽进来


——拖拽进来后,在Bulid Phrase增减一个Headers。建议先增减这个Headers,然后再拖拽,我们再打开会发现Headers里面已经自动添加了我们的那些头文件。然后把需要公开的头文件拖拽到Public里。然后点击运行,即可生成.a的库。


——但是我们生成的一般是在模拟器上使用的库,如果需要在真机上使用,还需要选择下面的iOS Device然后再运行一下。


——其实,我们可以在~/Library/Developer/Xcode/DerivedData/项目名称+一堆字符 下找到我们的文件(可以在Xcode>Window>Organizer如下图上找到路径)。


——找到路径一般会发现有两个文件夹,第一个就是真机上的,第二个是模拟器上的。


——如果需要把这两者合并,可以利用终端命令行lipo。其中中间两个文件就是我们需要合并的两个.a文件,最后一个是我们需要输出的合并后的文件名(自己命名,但最好相同)

lipo -create Debug-iphoneos/libHELLOWORLD.a Debug-iphonesimulator/libHELLOWORLD.a -output libHELLOWORLD.a
发现该文件夹下多了一个文件,该文件大小就是上面两个文件的大小总和。

——如果需要给别人使用,就把这个.a文件和我们的头文件(在usr/local/include里)打包一下给别人或者自己即可。


——遇到的问题1:如果用到UIKit框架的话,我们需要新增pch文件,把UIkit框架用到项目所有文件中。关于pch文件的使用看前篇。

——遇到的问题2:如果出现CodeSign error: code signing is required for product type 'Unit Test Bundle' in SDK 'iOS 8.0' ,这个问题的解答在这里。只需要修改为下面图上的内容。


——遇到的问题3:如果我们要编译的文件包含category分类文件时,一般会出现错误(找不到方法的错误即unrecognized selector sent to instance),但是在Xcode6以及iOS8配置的今天已经不再会出现,因为软件自动帮我们设置了,而如果没有设置的可Build Setting中对Linking中的Other Linker Frags设置为-ObjC。



(3)制作.framework的静态库,自己设置比较繁琐,可以利用第三方库iOS Universal Framework。

框架的好处,在于,很多步骤帮我们都设置好了。因为确实步骤比较多而且繁琐,没必要去记忆,只需要知道怎样找到教程设置即可。

详细可参考:开源框架:iOS-Universal-Framework


(4)DEBUG,好处在于Xcode开启很多服务来监控错误,让程序员来调试用,但是耗性能。RELEASE,好处在于则相反。我们点击下图的项目名有一个Edit Scheme选项,打开后就可以发现:


——我们上传APPStore时,在Xcode的Product里使用打包Archive时默认是Release方式。而我们选择Run的时候,发现默认参数是Debug。




所以,建议:

——在生成静态库的时候,可以把上面Run的参数调整为Release,这样节省内存,运行速度快。

——在平时用Run调试的时候,在DEBUG下运作正常后,在发布程序之前可修改Run的参数为Release,再运行一下模拟发布的情况,因为有时候在Debug下正常,在Release下会崩溃,两者对错误的敏感度不同。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值