Slide 1

Slide 1 text

CLI APPS. FOR FUN AND PROFIT @SUPERMARIN

Slide 2

Slide 2 text

WHEN FUNCTIONALITY NOT SUPPORTED BY GUI IT'S HARD TO AUTOMATE TASKS ENDLESS POSSIBILITIES

Slide 3

Slide 3 text

HOW DO I RUBY, GO, PYTHON, EVEN OBJECTIVE-C

Slide 4

Slide 4 text

PIPELINE CAT BUILD.LOG | GREP ERROR | WC -L

Slide 5

Slide 5 text

STATUS CODES $ XCODEBUILD | TEE XCODEBUILD.LOG | XCPRETTY

Slide 6

Slide 6 text

XCODEBUILD FAILS, STATUS 0

Slide 7

Slide 7 text

PIPESTATUS [] $ xcodebuild | tee output.log | xcpretty $? => 0 ${PIPESTATUS[0]} => 65 ${PIPESTATUS[2]} => 0 $ xcodebuild | tee output.log | xcpretty; exit ${PIPESTATUS[0]}

Slide 8

Slide 8 text

SET -O PIPEFAIL $ xcodebuild | tee output.log | xcpretty $ echo $? => 65

Slide 9

Slide 9 text

BEWARE OF YOUR $SHELL | $SHELL | Exit status | Pipe status | Set a var | |--------|-------------|---------------|-------------| | bash | $? | $PIPESTATUS | export VAR= | |--------|-------------|---------------|-------------| | zsh | $status | $pipestatus | export VAR= | |--------|-------------|---------------|-------------| | fish | $status | / | set -x VAR |

Slide 10

Slide 10 text

#! #!/USR/BIN/ENV RUBY

Slide 11

Slide 11 text

POSIX FLAGS $ COMMAND --VERBOSE --COLOR = $ COMMAND -VC (ONLY IN SILICON VALLEY)

Slide 12

Slide 12 text

CLI FRAMEWORKS DON'T DIY

Slide 13

Slide 13 text

XCPRETTY GITHUB.COM/SUPERMARIN/XCPRETTY

Slide 14

Slide 14 text

SUCH HTML

Slide 15

Slide 15 text

WHY IN THE WORLD? THERE'S XCTOOL

Slide 16

Slide 16 text

XCTOOL(XCODEBUILD) -FLAG -FLAG WRAPPING XCODEBUILD, RECREATING FLAGS

Slide 17

Slide 17 text

XCODEBUILD -FLAG -FLAG | XCPRETTY USING VANILLA XCODEBUILD

Slide 18

Slide 18 text

XCTOOL - TESTS maintaining separate settings XCODEBUILD - BETA XCODEBUILD - APPSTORE maintaining separate settings

Slide 19

Slide 19 text

USED BY RUBYMOTION FACEBOOK (POP) AFNETWORKING KIWI YAMMER THOUGHTBOT MANY OTHERS

Slide 20

Slide 20 text

<3 HIPBYTE YAMMER @KATTRALI