xcode技巧

Xcode9制作静态库-上半部分(集成百度地图SDK以及使用po

2018-04-19  本文已影响51人  夏无眠Zz

前言

最近项目需要我们把自己的app打包制作成为framework给其他厂家使用,基于原来也写过一篇文章,是通过cocoapod打包成为framework,但原来代码里面使用的比较简单,没有百度地图等大型第三方库,而且还有另外一个难点,我们所使用的百度地图SDK是通过直接导入到项目的,而另外的一些第三方(比如AFNetworking)是通过pod导入的,这些都增加了打包的难度。因此,最后在跟厂家联系之后,也参考了网络上的一些文章,最终形成了如下的文章。

正文

一.首先初步了解下什么是静态库和动态库

静态库:以.a 和 .framework为文件后缀名。

动态库:以.tbd(之前叫.dylib) 和 .framework 为文件后缀名。(系统直接提供给我们的framework都是动态库!)

.a 是一个纯二进制文件.framework 中除了有二进制文件之外还有资源文件。 .a 要有 .h 文件以及资源文件配合, .framework 文件可以直接使用。总的来说,.a + .h + sourceFile = .framework。所以创建静态库最好还是用.framework的形式

二.打包流程

基于我们这边是直接将百度地图SDK导入项目,而且所有跟地图相关代码都是在那个版本上,所以不可能采用pod方式引入百度地图。但如果我们把百度地图的SDK直接打包到静态库,这样又会带来新的问题:首先静态库的体积会增大,其次如果集成的项目里面也包含了百度地图SDK,又会报duplicate的问题。因此只能通过包含头文件的方法,将我们自己的framework编译过去,然后集成项目的百度地图SDK使用我们的(当然这个也是需要跟集成厂家商量好的)。

说的有点乱了,总结下,就是我们除了提供包含自己代码的静态库,还提供我们使用的百度地图SDK。然后静态库里面包含有百度地图的头文件,这样编译也能过去。具体操作如下

1.打开xcode,选择framework静态库

2.修改库的类型,build settings>linking>Mach-O Type,

dynamic library是动态库,这里我们选择静态库static library

3.修改指令集build Settings>Build Active Architecture Only>debug>NO

模拟器:iPhone4s~5 : i386 iPhone5s~6plus : x86_64

真机:iPhone3gs~4s : armv7 iPhone5~5c : armv7s iPhone5s~6plus : arm64

如果这里,设置为YES,那么编译出来的静态库就只包含当前设备的指令集。设置为NO,则会把所有指令集的都打包合并。

4.build Settings>Other Linker Flags>-all_load,这个用于处理加载所有的库

5.设置静态库最低支持iOS版本,这边我设置了7.0

6.导入代码,因为代码里面包含百度地图的SDK,需要在导入之后,从target中移除

7.添加百度地图SDK的头文件Building settings>Header Search Paths>$(SRCROOT)/XHMapSDK/Classes/Capability/Map,这个路径以实际的为准

8.编译一下,报错了,这是我们开头提到了另一个问题,通过pod导入的文件如何处理

9.添加podfile,这里我们项目引用了一下框架,所以pod过来

10.打开项目名.xcworkspace,重新编译下,看看是否报错,我这边有error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: file: -lPods-XHMapSDK is not an object file (not allowed in a library),直接移除

12.设置头文件

上一篇下一篇

猜你喜欢

热点阅读