【问题标题】:What is the difference between an "app" project and a "framework" project in Xcode?Xcode 中的“app”项目和“framework”项目有什么区别?
【发布时间】:2021-12-03 02:50:00
【问题描述】:
我正在使用 SwiftUI 开发一个项目,它最初是从创建一个新项目作为“应用程序”开始的(Xcode,单击文件,新建,项目,单击“应用程序”),但后来被要求放置它放入一个 pod 作为框架。我成功地做到了(Xcode,点击文件,新项目,点击“框架”),但是我不确定有什么区别,我不确定我为什么要这样做。对我来说,它们看起来非常相似,只是我无法在模拟器中将我的项目作为框架启动。幸运的是 SwiftUI 提供了画布预览窗口,但是在某些按钮交互方面有点挑剔,这就是我想使用模拟器的原因。
两个混淆的地方:
- 应用和框架项目有什么区别?
- 为什么将我的项目作为框架更有利?
【问题讨论】:
标签:
ios
swift
xcode
swiftui
frameworks
【解决方案1】:
应用程序是可以启动和运行的独立应用程序。例如,您手机上的所有应用程序都只是应用程序。您点击它们,它们就会启动并运行、呈现用户界面、接受输入等。
框架完全是另外一回事。它是捆绑在一起的代码集合,被另一个框架或应用程序使用的包中。一些框架是由系统提供的——例如,SwiftUI 是一个听起来像是您在应用程序中使用的框架。其他框架由第 3 方提供。例如,您可以通过 CocoaPods 或 Swift 包管理器找到许多框架——Alamofire 就是一个常见的例子。此外,您可以创建自己的框架并在自己的代码中使用它们作为一种组织形式和职责分离。
为什么将我的项目作为框架更有利?
不是——它们是两个几乎完全不同的概念(除了最终都是代码和资源的集合)。如果您打算构建一个可以在某人的设备上启动的应用程序,那么您唯一的选择就是制作一个应用程序。如果您打算制作一组可重用的代码以在您或其他人的应用程序中使用,那么您将制作一个框架。
【解决方案2】:
@jnpdx 的出色回答(并被赞成)。让我举个物理例子:
(1) 在 Xcode 中创建一个 project,它是一个框架。称之为“MyAppKit”。在其中创建,嗯,基本上任何东西 - View、UIView,或者更可能是一个将由多个视图共享的函数。 (让我们一起去吧。)
public func setLoginName(_ login:String) -> String {
return ""Hello, " + login + "!";
}
很简单。调用它,传入一些东西,它会返回一个字符串说你好。请注意public 部分。这很重要。 (还有更多。这是一个简单的例子。)
(2) 现在我们开始使用您的应用程序。假设您有两个应用程序需要使用这个(同样,非常简单)代码。一种是 SwiftUI,一种是 UIKit。 (除了语法没关系。)我的强项是 UIKit,我会使用它。 (它也可以是几十个应用程序。)
import MyAppKit
let myLoginMessage = setLoginName("World").
差不多是“你好,世界!”
同样,这确实是一个荒谬的例子。但它应该让您了解 Xcode 中 Framework 项目和 App 项目之间的区别。