Swift 3.0 介紹
來自: http://swift.gg/2016/02/25/introducing-swift-3-0/
作者:Joe, 原文鏈接 ,原文日期:2016-02-16
</div>
</div>
如果你在尋找 Swift 2.2 的 Ubuntu 包,可以參考我們的 這篇 指南。
Swift 3.0
Swift 2.2 已經從 master 分支移到了 swift-2.2 分支。現在,Swift 3.0 版本在倉庫的 master 分支上開發。克隆編譯完整的 Swift 3.0 源代碼的方法已經和之前截然不同了。比起之前需要克隆逐個倉庫,現在你只需要:
mkdir swift-build cd swift-build git clone https://github.com/apple/swift.git ./swift/utils/update-checkout --clone
</div>
Swift 倉庫中的 update-checkout 腳本能夠幫你克隆編譯 Swift 源代碼所需的所有倉庫內容,并將其打包成 .tar.gz 壓縮文件。
使用 “build and package” 預設不僅可以編譯所有必要的目標文件,還能將它們打包成 .tar.gz 壓縮文件。使用名為 package.sh 的腳本就能完成上述任務(在 package-swift 庫中):
#!/bin/bash pushd `dirname $0` > /dev/null WHERE_I_AM=`pwd` popd > /dev/null INSTALL_DIR=${WHERE_I_AM}/install PACKAGE=${WHERE_I_AM}/swift.tar.gz LSB_RELEASE=`lsb_release -rs | tr -d .` rm -rf $INSTALL_DIR $PACKAGE ./swift/utils/build-script --preset=buildbot_linux_${LSB_RELEASE} install_destdir=${INSTALL_DIR} installable_package=${PACKAGE}
</div>
腳本中最關鍵的一步就是檢測 Ubuntu 的發行版本( lsb_release -rs ,譯者注:LSB,Linux Standard Base),并且使用 buildbot_linux_${LSB_RELEASE} 預設來編譯并把所有內容打包到 ${PACKAGE} .tar.gz 文件中。
apt-get
從 Apple 庫中下載一個 .tar.gz 是個不錯的選擇,但是更好的解決方案是在 Ubuntu 發行版中直接使用 apt-get 指令。為了讓編譯 Swift 在 Linux 中更加容易上手,我們為你準備了包含最新的 Swift 包的 Ubuntu 倉庫。
目前我們同時提供 swift-3.0 和 swift-2.2 兩個版本,但是它們并 不 兼容。舉個例子,兩個 swift 版本都會安裝到 /usr/bin 下。我們計劃把這兩個包安裝到不同的地方,不過可能要到 2016 年中我們才有時間來處理這個問題。
盡管這種方法有些約束和限制,不過沒關系,下面我們看看如何安裝 Swift 3.0!
1. 添加 Repository key
wget -qO- http://dev.iachieved.it/iachievedit.gpg.key | sudo apt-key add -
</div>
2. 將特定的倉庫添加到 sources.list 中
Ubuntu 14.04
echo "deb http://iachievedit-repos.s3.amazonaws.com/ trusty main" | sudo tee --append /etc/apt/sources.list
</div>
Ubuntu 15.10
echo "deb http://iachievedit-repos.s3.amazonaws.com/ wily main" | sudo tee --append /etc/apt/sources.list
</div>
3. 運行 apt-get update
sudo apt-get update
</div>
4. 安裝 swift-3.0 吧!
apt-get install swift-3.0
</div>
5. 試一試
git clone https://github.com/apple/example-package-dealer cd example-packager-dealer swift build 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
</div>
運行起來!
.build/debug/Dealer
</div>
FAQ
Q.Apple 官方會編譯這些二進制文件嗎?
A.不會,這些都是我在我的個人服務器上編譯的,可以參考這篇 指南 。
Q.所編譯項目的 git 版本如何查看?
A.你可以使用 apt-cache show swift-3.0 來查看此信息。例如:
# apt-cache show swift-3.0 Package: swift-3.0 Status: install ok installed Priority: optional Section: development Installed-Size: 281773 Maintainer: iachievedit (support@iachieved.it) Architecture: amd64 Version: 1:3.0-0ubuntu2 Depends: clang (>= 3.6), libicu-dev Conflicts: swift-2.2 Description: Open Source Swift This is a packaged version of Open Source Swift 3.0 built from the following git revisions of the Apple Github repositories: Clang: c18bb21a04 LLVM: 0d07a5d3d5 Swift: 8aa4dadf92 Foundation: dc4fa2d80b Description-md5: 08508c39657c159d064917af87d8d411 Homepage: http://dev.iachieved.it/iachievedit/swift
</div>
每次編譯的源代碼中的樹形關系 不受影響 。
Q.在上傳二進制文件前你有做過測試嗎?
A.Swift 編譯的時候會對二進制文件進行測試,我在編譯自己的應用之前也做了一些基本的測試。不過現在沒有復雜的測試用例套件。
Q.準備定期編譯嗎?
A.不,并不準備。雖然我想和 Apple 保持同步,但是最初的想法只是為了做一下實驗,讓我能夠在 Linux 上寫 Swift 程序。
Q.內容會安裝到哪兒?
A.都會安裝到 /usr/ 下,就和安裝 clang 、 gcc 一樣。
Q.如何理解包版本號的意義?
A.我一開始也考慮到了這個問題:我們需要一個合適的包版本號。把 3.0-0ubuntu2~trusty1 分解一下,各部分的含義:
- 3.0 指所打包的 Swift 的版本
- -0ubuntu2 表示為 Ubuntu 打包的第二個版本,0 代表這個包在上游的 Debian 源上沒有依賴的包
- -trusty1 代表這個包是給 Trusty Tahr 準備的(譯者注:Trusty Tahr 即 Ubuntu 14.04)
Wiley(譯者注:Wiley Werewolf 即 Ubuntu 15.10)上的包版本號并不會包含類似于 ~wiley1 這樣的內容,因為從 Trusty 升級到 Wiley 后,它能夠正確更新 swift-3.0 的包。
我 想 這應該沒什么問題,不過你發現任何問題可以發郵件到 support@iachieved.it 。
原理是什么?
我參考了 這個超棒的指南 在 Amazon S3 上搭建了一個 Debian 包資源庫。我試著搭建一個 Launchpad PPA(譯者注:PPA,Personal Package Archives,參考 這里 ),但是老實說,為了將所有元數據放入同一個包內實在是非常艱難。我敢肯定我需要托管所有必要的庫的內容,但是這看上去又有些矯枉過正了。不過那些開發 fpm 的家伙們可能有一些解決辦法吧。
那些用來打包編譯并且上傳到資源庫的腳步可以在 GitHub 上找到。安裝 Swift 3.0 的話請參考 swift-3.0 分支。
本文由 SwiftGG 翻譯組翻譯,已經獲得作者翻譯授權,最新文章請訪問http://swift.gg。