使用 Cocoapods 依赖项运行 Swift 脚本



我有一个使用 Cocoapods 的 iOS 项目。我使用的豆荚之一是 https://github.com/mattrubin/OneTimePassword。我写了一个包装器来包装这个pod的功能 - 在我的例子中,它是在当前时间打印出密码。这一切都很好用。

我想用 Swift 编写一个脚本,基本上是从命令行进行打印。我 https://krakendev.io/blog/scripting-in-swift 按照这里的教程进行操作,但是当我尝试编译脚本时,编译器认为我的框架不可用。

这是我的脚本:

#!/usr/bin/swift
// import OneTimePassword // This is the Pod I'm trying to use. I get the error: error: no such module 'OneTimePassword'
print(MyWrapperClass.shared.printPwd()) // error: use of unresolved identifier 'MyWrapperClass'

我正在使用命令进行编译swiftc main.swift -o main

我正在尝试做同样的事情。此页面是搜索"swift scripting cocoapods"的最佳结果,但仍然没有答案,这让我认为还没有太多人尝试使用 swift 进行脚本编写。

首先,如果你正在编译你的代码,那么它就不是一个真正的脚本,只是一个小程序。脚本中"#!"行的要点是,您可以将其标记为可执行文件(是的,源文件,带有chmod a+x blah.swift(,将其放在可执行路径中,例如/usr/local/bin,在 shell 中键入blah.swift。swift 编译器知道构建然后为你运行它(是的,每次都重建它,因为 swift 不是解释器,但对于小代码这样做并非不合理(。如果您希望键入的命令只是"blah",则可以从 swift 文件中省略文件扩展名。

可悲的是,看起来没有什么比 perl 的 CPAN 更像可以向您的系统添加 swift 软件包并允许它在简单的可执行 swift 脚本中使用了。Swift Package Manager 和 cocoapods-rome 都假设你的脚本有一个项目源目录,有点假设一个人要构建它然后安装二进制文件(尽管这似乎是你无论如何都期望做的(。编辑:我错了,毕竟下一段中提到的事情会这样做。

我发现非常接近的是"马拉松"https://github.com/johnsundell/marathon,这使得创建,运行,调试具有依赖项的脚本变得容易,而无需公开其源代码目录和废话。不幸的是,您失去了脚本作为标记为可执行文件并按名称运行的文件的简单性,您的脚本文件隐藏在某个托管位置并通过marathon run blah命令执行。但是,shell 别名/函数可以为您隐藏混乱的业务,这就是我打算做的。

Marathon 的作者还收集了用于 swift 脚本的工具和包的链接: https://github.com/JohnSundell/SwiftScripting

编辑:看起来特殊的shebang线#!/usr/bin/env marathon run会让人使用带有马拉松安装的pod/软件包的裸脚本。如果你想利用这个,7ball,那么这样做:

  • 安装 Marathon(嗯,自制版本已经过时了,请按照 Swift 包管理器的说明进行操作(
  • 将脚本中的 shebang 行从#!/usr/bin/swift更改为上面
  • 取消注释您的"导入"行,并在其后添加特殊的马拉松评论,如下所示:import OneTimePassword // marathon:https://github.com/mattrubin/OneTimePassword.git
  • (或者使用marathon add https://github.com/mattrubin/OneTimePassword.git提前将其安装到马拉松中,不要将有趣的评论放在您的"导入"行上(
  • 使用"./main.swift"运行

最新更新