Back in December I opened an enhancement request in the Swift JIRA site, issue SR-353, to add an npm init
-style invocation to swift build
for creating all of the boilerplate files needed for a complete Swift package. It wasn’t too long after the request was added that Bastian Rinsche and Tobias Landsberg implemented the feature and had a pull request accepted. Bastian has written up a great post on his experience with opensource Swift and contributing to the community with the implementation of swift build --init
.
Let’s look at how it works. First, create a new directory with mkdir
for your package or application. We’ll use helloworld
as an example: mkdir helloworld
. Now, cd
into your helloworld
directory and run swift build --init
.
# cd helloworld # swift build --init Creating Package.swift Creating .gitignore Creating Sources/ Creating Sources/main.swift Creating Tests/
Let’s take a look at what swift build --init
generates:
Package.swift
– the “manifest” for this package;swift build --init
names your package the same as the directory you invoked it inSources
– SwiftPM convention is that source files are included in a directory calledSources
main.swift
– Swift applications will have one (and only one)main.swift
file as the execution entry pointTests
– a directory to hold testcases for the application; more on this in a moment.gitignore
– a handy Git gitignore starter file that ignores build artifacts such as.build
andPackages
(things you don’t want to check in to a repository)
In our helloworld
example Package.swift
looks like this:
1 2 3 4 5 |
import PackageDescription let package = Package( name: "helloworld" ) |
Running swift build
at this point will create .build/debug/helloworld
which when executed you will see Hello, world!
.
If you are building a Swift-based library then remove main.swift
and replace it with your library code. Without a main.swift
SwiftPM will create a static library archive.
Tests
The Tests
directory added by swift build --init
is a nod to the future implementation of SR-592, which tracks SE-0019, Swift Package Manager support for automated testing.
Getting the Ubuntu Package
To get started with swift build --init
you can grab the latest Ubuntu package for Swift 2.2 (as of this writing, version 2.2-0ubuntu15). See this post for instructions. For more details about using SwiftPM in general, see our introduction here. Happy Swifting!