最近在写基于Swift语言的终端命令行程序,研究了一些发布心得,写出来作为其他人作为参考的指南。
对于之前我通常写的脚本都是基于Shell语法的Bash脚本。这个语法真的是用的时候百度一下子,用完就忘的类型。语法苦涩难以记住,也算只是入门而已。
因为平时一直喜欢搞自动化的东西,有自动化就需要有执行自动化的脚本。有脚本就需要写Shell的脚本,但是写的有些难受。想着反正也是基于Mac或者在Liunx 上面执行的,干脆就用Swift写的顺手方便。
今天这篇文章的主题不在于讲述怎么用Swift写可交互的命令程序,主要核心在于发布程序。对于中间写的过程只备注一些用到的库和方法。
写法指南
简单版本
-
打印到控制台
print("Hello, world!") -
获取在控制台输入的值
let value:String? = readLine()
复杂的版本
-
Swift Commander库Swift Commander的库有很多,我今天推荐一个我经常用到的库。 -
Shell库如果在程序里面一定需要用到对应的
Shell命令的话,可以使用下面这个库
发布版本
我们就用一个简单的例子来发布吧。
-
创建一个文件夹用来存在我们的程序
mkdir HelloWord -
使用
Swift Package Manager创建我们的终端程序swift package init --name HelloWord --type executable
到这里我们的测试工程已经创建完毕,我们可以用 Xcode11打开 Package.swift会自动生成一个工程,之后运行在Mac上面就可以看到打印。
Hello, world!
我们将我们刚才创建例子工程上传到Github上面。
发布到HomeBrew
发布到HomeBrew虽然比较流行,但是需要自己维护一套发布的流程,很是麻烦。一旦发布新的版本就需要维护自己的发布文件。
创建自己的发布Ruby文件,这个有教程。我这边就直接贴代码了。
# Documentation: https://docs.brew.sh/Formula-Cookbook
# https://rubydoc.brew.sh/Formula
# PLEASE REMOVE ALL GENERATED COMMENTS BEFORE SUBMITTING YOUR PULL REQUEST!
class Hellowordcommanderexample < Formula
desc "HelloWord演示程序"
homepage "https://github.com/JoseccExample/HelloWordCommanderExample"
head "https://github.com/JoseccExample/HelloWordCommanderExample.git"
# depends_on :xcode => "11"
stable do
version "0.1.0"
url "https://github.com/JoseccExample/HelloWordCommanderExample/archive/0.1.0.tar.gz"
sha256 "938193af4bd4dfc494541fc7194136be57d25a2fd1cc36becb0b6b71429b09e3"
end
def install
system "swift", "build", "--disable-sandbox"
system "mv", ".build/x86_64-apple-macosx/debug/HelloWord", "HelloWord"
bin.install "HelloWord"
end
end
我们为了发布,需要创建我们程序对应的Tag。
生成对应的Sha256值,我们可以将对应的下载.tar.gz下载到本地。
shasum -a 256 <Path>
使用HomeBrew安装我们的程序
brew install josercc/homebrew-Taps/Hellowordcommanderexample
到此我们发布到HomeBrew已经完成了,之后发布新版本就要维护Hellowordcommanderexample.rb这个文件,相对来说是比较麻烦。
发布到SwiftBrew
对于这个我保持意见,他是基于云服务编译之后下载安装,我昨天试了很久都失败了。
brew install swiftbrew/tap/swiftbrew
安装我们刚才的程序
swift brew install JoseccExample/HelloWordCommanderExample@0.1.0
我一直卡在远程编译那一块
==> Waiting for bottle to be available...
这个看介绍替代HomeBrew,但是我一直不成功。
Mint
brew install mint
这个是在SwiftBrew官方文件发现的,相对于来说比较简单,我们只需要在对应的Package.swift添加对应的产品。
// swift-tools-version:5.1
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "HelloWord",
// 添加下面9-10行
products: [
.executable(name: "HelloWord", targets: ["HelloWord"])
],
dependencies: [
// Dependencies declare other packages that this package depends on.
// .package(url: /* package url */, from: "1.0.0"),
],
targets: [
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
// Targets can depend on other targets in this package, and on products in packages which this package depends on.
.target(
name: "HelloWord",
dependencies: []),
.testTarget(
name: "HelloWordTests",
dependencies: ["HelloWord"]),
]
)
我们重新上传,打一个全新的Tag。
安装
mint install JoseccExample/HelloWordCommanderExample@0.1.1 HelloWord
到此发布一个基于Swift命令行程序已经写完了,对比这三种发布安装。我比较推荐使用Mint这个进行安装,配置十分简单。