iOS 8是否支持动态链接?

问题描述 投票:24回答:4

直到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中看到正确的动态链接?我读过的所有文档似乎都含糊不清。

ios ios8 ios-frameworks ios-app-extension
4个回答
12
投票

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

  • 现在,动态框架是一个框架,其代码构建为动态库。它与“静态”框架相反,其中代码将构建为静态库。如果你想知道,维基百科有a very nice explanation静态和动态库之间的区别。
  • 最后,嵌入式框架是一个打包在应用程序中的框架,而不是在系统范围内安装,例如在“/ System / Library / Frameworks”中。

0
投票

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


0
投票

Static framework - 包含static library和资源

Dynamic framework - 包含dynamic library和资源

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

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

阅读更多here


-2
投票

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

你可以自己看看。转到Xcode的Derived Data目录,在应用程序的数据中,您将找到复制的所有嵌入式框架。

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.