Slide 1

Slide 1 text

try! Swi) Pre Talks 2019 @satoshin21 #tryswi(_pre

Slide 2

Slide 2 text

INTRODUCE • @satoshin21 • eureka, Inc. • Pairs JP iOS Applica

Slide 3

Slide 3 text

Have you ever wri,en scripts in Swi3? #tryswi(_pre

Slide 4

Slide 4 text

How to make CLI tool with dependencies basically 1. swift init —type executable 2. Edit Package.swift 1. Add dependencies 2. Add dependencies to target 3. swift build —configuration debug (or swift run) 4. Execute ./.build/debug/{package name} #tryswi(_pre

Slide 5

Slide 5 text

It's boresome a bit • It's easy to write swi. script without dependencies. • no needs to create Package.swift file. • But, some:mes, I just want to write simple scripts quickly. • try awesome packages... • write swi. codes as playgrounds... #tryswi(_pre

Slide 6

Slide 6 text

Let's try! swift-sh ! #tryswi(_pre

Slide 7

Slide 7 text

What is swi)-sh ? • Define Dependencies and write swi0 scripts too easily • made by @mxcl (Max Howell) • Author of Homebrew, PromiseKit. #tryswi(_pre

Slide 8

Slide 8 text

Install brew install mxcl/made/swift-sh or mint install mxcl/swift-sh #tryswi(_pre

Slide 9

Slide 9 text

How to run script • Demo #tryswi(_pre

Slide 10

Slide 10 text

How swi'-sh manage dependencies? 1. make build directory each script file • mkdir -p ~/Library/Developer/swi6.-sh.cache/{filename} 2. write Package.swi; 3. make symlink script file as main.swi6 4. swift build -Xswiftc -spress-warnings 5. exec ./build/debug/{filename} #tryswi(_pre

Slide 11

Slide 11 text

swi$ sh run with stdin > echo "import PromiseKit // @mxcl\nprint(Promise.value(\"Hello, World!\"))" | swift sh #tryswi(_pre

Slide 12

Slide 12 text

swi$ sh edit > swift sh edit sample.swift • Generate .xcodeproj/ file in swi$-sh cache dir • Not working dir. • cached swi: file is symlinked to working file. #tryswi(_pre

Slide 13

Slide 13 text

swi$ sh eject > swift sh eject sample.swift . └── Sample ├── Package.swift └── Sources └── main.swift • Generate Package.swift file. • ⚠ swi/ file will be moved to sub directory #tryswi(_pre

Slide 14

Slide 14 text

⚠ Warnings #tryswi(_pre

Slide 15

Slide 15 text

Warning 1: too late... // sample.swift import PromiseKit // @mxcl ~> 6.5 print(Promise.value("Hi!")) target elapsed +me compiled swi, file 0.01s ! swi,-sh(no cached) 42.95s " swi,-sh(cached) 0.67s # • swi%-sh is build every +me, so affect execu2on 2me. #tryswi(_pre

Slide 16

Slide 16 text

Warning 2: cache key • cache directory is created with swi/ file name. > swift sh sample.swift ~/Library/Developer/swift-sh.cache ├── └── sample ├── Package.resolved ├── Package.swift └── main.swift • If same file name is used, cache is shared each script. #tryswi(_pre

Slide 17

Slide 17 text

·ͱΊ Write with for target user Swi$PM ɾWant to manage targets/ dependencies strictly ɾneeds to write test code. swi$-sh ɾTry awesome Libraries ɾWrite scripts quickly #tryswi(_pre

Slide 18

Slide 18 text

END #tryswi(_pre