Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Mobile @ Facebook

Christian Legnitto (christianl@fb.com)
Mobile release engineering
Who is this guy?
Who is this guy?
Facebook

• Manage Mobile Release Engineering
• I’m hiring
• Run the iOS and Android releases
• Ran Faceb...
Who is this guy?
Facebook

• Manage Mobile Release Engineering
• I’m hiring
• Run the iOS and Android releases
• Ran Faceb...
Who is this guy?
Facebook

• Manage Mobile Release Engineering
• I’m hiring
• Run the iOS and Android releases
• Ran Faceb...
874,000,000 MAUs
507,000,000 DAUs
iPads &
iPhones
native
& web
supports
iOS6+
native
& web

+1M beta
testers

supports
Froyo+

15 apks

+20K
alpha
testers
How we USED to develop
Mobile core team owned mobile
Desktop Web

iOS

Group
messages

Group
messages

Group
messages

Chat

Messages team

Andro...
Doesn’t SCALE
Mobile core team owned mobile
Desktop Web

iOS

Group
messages

Group
messages

Group
messages

Chat

Messages team

Andro...
Mobile core team owned mobile
Desktop Web

Events team
Photos team
Android core team
iOS core team

Group
messages

Group
...
Mobile core team owned mobile
Desktop Web

Photos team
Android core team
iOS core team

(numbers made up)

Group
messages
...
Mobile core team owned mobile
Desktop Web

Events team
Photos team
Android core team
iOS core team

Group
messages

Group
...
Mobile core team owned mobile
Desktop Web

Photos team
Android core team
iOS core team

Group
messages

Group
messages

Ch...
Mobile core team owned mobile
Desktop Web

iOS

Group
messages

Group
messages

Group
messages

Chat

Chat

Chat

Upcoming...
Mobile core team owned mobile
Desktop Web

iOS

Group
messages

Group
messages

Group
messages

Chat

Chat

Chat

Upcoming...
Mobile core team owned mobile
Desktop Web

iOS

Group
messages

Group
messages

Group
messages

Chat

Chat

Chat

Upcoming...
Mobile core team owned mobile
Desktop Web

iOS

Group
messages

Group
messages

Group
messages

Chat

Messages team

Andro...
Doesn’t produce the BEST product
Mobile core team owned mobile
Desktop Web

iOS

Group
messages

Group
messages

Group
messages

Chat

Messages team

Andro...
Mobile core team owned mobile
Desktop Web

iOS

Group
messages

Group
messages

Group
messages

Chat

Messages team

Andro...
Mobile core team owned mobile
Desktop Web

iOS

Group
messages

Group
messages

Group
messages

Chat

Messages team

Andro...
How we USED to ship
Feature-based releases
Feature-based releases

Decide on features
Feature-based releases

Decide on features
Furiously work on them
Feature-based releases

Decide on features
Furiously work on them
Test
Feature-based releases

Decide on features
Furiously work on them
Test
Ship when all features are done
All features are PRIORITY #1
Decide on features
Desktop Web
Group
messages
Chat
Upcoming
events
Birthdays
Photo albums
Photo picker

...
Decide on features
Desktop Web
1. Emoji
2. Green dot
3. Naming convos

Group
messages
Chat
Upcoming
events
Birthdays
Photo...
Decide on features
Desktop Web
1. Emoji
2. Green dot
3. Naming convos

Group
messages

1. Reply inline
2. Birthday reminde...
Decide on features
Desktop Web
1. Emoji
2. Green dot
3. Naming convos

Group
messages

1. Reply inline
2. Birthday reminde...
Decide on features
Desktop Web

Android

1. Emoji
2. Green dot
3. Naming convos

Group
messages

Group
messages

Chat

Cha...
Decide on features
Desktop Web

Android

1. Emoji
2. Green dot
3. Naming convos

Group
messages

Group
messages

Chat

Cha...
Decide on features
Desktop Web

Android

