@_sa_s

🏟 Arena

Arena 是一个 macOS 命令行工具,用于创建一个 Xcode 项目,其中包含一个 Swift Playground,该 Playground 已经设置好可以使用 Swift Package Manager 库。你可以引用 Github 和本地仓库。后者在开发库时启动 Playground 尤其有用。

Arena demo

Arena 还可以创建 “Playground Book” 格式的 Playground,这种格式是被 "Swift Playgrounds" 所支持的文件格式。 这些 Playground 可以被同步并在 iOS 版本的 "Swift Playgrounds" 中打开。

以下是 arena 命令行界面的概览

arena --help
OVERVIEW: Creates an Xcode project with a Playground and one or more SPM libraries imported and
ready for use.

USAGE: arena [--book] [--force] [--libs <libs> ...] [--outputdir <outputdir>] [--platform <platform>] [--version] [--skip-open] [<dependencies> ...]

ARGUMENTS:
  <dependencies>          Dependency url(s) and (optionally) version specification

OPTIONS:
  --book                  Create a Swift Playgrounds compatible Playground Book bundle
                          (experimental).
  -f, --force             Overwrite existing file/directory
  -l, --libs <libs>       Names of libraries to import (inferred if not provided)
  -o, --outputdir <outputdir>
                          Directory where project folder should be saved (default:
                          /Users/sas/Projects/Arena/Arena-Playground)
  -p, --platform <platform>
                          Platform for Playground (one of 'macos', 'ios', 'tvos') (default:
                          macos)
  -v, --version           Show version
  --skip-open             Do not open project in Xcode on completion
  -h, --help              Show help information.

示例

导入 Github 仓库

arena https://github.com/finestructure/Gala
➡️ Package: https://github.com/finestructure/Gala @ from(0.2.1)
🔧 Resolving package dependencies… 
📔 Libraries found: Gala
✅ Created project in folder 'Arena-Playground'

使用 Github 简写语法

当引用 Github 项目时,你可以跳过协议和域名

arena finestructure/Gala
➡️ Package: https://github.com/finestructure/Gala @ from(0.2.1)
🔧 Resolving package dependencies…
📔 Libraries found: Gala
✅ Created project in folder 'Arena-Playground'

导入本地仓库

arena ~/Projects/Parser
➡️ Package: file:///Users/sas/Projects/Parser @ path
🔧 Resolving package dependencies…
📔 Libraries found: Parser
✅ Created project in folder 'Arena-Playground'

同时导入两者

arena ~/Projects/Parser finestructure/Gala
➡️ Package: file:///Users/sas/Projects/Parser @ path
➡️ Package: https://github.com/finestructure/Gala @ from(0.2.1)
🔧 Resolving package dependencies…
📔 Libraries found: Parser, Gala
✅ Created project in folder 'Arena-Playground'

指定版本

如果您想获取特定的修订版本、修订版本范围或分支,您可以使用类似于 Package.swift 文件中使用的语法。以下是支持的内容以及它将在生成的项目中创建的相应包依赖项

如果您使用 ..< 范围运算符,请务必正确引用 URL。 否则,您的 shell 会将 < 字符解释为输入重定向。

添加另一个依赖

Arena 目前不支持向现有 Playground 添加更多依赖项。但是,由于它的依赖项是通过 PlaygroundDependencies 包管理的,您可以简单地向其 Package.swift 文件添加更多条目 - 就像扩展任何其他包清单一样。

这是它的样子

Adding a dependency

如何安装 Arena

Homebrew

你可以使用 Homebrew 安装 Arena

brew install finestructure/tap/arena

Mint

你可以使用 Mint 安装 Arena

mint install finestructure/arena

Make

最后,你可以通过运行包含的 Makefile 构建和安装 arena

make install

这会将二进制文件 arena 复制到 /usr/local/bin

覆盖默认 Playground 代码

默认情况下,Arena 会为它在包中找到的库目标添加 import 语句。

作为包作者,您可以通过在存储库的顶层添加文件 .arena-sample.swift 来覆盖此行为。 此文件的内容将用作 Playground 源代码。

Parser 是一个 Swift 包,带有一个 .arena-sample.swift 文件

为什么选择 Arena?

Arena – 西班牙语中意为 "沙子" – 在 Playground 中很丰富。而且,有时候你必须把你的源代码带到竞技场进行战斗 😅

兼容性

从 1.0 版本开始,arena 需要 Xcode 12。Xcode 12 带来了一些改进,使 Playground 比以前版本的 Xcode 更好地工作。此外,arena 现在创建一个更简单的项目结构,可以手动编辑以添加更多依赖项。

如果您想将 arena 与 Xcode 11 一起使用,请使用最新的 0.x 版本。

arena 创建的 Playground books 应该可以在 macOS 和 iOS 上运行。请记住,在创建 Playground books 时导入的 Swift 包需要与 iOS 兼容。

请注意,虽然创建 Playground 需要 macOS 10.15+ 和 Swift 5.3,但生成的 Playground 应该在更广泛的操作系统和编译器版本上受支持。 这将主要取决于您导入的包。