使用外部框架时,Xcode现在有嵌入式二进制文件以及链接框架部分。
当您下载外部框架和Finder->将其拖到Xcode中时,它会将框架放入链接的框架和库部分。
使用Carthage构建库时,建议您拖入嵌入式二进制文件部分。
两者似乎都在链接方面起作用,因为API可用于任何一种方式,当在嵌入式二进制文件部分中添加框架时,它也会自动添加到中链接的框架和库部分。
那么,谁是对的?迦太基或其他互联网?为什么有两个选项可以将外部资源包含到Xcode项目中?
答案 0 :(得分:50)
链接 - 如果我们使用其中定义的任何API,我们必须链接一个框架。
嵌入 - 此过程将确保添加的框架将嵌入到应用程序包中,并可能有助于在应用程序和任何扩展程序包之间共享代码。我们只嵌入了第三方框架,而不是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及更高版本上可用的动态框架,否则您只能链接静态框架。