首页 文章

iOS Static vs Dynamic框架说明

提问于
浏览
101

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

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

  • iOS 8为iOS引入了"embedded frameworks",但据我了解,它们不适用于iOS 7,仅适用于iOS 8及更高版本 .

  • 我可以选择将我的库分发为静态库(.a文件)并分发标头 . 我知道这是处理这种情况的常用方法,但我想找到一些比这更简单的东西(如果可能的话,还要用它捆绑一些资源) .

  • 我还发现iOS 7不支持动态.framework库(仅静态),因为它不支持动态链接 . 但是iOS 8和静态链接一样 .

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

  • 我看到我可以创建一个.framework目标,并通过将iOS-8中的Mach-O类型更改为"static library. Would that be enough in order to support iOS 7 without any problems, and also to distribute my library as a .framework bundle? If so, why is "嵌入式框架来实现静态,这是一笔很大的交易,因为互联网上的许多资源都在暗示?我错过了什么?

  • 是否有必要对.framework进行编码,就像我对其他任何应用程序一样?

  • 如果我需要在我的.framework文件中包含其他资源(如核心数据或图像),该怎么办?我需要为此制作一个单独的.bundle文件吗?

4 回答

  • 4

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

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

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

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

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

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

    希望这可以帮助

  • 6

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

  • 63

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

  • 10

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

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

    • 您可以包含其他资源,例如CoreData,但是'll need to create them in code manually. Here'是tutorial,显示如何创建核心数据模型 .

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

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

相关问题