Slide 1

Slide 1 text

Leveraging Xcode Code Coverage Simone Civetta Monday, 13th July - Minsk, Belarus

Slide 2

Slide 2 text

What is Code Coverage?

Slide 3

Slide 3 text

Testing

Slide 4

Slide 4 text

Metric that measures the value of your tests

Slide 5

Slide 5 text

Code Coverage detects ☞ Which code is executing when we're running the tests ☞ Which code is untested

Slide 6

Slide 6 text

How does it work? ☞ The information is gathered in two steps ☞ compile time ☞ runtime ☞ Tools count each expression that is executed

Slide 7

Slide 7 text

Code coverage on iOS

Slide 8

Slide 8 text

Code coverage on iOS until last month

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

Objective-C

Slide 11

Slide 11 text

Swift

Slide 12

Slide 12 text

Swift

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

How it worked ☞ LLVM creates annotation and data files: ☞ .gcno ☞ .gcda

Slide 15

Slide 15 text

How to enable in Xcode

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

No content

Slide 18

Slide 18 text

How to enable via command line

Slide 19

Slide 19 text

GCC_INSTRUMENT_PROGRAM_FLOW_ARCS=YES GCC_GENERATE_TEST_COVERAGE_FILES=YES xcodebuild [...] test

Slide 20

Slide 20 text

Tools

Slide 21

Slide 21 text

Tools ☞ Coverstory ☞ gcovr ☞ lcov ☞ Slather

Slide 22

Slide 22 text

Slather Exports to: - HTML - Gutter JSON - Cobertura XML github.com/venmo/Slather

Slide 23

Slide 23 text

But, also

Slide 24

Slide 24 text

Swiftcov swiftcov github.com/realm/SwiftCov ☞ Supports gcov format ☞ Uses breakpoints to gather coverage data

Slide 25

Slide 25 text

No content

Slide 26

Slide 26 text

Code coverage on iOS

Slide 27

Slide 27 text

Code coverage on iOS since last month

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

Objective-C

Slide 30

Slide 30 text

Swift

Slide 31

Slide 31 text

A new format ☞ gcov ☞ profdata

Slide 32

Slide 32 text

Xcode generates profdata files for ☞ Swift ☞ ...and Objective-C

Slide 33

Slide 33 text

How to enable in Xcode

Slide 34

Slide 34 text

No content

Slide 35

Slide 35 text

No content

Slide 36

Slide 36 text

No content

Slide 37

Slide 37 text

How to enable via command line

Slide 38

Slide 38 text

xcodebuild [...] test -enableCodeCoverage YES

Slide 39

Slide 39 text

xcodebuild -scheme MoDevByProject -destination "name=iPhone 6,OS=latest" -enableCodeCoverage YES test

Slide 40

Slide 40 text

Exploiting the data ☞ llvm-cov

Slide 41

Slide 41 text

Exploiting the data $XCODE_PATH/Toolchains/XcodeDefault.xctoolchain/usr/bin/llvm-cov show -instr-profile MY_PROJECT_PROFDATA MY_PROJECT_BINARY_FILE

Slide 42

Slide 42 text

No content

Slide 43

Slide 43 text

Tools

Slide 44

Slide 44 text

Tools ☞ Slather ☞ Xcode Server

Slide 45

Slide 45 text

Slather github.com/venmo/slather/pull/92

Slide 46

Slide 46 text

Xcode Server

Slide 47

Slide 47 text

No content

Slide 48

Slide 48 text

No content

Slide 49

Slide 49 text

Summing up

Slide 50

Slide 50 text

Doesn't tell you if your code is bad ...

Slide 51

Slide 51 text

No content

Slide 52

Slide 52 text

No content

Slide 53

Slide 53 text

Doesn't tell you if your code is bad But can help writing better code

Slide 54

Slide 54 text

You're just minutes away from collecting Code Coverage info for Swift Start soon!

Slide 55

Slide 55 text

Thank you

Slide 56

Slide 56 text

Simone Civetta @viteinfinite Xebia IT Architects