Swift 3.0 介紹

ArielCross 8年前發布 | 17K 次閱讀 Swift Apple Swift開發

來自: http://swift.gg/2016/02/25/introducing-swift-3-0/

作者:Joe, 原文鏈接 ,原文日期:2016-02-16

譯者: Cee ;校對: numbbbbb ;定稿: 小鍋

</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。

 本文由用戶 ArielCross 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!