如果你在尋找 Swift 2.2 的 Ubuntu 包哲身,可以參考我們的這篇指南辩涝。
Swift 3.0
Swift 2.2 已經(jīng)從 master
分支移到了 swift-2.2
分支。現(xiàn)在勘天,Swift 3.0 版本在倉庫的 master
分支上開發(fā)怔揩。克隆編譯完整的 Swift 3.0 源代碼的方法已經(jīng)和之前截然不同了脯丝。比起之前需要克隆逐個倉庫商膊,現(xiàn)在你只需要:
bash
mkdir swift-build
cd swift-build
git clone https://github.com/apple/swift.git
./swift/utils/update-checkout --clone
Swift
倉庫中的 update-checkout
腳本能夠幫你克隆編譯 Swift 源代碼所需的所有倉庫內(nèi)容,并將其打包成 .tar.gz
壓縮文件宠进。
使用 "build and package" 預(yù)設(shè)不僅可以編譯所有必要的目標(biāo)文件晕拆,還能將它們打包成 .tar.gz
壓縮文件。使用名為 package.sh
的腳本就能完成上述任務(wù)(在 package-swift
庫中):
bash
#!/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}
腳本中最關(guān)鍵的一步就是檢測 Ubuntu 的發(fā)行版本(lsb_release -rs
材蹬,譯者注:LSB实幕,Linux Standard Base),并且使用 buildbot_linux_${LSB_RELEASE}
預(yù)設(shè)來編譯并把所有內(nèi)容打包到 ${PACKAGE} .tar.gz
文件中堤器。
apt-get
從 Apple 庫中下載一個 .tar.gz
是個不錯的選擇茬缩,但是更好的解決方案是在 Ubuntu 發(fā)行版中直接使用 apt-get
指令。為了讓編譯 Swift 在 Linux 中更加容易上手吼旧,我們?yōu)槟銣?zhǔn)備了包含最新的 Swift 包的 Ubuntu 倉庫。
目前我們同時提供 swift-3.0
和 swift-2.2
兩個版本未舟,但是它們并不兼容圈暗。舉個例子,兩個 swift
版本都會安裝到 /usr/bin
下裕膀。我們計劃把這兩個包安裝到不同的地方员串,不過可能要到 2016 年中我們才有時間來處理這個問題。
盡管這種方法有些約束和限制昼扛,不過沒關(guān)系寸齐,下面我們看看如何安裝 Swift 3.0欲诺!
1. 添加 Repository key
bash
wget -qO- http://dev.iachieved.it/iachievedit.gpg.key | sudo apt-key add -
2. 將特定的倉庫添加到 sources.list
中
Ubuntu 14.04
bash
echo "deb http://iachievedit-repos.s3.amazonaws.com/ trusty main" | sudo tee --append /etc/apt/sources.list
Ubuntu 15.10
bash
echo "deb http://iachievedit-repos.s3.amazonaws.com/ wily main" | sudo tee --append /etc/apt/sources.list
3. 運(yùn)行 apt-get update
bash
sudo apt-get update
4. 安裝 swift-3.0 吧!
bash
apt-get install swift-3.0
5. 試一試
bash
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
運(yùn)行起來渺鹦!
bash
.build/debug/Dealer
FAQ
Q. Apple 官方會編譯這些二進(jìn)制文件嗎扰法?
A. 不會,這些都是我在我的個人服務(wù)器上編譯的毅厚,可以參考這篇指南塞颁。
Q. 所編譯項(xiàng)目的 git 版本如何查看?
A. 你可以使用 apt-cache show swift-3.0
來查看此信息吸耿。例如:
bash
# 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
每次編譯的源代碼中的樹形關(guān)系不受影響祠锣。
Q. 在上傳二進(jìn)制文件前你有做過測試嗎?
A. Swift 編譯的時候會對二進(jìn)制文件進(jìn)行測試咽安,我在編譯自己的應(yīng)用之前也做了一些基本的測試伴网。不過現(xiàn)在沒有復(fù)雜的測試用例套件。
Q. 準(zhǔn)備定期編譯嗎妆棒?
A. 不澡腾,并不準(zhǔn)備。雖然我想和 Apple 保持同步募逞,但是最初的想法只是為了做一下實(shí)驗(yàn)蛋铆,讓我能夠在 Linux 上寫 Swift 程序。
Q. 內(nèi)容會安裝到哪兒放接?
A. 都會安裝到 /usr/
下刺啦,就和安裝 clang
、gcc
一樣纠脾。
Q. 如何理解包版本號的意義玛瘸?
A. 我一開始也考慮到了這個問題:我們需要一個合適的包版本號。把 3.0-0ubuntu2~trusty1
分解一下苟蹈,各部分的含義:
- 3.0 指所打包的 Swift 的版本
- -0ubuntu2 表示為 Ubuntu 打包的第二個版本糊渊,0 代表這個包在上游的 Debian 源上沒有依賴的包
- -trusty1 代表這個包是給 Trusty Tahr 準(zhǔn)備的(譯者注:Trusty Tahr 即 Ubuntu 14.04)
Wiley(譯者注:Wiley Werewolf 即 Ubuntu 15.10)上的包版本號并不會包含類似于 ~wiley1
這樣的內(nèi)容,因?yàn)閺?Trusty 升級到 Wiley 后慧脱,它能夠正確更新 swift-3.0
的包渺绒。
我想這應(yīng)該沒什么問題,不過你發(fā)現(xiàn)任何問題可以發(fā)郵件到 support@iachieved.it
菱鸥。
原理是什么宗兼?
我參考了這個超棒的指南在 Amazon S3 上搭建了一個 Debian 包資源庫。我試著搭建一個 Launchpad PPA(譯者注:PPA氮采,Personal Package Archives殷绍,參考這里),但是老實(shí)說鹊漠,為了將所有元數(shù)據(jù)放入同一個包內(nèi)實(shí)在是非常艱難主到。我敢肯定我需要托管所有必要的庫的內(nèi)容茶行,但是這看上去又有些矯枉過正了。不過那些開發(fā) fpm 的家伙們可能有一些解決辦法吧登钥。
那些用來打包編譯并且上傳到資源庫的腳步可以在 GitHub 上找到畔师。安裝 Swift 3.0 的話請參考 swift-3.0
分支。
本文由 SwiftGG 翻譯組翻譯怔鳖,已經(jīng)獲得作者翻譯授權(quán)茉唉,最新文章請訪問 http://swift.gg。