1. Emoji
2. Green dot
3. Naming convos

Group
messages

Group
messages

Chat

Cha...
Decide on features
Desktop Web

Android

1. Emoji
2. Green dot
3. Naming convos

Group
messages

Group
messages

Chat

Cha...
The market and company
CHANGES RAPIDLY
Decide on features
Android
Group
messages
Chat
Upcoming
events
Birthdays
Photo albums
Photo picker

...

1. Emoji
2. Reply...
Decide on features
Android
Group
messages
Chat
Upcoming
events
Birthdays
Photo albums
Photo picker

...

1. Emoji
2. Reply...
Decide on features
Android
Group
messages
Chat
Upcoming
events
Birthdays
Photo albums
Photo picker

...

1. Emoji
2. Reply...
Decide on features
Android
Group
messages
Chat
Upcoming
events
Birthdays
Photo albums
Photo picker

...

1. Emoji
2. Reply...
Decide on features
Android
Group
messages
Chat
Upcoming
events
Birthdays
Photo albums
Photo picker

...

1. Emoji
2. Reply...
Decide on features
Android
Group
messages
Chat
Upcoming
events
Birthdays
Photo albums
Photo picker

...

1. Emoji
2. Reply...
Decide on features
Android
Group
messages
Chat
Upcoming
events
Birthdays
Photo albums
Photo picker

...

1. Emoji
2. Reply...
Decide on features
Android
Group
messages
Chat
Upcoming
events
Birthdays
Photo albums
Photo picker

...

1. Emoji
2. Reply...
Decide on features
Android
Group
messages
Chat
Upcoming
events
Birthdays
Photo albums
Photo picker

...

1. Emoji
2. Reply...
Don’t know when code SHIPS
Feature-based releases
Can’t judge risk vs reward
Feature-based releases
Can’t judge risk vs reward

80% done?
Feature-based releases
Can’t judge risk vs reward

80% done?

Good enough
Confuses DEV and RELEASE
Development process
Create the best product possible
→ Focus on improving
Development process
Create the best product possible
→ Focus on improving

Release process
Ship finished work in a timely m...
Took lessons learned from
DESKTOP WEB and applied
them to MOBILE
How we develop NOW
Old and busted
Desktop Web

iOS

Group
messages

Group
messages

Group
messages

Chat

Messages team

Android

Chat

Chat
...
New hotness
Desktop Web

iOS

Group
messages

Group
messages

Group
messages

Chat

Messages team

Android

Chat

Chat

Up...
Engineers committing mobile code
iOS and Android
How we ship NOW
features
quality
schedule
features
quality
schedule

pick 2
features
quality
schedule

pick 2
Date-based releases
Rule #1

We ship on time
Date-based releases
Rule #2

Make users
no worse off
Date-based releases
Rule #3

There’s always
the next one
Date-based releases
Rule #4

Retreat to safety
tiv
na

Automated cut every 4 weeks

e
m
ile
ob

4 weeks of development

4 weeks of development
master

3.5 weeks of stabi...
p
to
sk
de

Automated cut every 1 week

w
eb

1 week of development

1 week of development
trunk

Stabilize

Release branc...
tiv
na

Automated cut every 4 weeks

e
m
ile
ob

4 weeks of development

4 weeks of development
master

3.5 weeks of stabi...
tiv
na

Dogfooding

e
m
ile
ob

master

release branch
How we write CODE
Source control
Git

>100,000 commits

>150,000 files

>300 engineers
Code review
Phabricator
Continuous integration
Buildbot
Builds

Lint / static analysis

Tests

Facebook
i386

Facebook
arm

Messenger
i386

Messen...
Continuous integration
Buildbot

Before diff

Create diff

(optional)

(mandatory)

Diff updated Landing queue
(mandatory)...
Continuous integration
Mac minis
Android
Building & running tests
Buck - build tool

•
•
•
•

Fast

•

Distributed Cassandra build cache

•

