iOS Static vs Dynamic框架说明

时间:2015-01-12 10:25:12

标签: ios frameworks static-libraries static-linking ios-frameworks

我不得不承认,随着iOS 8的发布,我对iOS中的动态和静态框架感到有些困惑。

我正在寻找一种分发我创建的库的方法,我需要支持iOS 7及更高版本。 (注意:这将是一个专有框架。我不能使用可可豆荚,我也不能分发来源)。这是我已经知道的:

  • iOS 8为iOS引入了“嵌入式框架”,但据我了解,它们不适用于iOS 7,仅适用于iOS 8及更高版本。
  • 我可以选择将我的库分发为静态库(.a文件)并分发标头。我知道这是处理这种情况的常用方法,但我想找到一些比这更简单的东西(如果可能的话,还要用它捆绑一些资源)。
  • 我还发现iOS 7不支持动态.framework库(仅静态),因为它不支持动态链接。但是iOS 8和静态链接一样。

以下是关于此信息的问题:

  • 我看到我可以创建一个.framework目标,并通过将Mach-O类型更改为“静态库”使其成为静态。这是否足以支持iOS 7而没有任何问题,并且还可以分发我的库作为.framework捆绑包?如果是这样,为什么iOS 8中的“嵌入式框架”是一个很大的交易,因为互联网上的许多资源都在暗示?我错过了什么?
  • 是否有必要像对待我制作的任何其他应用程序一样对.framework进行编码?
  • 如果我需要在我的.framework文件中包含其他资源(如核心数据或图像),该怎么办?我是否需要为此制作单独的.bundle文件?

5 个答案:

答案 0 :(得分:65)

在iOS8之前,Xcode只允许为iOS创建静态库。与此相关的常见问题是我们必须单独发送二进制文件和标题。

后来,一些开发人员提出了创建静态框架的想法。 [.framework只是一个带有符号链接到lib和标题的文件夹]。其中一个例子是https://github.com/jverkoey/iOS-Framework

此选项适用于iOS 7或8或之前。因为它们只是静态库,便于捆绑头文件。

至于您对资源的问题,我们需要将它们捆绑在' .bundle' ..为了运送它们,我不确定我们是否可以将它们包含在.framework文件夹中。过去我习惯把我的libs作为静态框架发送并捆绑...

但是,如果您使用Swift,上述选项将无效。 Xcode不支持构建包含swift代码的静态库。

如果有快速使用,你必须使用动态框架。从理论上讲,动态框架可以在iOS7中运行。但是,我认为如果应用程序针对iOS7并使用动态框架,iTunes Connect将拒绝: - )。

希望这有帮助

答案 1 :(得分:12)

使用Xcode 9,您也可以为Swift创建静态框架。由于ABI源兼容性,这是可能的。您只需更改框架目标的构建设置下的Mach-O type即可。 此技术也适用于混合框架(使用Swift和Objective-C代码的框架)。

答案 2 :(得分:6)

Swift在静态库中不起作用。如果必须使用动态框架,则必须将最小iOS设置为8.0 ,因为 AppStore拒绝带有动态框架的 ios 7

答案 3 :(得分:5)

我没有得到所有答案,但我会在这里尝试解决您的一些问题。

  • 您将收到有关在iOS 7中使用这些框架的警告,但这就是警告。见answer

  • 您可以包含其他资源,例如CoreData,但您需要手动在代码中创建它们。这是一个tutorial,展示了如何创建核心数据模型。

  • 您必须为iOS编写动态库代码。

  • 如果您计划分发模拟器和设备架构,则需要确保您的框架支持模拟器和设备架构。

答案 4 :(得分:0)

Framework可以是staticdynamic,带有,该库打包成捆,其中包含一些额外的资源,用于版本控制的元描述等。

您可以通过将Linker [About]更改为Framework target -> Build Settings -> Mach-O TypeStatic Library来更改对Dynamic Library有影响的库格式。默认情况下,Xcode的值为Dynamic Library

根据此设置,将生成不同类型的二进制文件[check static or dynamic]

成功配置使用者后[Link vs Embed]

Static Linker ld:在编译时,会将static library中的所有代码都包含到可执行对象文件中。

Dynamic Linker dyld:在加载/运行时将尝试使用@rpath [About]查找嵌入式框架并将其链接

Vocabulary

相关问题