iOS静态库引用

iOS静态库引用,第1张

这两天公司整顿工程,把公共的部分提出了静态库,方便我们直接导入其他工程来使用,下面我来说说在使用静态库的时候遇到的问题

如果想在静态库中添加文件,需要在静态库的头文件里导入添加的文件

并且在工程配置里的Headers,找到你的刚刚新加的文件,如果是在private里面,就右键移动到public里面,这样工程就可以编译成功了

1、导入的时候,需要把文件夹都移动到目录下面,addfile的时候,只add .xcodeproj的文件

2、导入静态文件库需要的其他库文件,如果导入的静态库有依赖关系,比如我这里JDBKit依赖于MDF,那就只导入JDBKit的静态库文件

4、如果静态库中有类目的引用,需要在other Linker Flags添加-ObjC

iOS开发中支持静态库与动态库,不过使用动态库,上架会有麻烦。这里讲到如果创建静态库.a文件,其实很早之前公司要求做wifi的SDK的时候就开始涉及这个东西了,但一直没写出来。

首先新建一个静态库的项目

注意这里选择的不是模拟器运行,继续

这时候就得到了两个.a文件。

把Release-iphoneo和Debug-iphonesimulator复制到桌面新建的文件夹

最后使用命令lipo -create xxx.a xxx2.a -output xxx3.a

新建项目或者随便找个已创建测试项目,可直接拖进来放在Frameworks目录下

再把暴露的.h文件引进来

接下来,我把静态库和暴露的.h文件放入cocopods中使用,将静态库和暴露的.h上传至github上的仓库。并更新一个release版本。

更改cyhCheckphoneNum.podspec版本号,与spec.source_files和spec.vendored_libraries

更新github上的release版本

验证是否通过,通过上传至github

上传至cocopods

最后使用cocopods安装使用

1.Framework是资源的集合,将静态库和其头文件包含到一个结构中,让Xcode可以方便地把它纳入到你的项目中。

静态库:链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝;例如 .a和.framework

2.动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存;例如:.dylib和.framework

系统的.framework是动态库,我们自己建立的.framework是静态库。

.a与.framework的区别:

.a是一个纯二进制文件,.framework中除了有二进制文件之外还有资源文件。

.a文件不能直接使用,至少要有.h文件配合,.framework文件可以直接使用。

.a + .h + sourceFile = .framework。

将Mach-O Type设为Static Library, framework可以是动态库也可以是静态库,对于系统的framework是动态库,而用户制作的framework只能是静态库。

Build Active Architecture Only修改为NO,否则生成的静态库就只支持当前选择设备的架构;

iOS Deployment Target ,静态库需要支持的最低版本号,要小于等于主项目的版本号;

Valid Architecture 支持的iOS的CPU框架;

将你要公开的头文件拖至Public下,要隐藏的放在Private或者Project下,当然,隐藏的头文件就无法再被引用。

分别在模拟器和真机设备下编译,生成两个WSLFramework.framework文件,然后把两个WSLFramework.framework文件中的WSLFramework用命令合成一个,和.a的文件合成命令一样(lipo -create +上面两个文件的路径 + -output + 合成后文件的输出路径 )

命令执行完后,输出路径下的WSLFramework就是你合并后的文件,将这个文件名字改成和你未合并之前的一样,放到Debug-iphoneos(真机)目录下WSLFramework.framework文件夹下,替换掉原来的WSLFramework文件;此时就可以把当前WSLFramework.framework文件拿出来了,他就是最后生成的framework文件。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/7939203.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-11
下一篇 2023-04-11

发表评论

登录后才能评论

评论列表(0条)

保存