如何经过Swift Package Manager 来构建一个简单的开发环境

精彩高清视频连接
泊学 是一个全栈工程师的自学网站 —— 泊学git

咱们看看如何经过Swift Package Manager(如下简称SPM)来构建一个简单的开发环境。github

建立一个Product

假设咱们要建立一个最基本的平衡二叉树,能够执行下面这些命令:swift

mkdir BST
cd BST
swift package init --type=library

这样,SPM就会为咱们建立下面的目录结构:
SPM demoapp

在这个目录结构里,咱们能够了解如下内容:测试

  • Swift经过Modules来管理代码,默认状况下,全部在Sources目录下的文件都在同一个module中(稍后咱们也会看到多个module的状况);网站

  • 全部Sources目录中的代码和根目录的Package.swift文件造成了一个Packageui

  • 在一个Package里,咱们能够定义一个或多个Targetspa

  • Target能够是咱们在一开始定义的library,它能够被其余的Swift module使用;也能够是一个executable,稍后,咱们会看到它的用法;debug

建立第一个module

Sources根目录中,全部源代码默认都是在同一个module中的。咱们先在BST.swift
中编写一些示例代码:code

open class BST { 
    public init() { 
        print("New BST initialized.") 
    }
}
extension BST: CustomStringConvertible { 
    public var description: String { 
        return "BST" 
    }
}

它们固然还不是BST的正式实现,咱们在这里只是为了演示module的用法。而后,咱们在Tests/BSTTests/BSTTests.swift里,添加一个演示用的测试用例:

class BSTTests: XCTestCase { 
    func testExample() { 
        XCTAssertEqual(BST().description, "BST") 
    }
}

由于咱们实现的CustomStringConvertible只是简单返回了字符串"BST",所以上面的比较应该是相等的。
完成以后,在项目根目录执行:swift build,咱们就生成了一个Swift module:
SPM demo

执行swift test,SPM就会帮咱们完成以前定义的测试用例:
SPM demo

从上面的结果能够看到,全部测试都经过了。不过,咱们建立library,最终仍是为了提供给应用程序使用的。所以,接下来,咱们就来了解如何给package添加一个可执行程序,咱们把它定义在一个新的module中。

建立多个module

默认状况下,Sources目录中全部代码都是在同一个module中的。所以,要建立多个module,咱们要在Sources目录中建立多个子目录,像这样:

  • BST:表示BST module,而且把以前建立的BST.swift移动到这里;

  • Application:表示咱们要新添加的应用程序;在其中,添加一个main.swift;这是每个应用程序都必须定义的文件;

最终,咱们的目录看起来是这样的:
SPM demo

而后,在main.swift中,添加下面的代码:

import BST
let bst = BST()
print(bst)

从新执行swift build,咱们会获得下面的错误:
SPM demo

显然,尽管咱们使用了import BST,SPM在生成Application module的时候,并不知道它和BST之间存在依赖关系。为了解决这个问题,咱们须要在Package.swift中,添加必要的依赖关系:

let package = Package( 
    name: "BST", 
    targets: [ 
        Target(name: "Application", dependencies: ["BST"]) 
    ]
)

这样,咱们就建立了一个叫作Application的target,它依赖咱们以前建立的BST module。完成后,从新执行swift build,就能够看到成功了:
SPM demo

编译好的两个swift module在./build/debug目录中,咱们直接执行Application
就能够看到结果了:
SPM demo

相关文章
相关标签/搜索