使用Cocoapods依赖运行Swift脚本

时间:2017-08-17 20:35:02

标签: swift cocoa scripting dependencies cocoapods

我有一个使用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

进行编译

1 个答案:

答案 0 :(得分:0)

我试图做同样的事情。这个页面是搜索" swift脚本cocoapods"的最佳结果,但它仍然没有答案让我觉得没有太多人试图使用swift进行脚本编写。

  

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

,可以从swift文件中省略文件扩展名。

可悲的是,看起来并不像perl的CPAN那样可以为你的系统添加一个swift包并允许它用在简单的可执行swift脚本中。 Swift包管理器和cocoapods-rome都假设你的脚本有一个项目源目录,假设一个人要构建它然后安装二进制文件(虽然这似乎是你期望做的事情)。 编辑:我错了,以下段落中提到的事情毕竟会这样做。

我发现的非常接近的是" marathon" https://github.com/johnsundell/marathon,这样可以轻松地创建,运行,调试具有依赖关系的脚本,而不会暴露其源代码的目录。废话。遗憾的是,您失去了脚本的简单性,即您标记为可执行文件并按名称运行的文件,您的脚本文件隐藏在某些托管位置中,并通过marathon run blah命令执行。但是,shell别名/函数可以为您隐藏那些混乱的业务,这就是我打算做的事情。

马拉松的作者还有一系列指向工具和工具的链接。用于swift脚本编写的包:https://github.com/JohnSundell/SwiftScripting

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

  • 安装marathon(嗯,自制软件版本陈旧,请改用Swift Package Manager说明)
  • 将脚本中的shebang行从#!/usr/bin/swift更改为上面的
  • 取消注释" import"并按照以下方式添加特殊的马拉松评论:import OneTimePassword // marathon:https://github.com/mattrubin/OneTimePassword.git
  • (或使用marathon add https://github.com/mattrubin/OneTimePassword.git提前将其安装到马拉松中,并且不要在您的"导入"线上添加有趣的评论
  • 使用" ./ main.swift"
  • 运行