阅读 459

Swift命令程序发布入门指南.

最近在写基于Swift语言的终端命令行程序,研究了一些发布心得,写出来作为其他人作为参考的指南。

对于之前我通常写的脚本都是基于Shell语法的Bash脚本。这个语法真的是用的时候百度一下子,用完就忘的类型。语法苦涩难以记住,也算只是入门而已。

因为平时一直喜欢搞自动化的东西,有自动化就需要有执行自动化的脚本。有脚本就需要写Shell的脚本,但是写的有些难受。想着反正也是基于Mac或者在Liunx 上面执行的,干脆就用Swift写的顺手方便。

今天这篇文章的主题不在于讲述怎么用Swift写可交互的命令程序,主要核心在于发布程序。对于中间写的过程只备注一些用到的库和方法。

写法指南

简单版本

  • 打印到控制台

    print("Hello, world!")
    复制代码
  • 获取在控制台输入的值

    let value:String? = readLine()
    复制代码

复杂的版本

  • Swift Commander

    Swift Commander的库有很多,我今天推荐一个我经常用到的库。

    github.com/kylef/Comma…

  • Shell

    如果在程序里面一定需要用到对应的Shell命令的话,可以使用下面这个库

    github.com/kareman/Swi…

发布版本

我们就用一个简单的例子来发布吧。

  • 创建一个文件夹用来存在我们的程序

    mkdir HelloWord
    复制代码
  • 使用 Swift Package Manager创建我们的终端程序

    swift package init --name HelloWord --type executable
    复制代码

到这里我们的测试工程已经创建完毕,我们可以用 Xcode11打开 Package.swift会自动生成一个工程,之后运行在Mac上面就可以看到打印。

Hello, world!
复制代码

我们将我们刚才创建例子工程上传到Github上面。

github.com/JoseccExamp…

发布到HomeBrew

发布到HomeBrew虽然比较流行,但是需要自己维护一套发布的流程,很是麻烦。一旦发布新的版本就需要维护自己的发布文件。

创建自己的发布Ruby文件,这个有教程。我这边就直接贴代码了。

github.com/josercc/hom…

# 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

对于这个我保持意见,他是基于云服务编译之后下载安装,我昨天试了很久都失败了。

github.com/swiftbrew/S…

brew install swiftbrew/tap/swiftbrew
复制代码

安装我们刚才的程序

swift brew install JoseccExample/HelloWordCommanderExample@0.1.0
复制代码

我一直卡在远程编译那一块

==> Waiting for bottle to be available...
复制代码

这个看介绍替代HomeBrew,但是我一直不成功。

Mint

github.com/yonaskolb/M…

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这个进行安装,配置十分简单。

关注下面的标签,发现更多相似文章
评论