iOS Static vs Dynamic框架说明

cso*_*iou 107 frameworks static-libraries static-linking ios 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 bundle?如果是这样的话,为什么iOS 8中的"嵌入式框架"是一个很大的交易,因为互联网上的许多资源都在暗示?我错过了什么?
  • 是否有必要对.framework进行编码,就像我对其他任何应用程序一样?
  • 如果我需要在我的.framework文件中包含其他资源(如核心数据或图像),该怎么办?我需要为此制作一个单独的.bundle文件吗?

Sub*_*bbu 66

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

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

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

至于你对资源的问题,我们需要将它们捆绑在'.bundle'中.为了运送它们,我不确定我们是否可以将它们包含在.framework文件夹中.过去我曾经将我的库发送为静态框架和包...

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

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

希望这可以帮助


Avi*_*tta 15

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

  • Swift 4中没有Abi兼容性 (2认同)

yoA*_*ex5 14

静态与动态链接

staticor dynamicin name 通常指向Linking[About]类型

框架可以是staticdynamic[检查静态或动态]

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

取决于此设置,将生成不同类型的二进制文件

成功配置消费者后[Link vs Embed]

Static Linker ld:在编译时将包含所有代码从static library到可执行目标文件中。

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

[词汇]


小智 6

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


Bea*_*lle 5

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

  • 您将收到有关在iOS 7中使用这些框架的警告,但这仅是警告。看到这个答案

  • 您可以包括CoreData之类的其他资源,但是您需要手动在代码中创建它们。这是显示如何创建核心数据模型的教程

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

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


归档时间:

查看次数:

32505 次

最近记录:

6 年,3 月 前