我有一个使用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
答案 0 :(得分:0)
我试图做同样的事情。这个页面是搜索" swift脚本cocoapods"的最佳结果,但它仍然没有答案让我觉得没有太多人试图使用swift进行脚本编写。
首先,如果您正在编译代码,那么它不是真正的脚本,只是一个小程序。 "#!"脚本中的行是这样您可以将其标记为可执行文件(是源文件,使用
,可以从swift文件中省略文件扩展名。chmod a+x blah.swift
),将其放在/ usr / local / bin之类的可执行路径中,在shell中键入blah.swift
。 swift编译器知道构建然后为你运行它(是的,每次都重建它因为swift不是解释器,但对于微小的代码这样做是不合理的)。如果您希望键入的命令只是" blah"
可悲的是,看起来并不像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,那么这样做:
#!/usr/bin/swift
更改为上面的import OneTimePassword // marathon:https://github.com/mattrubin/OneTimePassword.git
marathon add https://github.com/mattrubin/OneTimePassword.git
提前将其安装到马拉松中,并且不要在您的"导入"线上添加有趣的评论