Slide 1

Slide 1 text

+ @claushoefele

Slide 2

Slide 2 text

Server-Side Swift 2017 2016 Swift 2 Swift 3 Server APIs Work Group ? Swift.org

Slide 3

Slide 3 text

Swift Server Projects Cross-platform Swift library Slack App Alexa Skill

Slide 4

Slide 4 text

AlexaSkillsKit • Swift library to develop custom skills for Amazon Alexa • Cross-platform Swift • Development: macOS • Deployment: Linux

Slide 5

Slide 5 text

Cross-Platform Swift Swift swiftc, lldb, SPM Standard Library Foundation Dispatch 3rd Party Swift Libraries C Libraries XCTest

Slide 6

Slide 6 text

Example AlexaSkillsKit

Slide 7

Slide 7 text

Example AlexaSkillsKit

Slide 8

Slide 8 text

swiftenv swiftenv [--version] install Installs a version of Swift version Displays the current active Swift version versions Lists all installed Swift versions …

Slide 9

Slide 9 text

Custom Toolchain

Slide 10

Slide 10 text

Docker

Slide 11

Slide 11 text

Docker Usage Container Image Dockerfile Registry Container build push run docker [OPTIONS] COMMAND [arg...]

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

Docker Usage Cont’d #!/bin/bash set -e SWIFT_VERSION=$(<.swift-version) docker run \ --rm \ --volume "$(pwd):/app" \ --workdir /app \ swift:$SWIFT_VERSION \ swift test --build-path /.build

Slide 14

Slide 14 text

Docker Usage Cont’d #!/bin/bash set -e SWIFT_VERSION=$(<.swift-version) docker run \ --rm \ --volume "$(pwd):/app" \ --workdir /app \ swift:$SWIFT_VERSION \ swift test --build-path /.build

Slide 15

Slide 15 text

Docker Usage Cont’d #!/bin/bash set -e SWIFT_VERSION=$(<.swift-version) docker run \ --rm \ --volume "$(pwd):/app" \ --workdir /app \ swift:$SWIFT_VERSION \ swift test --build-path /.build

Slide 16

Slide 16 text

Travis CI matrix: include: - os: osx osx_image: xcode8.3 sudo: required - os: linux dist: trusty sudo: required - os: linux dist: trusty sudo: required services: docker install: … script: … macOS Linux Docker (Linux)

Slide 17

Slide 17 text

Does it work?

Slide 18

Slide 18 text

Where are we Cross-platform Swift library Slack App Alexa Skill ✅

Slide 19

Slide 19 text

WeGoBot

Slide 20

Slide 20 text

WeGo Bot Architecture Kitura Kitura-net Environment Swift, Std Lib, Core Libs

Slide 21

Slide 21 text

Calling URLSession.shared

Slide 22

Slide 22 text

WeGo Bot Architecture Kitura BotService Spark Slack Kitura-net Environment Router Swift, Std Lib, Core Libs

Slide 23

Slide 23 text

Docker Usage cont’d Container Image Dockerfile Registry Container } Swift Extend with custom app

Slide 24

Slide 24 text

Dockerfile FROM swift:3.1 WORKDIR /app RUN apt-get update && apt-get install -y \ libssl-dev \ && rm -rf /var/lib/apt/lists/* COPY Package.swift ./ RUN swift package fetch; exit 0 EXPOSE 8090 COPY Sources ./Sources COPY Tests ./Tests RUN swift test CMD ./.build/debug/SwiftServer

Slide 25

Slide 25 text

Dockerfile FROM swift:3.1 WORKDIR /app RUN apt-get update && apt-get install -y \ libssl-dev \ && rm -rf /var/lib/apt/lists/* COPY Package.swift ./ RUN swift package fetch; exit 0 EXPOSE 8090 COPY Sources ./Sources COPY Tests ./Tests RUN swift test CMD ./.build/debug/SwiftServer

Slide 26

Slide 26 text

Dockerfile FROM swift:3.1 WORKDIR /app RUN apt-get update && apt-get install -y \ libssl-dev \ && rm -rf /var/lib/apt/lists/* COPY Package.swift ./ RUN swift package fetch; exit 0 EXPOSE 8090 COPY Sources ./Sources COPY Tests ./Tests RUN swift test CMD ./.build/debug/SwiftServer

Slide 27

Slide 27 text

Dockerfile FROM swift:3.1 WORKDIR /app RUN apt-get update && apt-get install -y \ libssl-dev \ && rm -rf /var/lib/apt/lists/* COPY Package.swift ./ RUN swift package fetch; exit 0 EXPOSE 8090 COPY Sources ./Sources COPY Tests ./Tests RUN swift test CMD ./.build/debug/SwiftServer

Slide 28

Slide 28 text

Dockerfile FROM swift:3.1 WORKDIR /app RUN apt-get update && apt-get install -y \ libssl-dev \ && rm -rf /var/lib/apt/lists/* COPY Package.swift ./ RUN swift package fetch; exit 0 EXPOSE 8090 COPY Sources ./Sources COPY Tests ./Tests RUN swift test CMD ./.build/debug/SwiftServer

Slide 29

Slide 29 text

Deployment

Slide 30

Slide 30 text

Tools Postman Docker Compose

Slide 31

Slide 31 text

Does it Work?

Slide 32

Slide 32 text

Where are we Cross-platform Swift library Slack App Alexa Skill ✅ ✅

Slide 33

Slide 33 text

Alexa Skill Alexa Voice Service Alexa Skill

Slide 34

Slide 34 text

AWS Lambda • Function as a Service, “Serverless” Architecture • Only pay for execution time • Event based • Stateless • Less server management

Slide 35

Slide 35 text

Node.js child_process

Slide 36

Slide 36 text

Lambda Execution Environment

Slide 37

Slide 37 text

Dynamic Loading on Linux

Slide 38

Slide 38 text

Does it work?

Slide 39

Slide 39 text

Integration Tests

Slide 40

Slide 40 text

Development Tools echosim.io ngrok

Slide 41

Slide 41 text

Where are we Cross-platform Swift library Slack App Alexa Skill ✅ ✅ ✅

Slide 42

Slide 42 text

Bridging the Gap CC BY 2.0 https://www.flickr.com/photos/ravi-shah/19806997920/

Slide 43

Slide 43 text

Thanks AlexaSkillsKit swift-server-app swift-lambda-app @claushoefele