Swift Package Manager 结合 Xcode 实践初探

前言

Swift Package Manager 是苹果推出的用于管理分发 swift 代码的工具。类似于 CocoPod。它使用 swift 编译系统 自动的下载源码、编译、链接程序,可以创建使用swift的库和可执行程序等。
以前,看过官网,但再次回头看,还是没印象,这次就一步一步的实际操作一下。

创建一个新的目录

$ mkdir Hello
$ cd Hello
类似pod 都有一个Podfile。SPM 都有一个 Package.swift 文件。同样 SPM 也提供了命令行帮我们做了这工作。
swift package init -h
OVERVIEW: Initialize a new package
OPTIONS:
  --type   empty|library|executable|system-module

看帮助文档可以知道package有多种类型,这里,我想做一个命令行工具。所有选择 executable

swift package init executable

至此一个最简单的可以 命令行 工具就做好了

编译就可以产生可执行文件了。 到文件目录中看一看一切都很清楚明了

//编译命令:
swift build
//运行命令:
swift run 

注意都是在当前Hello目录下

结合 Xcode 写代码

code 还是要在 Xcode 中执行,可是浏览目录发现没有 xcode 工程文件。很简单运行下面命令即可。

swift package generate-xcodeproj
//查看更多命令
// swift package -h

至此就可以在 xcode 中愉快地写代码了

添加依赖

开发 ios 的都知道,引入第三方库都需要配置 xcode。 SPM 帮助我们完成了这些工作。比如:这里,我想让自己的控制台日志成为彩色的。引入 第三方库 Rainbow (链接里有详细的使用方法),修改后的 Package.swift 文件夹如下:

// swift-tools-version:4.2
// The swift-tools-version declares the minimum version of Swift required to build this package.

import PackageDescription

let package = Package(
    name: "Hello",
    dependencies: [
        // Dependencies declare other packages that this package depends on.
        // .package(url: /* package url */, from: "1.0.0"),
        .package(url: "https://github.com/onevcat/Rainbow.git", from: "3.1.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 which this package depends on.
        .target(
            name: "Hello",
            dependencies: ["Rainbow"]),
        .testTarget(
            name: "HelloTests",
            dependencies: ["Hello"]),
    ]
)

使用第三方库

在 main.swift 中

import Rainbow
print("Red text".red) 

至此,可以用命令行run 或者用 xcode 运行。
你会发现编译失败!!!

犹如CocoPod,编写完配置文件,需要执行配置文件,在控制台执行

swift package generate-xcodeproj

OK!!!

获取命令行参数 CommandLine.arguments

补充

一开始总是不知道怎么写 Package 文件,后来发现,这个 Package 就是一个 swift 类 和 普通的 UIView 类似。这个文件大部分类容就是调用 init 方法。知道这个一切都清楚了。当然这个文件的写法也有一些规则,看这里官方blog:Swift Package Manager Manifest API Redesign

总结

一次简单实践完成,但还有不少细节和帮助文档可以细细挖掘。目前,SPM 还不支持 ios 。

你可能感兴趣的:(Swift Package Manager 结合 Xcode 实践初探)