Xcode 编译静态库

  有时候,我们需要将一部分经常用到的代码提取出来用来复用,或者说需要用到c++的代码的时候,可以通过编译成静态库的方式来使用。本文中使用的Xcode版本是8.3,静态库制作过程和其他版本基本一样,可能出现的内容有所差别,但并不影响制作。

  1.创建一个静态库工程。

  选择iOS->Cocoa Touch Static Library,如下图所示。

  创建完成后,工程中会出现两个文件.h和.m,文件名是你的工程名,将.h中的所有内容删除,将.m文件删除,如下图:

  2.导入依赖库和需要编译的文件。

  导入你的工程需要的依赖库,这个不用我说吧。在TARGETS->Build Phases->Link Binary中添加所需要的库即可。导入文件也不说了,记得勾选copy和group,直接在工程中创建也行啊。如下图是我导入的两个文件。

  在ThirdLib.h中添加你需要提供给外部的接口的头文件,然后在TARGETS->Build Phases中添加Headers,先点击一下空白处,然后在navigation上找到Editor,如下图。

  将需要暴露给外部的文件拖入相应的栏目下面,public、private、project,根据情况选择。我这里只想把ThirdLib.h暴露出来,所以只将ThirdLib.h拖入public中,如果想将某个类的接口细节,暴露也可以拖到public下面。如下图。

  还有另一种方法也可以,点击你需要暴露的文件,在Xcode的右边有个membership的选项,可以修改属性。

  3.其他配置

  找到target->build settings 搜索public,用如下图的方式替换。这样做,会在你编译之后出现一个叫include的文件夹在你的静态库中,里面包含了你暴露给外界的信息。

  到这一步,已经完成了一大半工作。接下来只需改几个地方即可进行编译。这几个地方的修改不必须的(不会对静态库造成太大的影响):

  Dead Code Stripping设置为NO,Strip Style设置为Non-Global Symbols,都是在target->build setting中找到并修改。一切都配置完后,选择build设备,如果选择模拟器,则会编译成只支持模拟器的静态库;如果选择真机,则会编译成只支持真机的静态库。先不管这些,将两种都生成出来,放在桌面两个不同的文件夹中,一个支持真机静态库,一个支持模拟器静态库。右键工程中product文件夹中的.a文件,show in finder。如下图是我编译出的两个静态库。

  然后在终端查看这两个静态库的信息,先进入文件夹,用命令,lipo -info libThirdLib.a查看,如下图。

  可以看到,它们支持的系统框架不同,模拟器是x86_64,真机是arm64,只能支持单一的目标肯定是不行的啊,不可能一直更换静态库吧。既然如此,我们需要把这两个静态库合并成一个。

  首先,将这两个库放在桌面两个不同的文件夹中,不这样也可以,主要是为了找绝对路径方便。然后使用命令 lipo -create 模拟器静态库的绝对路径 真机静态库的绝对路径 -output 静态库绝对路径。如下图。

  这样,在general中就会存在一个静态库thirdLib.a真机和模拟器都支持。

  到这里,静态库制作就完成了,很简单的过程,希望能帮到需要的小伙伴。下一篇,会讲framework,因为本人也不是很清楚,研究懂了之后会发表出来。再见~

原文地址:https://www.cnblogs.com/lmfboke/p/6812699.html