我对xcode和objective-c非常陌生。我想问一个非常基本的问题。
我看到在项目设置中“将二进制文件链接到库”时,从工作区中的其他项目导入的框架和库是有区别的。
第一个问题,为什么会有一个框架?为什么会有一个图书馆?我的库不能是一个框架吗?
然后,如何从.h文件中调用导入的静态库中的类?
我想一定有个前缀,但我找不到。"ProjName/Myclass.h“也不起作用。
请尽可能具体一点。
谢谢
发布于 2011-06-18 01:57:18
与静态库相比,框架的最大优势是它们可以作为一种整洁的方式来打包已编译的库、二进制文件和任何相关的头文件。它们可以放到你的项目中(就像SDK的内置框架一样,比如基础和UIKit),它们应该(在大多数情况下)可以正常工作。
大多数框架都包含动态库;使用Mac Framework模板在Xcode中创建的框架将创建动态库。iPhone不支持动态框架,这就是为什么将可重用的iOS代码库作为静态库分发的原因。
静态库很好,但它们需要用户做一些额外的工作。您需要将项目链接到库,并且需要将头文件复制到项目中,或者通过在构建设置中设置适当的头搜索路径来引用它们。
所以:总而言之,我的观点是,分发你的库的最好方式是作为一个框架。要为iOS创建一个“静态”框架,基本上可以采用一个普通框架,并用编译好的静态库替换二进制文件。这就是我分发我的一个库Resty的方式,也是我打算将来分发我的库的方式。
您可能希望查看该项目中提供的Rakefile (如果您不知道,Rake是Ruby的Make等价物)。我有几个任务来编译我的项目(使用xcodebuild
),并将它们打包为iOS的静态框架。您应该会发现这一点很有用。
或者,您可能希望使用these Xcode 4 templates来创建iOS框架。
更新2013年12月9日:这是一个流行的答案,所以我想我应该编辑一下,说我对库分发的首选已经改变了。对于任何第三方库,无论是作为消费者还是生产者,我的首选都是CocoaPods。我使用CocoaPods分发我的库,并提供一个带有头作为备用选项的预编译静态库。
发布于 2011-06-06 05:10:05
基本上,框架就是库,并为使用它们提供了一种方便的机制。如果你“深入”一个框架,它只是一个包含静态库和头文件的目录(在一些带有元数据的文件夹结构中)。
如果你想创建你自己的框架,你必须创建一个“静态库”,并以一种特定的方式打包它。请参阅this question
一般来说,平台上的框架用于可重用的行为,您可以将自己的代码“添加到现有框架中”。如果你想拥有一些特定的功能,你可能需要使用库(例如three20)并将其打包到你的应用程序可分发中
https://stackoverflow.com/questions/6245761
复制相似问题