iOS静态与dynamic框架说明

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

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

  • iOS 8为iOS引入了“embedded式框架”,但据我所知,它们不适用于iOS 7,仅适用于iOS 8及以上版本。
  • 我可以select将我的库作为静态库(.a文件)分发,也可以分发头文件。 我知道这是处理这种情况的一种常见方式,但是我希望find一些比这更简单的方法(如果可能的话,也可以把一些资源捆绑在一起)。
  • 我还发现,iOS 7不支持dynamic.framework库(只有静态),因为它不支持dynamic链接。 但是iOS 8,以及静态链接。

这是关于这个信息的问题。

  • 我看到我可以通过将Mach-Otypes改为“静态库”来创build一个.framework目标,并将其设置为静态。这足以支持iOS 7而不会出现任何问题,并且还可以将我的库作为.framework bundle?如果是这样的话,为什么iOS 8中的“embedded式框架”这么重要,因为互联网上的许多资源都是这样build议的?我错过了什么?
  • 是否有必要像我做任何其他应用程序一样对.framework进行编码签名?
  • 如果我需要在我的.framework文件中包含其他资源(如核心数据或图像),该怎么办? 我需要为此创build一个单独的.bundle文件吗?

我已经search了互联网和苹果公司的文档以find答案,但是我发现的信息并没有给我一个直接的答案。

比你提前。

在iOS8之前,Xcode只允许为iOS创build静态库。 常见的问题是我们不得不分别发运二进制文件和头文件。

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

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

至于你对资源的问题,我们需要把它们捆绑在'.bundle'中。对于运输它们,我不确定我们是否可以将它们放在.framework文件夹中。在过去,我用来将我的libs作为一个静态框架和捆绑…

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

如果使用迅速,则必须使用Dynamic框架。 理论上,dynamic框架在iOS7中工作。但是,我认为如果应用程序的目标是iOS7并使用dynamic框架,iTunes Connect将会拒绝:-)。

希望这可以帮助

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

我没有所有的答案,但我会尽力在这里解决你的一些问题。

  • 您将在iOS 7中获得使用这些框架的警告,但是这只是一个警告。 看到这个答案 。

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

  • 你必须为iOS编码dynamic库。

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

随着Xcode 9开始,你也可以为Swift创build静态框架。 这可能是由于ABI源代码兼容性。 所有你需要做的只是改变架构目标的构build设置下的Mach-O type 。 这种技术也适用于混合框架(带有Swift和Objective-C代码的框架)。