iOS 8支持动态链接吗?
-
02-01-2020 - |
题
直到iOS7,由于安全问题,Apple不支持动态链接。通常依赖于静态库之间的代码重用,这是作为应用程序可执行文件的一部分构建的。
在iOS8中引入扩展似乎有点改变,因为扩展是单独的可执行文件。扩展和其包含应用程序之间的共享代码是通过框架完成的。 Apple在其发行说明中说出来:
ios的框架。 iOS开发人员现在可以创建 dynamic 框架。 框架是用于封装的代码和资源集合 多个项目有价值的功能。构架 与扩展完美,共享可以用两者使用的逻辑 主要应用程序和捆绑扩展。
重点是我的。
此外,在扩展开发指南中,他们解释说,您可以通过“嵌入式框架”在扩展和包含应用程序之间共享代码。我的问题是 - 什么是嵌入式框架,它与动态框架有何不同,我们真的会看到IOS8中正确的动态链接吗?我读过的所有文档都似乎含糊不清。
解决方案
“嵌入式”和“动态”框架不参考框架的同一方面。它们并不彼此相反。首先,让我们定义一个框架:在Apple Lingo中,框架是指一些编译的代码+所述代码的公共标题。
-
现在,动态框架是一个框架,其代码是一个动态库的构建。它与“静态”框架相反,其中代码将作为静态库构建。如果你想知道,维基百科有
-
最后,嵌入式框架是一个框架,该框架是在应用程序中打包,而不是在“/ system / library / frameworks”中安装的系统范围内。
其他提示
嵌入式框架只是应用程序包中包含的框架,而不是在系统目录中安装的全局框架。
动态框架并不意味着动态链接框架。应用程序仍然在沙箱环境中工作。它不像您的自定义框架将与iOS一起安装。您的每一个应用程序,使用您开发的常见框架将在每个应用程序的捆绑中复制。
你可以自己看到这个。转到您的Xcode的派生数据目录并在应用程序的数据中,您将找到复制的所有嵌入式框架。
与静态库相比,使用iOS 8创建框架的新事物是公共标题文件和资产在框架内捆绑在一起。如果您已经使用了早期版本的Xcode进行了这种方式,您将记住提供公共标题的痛苦,然后在Xcode设置中添加搜索路径,以及我们必须通过单独的捆绑包。
使用我看到的框架的缺点是现在我们不能简单地使用 lipo 为所有类型的架构生成胖静态库。
imo苹果正在使用“动态”这个词来建议'独立'。
手表wwdc2014 - 建立现代框架了解更多细节。