码迷,mamicode.com
首页 > 移动开发 > 详细

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

时间:2015-01-29 17:44:07      阅读:324      评论:0      收藏:0      [点我收藏+]

标签:

(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下会崩溃,两者对错误的敏感度不同。


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

标签:

原文地址:http://blog.csdn.net/weisubao/article/details/43270927

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!