Xcode Swift 在“应用程序目标”与“框架目标”中导入代码——有啥区别?

Posted

技术标签:

【中文标题】Xcode Swift 在“应用程序目标”与“框架目标”中导入代码——有啥区别?【英文标题】:Xcode Swift Import Code Within "an App Target" vs. "a Framework Target" -- What is difference?Xcode Swift 在“应用程序目标”与“框架目标”中导入代码——有什么区别? 【发布时间】:2020-11-19 19:50:19 【问题描述】:

我正在将两个 .swift 文件导入到现有的 ObjC 应用程序中。

Apple 文档“Importing Swift into Objective-C”列出了这两种选择,但我不明白它们的区别。

我不知道“App Target”和“Framework Target”的区别。

我创建了一个 Xcode 应用程序项目,而不是一个框架项目。有这个区别吗?

【问题讨论】:

根据您的其他问题,请注意静态库与框架不同。 【参考方案1】:

框架目标意味着您的项目将您的代码编译成一个库,然后其他程序可以使用该库。 CocoaPods 是框架的例子。

一个项目可以包含多个目标。可以让您的项目定义一个框架并提供该框架的源文件,并将应用程序构建为一个单独的目标(通常,当您的应用程序使用它构建的框架时,您会这样做)

除非您正在构建自己的框架,否则您应该选择“App Target”。

【讨论】:

【参考方案2】:

无法通过这篇文章提供正确的答案。 至于您的另一个问题 swift-error-use-of-centralmanager-refers-to-instance-method-rather-than-var 建议我认为您混淆了静态库和框架的区别是什么。在不深入探讨差异以及如何使用它们的情况下,这可能有助于区分它们。

    静态库可以利用框架和其他库。 框架可以使用其他框架和(其他)库。 应用可以利用静态库和不同的框架。

在您的工作区/项目中创建目标时,您会看到 ios 有不同的模板来创建支持代码。该对话框特别区分 Static LibraryFramework。

他们每个人都会在您的项目中创建一个目标,并且通常还会创建一个 Scheme 来编译具有各自目标设置的那些。 在您的应用程序目标设置中,您可以定义标头的位置、需要链接和复制到资源中的内容,或者可以在其他地方找到以使其工作的内容。 当这些目标是一个项目的一部分时,您可以利用 Xcodes 的功能来帮助您在继续并最终编译应用程序之前编译依赖项。一旦(在示例中)框架被编译,Xcode 将保留它,因此每次编译应用程序时都不必根据这个框架编译它。一旦你改变了框架,你(可以)期望 Xcode 会再次编译它。如果目标在不同的工作区/项目中彼此分离,您有责任密切关注这些依赖项及其将在您的应用中使用的最后编译版本。

因为 - 不足为奇 - 您负责链接、定义依赖项以及部署/放置和声明使您的应用在运行时工作所需的部分。

这里的屏幕截图显示了一个项目中的不同目标(随机命名)以及所选应用目标的框架、库和嵌入式内容设置。

【讨论】:

以上是关于Xcode Swift 在“应用程序目标”与“框架目标”中导入代码——有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 7 和基于 swift 的框架

使用 Swift 4.0 编译的模块无法在 Swift 3.1 中导入框架二进制文件

将 Swift 框架嵌入到另一个框架 Xcode

Xcode 7 支持 watch OS1 和 OS2

为啥应用存档在 iOS、swift、xcode 9.2 中使用自定义框架失败

Xcode 兼容性的 Swift 框架问题