如何經過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

相關文章
相關標籤/搜索