buckd for background b...
Building & running tests
Buck - build tool

•
•
•
•

Fast

•

Distributed Cassandra build cache

•

buckd for background b...
Building & running tests
Buck - build tool

“Gerrit Code Review recently switched its build process from
Maven to Buck, re...
Building & running tests
Buck - join us!
Start using Buck:
http://facebook.github.io/buck/
Get help in the discussion grou...
iOS
Building & running tests
xctool - build tool
Makes iOS & Mac continuous integration easier.
• CLI tool, runs tests just as...
Building & running tests
xctool - “pretty” reporter
Building & running tests
xctool - “json-stream” reporter
Building & running tests
xctool - how it works
xctool

xcodebuild

xcodebuild-shim.dylib
Injected

otest
(SenTestingKit)

...
Building & running tests
xctool - join us!
On GitHub:
github.com/facebook/xctool
On Homebrew:
brew install xctool
Also ava...
Crash reports
atos
Crash reports
atosl
Crash reports
atosl

github.com/facebook/atosl
Changed how we DEVELOP
Changed how we SHIP
Changed how we WRITE CODE
Kept our CULTURE
Facebook is mobile
Learn from our experience and use our tools
Links to mentioned awesomeness
Contact me
Buck

christianl@fb.com, https://fb.me/legnitto, @LegNeato
http://github.com/fac...
Mobile @ Facebook

Christian Legnitto (christianl@fb.com)
Mobile release engineering
Mobile @ Facebook - QConSF 2013
Mobile @ Facebook - QConSF 2013
Mobile @ Facebook - QConSF 2013
Mobile @ Facebook - QConSF 2013
Mobile @ Facebook - QConSF 2013
Mobile @ Facebook - QConSF 2013
Upcoming SlideShare
Loading in …5
×

Mobile @ Facebook - QConSF 2013

2,373 views

Published on

Mobile @ Facebook - QConSF 2013

Published in: Technology, Sports

