如何构建Objective-C静态库?

Ale*_*lex 42 cocoa cocoa-touch objective-c static-libraries

我有一些Objective-C类,我目前在Cocoa应用程序(Mac OS X)和Cocoa-Touch应用程序(iOS)中都使用它.目前,当我更新这些类时,我必须将更新的文件.h.m文件复制到这两个项目中.没那么大的交易,但我将在更多的项目中使用它们.

所以,我想将这些类构建到Objective-C静态库中.然后在所有其他项目中链接该库.

有没有办法构建一个静态库,以便它适用于Cocoa和可可触摸应用程序?

我试过用这些类构建一个Cocoa静态库,但是当我尝试在我的Cocoa应用程序中链接该库时,我遇到了各种错误,我确信它们来自我没有这样做的事实对.

那么,我如何以正确的方式构建Objective-C静态库?我是否必须构建Cocoa-Touch和Cocoa静态库?或者我可以做一个吗?这是怎么做到的?

有没有关于这个主题的完善的教程?

我在网上搜索过,似乎无法找到关于这个主题的综合教程,所以我在这里提出了一个问题,希望能够发布一个很好的答案,这个问题可以作为我和未来提问者的资源.

Joh*_*ger 25

对于XCode 5.这些答案似乎有些过时了.您可以在这里看到主要步骤http://www.raywenderlich.com/41377/creating-a-status-library-in-ios-tutorial.但是Xcode 5为你做了很多工作,现在几乎可以按照你的意愿工作.

1.在Xcode中创建新的静态库应用程序 Xcode中的新静态库

2.您可以删除它创建的任何文件并添加自己的文件.添加你的方法等 代码

3.静态库的一个小问题是,您只能为设备构建或在模拟器中运行.因此我们需要创建一个支持ARM和i386架构的库,为此我们需要创建一个通用二进制文件(因此它将支持模拟器和设备构建).

创建一个新目标(文件>新建>目标). 新目标

4.选择New Target然后添加新的构建阶段(编辑器>添加构建阶段>添加运行脚本构建阶段 新建阶段

5.选择构建阶段并从此链接输入脚本到运行脚本窗口. https://gist.github.com/sponno/7228256

运行脚本代码

6.现在需要构建每个架构(模拟器和iOS设备)

6.2.选择我们的库,然后选择iOS设备,点击构建或运行(Command + B)

6.3.然后为模拟器(选择Xcode最左上方的库图标,然后选择iOS模拟器) 在此输入图像描述

7.现在你想建立BullsEye图标> iOS设备.这将是聚合目标,并将我们的两个库组合成一个新的通用文件.

让我们看看这一切是否奏效.展开左侧树中的"Products"文件夹,右键单击以".a"结尾的文件和"在Finder中显示"

9.如果这一切都有效,你应该在finder中看到以下文件.你会看到的 库.a文件和包含文件

10.最后一步很简单,只需将"library.a文件和includes文件夹"拖到新的Xcode项目中即可. 在此输入图像描述

在此输入图像描述

在您的新项目中,除了导入要使用的头文件之外,您不必执行任何其他操作,但您不必更改链接标记或标题搜索路径.它会起作用.

(任何反馈意见)或请编辑我的帖子,以提高清晰度.

**奖励积分***安装VVD 文件管理器https://github.com/onevcat/VVDocumenter-Xcode并使用它来记录您将与库共享的任何header.h文件.

现在,任何使用您的库的人都可以选择+单击以为您的课程提供上下文感知帮助.

基于头文件的上下文感知帮助


Ale*_*lex 12

我最终找到了这个教程,它实际上非常好用.如果有人仍然愿意提供帮助,请做,我很可能会投票并将其标记为已接受的答案.

  • 您能否将此标记为已接受的答案? (2认同)

jus*_*tin 11

(以教程为出发点)

现在在库xcodeproj中为另一个OS创建第二个目标.

使用xcconfig文件(每个操作系统一个)配置每个目标的sdk设置.在其他库中重用这些xcconfig文件.这也允许轻松全局控制构建设置.

像往常一样在目标(apps)中配置链接和依赖项引用,但选择正确的目标库.

将聚合目标添加到库项目中,以进行简单的元编译/轻松维护.

- 要么 -

通过引入脚本层或创建自定义构建工具来完成所有工作.