Обо мне
1 заметка с тегом

код

Установка Swift на Ubuntu — подводные камни

Руководство по установке Swift на Ubuntu, которое поможет вам обойти стороной неприятные нюансы.

Поскольку разработчики Swift официально поддерживает LTS-версии Ubuntu— большой сложности с установкой нет, но есть пара нюансов.

Первая распространенная ошибка — распаковка архива в корневую директорию. Способ рабочий, но, если потребуется начисто удалить SDK, одной строкой в консоли не обойтись. Кроме того, данный способ установки мешает переключаться между несколькими версиями Toolchain, в чем у вас, как разработчика, может возникнуть потребность.

Посмотрим на разумный способ установки Swift на ваш компьютер с ОС Ubuntu.

Первым делом нужно определиться с директорией, в которой вам удобно держать подкаталоги с несколькими версиями Swift. Для меня наиболее удобным вариантом является /opt, но вы вольны выбрать другой путь.

Забегая вперед, скажу, что если планируете работать с приложениями, написанными на Swift, лучше
устанавливать Toolchain за пределами домашней директории пользователя. О причине читайте далее в статье.

Итак, следуя руководству официального сайта устанавливаем необходимые зависимости:

$ sudo apt update

# Возможны конфликты LLDB 6 со Swift Toolchain,
# удаляем lldb-6.0, если установлен.
$ sudo apt remove lldb-6.0 
$ sudo apt install -y clang libicu-dev wget gpg

Получаем публичный ключ для верификации дистрибутива:

$ wget -q -O - https://swift.org/keys/all-keys.asc | \
  gpg --import -

Страница загрузки Swift (https://swift.org/download/#releases).

Проверяем целостность и источник архива:

$ cd ~/Downloads
$ gpg --verify swift-5.2.1-RELEASE-ubuntu18.04.tar.gz.sig

gpg: assuming signed data in 'swift-5.2.1-RELEASE-ubuntu18.04.tar.gz'
gpg: Signature made Пн 30 мар 2020 23:19:13 MSK
gpg:                using RSA key 925CC1CCED3D1561
gpg: Good signature from "Swift 5.x Release Signing Key <swift-infrastructure@swift.org>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: A62A E125 BBBF BB96 A6E0  42EC 925C C1CC ED3D 1561

Полученный с официального сайта дистрибутив мы распакуем в директорию /opt:

$ cd /opt
$ sudo tar -xzf swift-5.2.1-RELEASE-ubuntu18.04.tar.gz

# Создаем символическую ссылку на текущую версию Toolchain:
$ sudo ln -s swift-5.2.1-RELEASE-ubuntu18.04 swift

В итоге мы должны получить следующее содержимое в /opt:

lrwxrwxrwx  1 root root   31 апр 13 21:40 swift -> swift-5.2.1-RELEASE-ubuntu18.04
drwxr-xr-x  3 root root 4096 апр 13 21:38 swift-5.2.1-RELEASE-ubuntu18.04

Как вы уже догадались, мы сможем перебрасывать символическую ссылку /opt/swift между несколькими релизами Toolchain.

Осталось всего два шага и мы у цели. Добавляем путь /opt/swift/usr/bin в PATH, если вы работаете с bash:

$ echo 'PATH="$PATH:/opt/swift/usr/bin"' >> ~/.profile

Чтобы обеспечить работу приложений, написанных на Swift, пропишем путь к Swift Runtime в ldconfig:

$ sudo bash -c "echo '/opt/swift/usr/lib' > /etc/ld.so.conf.d/swift.conf"
$ sudo ldconfig

# Проверим:
$ ldconfig -p | grep swift
	libswiftDemangle.so (libc6,x86-64) => /opt/swift/usr/lib/libswiftDemangle.so
	libsourcekitdInProc.so (libc6,x86-64) => /opt/swift/usr/lib/libsourcekitdInProc.so
	liblldb.so.7svn (libc6,x86-64) => /opt/swift/usr/lib/liblldb.so.7svn
	liblldb.so (libc6,x86-64) => /opt/swift/usr/lib/liblldb.so
	libdispatch.so (libc6,x86-64) => /opt/swift/usr/lib/libdispatch.so
	libIndexStore.so.7svn (libc6,x86-64) => /opt/swift/usr/lib/libIndexStore.so.7svn
	libIndexStore.so (libc6,x86-64) => /opt/swift/usr/lib/libIndexStore.so
	libBlocksRuntime.so (libc6,x86-64) => /opt/swift/usr/lib/libBlocksRuntime.so

$ swift --version
Swift version 5.2.1 (swift-5.2.1-RELEASE)
Target: x86_64-unknown-linux-gnu

Именно для обеспечения доступности Swift Runtime в самом начале я рекомендовал устанавливать Swift за пределами домашней директории пользователя.

На этом все, хорошего кода!

оригинал статьи https://engineering.lit.group/swift-installation-on-ubuntu/