如何构建Objective-C静态库?

时间:2011-01-11 05:33:28

标签: objective-c cocoa cocoa-touch static-libraries

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

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

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

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

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

是否有关于此主题的完善教程?

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

4 个答案:

答案 0 :(得分:26)

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

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

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

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

创建新目标(文件>新>目标)。 New Target

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

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

Run Script Code

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

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

6.3。然后为模拟器(选择Xcode最左上方的库图标,然后选择iOS模拟器) enter image description here

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

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

9.如果这一切都有效,你应该在finder中看到以下文件。 你会看到的 Library .a file and include files

10.最后一步很简单,只需将" library.a文件和includes文件夹拖到新的Xcode项目中即可。 enter image description here

enter image description here

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

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

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

现在,任何使用您图书馆的人都可以选择+点击,为您的课程提供上下文感知帮助。

Context Aware Help based on header file

答案 1 :(得分:12)

我最终找到了this tutorial,它确实很有效。如果有人仍然愿意提供帮助,请做,我很可能会投票并将其标记为已接受的答案。

答案 2 :(得分:11)

(以教程为出发点)

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

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

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

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

- 或 -

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

答案 3 :(得分:2)

我还发现这个"Building a Static Library with Jenkins"非常好。谈谈如何正确设置静态库,如何让Jenkins自动构建它,然后将生成的.a和.h文件放到可以从中获取的地方。

将它与CocoaPods或Maven(我还没有完成)相结合,你可以拥有一个非常漂亮的小生态系统。