手把手教你制作.a静态库(iOS开发)

作者: 哇哇卡 | 来源:发表于2015-10-26 22:51 被阅读7759次

知识普及:

什么是库?

库是程序代码的集合,是共享程序代码的一种方式

根据源代码的公开情况,库可以分为 2 种类型

开源库

公开源代码,能看到具体实现

比如 SDWebImage 、 AFNetworking

闭源库

不公开源代码,是经过编译后的二进制文件,看不到具体实现

主要分为:静态库、动态库

静态库和动态库

静态库和动态库的存在形式

静态库: .a 和 .framework

动态库: .dylib 和 .framework

静态库和动态库在使用上的区别

静态库:链接时,静态库会被完整地复制到可执行文件中, 被多次使用就有多份冗余拷贝 (左图所示)

动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存 (右图所示)

需要注意的是:以前项目中如果使用了自制的动态库,不能被上传到 AppStore!但是现在是可以了,给海尔的一个项目打得动态库,也没问题。

制作 .a

1、新建项目-> 选择 “Cocoa Touch Static Library”

2、添加库需要包含的源代码,将你工程里的代码添加到打静态库工程里:

3、配置一下工程:

4、选择需要暴露出来的 .h 文件, .m 文件会自动编译到 .a 文件中:


需要暴漏出的文件类在这里设置:

引入的网络框架设置:(有些会自动引入,有些需要手动引入,根据编译报错,可以检查。)

5、编译前检查一下是debug模式还是release模式,选择release模式:

分debug和release模式:

Debug-iphoneos 文件夹里面的东西是用在真机上的

Debug-iphonesimulator 文件夹里面的东西是用在模拟器上的

如果 Scheme 是 Release 模式,生成的文件夹就以 Release 开头



6、选择真机设备,然后 Command+B 编译, libSPCustomerServerse.a 文件从红色变为黑色

(注意建议先选择真机,这样才会变色,如果先选择模拟器,那么编译通过了,但是不会由红变黑,实际上是已经编译了模拟器的,只是给人一种假象,好像没编译一样,还是红色的)

7、选择模拟器,建议选择iPhone6以上的(选择高级点的,低级的也可用,若选了低级的,高级的有可能就不适配了)然后依然 Command+B 编译,模拟器和真机环境下用的 .a 文件是分开的。

8、合并模拟器(release-iphonesimulator)和真机(release-iphoneos)下的.a,以便支持真机和模拟器,合并后的.a大小大约是不合并的2倍左右。

show in finder

合并步骤:

举例:1、新建文件夹:"dabao";

2、将上述的release-iphonesimulator和release-iphoneos两个文件拷贝进"dabao"文件夹。

3、打开终端,执行以下操作:

一、在终端输入:lipo  -create

二、将release-iphonesimulator下的.a拖进终端,输入一个空格;

三、继续将release-iphoneos 下.a 拖进终端,输入空格;

四、继续输入:-output ,打个空格;

五、输入合并后的.a所要放的文件路径(这里举例依然放在“dabao”这个文件夹下,则我的电脑的路径为:/Users/ntalker-zhou/Desktop/dabao/libSPCustomerServerseSDK.a),回车,在相应的文件下即可生成一个.a,该.a即是合并后的.a

4、检查合并后的.a是不是满足所有要求,依然在终端进行以下操作:

一、在终端输入:lipo  -info  ;

二、将合并后的.a拖进终端 ,回车;


(注意:终端每一步记得要用空格隔开,否则会出错哦!)

这样.a 就成功制作出了,只需要将暴漏的头文件以及制作的.a放入工程,别人就可以使用你的程序了,再也不用担心源码暴漏或别人随意修改你的代码了,不过如果有图片资源,图片资源是不能打进.a的,需要在外面添加的哦。


