Answers:
与静态库相比,框架的最大优点是它们可以很好地打包已编译的库二进制文件和任何相关的标头。它们可以放入您的项目中(就像SDK的内置框架,如Foundation和UIKit一样),它们应该可以正常工作(大多数时间)。
大多数框架都包含动态库。使用Mac Framework模板在Xcode中创建的框架将创建一个动态库。iPhone不支持动态框架,这就是为什么将iOS代码的可重用库分发为静态库的原因。
静态库很好,但是用户需要一些额外的工作。您需要将项目链接到库,并且需要将头文件复制到您的项目中,或者通过在构建设置中设置适当的头搜索路径来引用它们。
所以:总而言之,我认为分发库的最佳方法是作为框架。要为iOS创建一个“静态”框架,您基本上可以采用一个普通框架并将二进制文件替换为已编译的静态库。这就是我分发我的一个库Resty的方式,也是将来打算分发我的库的方式。
您可能需要查看该项目中提供的Rakefile(以防万一,您不知道Rake是Ruby的Make的等同物)。我有一些任务来编译我的项目(使用xcodebuild
)并将其打包为iOS的静态框架。您应该发现这很有用。
另外,您可能希望使用这些Xcode 4模板来创建iOS框架。
2013年12月9日更新:这是一个很受欢迎的答案,因此我想我要说的是,我分配图书馆的第一选择已经改变。对于任何第三方库,无论是作为消费者还是生产者,我的首选都是CocoaPods。我使用CocoaPods分发我的库,并提供一个预编译的静态库,其中包含标头作为备用选项。
基本上,框架是ARE库,并提供了使用它们的便捷机制。如果在框架内部“看”,它只是一个包含静态库和头文件的目录(在带有元数据的某些文件夹结构中)。
如果要创建自己的框架,则必须创建“静态库”并以特定方式打包。看到这个问题
通常,平台上的framworks用于可重复使用的行为,您可以在其中将自己的代码“添加到现有框架”中。如果您要具有某些特定功能,则可能需要使用一个库(例如three20)并将其打包到您可分发的应用程序中