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

Leo*_*rdo 132 objective-c static-libraries xcode4

我是xcode和objective-c的新手.我想问一个非常基本的问题.

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

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

然后,从.h文件中,如何从导入的静态库中调用类?

我想必须有一个前缀,但我找不到它."ProjName/Myclass.h"都没有工作.

请尽可能具体.

谢谢

Luk*_*ath 140

框架相对于静态库的最大优点是它们可以作为打包编译库二进制文件和任何相关头文件的简洁方法.它们可以放入您的项目中(就像SDK的内置框架,如Foundation和UIKit),它们应该可以正常工作(大部分时间).

大多数框架都包含动态库; 使用Mac Framework模板在Xcode中创建的框架将创建一个动态库.iPhone不支持动态框架,这就是为什么将可重用的iOS代码库作为静态库分发的常见原因.

静态库很好,但是它们需要用户做一些额外的工作.您需要将项目链接到库,并且需要将头文件复制到项目中,或者通过在构建设置中设置适当的头搜索路径将其引用到某个位置.

所以:总之,我的观点是,分发库的最佳方式是作为一个框架.要为iOS创建"静态"框架,您基本上可以采用普通框架并将二进制文件替换为已编译的静态库.这是我分发我的一个库Resty的方式,也是我打算将来分发我的库的方式.

您可能希望查看该项目中提供的Rakefile(如果您不知道,Rake是Ruby相当于Make).我有一些任务用于编译我的项目(使用xcodebuild)并将它们打包为iOS的静态框架.你应该觉得这很有用.

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

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

  • @GoRoS是的,我做的; 事实上,我刚刚为客户做了一些工作,使用CocoaPods提供私有SDK.诀窍是使用已编译的静态库,标题和podspec指向此公共仓库以及包含源的私有仓库.理想情况下,您可以使用某种CI /自动化来检查您的私人仓库,编译和更新您的公共仓库,使两者保持同步.使用标记来标记公共存储库中的实际版本化版本(也可能在私有存储库中),以便您知道使用哪个源提交来创建公共版本. (2认同)

Mar*_*ich 19

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

如果要创建自己的框架,则必须创建"静态库"并以特定方式打包.看到这个问题

通常,平台上的framworks用于可重用行为,您可以将自己的代码"添加到现有框架中".如果你想拥有一些特定的功能,你可能想要使用一个库(例如three20)并将其打包到你的应用程序可分发