iOS 8是否支持动态链接?

时间:2014-08-01 13:03:02

标签: ios ios8 ios-frameworks ios-app-extension

直到iOS7,由于安全问题,Apple不支持动态链接。开发人员之间的代码重用通常依赖于静态库,静态库是作为应用程序可执行文件的一部分构建的。

在iOS8中引入扩展似乎改变了一点,因为扩展是单独的可执行文件。在扩展及其包含应用程序之间共享代码是通过框架完成的。 Apple在他们的发行说明中这样说:

  

适用于iOS的框架。 iOS开发人员现在可以创建动态框架。   框架是要封装的代码和资源的集合   在多个项目中有价值的功能。构架   与扩展完美配合,共享可由两者使用的逻辑   主要应用程序和捆绑扩展。

重点是我的。

来源:https://developer.apple.com/library/content/documentation/Xcode/Conceptual/WhatsNewXcode-Archive/Articles/xcode_6_0.html#//apple_ref/doc/uid/TP40014509-SW14

此外,在扩展程序开发指南中,他们解释了您可以通过嵌入式框架在扩展程序和包含应用程序之间共享代码"。

来源:https://developer.apple.com/library/content/documentation/General/Conceptual/ExtensibilityPG/ExtensionScenarios.html#//apple_ref/doc/uid/TP40014214-CH21-SW1

我的问题是 - 什么是嵌入式框架,它与动态框架有什么不同?我们真的会在iOS8中看到正确的动态链接吗?我读过的所有文档似乎都含糊不清。

4 个答案:

答案 0 :(得分:12)

“嵌入式”和“动态”框架不涉及框架的相同方面。它们并不是彼此相反的。首先,让我们定义一个框架:在Apple术语中,框架是指一些已编译的代码+所述代码的公共头文件。

  • 现在,动态框架是一个框架,其代码构建为动态库。它与“静态”框架相反,其中代码将构建为静态库。如果你想知道,维基百科有a very nice explanation静态和动态库之间的区别。

  • 最后,嵌入式框架是一个打包在应用程序中的框架,而不是在系统范围内安装,例如在“/ System / Library / Frameworks”中。

答案 1 :(得分:0)

嵌入式框架只是包含在应用程序包中的框架,而不是安装在系统目录中的全局框架。

答案 2 :(得分:0)

Static framework-包含static library和资源

Dynamic framework-包含dynamic library和资源

System framework-是Dynamic framework,存储在系统级,可用于所有应用程序。苹果保留为自己创建系统框架的能力。目前,第三方开发人员无法在iOS上创建系统框架。

Embedded frameworkDynamic framework,放置在应用程序的沙箱中,仅对该应用程序可用。首先为extension创建此类型,以共享通用代码和资源(如果您的部署目标为iOS8 +)。

了解更多here

答案 3 :(得分:-2)

动态框架并不意味着动态链接框架。应用程序仍然可以在沙箱环境中工作。它不像你的自定义框架将与iOS一起安装。使用您开发的通用框架的每个应用程序都将被复制到每个应用程序的包中。

你可以亲眼看到这个。转到Xcode的Derived Data目录,在应用程序的数据中,你会发现所有嵌入式框架都被复制了。

与静态库相比,使用iOS 8创建框架的唯一新功能是公共头文件和资产在框架中捆绑在一起。如果你已经使用早期版本的Xcode做了这类事情,你会记得提供公共标题然后在Xcode设置中添加搜索路径以及我们必须在单独的包中传递的资产时的痛苦。

我看到使用Frameworks的唯一缺点是现在我们不能简单地使用 lipo 为所有类型的体系结构生成胖静态库。

IMO Apple正在使用“动态”这个词来暗示'独立'。

观看WWDC2014 - 构建现代框架以获取更多详细信息。