嵌入式二进制文件和链接框架之间有什么区别

时间:2015-09-03 12:30:09

标签: ios xcode frameworks xcode7 carthage

使用外部框架时,Xcode现在有嵌入式二进制文件以及链接框架部分。

enter image description here

当您下载外部框架和Finder->将其拖到Xcode中时,它会将框架放入链接的框架和库部分。

使用Carthage构建库时,建议您拖入嵌入式二进制文件部分。

两者似乎都在链接方面起作用,因为API可用于任何一种方式,当在嵌入式二进制文件部分中添加框架时,它也会自动添加到中链接的框架和库部分。

那么,谁是对的?迦太基或其他互联网?为什么有两个选项可以将外部资源包含到Xcode项目中?

4 个答案:

答案 0 :(得分:50)

  1. 链接 - 如果我们使用其中定义的任何API,我们必须链接一个框架。

  2. 嵌入 - 此过程将确保添加的框架将嵌入到应用程序包中,并可能有助于在应用程序和任何扩展程序包之间共享代码。我们只嵌入了第三方框架,而不是iOS提供的框架,因为它们可以在设备中随时使用。如果我们嵌入,这意味着,我们也需要链接到它们,以便Xcode可以编译和创建构建。当应用程序在设备中运行时,嵌入式框架将在需要时加载到内存中。

答案 1 :(得分:13)

如果您嵌入二进制文件,它将包含在您的产品中。如果您只链接库或框架而不嵌入它,它将不属于您的产品。

但是,在iOS8中,所有第三方框架都需要"嵌入"。即使是在各种程序之间共享的框架也需要被嵌入"进入这些计划中的每一个。如果它在设备上安装在共享位置,则使用相同的任何其他安装过程" embedded"来自共享位置的代码可以重用现有安装。这是针对iOS8的,在iOS8之前和iOS世界之外,这个答案都不可能是准确的。

答案 2 :(得分:0)

WITH cteMyComplexThing AS( SELECT MyTable.ColumnA, DateDiff(d, MyTable.MyDate, getDate()) as ComplexThing, MyTable.SomeOtherColumn FROM MyTable ) SELECT ColumnA, CASE WHEN ComplexThing <= 0 THEN 'bad' WHEN ComplexThing BETWEEN 1 AND 15 THEN 'reasonable' ELSE 'good' END as MyCalculatedColumn, SomeOtherColumn FROM cteMyComplexThing 有关Linking的更多信息,它们在编译时或加载/运行时有效。 Linker 复制一个Linker到目标二进制文件中。由于Library是自治的,因此在这种情况下,Framework负责在系统加载程序路径内查找和链接Linker或在内部查找并链接捆绑包

Dynamic Framework是将二进制文件复制到目标二进制文件的过程。结果,它将位于内部。

了解更多here

答案 3 :(得分:-1)

据我所知,嵌入式二进制文件仅包含iOS 8及更高版本上可用的动态框架,否则您只能链接静态框架。

相关问题