你的选择是有限的。首先,Swift 目前仅在 Ubuntu 上获得认证。因此,您要在其上开发的主机必须运行 Ubuntu,或者必须运行 Docker,您可以在该主机上运行 Ubuntu。
理论上你也可以在你的目标主机上快速编译。我曾经为 Debain (Jessie) 为旧版本的 Swift 做过这个,虽然我设法编译了它,但它肯定不稳定。从那以后情况可能有所改善,我还没有检查过。
所以最简单的方法就是依赖Docker。这也允许您通过在 Xcode 中进行编辑,然后在命令行上手动编译它,从而在您的 Mac 上进行开发。
我使用以下 bash 函数打开我的 Linux 环境:
SwiftDocker2 ()
{
name=`perl -e 'open IN, "</usr/share/dict/words";rand($.) \
< 1 && ($n=$_) while <IN>;print $n'`;
docker run -i -t --name=${name} -h ${name} --log-driver=json-file \
-w /project -v $(pwd):/project -p 9000:9000 ibmcom/swift-ubuntu /bin/bash;
echo "Created image ${name}";
echo "Stopping image";
docker stop ${name};
echo "Removing image";
docker rm ${name}
}
在上面的示例中,我打开了您的应用程序可能不需要的端口 9000。
我想说的最后一点是构建目录的使用。我使用 Makefile 进行构建,在 Makefile 中我有以下部分:
BUILD_LINUX = "./.build-linux"
BUILD_MACOS = "./.build-macos"
UNAME = $(shell uname)
ifeq (${UNAME}, Darwin)
BUILD_PATH = ${BUILD_MACOS}
else
BUILD_PATH = ${BUILD_LINUX}
endif
xcode:
@swift package --build-path ${BUILD_PATH} -Xlinker -L/usr/local/lib generate-xcodeproj
build:
rm -f Package.pins
swift build --build-path ${BUILD_PATH} -Xlinker "-L/usr/local/lib"
通过使用这种结构,MacOS 环境将使用目录 .build-macos 进行构建,而 Linux 将使用文件 .build-Linux。该文件Package.pins
在构建期间被删除,以确保不会在两个环境之间传输有关要使用的版本的一些内存。