Александр Воронов | Building CLI with Swift
-
Upload
fwdays -
Category
Technology
-
view
201 -
download
2
Transcript of Александр Воронов | Building CLI with Swift
![Page 1: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/1.jpg)
IT Saturday • @aleks_voronov • Stanfy
BUILDING CLI WITH SWIFTALEXANDER VORONOV, STANFY
@aleks_voronov
![Page 2: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/2.jpg)
IT Saturday • @aleks_voronov • Stanfy
REASON WHY?
![Page 3: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/3.jpg)
IT Saturday • @aleks_voronov • Stanfy
OTHER PLATFORMS
![Page 4: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/4.jpg)
IT Saturday • @aleks_voronov • Stanfy
JAVASCRIPT
NODEJS NPM
BOWER GULP
GRUNT
![Page 5: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/5.jpg)
IT Saturday • @aleks_voronov • Stanfy
RUBY
RACK RAILS
SINATRA RUBYGEMS
RAKE
![Page 6: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/6.jpg)
IT Saturday • @aleks_voronov • Stanfy
PYTHONPYPI PIP …
![Page 7: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/7.jpg)
IT Saturday • @aleks_voronov • Stanfy
SWIFT
COCOAPODS CARTHAGE
SPM PERFECT
COMMANDANT
![Page 8: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/8.jpg)
IT Saturday • @aleks_voronov • Stanfy
FULLSTACK MULTIPLATFORM
![Page 9: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/9.jpg)
IT Saturday • @aleks_voronov • Stanfy
FULLSTACK MULTIPLATFORM
![Page 10: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/10.jpg)
IT Saturday • @aleks_voronov • Stanfy
WHAT IS CLI?
![Page 11: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/11.jpg)
IT Saturday • @aleks_voronov • Stanfy
WHAT IS CLI?
![Page 12: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/12.jpg)
IT Saturday • @aleks_voronov • Stanfy
CLI ARGUMENTS
![Page 13: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/13.jpg)
IT Saturday • @aleks_voronov • Stanfy
POSIX STANDARD 📘SHORT FLAGS
$ ls -a
$ ruby -v
$ git commit -m "..."
![Page 14: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/14.jpg)
IT Saturday • @aleks_voronov • Stanfy
GNU STANDARD 📙LONG FLAGS
$ ls --all
$ ruby --version
$ git commit --message "..."
![Page 15: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/15.jpg)
IT Saturday • @aleks_voronov • Stanfy
COMBINED FLAGS 🏴$ git commit -a -m "..."
$ git commit -am "..."
![Page 16: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/16.jpg)
IT Saturday • @aleks_voronov • Stanfy
SUBCOMMANDS 🏘$ git log -2
$ git status
$ git commit -am "..."
![Page 17: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/17.jpg)
IT Saturday • @aleks_voronov • Stanfy
STANDARD IO 📥📤0 - STDIN
1 - STDOUT 2 - STDERR
![Page 18: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/18.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/19.jpg)
IT Saturday • @aleks_voronov • Stanfy
0 - STDIN 1 - STDOUT 2 - STDERR
$ cat nofile 2>>err.log
![Page 20: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/20.jpg)
IT Saturday • @aleks_voronov • Stanfy
0 - STDIN 1 - STDOUT 2 - STDERR
$ cat nofile 2>&1
![Page 21: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/21.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/22.jpg)
IT Saturday • @aleks_voronov • Stanfy
0 - STDIN 1 - STDOUT 2 - STDERR
$ cat nofile 2>/dev/null
![Page 23: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/23.jpg)
IT Saturday • @aleks_voronov • Stanfy
0 - STDIN 1 - STDOUT 2 - STDERR
$ cat nofile 2>&1 | grep kernel
![Page 24: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/24.jpg)
IT Saturday • @aleks_voronov • Stanfy
UNIX PIPELINES ⛓$ ls -l | grep "Mar" | sort
![Page 25: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/25.jpg)
IT Saturday • @aleks_voronov • Stanfy
UNIX PIPELINES ⛓$ ps aux | grep Xcode | awk '{print $2}'
![Page 26: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/26.jpg)
IT Saturday • @aleks_voronov • Stanfy
UNIX PIPELINES ⛓$ git branch | xargs git branch -D
😈
![Page 27: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/27.jpg)
IT Saturday • @aleks_voronov • Stanfy
CLI WITH SWIFT 🖥
![Page 28: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/28.jpg)
IT Saturday • @aleks_voronov • Stanfy
SWIFT REPL 🔃(READ-EVALUATION-PRINT-LOOP)
$ swift
![Page 29: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/29.jpg)
IT Saturday • @aleks_voronov • Stanfy
IMMEDIATE MODE 🚀$ swift script.swift
![Page 30: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/30.jpg)
IT Saturday • @aleks_voronov • Stanfy
SWIFT COMPILE ⚙$ swiftc script.swift $ ./script
![Page 31: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/31.jpg)
IT Saturday • @aleks_voronov • Stanfy
SWIFT COMPILE ⚙$ swiftc script.swift -o myscript $ ./myscript
![Page 32: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/32.jpg)
IT Saturday • @aleks_voronov • Stanfy
EXECUTABLE SCRIPTS 💾
![Page 33: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/33.jpg)
IT Saturday • @aleks_voronov • Stanfy
EXECUTABLE SCRIPTS
#!/USR/BIN/SWIFT
HASHBANG
![Page 34: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/34.jpg)
IT Saturday • @aleks_voronov • Stanfy
EXECUTABLE SCRIPTS
CHMOD +X SCRIPT.SWIFT
![Page 35: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/35.jpg)
IT Saturday • @aleks_voronov • Stanfy
SCALING OUR CLI 🏗WORKING WITH MULTIPLE FILES
![Page 36: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/36.jpg)
IT Saturday • @aleks_voronov • Stanfy
MAIN.SWIFT 👑
![Page 37: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/37.jpg)
IT Saturday • @aleks_voronov • Stanfy
EXECUTING MULTIPLE FILES📄📄$ swift main.swift script.swift
![Page 38: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/38.jpg)
IT Saturday • @aleks_voronov • Stanfy
$ swiftc main.swift script.swift -o script
EXECUTING MULTIPLE FILES📄📄
![Page 39: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/39.jpg)
IT Saturday • @aleks_voronov • Stanfy
$ swiftc script.swift main.swift -o script
EXECUTING MULTIPLE FILES📄📄
![Page 40: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/40.jpg)
IT Saturday • @aleks_voronov • Stanfy
$ swiftc *.swift -o script
EXECUTING MULTIPLE FILES📄📄
![Page 41: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/41.jpg)
IT Saturday • @aleks_voronov • Stanfy
$ find . -iname '*.swift' | xargs swiftc -o script
EXECUTING MULTIPLE FILES📄📄
![Page 42: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/42.jpg)
IT Saturday • @aleks_voronov • Stanfy
EXTERNAL RESOURCES 🎁
![Page 43: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/43.jpg)
IT Saturday • @aleks_voronov • Stanfy
SYSTEM DEPENDENCIES 💼$ swiftc script.swift
$ xcrun -sdk macosx swiftc script.swift
![Page 44: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/44.jpg)
IT Saturday • @aleks_voronov • Stanfy
CUSTOM DEPENDENCIES 🛠-F
$ swift -F /Carthage/Build/Mac script.swift
![Page 45: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/45.jpg)
IT Saturday • @aleks_voronov • Stanfy
CUSTOM DEPENDENCIES
#!/USR/BIN/SWIFT -F Carthage/Build/Mac
HASHBANG
![Page 46: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/46.jpg)
IT Saturday • @aleks_voronov • Stanfy
COMPILING DEPENDENT SCRIPT 🤖
![Page 47: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/47.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/48.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/49.jpg)
IT Saturday • @aleks_voronov • Stanfy
DEPENDENCIES MANAGEMENT 🍴
![Page 50: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/50.jpg)
IT Saturday • @aleks_voronov • Stanfy
COCOAPODS 🤔
![Page 51: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/51.jpg)
IT Saturday • @aleks_voronov • Stanfy
CARTHAGE 😏
![Page 52: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/52.jpg)
IT Saturday • @aleks_voronov • Stanfy
SPM 😳SWIFT PACKAGE MANAGER
![Page 53: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/53.jpg)
IT Saturday • @aleks_voronov • Stanfy
PARSING ARGUMENTS 📬
![Page 54: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/54.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/55.jpg)
IT Saturday • @aleks_voronov • Stanfy
PROCESS ENUMProcess.arguments == [ "./script.swift", "one", "two", "three"
]
![Page 56: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/56.jpg)
IT Saturday • @aleks_voronov • Stanfy
FILESYSTEM 🗄
![Page 57: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/57.jpg)
IT Saturday • @aleks_voronov • Stanfy
FILESYSTEMNSFILEMANAGER NSFILEHANDLER
NSTASK NSPIPE
![Page 58: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/58.jpg)
IT Saturday • @aleks_voronov • Stanfy
HANDY LIBRARIES🏛
COMMANDER OPTIONKIT
COMMANDANT REACTIVETASKS PRETTYCOLORS
![Page 59: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/59.jpg)
IT Saturday • @aleks_voronov • Stanfy
REAL WORLD EXAMPLES 🌍
CARTHAGEKITCARTHAGE CLI
![Page 60: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/60.jpg)
IT Saturday • @aleks_voronov • Stanfy
THANK YOU!
![Page 61: Александр Воронов | Building CLI with Swift](https://reader034.fdocuments.us/reader034/viewer/2022042707/58ef21361a28abd2688b4569/html5/thumbnails/61.jpg)
IT Saturday • @aleks_voronov • Stanfy
Q/A
@ALEKS_VORONOV A-VORONOV