如何在 Xcode 11 中删除 Swift 包依赖项?

Posted

技术标签:

【中文标题】如何在 Xcode 11 中删除 Swift 包依赖项?【英文标题】:How to delete Swift Package Dependency in Xcode 11? 【发布时间】:2019-11-05 04:07:05 【问题描述】:

我在 Xcode 11 中有一个项目,我向其中添加了 Swift 包管理器依赖项。我现在意识到我不再需要以前添加到项目中的包依赖项之一。

如下所示,File > Swift Packages 下没有用于从 Swift 包管理器中删除此项目的打包器的选项。

我已尝试从 project.xcworkspace/xcshareddata/swiftpm/Package.resolved 文件中的数组中删除包。但它仍然没有从 Xcode 中删除它,并且下次我 Update to Latest Package Versions 时,它会将条目读取到 Package.resolved 文件中。

如何删除项目中的 Swift 包管理器依赖项?

【问题讨论】:

我无法在 Xcode 13 中遵循此问题的任何答案 【参考方案1】:
    打开 Xcode 选择您的项目 看顶部中间 选择 Swift 包管理器 菜单

您将能够管理您的包(添加/删除)

【讨论】:

@CharlieFish 您可以在侧边栏中右键单击并删除您想要的所有内容!它只是没有做任何事情。 ? 我尝试了上面的步骤,仍然无法删除依赖! 警告:当我尝试以这种方式删除 Swift 包时,Xcode 11.7 (11E801a) 崩溃(-[__NSSetM addObject:]: object cannot be nil,发送 removeItems: to Xcode3PackageReferenceListViewController from <DVTGradientImageButton: 0x7fce1a7d83d0> 我不明白说明。这是什么窗口? @xinux,您必须单击文件导航器顶部的项目,然后它将通常包含代码或界面构建器的中心视图转换为此项目视图。【参考方案2】:

Swift 包管理器(SPM)依赖

添加依赖

1. Project Settings contains information about dependencies. 
2. File -> Swift Packages -> Add Package Dependency...
3. Target -> General -> Frameworks, Libraries, and Embedded Content -> Add Items -> Add Other... -> Add Package Dependency...

目标设置包括依赖项中的产品

编辑依赖项

要编辑 URL,您可以使用 repositoryURL 编辑 .pbxproj

删除依赖

Project -> Packages -> <Select dependency> -> -

[Local Swift Package Manager(SPM)][ios Dependency manager]

【讨论】:

【参考方案3】:

除了皮埃尔的回答,这让我发疯,我有一个正在编辑的子项目,我忘记了(它在一个子文件夹中)。即使我在“Swift Packages”窗格中删除了它,它仍然会回来。删除该子文件夹引用可确保 PM 依赖项消失。

【讨论】:

【参考方案4】:

我删除了 swift 包,但它的依赖项仍在项目中显示。 我看到 swift 包仍在左窗格底部的 Frameworks 文件夹中,

我从那里删除了它,并且依赖关系消失了。

【讨论】:

【参考方案5】:

首先我将它从 Package.swift 中的依赖项和目标中删除,然后我使用 swift package generate-xcodeproj 重新生成了我的项目文件

【讨论】:

【参考方案6】:

嵌套的 Swift 包依赖项

背景

Swift 包不仅可以通过 Git 源代码签出导入,还可以通过一个或多个包产品导入。我想保留 Package,因为我在一个目标中使用了它,但在另一个目标中没有使用它。

减少进口

我最近犯了一个错误,我自动导入了 Swift Package 依赖项引用的所有模块,即使是那些我不需要的模块。这很常见,因为包可以有多个产品,每个产品都为不同的应用程序公开不同的 API。

如果您不确定是否需要导入,请检查并删除它。例如,一个包可能包含一个添加额外的不必要导入的 Objective-C 模块。

在我的例子中,我导入了一个通过多个嵌套库导出的 Swift 包:在上面的示例中,OHHTTPStubsOHHTTPStubsSwift

单元/UI 测试的嵌套依赖项

每个目标应该只导入它使用的库。

规则:

    仅导入您在为整个项目导入时实际需要的 Swift 包管理器产品。如果您只使用包装子规范,则仅导入它。 主机应用程序目标不需要导入 UI 测试库。我们可以从 Frameworks、Libraries 和 Embedded Content 的 Target General 选项卡中安全地删除这些库。这将自动取消产品与此目标的 Build Phases 选项卡的链接。 我们的 UI 测试目标可以通过 Build Phases -> Link Binary with Libraries 导入它需要的 Package Products。如果依赖项仅用于 UI 测试,请将其从主机应用程序目标 Frameworks、Libraries 和 Embedded Content 中删除。 单元测试目标无法链接到未嵌入在主机应用程序中的库。因此,我们需要在 Frameworks、Libraries 和 Embedded Content 的常规设置选项卡中将单元测试中使用的产品添加到主机应用程序目标。我们不需要将任何产品添加到 Link Binary with Libraries 以用于单元测试目标。

示例

OHHTTPStubsSwift 是等效的 Swift CocoaPods 子规范,它在 ObjC API 上添加了更好的 API 包装器,但已经导入了 ObjC API (OHHTTPStubs)。

我从主机目标中删除了 Package Products,因为我只在 UI 测试中使用它。然后我只通过 Build Phases 导入了OHHTTPStubsSwift

TL;DR

我们可以通过构建阶段或目标常规设置选项卡删除嵌套的 Swift 包依赖项,而无需删除包本身。删除不必要的依赖项是节省应用内存占用并缩短构建时间的好习惯。

【讨论】:

【参考方案7】:

步骤 1. 导航到您的项目目录。 步骤 2. 找到“your-project.xcodeproj” 第 3 步。在文本编辑器中打开它,而不是 Xcode(您必须使用 finder 并通过打开所有应用程序 -> 文本编辑器来使用任何文本编辑器 步骤 4. 搜索相关包的所有实例,例如...我有一个包“UIKit”导致问题,我刚刚删除了它的所有实例,并确保不干扰文件的其余部分。 第 4 步。使用 xcode 打开/重新打开 xcode 项目并享受。

【讨论】:

以上是关于如何在 Xcode 11 中删除 Swift 包依赖项?的主要内容,如果未能解决你的问题,请参考以下文章

删除 List Swift UI Xcode 11 中的空行

从源代码管理 XCode 中删除 Swift 包

如何删除空白存档的Xcode文件(swift4)

如何删除空白存档的 Xcode 文件(swift4)

如何修复 Xcode 7.3 警告:`init` 已弃用:它将在 Swift 3 中删除:在序列上使用`enumerate()` 方法 [重复]

如何从 appdelegate xcode 11 swift 5 呈现视图控制器