要想用一种开发者友好的方式共享库是很麻烦的。你不仅仅需要包含库本身,还要加入所有的头文件,资源等等。苹果解决这个问题的方式是框架(framework)。基本上,这是含有固定结构并包含了引用该库时所必需的所有东西的文件夹。不幸的是,iOS禁止所有的动态库。同时,苹果也从Xcode中移除了创建静态iOS框架的功能。
(1)封装功能模块,比如有比较成熟的功能模块封装成一个包,然后以后自己或其他同事用起来比较方便。
(2)封装项目,有时候会遇到这个情况,就是一家公司找了两个开发公司做两个项目,然后要求他们的项目中的一个嵌套进另一个项目,此时也可以把呗嵌套的项目打包成framework放进去,这样比较方便。
大部分框架都是动态链接库的形式。因为只有苹果才能在iOS设备上安装动态库,所以我们无法创建这种类型的框架。
框架(Framework)的类别
大部分框架都是动态链接库的形式。因为只有苹果才能在iOS设备上安装动态库,所以我们无法创建这种类型的框架。
静态链接库和动态库一样,只不过它是在编译时链接二进制代码,因此使用静态库不会有动态库那样的问题(即除了苹果谁也不能在iOS上使用动态库)。
步骤如下:
一:新建一个静态库
注意默认Product 为.a 文件
2:手动修改为framework 删除当前target
新建target
注意:新建的是OX下的文件哦
文件合并:
删除之后:
删除之后只有这四个文件:
二:将新建的targets进行修改几个必要项。(关键设置)
详细步骤:
1、选中targets中的Build settings 。
2、修改Build settings页中的Base SDK的值为least ios...
3、修改Build settings页中的Architectures 的值改为Standard....
Architectures:这项是选择所支持的cpu架构
4、修改Build settings页中的Build Active Architecture only 值为NO
这个属性 下面有解释
5、修改Build settings页中的Link With Standard Libraries 值改为NO
6、修改Build settings页中的Mach-O Type 为Relocatable Object File
7、修改Build settings页中的Wrapper Extension 为framework
Wrapper Extension 包装推广(生成文件后缀)
8、修改Build settings页中的Dead Code Stripping 为NO
Dead Code Stripping 死代码剥离
(下面的步聚是由于新建的targets文与项目名称不对应导致要手动修改的地方,如果是同名就不用理会下面的步骤了
//修改对应Supporting Files
9、修改Build settings页中的info.plist File 为DYNetAccess-info.plist
10、修改Build settings页中的GCC_PREFIX_HEADER改为DYNetAccess-Prefix.pch
注:GCC_PREFIX_HEADERGCC预编译文件
注意: 将.pch文件里的:
#import<cocoa/cocoa.h> 删掉
关于Build Active Architecture Only属性
这个属性设置为yes,是为了debug的时候编译速度更快,它只编译当前的architecture版本。
而设置为no时,会编译所有的版本。
这个是设备对应的architecture:
armv7s:iPhone5, iPod5
编译出的版本是向下兼容的,比如你设置此值为yes,用iphone4编译出来的是armv7版本的,iphone5也可以运行,但是armv6的设备就不能运行。
所以,一般debug的时候可以选择设置为yes,release的时候要改为no,以适应不同设备。
三:生成framework
只留下自己要封装的类,别的都删掉
添加你要封装的类库文件进来:
我将自己写的下载类,放进来封装起来
添加类文件以编译产生相应的库文件
注:
1:点run就行 cmd + R 不怎么好使
2:选择真机 ,模拟器暂时生成不了。(后期支持模拟器 下节再说)
找到生成的Framework文件
大功告成
四:导入工程
iOS框架和常规的Mac OS动态框架差不多,只是它是静态链接的而已。
在你的项目中使用一个框架,只需把它拖仅你的项目中。在包含头文件时,记住使用尖括号而不是双引号括住框架名称。
例如,对于框架MyFramework:
#import <MyFramework/MyClass.h>
导到到我的工程之中:出现了下面的情况
原因是我没有在 Bulid Phase 里面添加Public Header (Xcode5 有了一个小小的变化 Bulid Phase 找不到Add项)
注意这句话:
If you open the project editor in Xcode 5, you will notice there is no button to add a build phase to a target. Choose Editor > Add Build Phase to add a build phase to a target.
将接口文件添加到Public 里面
正常
错误的原因是Framework 导入 应该使用<>。晕,犯了这么低级的错误
再提示下:#import <MyFramework/MyClass.h>
尖括号引用这次不在出错了
经测试 打包后 功能正常
封装成Framework 的好处
1:保护源代码
2:有些编译条件不用每次都去设置比如GdataXML的 header Search Path
我的问题:请看下面两个图片:
第一张是封装Framework之后的 第二张是封装 Framework之前的主要区别是黑色半透明的图片丢了 是因为 SVProgressHUD.bundle 这个图片资源文件 ,framework里面的SVProgressHUD没有调用 ,为什么没有调用呢?
今天先到这了,改天在研究,有了解的朋友可以通知我哦,一块讨论下。。。