使用Cocoapods依赖项运行Swift脚本

使用Cocoapods依赖项运行Swift脚本,swift,cocoa,scripting,dependencies,cocoapods,Swift,Cocoa,Scripting,Dependencies,Cocoapods,我有一个使用Cocoapods的iOS项目。我使用的一个吊舱是。我写了一个小包装器来包装这个pod的功能——在我的例子中,它是在当前时间打印出密码。这一切都很好 我想用Swift编写一个脚本,基本上从命令行进行打印。我在这里遵循了教程,但当我尝试编译脚本时,编译器认为我的框架不可用 这是我的剧本: #!/usr/bin/swift // import OneTimePassword // This is the Pod I'm trying to use. I get the error: e

我有一个使用Cocoapods的iOS项目。我使用的一个吊舱是。我写了一个小包装器来包装这个pod的功能——在我的例子中,它是在当前时间打印出密码。这一切都很好

我想用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脚本cocoapods”的最佳结果,但它仍然没有得到回答,这让我觉得还没有太多人尝试使用swift编写脚本

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

遗憾的是,似乎没有什么东西能像perl的CPAN那样向系统中添加swift包,并允许在简单的可执行swift脚本中使用它。Swift包管理器和cocoapods-rome都假设您的脚本有一个项目源目录,有点假设您将构建它,然后安装二进制文件(尽管这似乎是您所期望的)编辑:我错了,下面一段提到的东西终究能做到这一点。

我发现“马拉松”非常接近,它使创建、运行、调试具有依赖关系的脚本变得非常容易,而无需公开其源代码目录。不幸的是,您失去了脚本作为标记为可执行文件并按名称运行的简单性,您的脚本文件隐藏在某个托管位置,并通过
marathon run blah
命令执行。然而,shell别名/函数可以为您隐藏这一混乱的业务,这就是我计划要做的

marathon的作者还收集了指向swift脚本编写工具和软件包的链接:

编辑:它看起来像是特殊的shebang行
#/usr/bin/env marathon run
毕竟可以让人在马拉松安装的pod/packages中使用裸脚本。如果要利用此功能,请执行以下操作:

  • 安装marathon(嗯,自制版本过时,请按照Swift软件包管理器的说明操作)
  • #更改脚本中的shebang行/usr/bin/swift
    至上述
  • 取消“导入”行的注释,并在其后面添加特殊的marathon注释,如下所示:
    import OneTimePassword//marathon:https://github.com/mattrubin/OneTimePassword.git
  • (或者使用
    marathonadd提前将其安装到marathon中https://github.com/mattrubin/OneTimePassword.git
    并且不要在“导入”行中添加有趣的注释)
  • 运行“/main.swift”