如何构建Objective-C静态库?

如何构建Objective-C静态库?,objective-c,cocoa,cocoa-touch,static-libraries,Objective C,Cocoa,Cocoa Touch,Static Libraries,我有一些Objective-C类,我目前在Cocoa应用程序MacOSX和Cocoa Touch应用程序iOS中使用它们。目前,当我更新这些类时,我必须将更新后的.h和.m文件复制到这两个项目中。没什么大不了的,但我会在更多的项目中使用它们 因此,我想将这些类构建到Objective-C静态库中。然后在所有其他项目中链接该库 有没有一种方法可以构建一个静态库,使它同时适用于Cocoa和Cocoa touch应用程序 我尝试过用这些类构建一个Cocoa静态库,但是当我尝试在我的Cocoa应用程序中

我有一些Objective-C类,我目前在Cocoa应用程序MacOSX和Cocoa Touch应用程序iOS中使用它们。目前,当我更新这些类时,我必须将更新后的.h和.m文件复制到这两个项目中。没什么大不了的,但我会在更多的项目中使用它们

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

有没有一种方法可以构建一个静态库,使它同时适用于Cocoa和Cocoa touch应用程序

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

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

有关于这个主题的很好的教程吗


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

我最终找到了这个问题,它实际上非常有效。如果有人仍然愿意提供帮助,请这样做,我很可能会投赞成票,并将其标记为接受的答案

使用教程作为起点

现在在库xcodeproj中为其他操作系统创建第二个目标

使用xcconfig文件为每个操作系统配置每个目标的sdk设置。在其他库中重用这些xcconfig文件。这还允许轻松地全局控制生成设置

像往常一样在目标应用程序中配置链接和依赖项引用,但选择正确的目标库

向库项目添加聚合目标,以实现简单的元编译/易于维护

-或-

通过引入脚本层或创建自定义构建工具来完成这一切。

我还发现这非常好。讨论如何正确设置静态库,如何让Jenkins自动构建它,然后将生成的.a和.h文件放置到可以从中获取它们的位置


再加上Maven或Maven,我还没有这样做,你可以拥有一个非常好的小生态系统。

对于XCode 5。这些答案似乎有点过时了。 您可以在这里看到主要步骤。但是Xcode 5为您做了更多的工作,现在几乎可以按照您的要求工作

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

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

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

创建新的目标文件>新建>目标。

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

5.选择构建阶段,并从该链接将脚本输入运行脚本窗口。

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

6.2.选择我们的库,然后选择iOS设备,单击构建或运行命令+B

6.3.然后,对于模拟器,选择Xcode左上方的库图标,然后选择iOS模拟器

7.现在您要构建BullsEye图标>iOS设备。这将是聚合目标,并将我们的两个库合并到一个新的通用文件中

8.让我们看看这一切是否奏效。 展开左树中的文件夹产品,右键单击以.a结尾的文件并在Finder中显示

9.如果一切正常,您应该在finder中看到以下文件。 你会看到

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

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

感谢您的任何反馈,或者请编辑我的帖子以提高清晰度

**加分*** 安装VVDocumenter并使用它记录您将与库共享的任何头.h文件

现在,任何使用您的库的人都可以选择+单击为您的类打开上下文感知帮助


这是个好问题,我希望有更多的例子能证明这一点。我会看一看你链接的教程,看看有什么我可以补充的。您的目标是构建一个可以作为二进制资源与其他应用程序共享的通用静态库,还是希望在某个共享项目的构建产品上创建一个项目依赖项?请勾选此项
苹果的文档:有人可以参考最近的教程吗?就是我正在用的那个。2013年末,更流行了。@JohnBallinger耶raywenderlich.com真是太棒了。谢谢分享!我建议把它作为一个答案发布,因为有很多人在寻找一个更新的教程。@alex done。谢谢你的反馈。希望新的答案能更好一点。约翰,这太棒了!自从我提出最初的问题以来,Xcode和苹果已经走了很长一段路&这就是我现在的做法。如果你喜欢ruby gem的做事方式,看起来也很有希望。