iOS framework 打包

要想用一种开发者友好的方式共享库是很麻烦的。你不仅仅需要包含库本身,还要加入所有的头文件,资源等等。苹果解决这个问题的方式是框架(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:

armv6:iPhone 2G/3G,iPod 1G/2G
armv7:iPhone 3GS/4/4s,iPod 3G/4G,iPad 1G/2G/3G

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没有调用   ,为什么没有调用呢?


今天先到这了,改天在研究,有了解的朋友可以通知我哦,一块讨论下。。。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值