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

Posted

技术标签:

【中文标题】使用 SPM 在 XCode11 中添加本地依赖项【英文标题】:Adding Local dependencies in XCode11 using SPM 【发布时间】:2019-08-09 22:17:06 【问题描述】:

是否可以在 xcode 11 中将本地依赖项与 SPM 集成, 文件 > Swift 包 > 添加包依赖项... 它似乎只是填充并让我选择托管在 bitbucket 上的 git repos

我只是不确定我是否以正确的方式解决问题,也许我应该改用 Package.swift 文件?我在 Cocoapods 方面有很多经验,但我想扩展并尝试其他工具,特别是如果它们将在 xcode 中得到支持,因为它会接缝 SPM(我使用 xcode11 beta 5)

【问题讨论】:

也许这个 WWDC 2019 视频会有所帮助:developer.apple.com/videos/play/wwdc2019/410 【参考方案1】:

我就是这样做的:

将您的包文件夹(在我的示例中为“DataStructures”)从 finder 直接拖放到目标的 Frameworks 组中。您会看到拖放的项目采用棕色文件夹颜色(您可以使用箭头“进入”)。 转到您的项目目标页面,在“框架和库”中单击“+”按钮。您的包应作为库显示在“工作区”区域中。

【讨论】:

想添加一个注释,添加的包没有箭头来扩展其内容,以防它在Xcode的另一个窗口中打开,就像它与子项目一样.这让我第一次感到困惑。 不仅如此,如果您的包的项目是打开的,您将不会在“框架、库和嵌入式内容”的“工作区”下看到您的包。 @AirXygène 我这样做了,对我来说效果很好。当我将包拖到我的项目中时。但我必须再走一步。我想将我的一个包裹放入另一个包裹中。两者都在本地路径。知道如何做到这一点,因为将一个包拖放到另一个包对我不起作用,而且我还尝试在依赖项处设置本地路径,它会删除我的目标和所有内容。任何帮助将不胜感激。 @Sagar 你不能有嵌套包。但是您可以拥有依赖于其他包的包,因此您可以将所有包添加到同一级别。您在客户端包清单文件中声明依赖项。【参考方案2】:

Xcode 12

如果您的项目中已经有您的软件包的远程版本并且想要在本地工作。还有一些额外的步骤...

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

如果你不这样做,它会继续获取远程包

    在 Project Navigator 中选择您的项目 在主窗口中选择 Swift Packages 选择要替换为本地的包并将其删除 转到文件 > Swift 包 > 添加包依赖项... 将本地包文件夹拖到包搜索栏,添加前缀file:// 点击下一步

确认最低版本高于远程版本。

【讨论】:

我需要使用本地 Package.swift 并且本指南中“通过拖放导入依赖项”的建议对我有用medium.com/@bartekzabicki/… 请注意,从技术上讲,您需要在 URL 中使用三个斜杠:file:///Users/name/...【参考方案3】:

是的,Xcode 使这项基本任务变得不必要的困难。

不过,诀窍很简单:在您选择“添加包依赖项...”时弹出的工作表中,您可以在 URL 字段中输入 file:// URL。例如将包的文件夹拖到该字段中,这将在其中放置路径 - 例如'/Users/me/Documents/myShinyPackage/',然后在前面加上'file://',就可以继续了。

附录:正如一些人在下面的 cmets 中指出的那样,如果您与他人共享项目,这会出现问题,除非您对路径进行标准化。不过,个人使用也没问题。

【讨论】:

此方案与版本控制系统完全不兼容。 这应该是接受的答案!如果你在本地 git clone 仓库,这个解决方案可以完美运行。 您不能在“file://”URL 中指定相对路径。我尝试了“./dir”和“$(PROJECT_DIR)/dir”,但没有运气。所以,你不能把它提交到一个 repo 并期望它适用于他们的工作目录路径不同的人。【参考方案4】:

本地 Swift 包管理器 (SPM)

[Dependency manager]

重点是:file:// + git 可以在URL 字段中使用

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

注意事项:

它适用于 git 存储库,因此请确保您事先提交了更改 当你添加一个 SPM 依赖 File -&gt; Swift Packages -&gt; Add Package Dependency 它被添加到 project -&gt; Swift Packagesimplicit dependency[About] 被添加到 Frameworks, Libraries, and Embedded Content 当您向框架提交新的更改时,不要忘记File -&gt; Swift Packages -&gt; Update to Latest Package Versions

产品文件夹

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

[Local CocoaPods][Local Carthage]

【讨论】:

尝试从本地存储库(裸 git)获取,它一直抱怨它无法解决......不确定它是否可能。为什么遥控器必须在线?

以上是关于使用 SPM 在 XCode11 中添加本地依赖项的主要内容,如果未能解决你的问题,请参考以下文章

使用 Swift 5.1 将另一个包作为 SPM 中的依赖项导入另一个包

在 Xcode 11 中通过 Fastlane 构建 SPM 包不起作用

在 Xcode7 beta 中集成解析

手动将 Snapkit 添加到 xcode

带有不安全构建标志的 Swift 包依赖项:目标完整性错误

斯威夫特 Xcode 11.4。将返回按钮添加到 TableView 导航项