关于 iOS 打 framewrok 静态包流程(一)

这次所说的打包流程是最笨的方法,就是将所用的第三方类库直接改名.这样,避免了framework和用cocoaPods管理的类库带来的冲突,但是有个非常多的不好的地方:(1)首先这样打包,打出来的包比较大.(2)打包比较麻烦,需要将用到的类库改名,遇到不太好改的类库,那就相当的蛋疼了 ……  后续在网上看到关于用cocoaPods打包的,但是到工程打出来包以后,工程中引用的第三方库不管用,找不到原因,如果各位谁知道关于这方面的,欢迎评论或私信

1.编写原始工程代码 
      这是你实现完整功能的代码,同时里面用到的资源文件(png图片,xib文件,plist文件等吧),在打包bundle文件时会用到这个工程,后面会讲,但是在这之前,最后写个通用的常量配置文件,比如什么:XXXConst.h和XXXConst.m文件:里面会有bundle文件的路径,下面是我自己写的路径:

   .h文件: 

extern NSString *const Dve_ProjectResourceBundleName;//之后打的bundle包的名称


#ifdef DEBUG

#define Dve_ProjectSrcName(file) file//file 是图片名称

#else

#define Dve_ProjectSrcName(file) [Dve_ProjectResourceBundleName stringByAppendingPathComponent:file]

#endif


  .m文件

//@"image" 名字可以修改

NSString *const Dve_ProjectResourceBundleName = @"image.bundle";


2.改动类库的名称

如果在framework中用到的类库和cocoaPods管理用的类库有冲突,那就需要该framework中类库的名称了

改动方法如下:

第一步
 

第二步



第三步




第四步:如果外面的名称没有变的话,手动改了

关于修改工程中类名的可以参考一下这几篇文章:

http://blog.csdn.net/ios_leungyl/article/details/47316565

http://blog.csdn.net/xiaonaiping061/article/details/48465159


3.打包framework静态库

第一步:可以在原工程中直接创建framework,也可以重新新建工程

(1)在原工程中直接创建framework 



(2)也可以另外打开一个工程,直接选择iOS ----> Framework&Library 选择framework就好了

    第二步:配置工程

(1)在PROJECT->Deployment Target->iOS Deployment Target选择你需要支持的最低系统。

(2)Build时会发现  ld: warning: embedded dylibs/frameworks only run on iOS 8 or later警告,这是因为工程默认编译设置的是Dynamic Framework

(3)针对(2)中情况在 Build Setting -> Linking -> Mach-O Type ->Static Library

        (4) 在编译时,不要将图片文件放入framework中,这样会出现零散的文件,这时需要将图片等资源放在.bundle文件中

(5) 编译成功,会有很多符号表的警告,这时将Generate Debug Symbols 设置为NO,关闭符号表警告

         (6)   需要支持bitcode,以上设置后并不能使framework支持bitcode,因此还需要进行额外的设置一个命令让其支持bit code。在TAGETS的Build setting中搜索Other C Flags,添加命令“-fembed-bitcode”。同样的设置在PROJECT中。如果不进行以上操作。别人在集成你的framework时可以编译,亦可以真机测试。唯独在打包时会发出警告并打包失败。警告为framework不支持bitcode!

        ( 7)  暴露头文件以供使用者使用


(8)打包 .  Edit Scheme -> Buile Confifuration ->选择Release 然后Run 即可

(9) 选择模拟器,打的包就只支持模拟器,选择真机,就支持真机,两者可以合并在一起,这个稍后再讲

(10)打出包之后,在工程中Products,对framework Show in Finder 可以找到包

(11)这是如果将包中有CateGory,那在导入其他工程中使用,在build之后,会崩溃,这时需要在导入使用的工程中在 other linker flags 中添加 -ObjC ,若仍然崩溃,在添加 -all_load

       (12)关于真机和模拟器打出的包合并 请参考文章 http://www.cnblogs.com/yajunLi/p/6005077.html

第三步 打包bundle文件

第一步:
在最开开始的工程中按下图走:


第二步 :

       


     


按照上面的步骤走完,会出现下面的字段:

只需要将COMBINE_HIDPI_IMAGES 设置为NO就好

这样在导出bundle包时,里面的图片还是png的,否则会变为tiff格式


第三步:添加资源:


第四步 引用.bundle中的资源文件

1. 将framework 和 XXX.bundle 文件同时导入工程中,必须在同一目录下
2. 在文章的开头就提出创建常亮XXXConst.{h,m} 文件,这时在打framework包之前,将想好的的.bundle文件名写进去就好,同时在引用图片时,需要这样书写:
UIImage imageWithName: Dve_ProjectSrcName(图片名称)

bundle路径 : 

 NSBundle *libBundle = [NSBundle bundleWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"XXX.bundle"]];

Xib的引用: 

 [[XXXController alloc] initWithNibName:@"Xib name " bundle:bundle路径];

   plist文件引用

 NSString *path = [bundle路径 pathForResource:@"XX" ofType:@"plist"];


     所有的步骤应该是完成,如果在阅读中,有所疑问,欢迎评论,谢谢,如有转发,请标明来源

参考文章:同时感谢这些文章的作者

http://blog.csdn.net/xyxjn/article/details/42527341

http://www.cnblogs.com/zhanglinfeng/p/5510717.html

http://www.cocoachina.com/ios/20150127/11022.html

http://www.cocoachina.com/bbs/read.php?tid=153428

http://www.cnblogs.com/yajunLi/p/6005077.html

https://my.oschina.net/u/856930/blog/196484

http://www.jianshu.com/p/558b44c0fb74

http://www.jianshu.com/p/a8366426fe51

http://www.w2bc.com/Article/88645




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值