Welcome to Swift!
Swift is a high-performance system programming language. It has a clean and modern syntax, offers seamless access to existing C and Objective-C code and frameworks, and is memory safe (by default).
Although inspired by Objective-C and many other languages, Swift is not itself a C-derived language. As a complete and independent language, Swift packages core features like flow control, data structures, and functions, with high-level constructs like objects, protocols, closures, and generics. Swift embraces modules, eliminating the need for headers and the code duplication they entail.
To read the documentation, start by installing the
Sphinx documentation generator tool (just run
easy_install -U Sphinx
from the command line and you're good to go). Once you
have that, you can build the Swift documentation by going into docs
and
typing make
. This compiles the .rst
files in the docs
directory into
HTML in the docs/_build/html
directory.
Many of the docs are out of date, but you can see some historical design
documents in the docs
directory.
Another source of documentation is the standard library itself, located in
stdlib
. Much of the language is actually implemented in the library
(including Int
), and the standard library gives some examples of what can be
expressed today.
These instructions give the most direct path to a working Swift development environment. Options for doing things differently are discussed below.
OS X, Ubuntu Linux LTS, and the latest Ubuntu Linux release are the current supported host development operating systems.
For OS X, you need the latest Xcode.
For Ubuntu, you'll need the following development dependencies:
sudo apt-get install git cmake ninja-build clang python uuid-dev libicu-dev icu-devtools libbsd-dev libedit-dev libxml2-dev libsqlite3-dev swig libpython-dev libncurses5-dev pkg-config
Note: LLDB currently requires at least swig-1.3.40 but will successfully build with version 2 shipped with Ubuntu.
If you are building on Ubuntu 14.04 LTS, you'll need to upgrade your clang compiler for C++14 support and create a symlink:
sudo apt-get install clang-3.6
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-3.6 100
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-3.6 100
Via HTTPS For those checking out sources as read-only, HTTPS works best:
git clone https://github.com/apple/swift.git
cd swift
./utils/update-checkout --clone
Via SSH For those who plan on regularly making direct commits, cloning over SSH may provide a better experience (which requires uploading SSH keys to GitHub):
git clone git@github.com:apple/swift.git
cd swift
./utils/update-checkout --clone-with-ssh
CMake is the core infrastructure used to configure builds of
Swift and its companion projects; at least version 2.8.12.2 is required. Your
favorite Linux distribution likely already has a CMake package you can install.
On OS X, you can download the CMake Binary Distribution,
bundled as an application, copy it to /Applications, and add the embedded
command line tools to your PATH
:
export PATH=/Applications/CMake.app/Contents/bin:$PATH
Ninja is the current recommended build system for building Swift and is the default configuration generated by CMake. If you're on OS X or don't install it as part of your Linux distribution, clone it next to the other projects and it will be bootstrapped automatically:
git clone https://github.com/ninja-build/ninja.git
or
git clone git@github.com:ninja-build/ninja.git
You can also install CMake and Ninja on OS X using a third-party packaging tool like Homebrew…
brew install cmake ninja
…or MacPorts.
sudo port install cmake ninja
The build-script
is a high-level build automation script that supports basic
options such as building a Swift-compatible LLDB, building the Swift Package
Manager, building for iOS, running tests after builds, and more. It also
supports presets which you can define for common combinations of build options.
To find out more:
utils/build-script -h
Note: Arguments after "--" above are forwarded to build-script-impl
, which is
the ultimate shell script that invokes the actual build and test commands.
A basic command to build Swift and run basic tests with Ninja: