iOS 8支持动态链接吗?

iOS 8支持动态链接吗?,ios,ios8,ios-frameworks,ios-app-extension,Ios,Ios8,Ios Frameworks,Ios App Extension,在iOS7之前,出于安全考虑,苹果不支持动态链接。开发人员之间的代码重用通常依赖于静态库,这些库是作为应用程序可执行文件的一部分构建的 在iOS8中引入扩展似乎会改变这一点,因为扩展是独立的可执行文件。扩展与其包含的应用程序之间的代码共享是通过一个框架完成的。苹果在发布说明中这样说: iOS框架。iOS开发者现在可以创建动态框架。 框架是要封装的代码和资源的集合 跨多个项目具有价值的功能。框架 与扩展完美配合,共享双方都可以使用的逻辑 主应用程序和捆绑的扩展 重点是我的 资料来源: 此外,在《扩

在iOS7之前,出于安全考虑,苹果不支持动态链接。开发人员之间的代码重用通常依赖于静态库,这些库是作为应用程序可执行文件的一部分构建的

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

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

重点是我的

资料来源:

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

资料来源:


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

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

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

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

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

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

IMO苹果公司使用“动态”一词来表示“独立”

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

“嵌入式”和“动态”框架指的不是框架的同一方面。它们不是对立的。首先,让我们定义什么是框架:在苹果的行话中,框架指的是一些已编译代码+所述代码的公共头

  • 现在,动态框架是一个框架,其代码构建为动态库。它与“静态”框架相反,后者将代码构建为静态库。如果你想知道,维基百科已经知道静态库和动态库的区别

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


我们不是被允许使用嵌入式框架还是一般框架吗???在应用商店中有多个应用程序使用嵌入式框架,然后在实际应用程序的顶部打上品牌。或者我只是误解了你的意思?框架的使用是启用的,但它们都是静态的,这意味着它们是作为可执行文件的一部分构建的。现在我们有了扩展,如果我们继续这样做,应用程序可执行文件和扩展可执行文件将复制框架代码(假设两者都链接框架)。这对我来说很奇怪,所以我问苹果是否改变了,允许我们动态链接(即在运行时链接一个不可执行的框架)。另外,他们在文件中有“动态框架”这个词。好吧,我想我理解你的意思,我不得不用旧大脑把它包装几次才能理解,但我想我明白了,但我不认为我有答案。对不起,好吧,但在这种情况下,它仍然是一个静态框架。苹果为什么在发行说明中使用“动态”这个词?@Slavo Sorry;是的,它是动态的。在iOS/OSX世界中,动态框架实际上就是动态链接的框架。只需构建一个示例iOS框架,然后执行“file MyLib.framework/MyLib”,看看它是如何成为一个Mach-O动态链接的共享库。你是说我们编写的所有自定义框架都将动态地提供给其他所有人?不,iOS不允许这样做。操作系统不允许您从应用程序的沙箱外部加载动态库。系统框架在沙箱中,但来自其他应用程序的框架不在沙箱中。iOS 8中引入了框架,允许您在主应用程序和扩展程序之间共享代码。这两种方法都可以从应用程序容器内部加载框架。其他应用程序不能。好的@Ecco,我想我现在明白了。理论上,它们是动态链接的,但是操作系统安全机制(沙箱)不允许您链接沙箱之外的任何框架。这些仍然可能被用于越狱设备吗?尽管措辞可能不同,这不是同一个概念吗?所有静态框架都必须与应用程序代码链接。结果是一个可执行文件,所以你说所有的静态框架都是嵌入式框架。这并不能回答我的问题。iOS8中是否有非嵌入式动态链接框架?您可以在应用程序之外分发静态框架。以“谷歌分析”为例。iOS8中是否存在非嵌入式动态链接框架?:当然:所有系统框架(Foundation、UIKit等)