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

Post on 13-Apr-2017

208 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

IT Saturday • @aleks_voronov • Stanfy

BUILDING CLI WITH SWIFTALEXANDER VORONOV, STANFY

@aleks_voronov

IT Saturday • @aleks_voronov • Stanfy

REASON WHY?

IT Saturday • @aleks_voronov • Stanfy

OTHER PLATFORMS

IT Saturday • @aleks_voronov • Stanfy

JAVASCRIPT

NODEJS NPM

BOWER GULP

GRUNT

IT Saturday • @aleks_voronov • Stanfy

RUBY

RACK RAILS

SINATRA RUBYGEMS

RAKE

IT Saturday • @aleks_voronov • Stanfy

PYTHONPYPI PIP …

IT Saturday • @aleks_voronov • Stanfy

SWIFT

COCOAPODS CARTHAGE

SPM PERFECT

COMMANDANT

IT Saturday • @aleks_voronov • Stanfy

FULLSTACK MULTIPLATFORM

IT Saturday • @aleks_voronov • Stanfy

FULLSTACK MULTIPLATFORM

IT Saturday • @aleks_voronov • Stanfy

WHAT IS CLI?

IT Saturday • @aleks_voronov • Stanfy

WHAT IS CLI?

IT Saturday • @aleks_voronov • Stanfy

CLI ARGUMENTS

IT Saturday • @aleks_voronov • Stanfy

POSIX STANDARD 📘SHORT FLAGS

$ ls -a

$ ruby -v

$ git commit -m "..."

IT Saturday • @aleks_voronov • Stanfy

GNU STANDARD 📙LONG FLAGS

$ ls --all

$ ruby --version

$ git commit --message "..."

IT Saturday • @aleks_voronov • Stanfy

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

$ git commit -am "..."

IT Saturday • @aleks_voronov • Stanfy

SUBCOMMANDS 🏘$ git log -2

$ git status

$ git commit -am "..."

IT Saturday • @aleks_voronov • Stanfy

STANDARD IO 📥📤0 - STDIN

1 - STDOUT 2 - STDERR

IT Saturday • @aleks_voronov • Stanfy

0 - STDIN 1 - STDOUT 2 - STDERR

$ cat nofile

> cat: nofile: No such file or directory

IT Saturday • @aleks_voronov • Stanfy

0 - STDIN 1 - STDOUT 2 - STDERR

$ cat nofile 2>>err.log

IT Saturday • @aleks_voronov • Stanfy

0 - STDIN 1 - STDOUT 2 - STDERR

$ cat nofile 2>&1

IT Saturday • @aleks_voronov • Stanfy

0 - STDIN 1 - STDOUT 2 - STDERR

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

IT Saturday • @aleks_voronov • Stanfy

0 - STDIN 1 - STDOUT 2 - STDERR

$ cat nofile 2>/dev/null

IT Saturday • @aleks_voronov • Stanfy

0 - STDIN 1 - STDOUT 2 - STDERR

$ cat nofile 2>&1 | grep kernel

IT Saturday • @aleks_voronov • Stanfy

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

IT Saturday • @aleks_voronov • Stanfy

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

IT Saturday • @aleks_voronov • Stanfy

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

😈

IT Saturday • @aleks_voronov • Stanfy

CLI WITH SWIFT 🖥

IT Saturday • @aleks_voronov • Stanfy

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

$ swift

IT Saturday • @aleks_voronov • Stanfy

IMMEDIATE MODE 🚀$ swift script.swift

IT Saturday • @aleks_voronov • Stanfy

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

IT Saturday • @aleks_voronov • Stanfy

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

IT Saturday • @aleks_voronov • Stanfy

EXECUTABLE SCRIPTS 💾

IT Saturday • @aleks_voronov • Stanfy

EXECUTABLE SCRIPTS

#!/USR/BIN/SWIFT

HASHBANG

IT Saturday • @aleks_voronov • Stanfy

EXECUTABLE SCRIPTS

CHMOD +X SCRIPT.SWIFT

IT Saturday • @aleks_voronov • Stanfy

SCALING OUR CLI 🏗WORKING WITH MULTIPLE FILES

IT Saturday • @aleks_voronov • Stanfy

MAIN.SWIFT 👑

IT Saturday • @aleks_voronov • Stanfy

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

IT Saturday • @aleks_voronov • Stanfy

$ swiftc main.swift script.swift -o script

EXECUTING MULTIPLE FILES📄📄

IT Saturday • @aleks_voronov • Stanfy

$ swiftc script.swift main.swift -o script

EXECUTING MULTIPLE FILES📄📄

IT Saturday • @aleks_voronov • Stanfy

$ swiftc *.swift -o script

EXECUTING MULTIPLE FILES📄📄

IT Saturday • @aleks_voronov • Stanfy

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

EXECUTING MULTIPLE FILES📄📄

IT Saturday • @aleks_voronov • Stanfy

EXTERNAL RESOURCES 🎁

IT Saturday • @aleks_voronov • Stanfy

SYSTEM DEPENDENCIES 💼$ swiftc script.swift

$ xcrun -sdk macosx swiftc script.swift

IT Saturday • @aleks_voronov • Stanfy

CUSTOM DEPENDENCIES 🛠-F

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

IT Saturday • @aleks_voronov • Stanfy

CUSTOM DEPENDENCIES

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

HASHBANG

IT Saturday • @aleks_voronov • Stanfy

COMPILING DEPENDENT SCRIPT 🤖

IT Saturday • @aleks_voronov • Stanfy

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

COMPILING DEPENDENT SCRIPT

> dyld: Library not loaded: @rpath

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

IT Saturday • @aleks_voronov • Stanfy

DEPENDENCIES MANAGEMENT 🍴

IT Saturday • @aleks_voronov • Stanfy

COCOAPODS 🤔

IT Saturday • @aleks_voronov • Stanfy

CARTHAGE 😏

IT Saturday • @aleks_voronov • Stanfy

SPM 😳SWIFT PACKAGE MANAGER

IT Saturday • @aleks_voronov • Stanfy

PARSING ARGUMENTS 📬

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

IT Saturday • @aleks_voronov • Stanfy

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

]

IT Saturday • @aleks_voronov • Stanfy

FILESYSTEM 🗄

IT Saturday • @aleks_voronov • Stanfy

FILESYSTEMNSFILEMANAGER NSFILEHANDLER

NSTASK NSPIPE

IT Saturday • @aleks_voronov • Stanfy

HANDY LIBRARIES🏛

COMMANDER OPTIONKIT

COMMANDANT REACTIVETASKS PRETTYCOLORS

IT Saturday • @aleks_voronov • Stanfy

REAL WORLD EXAMPLES 🌍

CARTHAGEKITCARTHAGE CLI

IT Saturday • @aleks_voronov • Stanfy

THANK YOU!

IT Saturday • @aleks_voronov • Stanfy

Q/A

@ALEKS_VORONOV A-VORONOV

top related