如何构build一个Objective-C静态库?

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

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

有没有办法build立一个静态库,使它可以同时适用于Cocoa和cocoa-touch应用程序?

我试着用这些类build立一个Cocoa静态库,但是当我尝试在我的Cocoa应用程序中连接到这个库时,我得到了各种错误,而且我确定它们来自于我没有这样做的事实对。

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

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

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

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

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

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

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

创build一个新的目标(文件>新build>目标)。 新目标

4.select新的目标,然后添加一个新的构build阶段(编辑器>添加构build阶段>添加运行脚本构build阶段 新建阶段

5.select构build阶段并从此链接进入脚本窗口。 https://gist.github.com/sponno/7228256

运行脚本代码

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

6.2。select我们的libary,然后selectiOS设备,点击build或run(Command + B)

6.3。然后select模拟器(selectXcode左上方的图标库,然后selectiOS模拟器) 在这里输入图像说明

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

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

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

10.最后一步很简单,只需将“library.a文件和includes文件夹拖到新的Xcode项目中即可。 在这里输入图像说明

在这里输入图像说明

在你的新项目中,除了导入想要使用的头文件之外,你不需要做任何事情,但是你不必改变链接标志或者头部searchpath。 它会工作。

(任何反馈赞赏)或请编辑我的post,以提高清晰度。

**奖金点***安装VVDocumenter https://github.com/onevcat/VVDocumenter-Xcode,并用它来logging你将与库共享的任何header.h文件。;

现在,任何使用您的图书馆的人都可以select+点击,为您的课堂提供情境感知帮助。

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

我最终find了这个教程 ,它实际上工作非常好。 如果有人愿意提供帮助,请做,我很可能会赞成,并将其标记为公认的答案。

(使用教程作为出发点)

现在在其他操作系统的库xcodeproj中创build第二个目标。

使用xcconfig文件(每个操作系统一个)configuration每个目标的sdk设置。 在其他库中重用这些xcconfig文件。 这也允许对构build设置进行简单的全局控制。

像往常一样configuration目标(应用程序)中的链接和依赖项引用,但select正确的目标库。

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

– 要么 –

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

我还发现这个“与Jenkinsbuild立一个静态库”非常好。 谈论如何正确设置一个静态库,如何让jenkins自动构build它,然后将产生的.a和.h文件放到可以从中抓取的地方。

结合CocoaPods或Maven(我还没有这样做),你可以有一个相当不错的小生态系统。