iOS 8是否支持dynamic链接?

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

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

iOS的框架。 iOS开发人员现在可以创builddynamic框架。 框架是代码和资源的集合,用于封装在多个项目中有价值的function。 框架可以与扩展一起工作,共享可以被主应用程序和捆绑扩展使用的逻辑。

重点是我的。

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

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

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

我的问题是 – 什么是embedded式框架,它与dynamic框架有什么不同,我们真的会看到适当的iOS8dynamic链接吗? 我读过的所有文档似乎都是模棱两可的。

“embedded”和“dynamic”框架并不涉及框架的相同方面。 他们不是彼此相反的。 首先,我们来定义什么是框架:在苹果术语中,框架是指一些编译代码+所述代码的公共头文件。

  • 现在一个dynamic框架是一个框架,其代码被构build为一个dynamic库。 这是一个“静态”框架的对立面,代码将被构build为一个静态库。 如果你想知道,维基百科有一个很好的解释 ,什么是静态和dynamic库之间的区别。

  • 最后, embedded式框架是封装在应用程序中的框架,而不是被安装在系统范围内,例如在“/ System / Library / Frameworks”中。

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

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

你可以看到这个。 转到您的Xcode的派生数据目录,并在应用程序的数据中,你会发现所有的embedded框架复制。

与静态库相比,使用iOS 8创buildFrameworks的唯一新事物是公共头文件和资产被捆绑在Framework中。 如果你已经用Xcode的早期版本来做这些事情,你会记得提供公共头文件,然后在Xcode设置中添加searchpath以及我们必须在单独的包中传递的资源。

使用框架的唯一缺点就是现在我们不能简单地使用lipo为所有types的体系结构生成一个胖的静态库。

国际海事组织(IMO)正在使用“dynamic”一词来build议“独立”。

观看WWDC2014 – 构build现代框架了解更多详情。