首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >iOS静态与动态框架的比较

iOS静态与动态框架的比较
EN

Stack Overflow用户
提问于 2015-01-12 18:25:12
回答 4查看 41.9K关注 0票数 118

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

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

  • iOS 8为iOS引入了“嵌入式框架”,但据我所知,它们不适用于iOS 7,只适用于iOS 8和更高版本。
  • 我可以选择将我的库作为静态库(.a文件)分发,也可以分发头文件。
  • 我还发现iOS 7不支持动态.framework库(只支持静态),因为它不支持动态链接。但

支持iOS 8,也支持静态链接。

以下是我对这些信息的问题:

  • 我看到我可以通过将.framework -O类型更改为“静态库”来创建一个Mach目标,并使其成为静态目标。这是否足以毫无问题地支持iOS 7,并以.framework包的形式分发我的库?如果是这样的话,为什么iOS 8中的“嵌入式框架”会像互联网上的许多资源所暗示的那样是一件大事呢?
  • 如果我需要在.framework文件中包含其他资源(如核心数据或图像),该怎么办?
  • 我需要为此创建一个单独的.bundle文件吗?
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-07-03 00:32:10

在iOS8之前,Xcode只允许为iOS创建静态库。常见的问题是我们必须分别发布二进制文件和头部文件。

后来,一些开发人员产生了创建“静态框架”的想法。.framework只是一个带有指向库和头文件的符号链接的文件夹。https://github.com/jverkoey/iOS-Framework就是一个这样的例子

此选项适用于iOS 7或8或更早版本。因为它们只是静态库,可以方便地捆绑头文件。

至于您关于资源的问题,我们需要将它们捆绑在“.bundle”中。对于发货,我不确定我们是否可以将它们封装在.framework文件夹中。在过去,我常常把我的libs作为一个静态框架和捆绑包发布……

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

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

希望这能有所帮助

票数 71
EN

Stack Overflow用户

发布于 2017-11-02 23:54:50

从Xcode9开始,您还可以为Swift创建静态框架。由于ABI源代码的兼容性,这是可能的。您只需更改框架目标的build设置下的Mach-O type即可。该技术也适用于混合框架(包含Swift和Objective-C代码的框架)。

票数 18
EN

Stack Overflow用户

发布于 2015-04-21 10:49:08

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

  • 如果你在iOS 7中使用这些框架,你会得到一个警告,不过这只是一个警告。请参阅此answer
  • 您可以包含其他资源,如CoreData,但是您需要在代码中手动创建它们。这是一个展示如何创建核心数据模型的tutorial
  • 您必须对iOS的动态库进行代码签名。
  • 如果您计划分发它,则需要确保您的框架同时支持模拟器和设备架构。
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27899799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档