在 Swift 4 Playground 中使用外部库

Posted

技术标签:

【中文标题】在 Swift 4 Playground 中使用外部库【英文标题】:Using external libraries in Swift 4 playground 【发布时间】:2017-08-30 15:11:07 【问题描述】:

我一直在尝试学习 Swift 4,因此需要使用 Xcode9 Beta 作为 IDE。我想加载一个大型 CSV 数据文件来使用游乐场进行一些数据分析。我尝试使用的库是 CSVImporter,按照开发人员的建议使用 Carthage 安装。

我在这个问题上花了一个星期的时间,试图按照我在网上找到的指南进行操作,例如 here - ***、here - Medium,但它们都引用了以前版本的 Swift 和 Xcode,似乎都没有工作.

一般来说,他们的方法似乎是将游乐场合并到工作区中,并带有使用导入资源的项目。我通常会得到“没有这样的模块'CSVImporter'”。

我的具体问题是:如何设置 Swift 4 Playground 以便可以使用 Xcode 9 Beta 导入 CSVImporter?

虽然我有这个特定的任务,但我认为这会引起社区的普遍兴趣。我怀疑有人比我对 Xcode 如何执行构建和解决构建依赖关系有更清晰的想法,将能够相当容易地解决这个问题!非常感谢。

【问题讨论】:

我想没有人愿意回应,所以我完全被卡住了!如果有更好的地方可以回答这个问题,也许让我知道? 【参考方案1】:

基本上,你是对的。方法是:

    在 MacOS 下为 Cocoa Framework 创建新的 XCode 项目 使用您的依赖项创建 Cartfile 构建依赖项(例如carthage update --platform macOS) 导入已构建的.framework 文件(来自Carthage/Build/Mac) 创建额外的构建阶段步骤,将运行脚本 /usr/local/bin/carthage copy-frameworks 并复制导入的框架(只需遵循 Carthage 的指南,到目前为止都是一样的) 创建一些 .swift 文件(例如 main.swift),它只会导入您通过 Carthage 导入的框架 将 XCode 项目保存为工作区文件 创建新的 Playground(也包括 MacOS)并将其保存在“假”框架的项目根文件夹下 将 Playground 添​​加到工作区(从 XCode 9 开始,无法直接在项目/工作区中创建 Playground,因此您需要通过将现有文件添加到工作区来完成此技巧) 构建您的项目 在 Playground 文件中,导入您的“假”框架(参见第 1 步),仅在导入您的 carthage 依赖框架之后。 利润

【讨论】:

首先,谢谢!我已经能够将其跟踪到第 7 项 - 到目前为止一切顺利。我现在收到错误消息“无法在 Swift 4.0 中导入符合 Swift 3.1 的模块”。我意识到我正在尝试在我的 Swift 4 项目中使用为 Swift 3.1 编译的库(这与这个问题无关),所以我必须先解决这个问题。但是一个快速的问题:我认为您所说的“假框架”是第 1-7 步中产生的所有东西? 该错误消息是由于您的依赖项的构建设置造成的。它们被配置 (.xcodeproj) 以在您的项目为 4.0 时使用 Swift 3.1,这意味着不兼容(直到实现 ABI 稳定性,但最早是 Swift 5)。 “假框架”是您在第 1 步中创建的框架。 非常感谢,这确实有效,即使对于 ios 游乐场也是如此。现在有没有办法把它变成 iPad 上 Swift Playgrounds 的游乐场书?【参考方案2】:

如果您的外部库是 SPM 包,您可以使用 Arena 创建一个 Playground:

arena https://github.com/finestructure/Gala
?  resolving package dependencies
?  libraries found: Gala
✅  created project in folder 'SPM-Playground'

【讨论】:

以上是关于在 Swift 4 Playground 中使用外部库的主要内容,如果未能解决你的问题,请参考以下文章

Swift 4 Playground - 从 JSON 获取对象/结果

解析 JSON 数据时出错(Swift 4 Playground)

如何在 Playground 中使用 Swift 包管理器

如何使用 Swift 在 Playground 中获取用户交互事件

在 Swift/Playground 中使用 .append 选项到数组结束时出现错误

如何在 Playground 中导入 Swift 包?