Mobile @ Facebook - QConSF 2013

  1. 1. Mobile @ Facebook Christian Legnitto (christianl@fb.com) Mobile release engineering
  2. 2. Who is this guy?
  3. 3. Who is this guy? Facebook • Manage Mobile Release Engineering • I’m hiring • Run the iOS and Android releases • Ran Facebook.com web pushes for ~3 months
  4. 4. Who is this guy? Facebook • Manage Mobile Release Engineering • I’m hiring • Run the iOS and Android releases • Ran Facebook.com web pushes for ~3 months Mozilla • Firefox release manager • Helped design & implement 6 week releases • Desktop ( 3 platforms ) & mobile ( Android ) • Still a community member
  5. 5. Who is this guy? Facebook • Manage Mobile Release Engineering • I’m hiring • Run the iOS and Android releases • Ran Facebook.com web pushes for ~3 months Mozilla • Firefox release manager • Helped design & implement 6 week releases • Desktop ( 3 platforms ) & mobile ( Android ) • Still a community member Apple • Jaguar → Lion updates • OS X pre-release updates • Safari, Xcode, Java, iApps • Build system, scrubber, PM tools
  6. 6. 874,000,000 MAUs 507,000,000 DAUs
  7. 7. iPads & iPhones native & web supports iOS6+
  8. 8. native & web +1M beta testers supports Froyo+ 15 apks +20K alpha testers
  9. 9. How we USED to develop
  10. 10. Mobile core team owned mobile Desktop Web iOS Group messages Group messages Group messages Chat Messages team Android Chat Chat Upcoming events Upcoming events Upcoming events Birthdays Birthdays Birthdays Photo albums Photo albums Photo albums Photo picker Photo picker Photo picker ... ... ... Events team Photos team Android core team iOS core team
  11. 11. Doesn’t SCALE
  12. 12. Mobile core team owned mobile Desktop Web iOS Group messages Group messages Group messages Chat Messages team Android Chat Chat Upcoming events Upcoming events Upcoming events Birthdays Birthdays Birthdays Photo albums Photo albums Photo albums Photo picker Photo picker Photo picker Events team Photos team Android core team iOS core team
  13. 13. Mobile core team owned mobile Desktop Web Events team Photos team Android core team iOS core team Group messages Group messages Group messages Chat Chat Upcoming events Upcoming events Upcoming events Birthdays Birthdays Birthdays Photo albums 20 iOS Chat Messages team Android Photo albums Photo albums Photo picker Photo picker Photo picker 10 30 20 20
  14. 14. Mobile core team owned mobile Desktop Web Photos team Android core team iOS core team (numbers made up) Group messages Group messages Group messages Chat Chat Upcoming events Upcoming events Upcoming events Birthdays Birthdays Birthdays Photo albums Photo albums Photo albums Photo picker Events team 20 iOS Chat Messages team Android Photo picker Photo picker 10 30 20 20
  15. 15. Mobile core team owned mobile Desktop Web Events team Photos team Android core team iOS core team Group messages Group messages Group messages Chat Chat Upcoming events Upcoming events Upcoming events Birthdays Birthdays Birthdays Photo albums 20 iOS Chat Messages team Android Photo albums Photo albums Photo picker Photo picker Photo picker 10 30 20 20
  16. 16. Mobile core team owned mobile Desktop Web Photos team Android core team iOS core team Group messages Group messages Chat Events team iOS Group messages Chat Chat Upcoming events Upcoming events Upcoming events Birthdays Birthdays Birthdays Photo albums Messages team Android Photo albums Photo albums Photo picker Photo picker Photo picker 10 30 20 20 20
  17. 17. Mobile core team owned mobile Desktop Web iOS Group messages Group messages Group messages Chat Chat Chat Upcoming events Upcoming events Upcoming events Birthdays Birthdays Birthdays Photo albums Messages team Android Photo albums Photo albums Photo picker Photo picker Photo picker Events team Photos team Android core team iOS core team 30 20 20 20 10
  18. 18. Mobile core team owned mobile Desktop Web iOS Group messages Group messages Group messages Chat Chat Chat Upcoming events Upcoming events Upcoming events Birthdays Birthdays Birthdays Photo albums Messages team Android Photo albums Photo albums Photo picker Photo picker Photo picker Events team Photos team Android core team iOS core team 20 20 20 60 30 10
  19. 19. Mobile core team owned mobile Desktop Web iOS Group messages Group messages Group messages Chat Chat Chat Upcoming events Upcoming events Upcoming events Birthdays Birthdays Birthdays Photo albums Messages team Android Photo albums Photo albums Photo picker Photo picker Photo picker 20 60 30 10 20 Events team Photos team Android core team iOS core team 20
  20. 20. Mobile core team owned mobile Desktop Web iOS Group messages Group messages Group messages Chat Messages team Android Chat Chat Upcoming events Upcoming events Upcoming events Birthdays Birthdays Birthdays Photo albums Photo albums Photo albums Photo picker Photo picker Photo picker 20 60 30 10 20 20 Events team Photos team Android core team iOS core team
  21. 21. Doesn’t produce the BEST product
  22. 22. Mobile core team owned mobile Desktop Web iOS Group messages Group messages Group messages Chat Messages team Android Chat Chat Upcoming events Upcoming events Upcoming events Birthdays Birthdays Birthdays Photo albums Photo albums Photo albums Photo picker Photo picker Photo picker Events team Photos team Android core team iOS core team
  23. 23. Mobile core team owned mobile Desktop Web iOS Group messages Group messages Group messages Chat Messages team Android Chat Chat Upcoming events Upcoming events Upcoming events Birthdays Birthdays Birthdays Photo albums Photo albums Photo albums Photo picker Photo picker Photo picker Events team Photos team Android core team iOS core team product experts
  24. 24. Mobile core team owned mobile Desktop Web iOS Group messages Group messages Group messages Chat Messages team Android Chat Chat Upcoming events Upcoming events Upcoming events Birthdays Birthdays Birthdays Photo albums Photo albums Photo albums Photo picker Photo picker Photo picker Events team Photos team Android core team iOS core team product experts platform experts
  25. 25. How we USED to ship
  26. 26. Feature-based releases
  27. 27. Feature-based releases Decide on features
  28. 28. Feature-based releases Decide on features Furiously work on them
  29. 29. Feature-based releases Decide on features Furiously work on them Test
  30. 30. Feature-based releases Decide on features Furiously work on them Test Ship when all features are done
  31. 31. All features are PRIORITY #1
  32. 32. Decide on features Desktop Web Group messages Chat Upcoming events Birthdays Photo albums Photo picker ...
  33. 33. Decide on features Desktop Web 1. Emoji 2. Green dot 3. Naming convos Group messages Chat Upcoming events Birthdays Photo albums Photo picker ...
  34. 34. Decide on features Desktop Web 1. Emoji 2. Green dot 3. Naming convos Group messages 1. Reply inline 2. Birthday reminder 3. Gifts integration Upcoming events Chat Birthdays Photo albums Photo picker ...
  35. 35. Decide on features Desktop Web 1. Emoji 2. Green dot 3. Naming convos Group messages 1. Reply inline 2. Birthday reminder 3. Gifts integration Upcoming events 1. Automatic upload 2. Tag suggestions 3. Change cover photo Chat Birthdays Photo albums Photo picker ...
  36. 36. Decide on features Desktop Web Android 1. Emoji 2. Green dot 3. Naming convos Group messages Group messages Chat Chat 1. Reply inline 2. Birthday reminder 3. Gifts integration Upcoming events Upcoming events Birthdays Birthdays Photo albums Photo albums Photo picker Photo picker ... ... 1. Automatic upload 2. Tag suggestions 3. Change cover photo
  37. 37. Decide on features Desktop Web Android 1. Emoji 2. Green dot 3. Naming convos Group messages Group messages Chat Chat 1. Reply inline 2. Birthday reminder 3. Gifts integration Upcoming events Upcoming events Birthdays Birthdays Photo albums Photo albums Photo picker Photo picker ... ... 1. Automatic upload 2. Tag suggestions 3. Change cover photo 1. Emoji 1. Reply inline 1. Automatic upload
  38. 38. Decide on features Desktop Web Android 1. Emoji 2. Green dot 3. Naming convos Group messages Group messages Chat Chat 1. Reply inline 2. Birthday reminder 3. Gifts integration Upcoming events Upcoming events Birthdays Birthdays Photo albums Photo albums Photo picker Photo picker ... ... 1. Automatic upload 2. Tag suggestions 3. Change cover photo 1. Emoji 1. Reply inline 1. Automatic upload 2. Green dot 2. Birthday reminder 2. Tag suggestions
  39. 39. Decide on features Desktop Web Android 1. Emoji 2. Green dot 3. Naming convos Group messages Group messages Chat Chat 1. Reply inline 2. Birthday reminder 3. Gifts integration Upcoming events Upcoming events Birthdays Birthdays Photo albums Photo albums Photo picker Photo picker ... ... 1. Automatic upload 2. Tag suggestions 3. Change cover photo 1. Emoji 1. Reply inline 1. Automatic upload 2. Green dot 2. Birthday reminder 2. Tag suggestions 3. Naming convos 3. Gifts integration 3. Change cover photo
  40. 40. The market and company CHANGES RAPIDLY
  41. 41. Decide on features Android Group messages Chat Upcoming events Birthdays Photo albums Photo picker ... 1. Emoji 2. Reply inline 3. Automatic upload 4. Green dot 5. Birthday reminder 6. Tag suggestions 7. Naming convos 8. Gifts integration 9. Change cover photo
  42. 42. Decide on features Android Group messages Chat Upcoming events Birthdays Photo albums Photo picker ... 1. Emoji 2. Reply inline 3. Automatic upload 4. Green dot 5. Birthday reminder 6. Tag suggestions 7. Naming convos 8. Gifts integration 9. Change cover photo
  43. 43. Decide on features Android Group messages Chat Upcoming events Birthdays Photo albums Photo picker ... 1. Emoji 2. Reply inline 3. Automatic upload 4. Green dot 5. Birthday reminder 6. Tag suggestions 7. Naming convos 8. Gifts integration 9. Change cover photo
  44. 44. Decide on features Android Group messages Chat Upcoming events Birthdays Photo albums Photo picker ... 1. Emoji 2. Reply inline 3. Automatic upload 4. Green dot 5. Birthday reminder 6. Tag suggestions 7. Naming convos 8. Gifts integration 9. Change cover photo
  45. 45. Decide on features Android Group messages Chat Upcoming events Birthdays Photo albums Photo picker ... 1. Emoji 2. Reply inline 3. Automatic upload 4. Green dot 5. Birthday reminder 6. Tag suggestions 7. Naming convos 8. Gifts integration 9. Change cover photo
  46. 46. Decide on features Android Group messages Chat Upcoming events Birthdays Photo albums Photo picker ... 1. Emoji 2. Reply inline 3. Automatic upload 4. Green dot 5. Birthday reminder 6. Tag suggestions 7. Naming convos 8. Gifts integration 9. Change cover photo
  47. 47. Decide on features Android Group messages Chat Upcoming events Birthdays Photo albums Photo picker ... 1. Emoji 2. Reply inline 3. Automatic upload 4. Green dot 5. Birthday reminder 6. Tag suggestions 7. Naming convos 8. Gifts integration 9. Change cover photo
  48. 48. Decide on features Android Group messages Chat Upcoming events Birthdays Photo albums Photo picker ... 1. Emoji 2. Reply inline 3. Automatic upload 4. Green dot 5. Birthday reminder 6. Tag suggestions 7. Naming convos 8. Gifts integration 9. Change cover photo
  49. 49. Decide on features Android Group messages Chat Upcoming events Birthdays Photo albums Photo picker ... 1. Emoji 2. Reply inline 3. Automatic upload 4. Green dot 5. Birthday reminder 6. Tag suggestions 7. Naming convos 8. Gifts integration 9. Change cover photo
  50. 50. Don’t know when code SHIPS
  51. 51. Feature-based releases Can’t judge risk vs reward
  52. 52. Feature-based releases Can’t judge risk vs reward 80% done?
  53. 53. Feature-based releases Can’t judge risk vs reward 80% done? Good enough
  54. 54. Confuses DEV and RELEASE
  55. 55. Development process Create the best product possible → Focus on improving
  56. 56. Development process Create the best product possible → Focus on improving Release process Ship finished work in a timely manner → Focus on not regressing
  57. 57. Took lessons learned from DESKTOP WEB and applied them to MOBILE
  58. 58. How we develop NOW
  59. 59. Old and busted Desktop Web iOS Group messages Group messages Group messages Chat Messages team Android Chat Chat Upcoming events Upcoming events Upcoming events Birthdays Birthdays Birthdays Photo albums Photo albums Photo albums Photo picker Photo picker Photo picker ... ... ... Events team Photos team Android core team iOS core team
  60. 60. New hotness Desktop Web iOS Group messages Group messages Group messages Chat Messages team Android Chat Chat Upcoming events Upcoming events Upcoming events Birthdays Birthdays Birthdays Photo albums Photo albums Photo albums Photo picker Photo picker Photo picker ... ... ... Events team Photos team Android core team iOS core team
  61. 61. Engineers committing mobile code iOS and Android
  62. 62. How we ship NOW
  63. 63. features quality schedule
  64. 64. features quality schedule pick 2
  65. 65. features quality schedule pick 2
  66. 66. Date-based releases Rule #1 We ship on time
  67. 67. Date-based releases Rule #2 Make users no worse off
  68. 68. Date-based releases Rule #3 There’s always the next one
  69. 69. Date-based releases Rule #4 Retreat to safety
  70. 70. tiv na Automated cut every 4 weeks e m ile ob 4 weeks of development 4 weeks of development master 3.5 weeks of stabilization release branch RC
  71. 71. p to sk de Automated cut every 1 week w eb 1 week of development 1 week of development trunk Stabilize Release branch release branch Weekly Twice Daily
  72. 72. tiv na Automated cut every 4 weeks e m ile ob 4 weeks of development 4 weeks of development master 3.5 weeks of stabilization release branch RC
  73. 73. tiv na Dogfooding e m ile ob master release branch
  74. 74. How we write CODE
  75. 75. Source control Git >100,000 commits >150,000 files >300 engineers
  76. 76. Code review Phabricator
  77. 77. Continuous integration Buildbot Builds Lint / static analysis Tests Facebook i386 Facebook arm Messenger i386 Messenger arm ... regex clang android findbugs ... OCUnit snapshot JUnit robolectric ... https://github.com/facebook/ios-snapshot-test-case
  78. 78. Continuous integration Buildbot Before diff Create diff (optional) (mandatory) Diff updated Landing queue (mandatory) (optional) Git commit (mandatory)
  79. 79. Continuous integration Mac minis
  80. 80. Android
  81. 81. Building & running tests Buck - build tool • • • • Fast • Distributed Cassandra build cache • buckd for background builds Scalable and extensible “buck clean is a bug” Android and generic Java support
  82. 82. Building & running tests Buck - build tool • • • • Fast • Distributed Cassandra build cache • buckd for background builds Scalable and extensible “buck clean is a bug” Android and generic Java support
  83. 83. Building & running tests Buck - build tool “Gerrit Code Review recently switched its build process from Maven to Buck, reducing build time by 67-98% while improving build reproducibility, maintainability and developer happiness. The Gerrit project migrated itself out of the Maven tarpit into a ” better build. - Shawn Pearce (Google)
  84. 84. Building & running tests Buck - join us! Start using Buck: http://facebook.github.io/buck/ Get help in the discussion group: https://groups.google.com/forum/#!forum/buck-build File bugs and submit patches on GitHub: https://github.com/facebook/buck
  85. 85. iOS
  86. 86. Building & running tests xctool - build tool Makes iOS & Mac continuous integration easier. • CLI tool, runs tests just as Xcode.app would • Can parallelize test runs • Can emit JSON objects for every build/test event • Reporters for Phabricator, JUnit XML • Attractive, concise output
  87. 87. Building & running tests xctool - “pretty” reporter
  88. 88. Building & running tests xctool - “json-stream” reporter
  89. 89. Building & running tests xctool - how it works xctool xcodebuild xcodebuild-shim.dylib Injected otest (SenTestingKit) xctest (XCTest) test-shim.dylib Injected test-shim.dylib Injected
  90. 90. Building & running tests xctool - join us! On GitHub: github.com/facebook/xctool On Homebrew: brew install xctool Also available on Travis-CI
  91. 91. Crash reports atos
  92. 92. Crash reports atosl
  93. 93. Crash reports atosl github.com/facebook/atosl
  94. 94. Changed how we DEVELOP Changed how we SHIP Changed how we WRITE CODE Kept our CULTURE
  95. 95. Facebook is mobile Learn from our experience and use our tools
  96. 96. Links to mentioned awesomeness Contact me Buck christianl@fb.com, https://fb.me/legnitto, @LegNeato http://github.com/facebook/buck XCTool http://github.com/facebook/xctool atosl http://github.com/facebook/atosl Snapshot Test http://github.com/facebook/ios-snapshot-test-case
  97. 97. Mobile @ Facebook Christian Legnitto (christianl@fb.com) Mobile release engineering

×