美文网首页
iOS命令行工具开发

iOS命令行工具开发

作者: 我阿郑 | 来源:发表于2022-01-14 13:38 被阅读0次

命令行工具的本质: 命令行工具本质也是一个可执行文件,跟App差不多,只不过App是由:可执行文件 + 资源构成的

  • 一般是发布给别人用,所以scheme选择release版本

一、仿照喵神的FengNiao实现命令行工具

FengNiao 是喵大创建并开源的一款 Mac 命令行工具, 在 GitHub 创建项目命名为 FengNiaoCopy ,接着最重要的是添加 .gitignore 文件

1-Swift Package Manager

Swift Package Manager 是 Swift 使用的一个包管理器,和 CocoaPods、Carthage 类似,都是可以用来做依赖管理的。

# 查看本地上的 Swift Package Manager 版本号
swift package --version 

cd FengNiaoCopy
# 创建命令行项目
swift package init --type executable

# 生成 `xcodeproj` 文件,不然 Xcode 无法打开该项目
 swift package generate-xcodeproj 

通过Xcode打开 FengNiaoCopy.xcodeproj

image.png
  • Sources 文件夹主要是用来放置项目代码
  • Tests 文件夹主要是用来放置测试代码
  • Package.swift 文件是用来做项目依赖管理的

接着需要修改 Package.swift 文件,添加依赖

let package = Package(
    name: "FengNiaoCopy",
    platforms: [
        .macOS(.v10_12)
      ],
    dependencies: [
        // Dependencies declare other packages that this package depends on.
        .package(url: "https://github.com/onevcat/Rainbow.git", from: "4.0.1"),
        .package(name: "CommandLineKit", url: "https://github.com/objecthub/swift-commandlinekit.git", from: "0.3.4"),
        .package(url: "https://github.com/kylef/PathKit.git", from:"1.0.1"),
    ],
    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 this package depends on.
        .target(
            name: "FengNiaoKitCopy",
            dependencies: []),
        .target(
            name: "FengNiaoCopy",
            dependencies: ["FengNiaoKitCopy","Rainbow","PathKit", "CommandLineKit"]),
        .testTarget(
            name: "FengNiaoCopyTests",
            dependencies: ["FengNiaoCopy"]),
    ]
)

Package.swift文件这个文件是用来让 package manager 知道你的package是什么, 安装或寻找其他的package的时候, package manager会在项目的仓库里寻找Package.swift 文件, 并且执行这个文件, 提取出以package为名字的变量,然后进行安装

更新完 Package.swift文件后 需要在终端执行以下命令:

# 编译
swift build
# 需要重新生成 `xcodeproj` 文件
swift package generate-xcodeproj

编译以后的文件在当前文件夹下 .build/debug/FengNiaoCopy

2- CommandLineKit 使用

import Foundation
import CommandLineKit


// Create a new flags object for the system-provided command-line arguments
var flags = Flags()

// Define the various flags

/// shortFlag: "f":  表示 -f     longFlag: "filepath":  表示 --filepath
let filePaths  = flags.strings("f", "filepath",
                               description: "Adds file path in which programs are searched for.")
let quiet      = flags.option("q", "quiet",
                              description: "In quiet mode, optional messages are not printed.")
let help       = flags.option("h", "help",
                              description: "Show description of usage and options of this tools.")


// Parse the command-line arguments and return error message if parsing fails
if let failure = flags.parsingFailure() {
  print(failure)
  exit(1)
}
print("Hello, world!")

然后在终端执行如下命令:

# 编译
swift build
# 需要重新生成 `xcodeproj` 文件
swift package generate-xcodeproj

# 测试一下命令行 
.build/debug/FengNiaoCopy  -f
.build/debug/FengNiaoCopy  --filepath
image.png

相关文章

  • 使用 Swift Package Manager 建立 Comm

    作为iOS开发,我们的 CI 经常使用 Ruby 的命令行工具,像 fastlane, CocoaPods, Xc...

  • Node.js入门(附加篇) : Nodejs制作命令行工具

    基于nodejs开发的命令行工具(nodejs提供了开发命令行工具的API): bower , gulp,grun...

  • ios命令行工具开发

    简单说明: 命令行工具的开发对于我们ios开发者来说可能不常使用,但是作为一个程序员我个人认为首先要确保自己的专业...

  • iOS 命令行工具开发

    命令行工具本质 可执行文件 mach-o 跟APP内部的可执行文件差不多 权限问题 Mach-0 识别 1.创建一...

  • iOS命令行工具开发

    命令行工具的本质: 命令行工具本质也是一个可执行文件,跟App差不多,只不过App是由:可执行文件 + 资源构成的...

  • iOS命令行工具开发

    一、命令行工具的本质 可执行文件 跟APP内部的可执行文件差不多 二、权限问题 赋值权限 三、MachO识别 3....

  • iOS开发之命令行的魅力

    iOS开发之命令行的魅力 命令行使用及安装 作为一个iOS开发者,命令行是我们必须使用的,下面我就简单介绍下命令行...

  • 【iOS开发】iOS10 Log调试小工具

    【iOS开发】iOS10 Log调试小工具 【iOS开发】iOS10 Log调试小工具

  • iOS 开发工具

    一、iOS常用的工具 命令行工具:cocoapod 图形工具:Charles和Reveal 插件工具:Alcatr...

  • iOS开发优秀博客和软件推荐

    iOSBlogAndTools iOS开发优秀博客和软件推荐 iOS开发中文博客 iOS开发工具 iOS开发网站 ...

网友评论

      本文标题:iOS命令行工具开发

      本文链接:https://www.haomeiwen.com/subject/nomjcrtx.html