xcode4中框架和静态库的区别,以及如何调用它们

我对xcode和objective-c相当陌生。 我想问一个非常基本的问题。

我看到,在项目设置中“链接二进制到库”时,从工作区中的其他项目导入的框架和库存在差异。

第一个问题,为什么有一个框架? 为什么有一个图书馆? 我的图书馆不能成为一个框架吗?

然后,从.h文件,我怎么能从我导入的静态库调用类?

我想必须有一个前缀,但我找不到它。 既没有也没有“ProjName / Myclass.h”正在工作。

请尽可能具体。

谢谢

与静态库相比,框架最大的优势在于,它们是打包编译库二进制文件和任何相关头文件的简单方式。 他们可以放到你的项目中(就像SDK的内置框架,如Foundation和UIKit),他们应该只是工作(大部分时间)。

大多数框架包含dynamic库; 在Xcode中使用Mac框架模板创build的框架将创build一个dynamic库。 iPhone不支持dynamic框架,这就是为什么将可复用的iOS代码库作为静态库进行分发的原因。

静态库是好的,但他们需要一些额外的工作的一部分用户。 您需要将项目链接到库,并且需要将头文件复制到项目中, 或者通过在构build设置中设置适当的页眉searchpath来引用它们。

所以:总之,我的看法是,分配你的图书馆的最好方式是作为一个框架。 要为iOS创build一个“静态”框架,您可以基本上采用一个正常的框架,并用编译的静态库replace二进制文件。 这是我如何分配我的一个库, Resty ,是我打算如何分发我的图书馆在未来。

你可能想看看在这个项目中提供的Rakefile(如果你不知道,Rake是Ruby的Make的等价物)。 我有一些编译我的项目(使用xcodebuild )的任务,并将它们打包为iOS的静态框架。 你应该觉得这很有用。

或者,您可能希望使用这些Xcode 4模板来创buildiOS框架。

更新2013年12月9日 :这是一个受欢迎的答案,所以我想我会编辑说,我的图书馆发行的第一select已经改变。 我作为消费者或生产者的第一select是CocoaPods。 我使用CocoaPods分发我的库,并提供一个带有头文件的预编译静态库作为后备选项。

基本上,框架是库和提供一个方便的机制来处理它们。 如果你看一个框架“内部”,它只是一个包含静态库和头文件(在某些文件夹结构与元数据)的目录。

如果你想创build自己的框架,你必须创build一个“静态库”,并以特定的方式打包。 看到这个问题

一般而言,平台上的framworks被用于可重复使用的行为,您可以将自己的代码添加到“现有框架”中。 如果你想有一些特定的function,你可能想使用一个库(例如three20),并将其打包到你的应用程序可分发