(有时候为了编译通过,根据需要,需要设置一下工程配置比如我需要配置xml等…



相关文章

  • 手把手教你创建Framework

    上一篇文章《手把手教你创建静态库》教你如何创建静态库,这一片将“手把手”教你创建Framework,相对于静态库,...

  • 手把手教你制作.a静态库(iOS开发)

    知识普及: 什么是库? 库是程序代码的集合,是共享程序代码的一种方式 根据源代码的公开情况,库可以分为 2 种类型...

  • 手把手教你制作.a静态库(iOS开发)

    知识普及: 什么是库? 库是程序代码的集合,是共享程序代码的一种方式 根据源代码的公开情况,库可以分为 2 种类型...

  • 静态库

    iOS开发之静态库.a的制作教程http://www.cocoachina.com/ios/20150226/11...

  • iOS小知识 -- 静态库(一)

    静态库静态库的介绍.a静态库的制作以及测试静态库的架构问题.framework静态库的制作以及测试边开发边制作静态...

  • iOS 创建.a 静态库

    iOS开发中静态库(.a)制作 Xcode 9一般iOS 开发者都会引用第三的库 库根据根据源代码的公开情况 分为...

  • iOS开发WorkSpace多工程联合编译

    参考链接 iOS开发之静态库.a的制作教程(有合并.a文件的方法)一篇较为详细的 ios静态动态库 的使用方法总结...

  • iOS开发之静态库制作(.a .frame)

    iOS开发之静态库制作(.a .frame) 什么是库?什么是静态库?还有什么库? 库是一个程序代码的集合(说的有...

  • iOS 静态库开发

    iOS 静态库开发 本文旨在说明静态库制作中的一些常见问题和特殊处理1. 打包静态库需要的相关问题和设置 静态库中...

  • iOS开发之制作framework

    iOS开发之制作framework 什么是framework Framework是资源的集合,将静态库(iOS8以...

网友评论

  • 扣肉快快跑:写的很详细, 👍
  • MYS_iOS_8801:Permission denied
    请问怎么回事
  • 788d687a2e54:楼主,请问一下,如果一个工程里面包含.a文件, 那么这些 .a文件可以打入我们自己制作的静态库当中吗,谢谢~~ :relaxed:
    呼呼兔:请问,如果我把第三方库(比如AFNetworking)也一块打成.a了。如果别的工程使用该.a静态库,如果此时该工程也用了AFNetworking库的话,会报重复导入文件的错误。
    788d687a2e54:@哇哇卡 好的,谢谢LZ, :pray:
    哇哇卡:@Andy_Happy 可以的,我现在做的工程就用到这么做。我的工作空间里有多个工程,我会先编译第一个工程打成.a. 然后第二个工程引用第一个工程,这样编译第二个工程打.a就自动把第一个工程的.a 打进去了。
  • 52a97ce021d6:真的不错,最近正在搞这个,给我很大帮助
    哇哇卡:@哪懂坚持只会死撑 没试过把xib打进去的情况,理解上可能xib也是个文件,打进去可能不行,回头我试试,再来回复你吧
    52a97ce021d6:@哇哇卡 楼主请教一下,我封装的静态库,对外的.h文件只有这个用xib花的viewcontroller,封装好以后,拿到别的项目里用,为什么推不出来这个试图呢?没有反应
    哇哇卡:@哪懂坚持只会死撑 :smile:
  • 一杯红酒mm:感谢楼主
    哇哇卡:@一杯红酒mm :blush:
  • 林小正要努力呀:好,希望多多截图,图文并茂
    哇哇卡:@孤独根号3 :blush:
  • 30e75c0a6419:非常感谢分享 , 谢谢
    哇哇卡:@爸爸笑点低 :smile:
  • 谢谢生活:非常感谢 分享的好东西
    哇哇卡:@谢谢生活 :smile:
  • HHHHHHHHHHD:好东西
    哇哇卡:@像孩子一样 谢谢~

本文标题:手把手教你制作.a静态库(iOS开发)

本文链接:https://www.haomeiwen.com/subject/fcdxhttx.html