2021-05-12 14:32:11
執行在 Linux 平台的開源 Swift
Swift 開源了,喜大普奔之後,我們發現它現在變成跨平台的了,開源後的 Swift 不止能執行在 MAC 和 iOS 平台,現在也可以執行在 Linux 平台了。我們現在就來看看 Linux 上的 Swift。
安裝 Linux 環境
swift.org 網站上面提供了在 Linux 上面安裝 Swift 環境的完整指引。當前 Swift 支援 Ubuntu 15.10 和 Ubuntu 14.04 兩個版本。
如果你已經安裝好 Ubuntu 環境了,就可以跳過這一節,繼續後面內容。
如果要執行 Linux 版本的 Swift,首先你需要一個 Linux 環境,如果你自己有 Linux 伺服器,它可以作為執行環境,或者你有一台裝有 Linux 系統的電腦,也可以將它作為執行環境。
- VirtualBox
當然,更加普遍的情況應該是通過虛擬機器來執行 Linux,我們可以使用 VirtualBox 作為虛擬機器環境。
我們可以在 VirtualBox 的下載頁面進行下載: https://www.virtualbox.org/wiki/Downloads
開啟頁面後,根據自己電腦的平台,下載相應的版本。
下載完成後,按照安裝指引將 VirtualBox 安裝好。
現在,虛擬機器環境安裝好了,我們還要給這個虛擬機器安裝一個作業系統,也就是我們需要的 Ubuntu。
- Vagrant
之前用過虛擬機器的同學可能想到,先去 Ubuntu 網站下載一個映象,然後掛載到虛擬機器中,這是一個比較通用的做法。
當然我們還可以用一個更加簡便的方法,那就是 Vagrant 。
Vagrant是 VirtualBox 的一個命令列工具,可以幫助我們快速設定和部署 VirtualBox 主機。 我們可以在這裡下載 Vagrant 的安裝程式: https://www.vagrantup.com/downloads.html
Vagrant通過一個名為 Vagrantfile 的檔案來進行虛擬機器的部署操作,這個檔案存儲存的是一段指令碼,用來宣告我們的部署任務。
接下來,建立一個資料夾作為我們的虛擬機器目錄,然後在這個資料夾中建立一個 Vagrantfile 檔案:
Vagrant.configure(2) do |config|
config.vm.box = "https://cloud-images.ubuntu.com/vagrant/trusty/20151201/trusty-server-cloudimg-amd64-vagrant-disk1.box"
config.vm.provision "shell", inline: <<-SHELL
sudo apt-get --assume-yes install clang
curl -O https://swift.org/builds/ubuntu1404/swift-2.2-SNAPSHOT-2015-12-01-b/swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04.tar.gz
tar zxf swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04.tar.gz
echo "export PATH=/home/vagrant/swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04/usr/bin:"${PATH}"" >> .profile
SHELL
end
建立好之後,我們可以在這個目錄下,執行命令進行安裝了:
vagrant up
接下來, vagrant 就會幫我們進行虛擬機器環境的安裝部署了,安裝過程需要一些時間,取決於你的網速。這段時間我們正好來分析一下 Vagrantfile 指令碼的內容。
- 這個指令碼第一步會幫助我們下載 Ubuntu 的安裝包,通過這行設定資訊:
config.vm.box = "https://cloud-images.ubuntu.com/vagrant/trusty/20151201/trusty-server-cloudimg-amd64-vagrant-disk1.box"
我們通過 config.vm.box
設定了 Ubuntu 安裝包所在的位置,我們這裡的 URL 指向的是 Ubuntu LTS 14.04 的映象檔案。當然,你還可以切換成其他的映象源,存取 https://cloud-images.ubuntu.com/vagrant 可以檢視現有的 vagrant 安裝映象的列表,可以進行自由選擇(注意:Swift 目前支援 Ubuntu 14.04 和 Ubuntu 15.10 兩個版本)。
- 映象安裝完成後,我們接下來指定了系統啟動後執行的設定指令碼:
config.vm.provision "shell", inline: <<-SHELL ## shells SHELL
在一對 <<-SHELL
和 SHELL
中,就是我們要執行的設定指令碼了,首先我們執行:
sudo apt-get --assume-yes install clang
這個命令,來安裝 clang
編譯器,這個是蘋果公司提供的 C 編譯器,是 Swift 必需的一個元件。
接下來通過 curl
命令來下載 Swift 包:
curl -O https://swift.org/builds/ubuntu1404/swift-2.2-SNAPSHOT-2015-12-01-b/swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04.tar.gz
我們指令碼中得 Swift 包下載地址來自 https://swift.org/download 這個頁面,也可以根據你自己的需求設定需要下載的包。
接下來的 tar
命令,用於將下載完成的 Swift 包解壓出來:
tar zxf swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04.tar.gz
最後,將 Swift 的 bin 目錄寫入環境變數,這樣系統就可以找到我們要執行的命令了:
echo "export PATH=/home/vagrant/swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04/usr/bin:"${PATH}"" >> .profile
安裝設定完成後,我們輸入如下命令進入 Ubuntu 的命令列:
vagrant ssh
進入命令列後,可以輸入 swift --version
命令驗證 Swift 是否安裝成功。
如果安裝成功,我們就可以收到類似這樣的輸出:
Swift version 2.2-dev (LLVM 46be9ff861, Clang 4deb154edc, Swift 778f82939c)
開始使用 Linux 平台上的 Swift
好了, Swift 安裝成功了,我們可以開始建立我們的第一個程式了,按照慣例,自然是 Hello World 程式。
使用 vim helloworld.swift
命令建立一個原始檔。
然後在 Vim 中輸入 i 進入插入模式,在原始檔中輸入:
print("Hello, world")
程式碼寫完啦,我們按下 Esc 進入操作模式,然後輸入 :wq 儲存退出。
原始檔建立好之後,我們可以使用 swiftc
命令編譯我們的程式碼。
swiftc helloworld.swift
編譯好之後,我們使用 ls
命令檢視一下當前目錄的內容,除了 helloworld.swift
檔案,編譯器為我們生成了一個 helloworld
可執行檔案。我們可以執行這個檔案:
./helloworld Hello, world
執行成功了, 一個完整的程式,從程式碼到編譯成功如此的簡單,有沒有很爽的感覺~,Swift 程式不需要匯入很多基礎的庫,也不需要寫任何的 main 函數,預設會將外層語句作為程式的入口,這些都融入了現代化的開發思維。
當然,Swift 能做的事情遠遠不止 Hello World 這麼簡單,Swift 開源的意義不只是能讓我們在 Linux 開發和編譯 Swift 程式,也不是能讓我們看到 Swift 的原始碼。開源的意義更多在於它提供的社群化功能,能讓我們充分共用每個人的開發成果。就像是 NodeJS 社群一樣,相信使用過 NodeJS 的開發者都會有這樣???感覺 - 比如你的專案需要一個圖片處理功能,去 NodeJS 的包管理社群 npmjs.com 上面找一下,馬上就能找到相應的第三方庫解決這個問題。而且這些第三方庫幾乎是和你的專案無縫整合的,這才是開源社群給予我們最大的力量。
使用 Swift 包管理
同樣,開源的 Swift 也提供了包管理平台,相信今後無論你使用 Swift 開發一款 iOS APP, 甚至是一個 Linux 伺服器端程式,你都能夠很快的在包管理平台上找到快速解決問題的第三方庫。
下面我們就來看看如何使用 Swift 的包管理系統。Swift 開源社群在 Github 上提供了一個例子說明了這個問題,首先我們在 Ubuntu 上面安裝 git 命令工具:
sudo apt-get --assume-yes install git
安裝成功後,將 Swift 包管理的範例從 Github 上面複製出來:
git clone https://github.com/apple/example-package-dealer.git
複製成功後,我們用 ls
命令看到這個包裡面有 4 個檔案:
CONTRIBUTING.md Package.swift README.md main.swift
其中 main.swift 是程式的程式碼檔案,而 Package.swift 就是包管理檔案,我們來看一下 Package.swift 的內容:
import PackageDescription let package = Package( name: "Dealer", dependencies: [ .Package(url: "https://github.com/apple/example-package-deckofplayingcards.git", majorVersion: 1), ] )
這裡面定義了我們這個包的名稱: name: "Dealer"
, 然後還定義了它的依賴關係, 它依賴於另外一個程式碼庫:
https://github.com/apple/example-package-deckofplayingcards.git
通過 Package.swift 的定義, swift build
命令就可以根據相應的依賴關係,自動為我們的專案抓取那些需要的第三方庫。
我們現在可以執行 build 命令:
swift build
可以看到, swift build
正在替我們把各種專案的依賴關係處理了一遍:
Cloning Packages/example-package-deckofplayingcards Cloning Packages/example-package-fisheryates Cloning Packages/example-package-playingcard Compiling Swift Module 'FisherYates' (1 sources) Linking Library: .build/debug/FisherYates.a Compiling Swift Module 'PlayingCard' (3 sources) Linking Library: .build/debug/PlayingCard.a Compiling Swift Module 'DeckOfPlayingCards' (1 sources) Linking Library: .build/debug/DeckOfPlayingCards.a Compiling Swift Module 'Dealer' (1 sources) Linking Executable: .build/debug/Dealer
從輸出可以看到,我們複製出來的這個專案的依賴專案,又依賴了其他的專案,形成了一個依賴鏈條。
當 swift build
命令執行完成自後,我們會發現專案的根目錄中多了一個 Packages
目錄,這個目錄裡面存放了我們抓取下來的依賴專案:
+ Packages | example-package-deckofplayingcards-1.0.2 | example-package-fisheryates-1.0.2 | example-package-playingcard-1.0.1
這個就是 Swift 包管理系統的基本概念了。
結語
相信關於包管理,我們應該並不陌生,Swift 包管理和 CocoaPods
, Carthage
這些我們常用的包管理工具很類似,隨讓Swift 包管理工具不是第一個,但這確是蘋果公司的第一次,相信開源後的 Swift 會更加壯大。
Ubuntu 15.10安裝部署Swift開發環境 http://www.linuxidc.com/Linux/2016-01/126995.htm
Swift 的變化:從 2.2 到 3.0 會帶來什麼 http://www.linuxidc.com/Linux/2015-12/126440.htm
Swift 正式開源,同時開源 Swfit 核心庫和包管理器 http://www.linuxidc.com/Linux/2015-12/125847.htm
Apple Swift學習教學 http://www.linuxidc.com/Linux/2014-09/106420.htm
使用 Swift 構建一個 iOS 的郵件應用 http://www.linuxidc.com/Linux/2014-08/105542.htm
Swift 2.0開源化 http://www.linuxidc.com/Linux/2015-06/118594.htm
Linux下搭建Swift語言開發學習環境 http://www.linuxidc.com/Linux/2015-12/125983.htm
相關文章