在 XCode11 中使用 SPM 添加本地依赖项

17

在 Xcode 11 中,是否可以将本地依赖项与 SPM 集成呢? 路径为:文件 > Swift Packages > 添加包依赖... 似乎只允许选择托管在 Bitbucket 上的 git 存储库。

我不确定我是否以正确的方式解决了这个问题,也许我应该使用 Package.swift 文件?我有很多使用Cocoapods的经验,但我想尝试其他工具,特别是如果它们将得到 xcode 的支持(我正在使用 xcode11 beta 5)。


也许这个 WWDC 2019 视频会有所帮助:https://developer.apple.com/videos/play/wwdc2019/410 - David Hunt
5个回答

16
这是我做法:
  • 将您的包文件夹(例如我的示例为“DataStructures”)从Finder中直接拖放到您的目标的Frameworks组中。您会发现拖放的项目变成了棕色文件夹颜色(您可以使用箭头“进入”其中)。
  • 进入您的项目目标页面,在“框架和库”中点击“+”按钮。您的包应显示在“工作区”区域中作为库。

进入图像说明


2
想要添加一条注释,即在Xcode的另一个窗口中打开时,添加的包没有展开其内容的箭头,就像子项目一样。这让我第一次感到困惑。 - Olexandr Stepanov
2
不仅如此,如果您的软件包项目是开放的,您将无法在“框架、库和嵌入式内容”中的“工作区”下看到您的软件包。 - Piotr Byzia
@AirXygène 我是这样做的,对我来说很有效。当我把包拖到我的项目中时,但我还需要再走一步。我想将我的一个包放入另一个包中。两个包都在本地路径上。有什么办法可以做到这一点吗?因为我尝试将一个包拖放到另一个包中,但没有成功。我还尝试了在依赖项中添加本地路径,但这会删除我的目标。任何帮助将不胜感激。 - Sagar
1
@Sagar,你不能有嵌套的包。但是你可以有依赖其他包的包,因此你需要在同一级别添加所有的包。你可以在客户端包清单文件中声明依赖关系。 - AirXygène
2
重要的是要提到,您必须确保要添加的包在其他Xcode编辑器中没有打开...因为Xcode :) - Mostfa Essam

6

Xcode 12

如果你已经在项目中有一个远程版本的包,并且想要在本地工作,那么需要进行一些额外的步骤...

1. 确保本地包的版本高于远程版本

如果不这样做,它将继续获取远程包。

  1. 选择 Project Navigator 中的项目
  2. 在主窗口中选择 Swift Packages
  3. 选择要替换为本地的包并将其移除
  4. 转到 File > Swift Packages > Add Package Dependency...
  5. 将您的本地包文件夹拖到包搜索栏中并添加前缀 file://
  6. 点击“下一步”

确认最小版本号高于远程版本。


1
我需要使用本地的Package.swift文件,而这篇指南中“通过拖放导入依赖项”的建议对我很有用。https://medium.com/@bartekzabicki/how-to-add-dependency-spm-into-project-using-xcode11-84a2914f8f1 - kikeenrique
1
请注意,在URL中技术上需要三个斜杠:file:///Users/name/... - Maxwell

2

本地快速软件包管理器(SPM)

[依赖项管理器]

关键点是:file:// + git,您可以在URL字段中使用它。

file://<path>
//e.g.
file:///Users/alex/Desktop/MyProject

注意事项:

  • 它与git存储库一起工作,因此请确保您在之前提交了更改
  • 当您添加SPM依赖项文件 -> Swift Packages -> 添加包依赖项时,它将被添加到项目 -> Swift Packages隐式依赖项[关于]将添加到框架、库和嵌入式内容
  • 当您将新更改提交到框架时,请不要忘记文件 -> Swift Packages -> 更新到最新的软件包版本

产品文件夹

<path_derived_data>/<randomizer>/Build/Products/Debug
//e.g.
/Users/alex/Library/Developer/Xcode/DerivedData/SPMExperiments-bmmqumztjedpekaajffnaegxzwzg/Build/Products/Debug

[本地 CocoaPods]
[本地 Carthage]


尝试从本地仓库(裸的git)获取,它一直抱怨无法解决...不确定是否可能。为什么远程必须在线? - bauerMusic

2

是的,Xcode让这个基本任务变得不必要地困难。

但诀窍很简单:在选择“添加包依赖项…”时弹出的对话框中,在URL字段中,您可以输入一个file:// URL。例如,将包的文件夹拖到该字段中,它将放置路径 - 例如,“/ Users / me / Documents / myShinyPackage /”,然后在其前面添加“file://”,您就可以继续了。

补充说明:正如一些人在下面的评论中指出的那样,如果您与他人共享项目,则会出现问题,除非您标准化路径。但是,对于个人使用,这没问题。


3
该解决方案与版本控制系统完全不兼容。 - Dmitry Serov
这应该是接受的答案! 如果您在本地克隆存储库,则此解决方案将完美运行。 - zrfrank
你不能在“file://”URL中指定相对路径。我尝试了“./dir”和“$(PROJECT_DIR)/dir”,但没有成功。所以,你不能将其提交到存储库并期望它适用于工作目录不同的人。 - Reid Ellis

0
一种新的方式(2022.11): 只需将本地包仓库拖到主项目中 像这样 注意:如果您在另一个Xcode项目中打开了该包,则必须先关闭它。
通过这种方式,Xcode将忽略SPM中的远程包。 您可以直接编辑本地包仓库并在主项目中使用它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接