Александр Воронов | building cli with swift

61
IT Saturday • @aleks_voronov • Stanfy BUILDING CLI WITH SWIFT ALEXANDER VORONOV, STANFY @aleks_voronov

Upload: fwdays

Post on 13-Apr-2017

201 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

BUILDING CLI WITH SWIFTALEXANDER VORONOV, STANFY

@aleks_voronov

Page 2: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

REASON WHY?

Page 3: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

OTHER PLATFORMS

Page 4: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

JAVASCRIPT

NODEJS NPM

BOWER GULP

GRUNT

Page 5: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

RUBY

RACK RAILS

SINATRA RUBYGEMS

RAKE

Page 6: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

PYTHONPYPI PIP …

Page 7: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

SWIFT

COCOAPODS CARTHAGE

SPM PERFECT

COMMANDANT

Page 8: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

FULLSTACK MULTIPLATFORM

Page 9: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

FULLSTACK MULTIPLATFORM

Page 10: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

WHAT IS CLI?

Page 11: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

WHAT IS CLI?

Page 12: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

CLI ARGUMENTS

Page 13: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

POSIX STANDARD 📘SHORT FLAGS

$ ls -a

$ ruby -v

$ git commit -m "..."

Page 14: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

GNU STANDARD 📙LONG FLAGS

$ ls --all

$ ruby --version

$ git commit --message "..."

Page 15: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

COMBINED FLAGS 🏴$ git commit -a -m "..."

$ git commit -am "..."

Page 16: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

SUBCOMMANDS 🏘$ git log -2

$ git status

$ git commit -am "..."

Page 17: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

STANDARD IO 📥📤0 - STDIN

1 - STDOUT 2 - STDERR

Page 18: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

0 - STDIN 1 - STDOUT 2 - STDERR

$ cat nofile

> cat: nofile: No such file or directory

Page 19: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

0 - STDIN 1 - STDOUT 2 - STDERR

$ cat nofile 2>>err.log

Page 20: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

0 - STDIN 1 - STDOUT 2 - STDERR

$ cat nofile 2>&1

Page 21: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

0 - STDIN 1 - STDOUT 2 - STDERR

$ cat nofile 2>>err.log 1>>out.log

Page 22: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

0 - STDIN 1 - STDOUT 2 - STDERR

$ cat nofile 2>/dev/null

Page 23: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

0 - STDIN 1 - STDOUT 2 - STDERR

$ cat nofile 2>&1 | grep kernel

Page 24: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

UNIX PIPELINES ⛓$ ls -l | grep "Mar" | sort

Page 25: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

UNIX PIPELINES ⛓$ ps aux | grep Xcode | awk '{print $2}'

Page 26: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

UNIX PIPELINES ⛓$ git branch | xargs git branch -D

😈

Page 27: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

CLI WITH SWIFT 🖥

Page 28: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

SWIFT REPL 🔃(READ-EVALUATION-PRINT-LOOP)

$ swift

Page 29: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

IMMEDIATE MODE 🚀$ swift script.swift

Page 30: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

SWIFT COMPILE ⚙$ swiftc script.swift $ ./script

Page 31: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

SWIFT COMPILE ⚙$ swiftc script.swift -o myscript $ ./myscript

Page 32: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

EXECUTABLE SCRIPTS 💾

Page 33: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

EXECUTABLE SCRIPTS

#!/USR/BIN/SWIFT

HASHBANG

Page 34: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

EXECUTABLE SCRIPTS

CHMOD +X SCRIPT.SWIFT

Page 35: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

SCALING OUR CLI 🏗WORKING WITH MULTIPLE FILES

Page 36: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

MAIN.SWIFT 👑

Page 37: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

EXECUTING MULTIPLE FILES📄📄$ swift main.swift script.swift

Page 38: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

$ swiftc main.swift script.swift -o script

EXECUTING MULTIPLE FILES📄📄

Page 39: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

$ swiftc script.swift main.swift -o script

EXECUTING MULTIPLE FILES📄📄

Page 40: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

$ swiftc *.swift -o script

EXECUTING MULTIPLE FILES📄📄

Page 41: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

$ find . -iname '*.swift' | xargs swiftc -o script

EXECUTING MULTIPLE FILES📄📄

Page 42: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

EXTERNAL RESOURCES 🎁

Page 43: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

SYSTEM DEPENDENCIES 💼$ swiftc script.swift

$ xcrun -sdk macosx swiftc script.swift

Page 44: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

CUSTOM DEPENDENCIES 🛠-F

$ swift -F /Carthage/Build/Mac script.swift

Page 45: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

CUSTOM DEPENDENCIES

#!/USR/BIN/SWIFT -F Carthage/Build/Mac

HASHBANG

Page 46: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

COMPILING DEPENDENT SCRIPT 🤖

Page 47: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

$ xcrun \ -sdk macosx swiftc \ -F Carthage/Build/Mac script.swift

COMPILING DEPENDENT SCRIPT

> dyld: Library not loaded: @rpath

Page 48: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

$ xcrun \ -sdk macosx swiftc \ -F Carthage/Build/Mac script.swift \ -Xlinker -rpath \ -Xlinker @executable_path/Carthage/Build/Mac

COMPILING DEPENDENT SCRIPT

Page 49: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

DEPENDENCIES MANAGEMENT 🍴

Page 50: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

COCOAPODS 🤔

Page 51: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

CARTHAGE 😏

Page 52: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

SPM 😳SWIFT PACKAGE MANAGER

Page 53: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

PARSING ARGUMENTS 📬

Page 54: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

PARSING ARGUMENTS

$ ./script one two three

$ ./script one\ two\ three

$ ./script "one two three"

3 args

1 arg

1 arg

Page 55: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

PROCESS ENUMProcess.arguments == [ "./script.swift", "one", "two", "three"

]

Page 56: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

FILESYSTEM 🗄

Page 57: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

FILESYSTEMNSFILEMANAGER NSFILEHANDLER

NSTASK NSPIPE

Page 58: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

HANDY LIBRARIES🏛

COMMANDER OPTIONKIT

COMMANDANT REACTIVETASKS PRETTYCOLORS

Page 59: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

REAL WORLD EXAMPLES 🌍

CARTHAGEKITCARTHAGE CLI

Page 60: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

THANK YOU!

Page 61: Александр Воронов | Building CLI with Swift

IT Saturday • @aleks_voronov • Stanfy

Q/A

@ALEKS_VORONOV A-VORONOV