嵌套的 Swift 包依赖项
背景
File正如其他答案所提到的,我们可以通过-> Swift Packages->工作流程非常容易地将 Swift 包导入项目Add Package Dependency,这适用于大多数应用程序。我已添加此答案作为对具有嵌套依赖项的包的进一步优化。
Swift 包不仅可以通过 Git 源代码签出导入,还可以通过一个或多个Package Products导入。就我而言,我想保留 Package,因为我在一个目标中使用了它,但没有在另一个目标中使用它。有时一个包包含多个我们不需要的依赖项,这是修剪未使用的依赖项的好机会。
未使用的进口
我最近犯了一个错误,我自动导入了 Swift Package 依赖项引用的所有模块,即使是那些我不需要的模块。这很常见,因为包可以有多个产品,每个产品都为不同的应用程序公开不同的 API。
如果您不确定是否需要导入,请检查并删除它。例如,一个包可以包含一个添加额外的不必要导入的 Objective-C 模块。

OHHTTPStubs
就我而言,我导入了一个通过多个嵌套库导出的Swift 包:OHHTTPStubsSwift
在上面的示例中。
大概的概念
我们可以通过构建阶段或目标常规设置选项卡删除嵌套的 Swift 包依赖项,而无需删除包本身。删除不必要的依赖项是节省应用程序内存占用并简化构建时间的好习惯。
用于单元/UI 测试的嵌套依赖项
每个目标应该只导入它使用的库。
规则:
- 在为整个项目导入时,只导入您实际需要的 Swift 包管理器产品。如果您只使用包装子规范,请仅导入该子规范。
- Host Application Target 不需要导入 UI 测试库。我们可以从 中的 Target General 选项卡中安全地删除这些库Frameworks, Libraries, and Embedded Content。这将自动取消产品与Build Phases此目标选项卡的链接。
- 我们的 UI 测试目标可以通过Build Phases->导入它需要的 Package Products Link Binary with Libraries。如果依赖项仅在 UI 测试中使用,请将其从 Host Application Target 中删除Frameworks, Libraries, and Embedded Content。
- 单元测试目标无法链接到未嵌入在主机应用程序中的库。因此,我们需要将单元测试中使用的产品添加到Frameworks, Libraries, and Embedded Content. 我们不需要Link Binary with Libraries为单元测试目标添加任何产品。
以我的经验为例
OHHTTPStubsSwift
是等效的 Swift CocoaPods 子规范,它在 ObjC API 上添加了更好的 API 包装器,但已经导入了 ObjC API ( OHHTTPStubs
)。
我从主机目标中删除了 Package Products,因为我只在 UI 测试中使用它。然后我只导入了OHHTTPStubsSwift
通过构建阶段。