一、理解.a是什么?
- 我们平时在开发中或多或少都需要引入第三方SDK,比如友盟SDK,就算没有引入第三方的,至少引用过系统的framework吧
- 其实上面我们引用的这些都属于库,库又分为动态库和静态库
- 我们平时导入的第三方SDK有的是.framework 有的是.a
- 其中的.a 就是一个库,我们可以拿到项目中直接使用
- .a是一个静态库,关于静态库特点有:
- app项目编译的时候会被拷贝到目标程序中,相当于静态嵌入了,也就是将.a的二进制文件整个嵌入到app中了,所以得到的app(.ipa)的二进制文件会变大
- 在使用.a静态库的时候,需要手动导入静态库所依赖的其他库
- 静态库的很大一有优点是减少偶尔性
- 导入静态库的应用可以减少对外界的依赖,如果导入的是第三方动态库,动态库找不到的话应用就会崩掉,例如经常出现的lib not found。
一、关于创建生成.a工程以及配置
- 1、创建生成.a的工程
- 2、配置
-
配置1:tartget - build settings - build active architecture only 设置为NO
image.png -
配置2:设置版本支持信息 target - build settings - iOS Deployment Target
image.png -
配置3:设置暴漏头文件,参考上一篇如何设置
-
二、如果依赖的外部第三方库
-
1、外部第三方库是.a的静态库
- 导入外部第三方.a静态库到工程,如果导入的时候选择添加到了SDK工程的target中,最后生成的SDK会将第三方外部.a二进制文件打包进去;SDK供外面使用的时候,外部不需要导入第三方外部.a
- 导入外部第三方.a静态库到工程,如果导入的时候没有选择添加到了SDK工程的target中,最后生成的SDK不会将第三方外部.a二进制打包进去;SDK供外面使用的时候,外部需要导入第三方外部.a
- 关于导入的第三方.a,SDK工程导入的时候不建议添加到target中(只需要导入,不要添加到target;如果添加到target,外面对接的工程他们本地也需要那个第三方.a时候,会存在冲突的问题报错),提供给外部使用的时候,提供SDK静态库加上第三方.a
-
2、外部第三方是.framwork静态库
- 导入外部第三方.framework到工程,导入的时候不添加到SDK target,最后生产的SDK不会将第三方.framework打包进去;SDK供外面使用的时候,需要同时提供第三方.framework
- 导入外部第三方.framework到工程,导入的时候添加到SDK target,实际测试第三方framework没有打包到SDK生成中,外部集成使用的时候还是需要再导入第三方.framework
- 关于导入第三方.framework,SDK工程导入的时候不建议添加到target中
-
3、外部第三方是.framework动态库
- 理论是仅仅需要导入不需要添加到target中,外部使用的时候导入SDK和第三方动态库.framework
网友评论