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 delivery with a devops mindset - Craftsconf edition

1,675 views

Published on

An overview of the many tools out there to help you setup the mobile delivery pipeline but also manage the app in production.

Published in: Engineering
  • Be the first to comment

Mobile delivery with a devops mindset - Craftsconf edition

  1. 1. Mobile Continuous Delivery with a devops mindset @patrickdebois http://dotcomplicated.co/content/wp-content/uploads/mobile-devices.jpg
  2. 2. LIVE RESULTSINTERACTION MODERATION STUDIO CONTROLPART OF THE SHOW
  3. 3. OPSDEV http://www.jedi.be/blog/2012/05/12/codifying-devops-area-practices/ 4 areas of improvement
  4. 4. OPSDEV Area 1: Extend delivery to production http://www.jedi.be/blog/2012/05/12/codifying-devops-area-practices/
  5. 5. OPSDEV Area 2: Extend operations feedback to project Area 1: Extend delivery to production http://www.jedi.be/blog/2012/05/12/codifying-devops-area-practices/
  6. 6. OPSDEV Area 2: Extend operations feedback to project Area 1: Extend delivery to production Area 3: Embed Project knowledge into Operations http://www.jedi.be/blog/2012/05/12/codifying-devops-area-practices/
  7. 7. OPSDEV Area 4: Embed Operations knowledge into Project Area 2: Extend operations feedback to project Area 1: Extend delivery to production Area 3: Embed Project knowledge into Operations http://www.jedi.be/blog/2012/05/12/codifying-devops-area-practices/
  8. 8. TOOLS DEVOPS
  9. 9. CI Pipeline
  10. 10. MAC OSX CI avoid it works on my machine https://circleci.com/ https://travis-ci.com/ http://www.objc.io/issue-6/travis-ci.html https://hosted-ci.com/
  11. 11. SDK INSTALLATION http://stackoverflow.com/questions/8649874/how-do-i-automate-the-installation-of-xcode
  12. 12. SETUP IOS KEYS
  13. 13. DEPENDENCIES
  14. 14. DIFFERENT ENVIRONMENTS visual cues
  15. 15. BUILD CONFIGS
  16. 16. READABLE BUILDS compact output with xctool https://github.com/facebook/xctool https://github.com/supermarin/xcpretty
  17. 17. STATIC CODE ANALYSIS http://clang-analyzer.llvm.org/ http://oclint.org/ https://gist.github.com/rciovati/8461832 https://codeascraft.com/2014/01/15/static-analysis-with-oclint/ http://fbinfer.com/
  18. 18. MOBILE SECURITY http://dexter.dexlabs.org/
  19. 19. BATTERY & RESOURCES http://developer.att.com/ARO
  20. 20. DISTRIBUTE BUILDS crashlytics , hockeyapp, testfairy , …
  21. 21. DEVICE UDID mobile provisioning profiles http://whatsmyudid.com/
  22. 22. ADHOC BUILDS shenzen https://github.com/nomad/shenzhen
  23. 23. DEVICE MGMT cupertino https://github.com/nomad/Cupertino
  24. 24. DEMYSTIFY PROVISION PROFILES cd ~/Library/MobileDevice/Provisioning Profiles/ /usr/libexec/PlistBuddy -c 'Print DeveloperCertificates:4' /dev/stdin <<< $(security cms -D -i 3a4f7c6e-4af6-4924-a267-d9ec8e6aab75.mobileprovision) | openssl x509 -subject -inform der -noout -text
  25. 25. TEST APPS keep testers up to date
  26. 26. TEST FEEDBACK make giving feedback easy & consistent https://github.com/DZamataev/TestFlightFeedback
  27. 27. APPS IN BROWSER simulator builds https://appetize.io/ https://app.io/
  28. 28. RECORD SESSIONS Seeing is believing
  29. 29. SCENARIO TESTING cross technology testing http://appium.io/
  30. 30. ACCESIBILITY LABELS unique ids for targeting UI elements #pragma mark - Accessibility - (void)addAccessibility:(UIView*)view label:(NSString*)label { view.accessibilityLabel = label; [view setIsAccessibilityElement:YES]; } - (void)addAccessibility:(UIView*)view label:(NSString*)label value:(NSString*)value { // Set accessibility programmatically // because adding it to the UserInterface Storyboard doesn't allow you to set the value for Appium [self addAccessibility:view label:label]; view.accessibilityValue = value; } <com.blokken.views.HomeTVGameButton android:id="@+id/button_tvspel" android:layout_margin="1dp" android:contentDescription = "TV SPEL" android:layout_width="@dimen/button_home_size_big" android:layout_height="@dimen/button_home_size_big" android:layout_column="2" /> </TableRow>
  31. 31. BEHAVIOUR testing / selenium style
  32. 32. SIMULATORS you just can’t get enough (speed) http://www.andyroid.net/#product https://www.manymo.com/emulators https://www.genymotion.com/#!/
  33. 33. DEVICE IN A (VIRTUAL) BOX no test excuses https://github.com/psde/aosp-docker https://plus.google.com/+BradFitzpatrick/posts/CmqtqAShWZJ https://github.com/jkingyens/docker4xcode http://hackersome.com/p/dockerparis/android-test-cluster
  34. 34. DEVICE FARMS
  35. 35. LOCAL DEVICE CLOUD http://mobilelabsinc.com/
  36. 36. REAL DEVICES does it even start?
  37. 37. INTERACTIVE DEVICE
  38. 38. DEBUG TRAFFIC https://github.com/facebook/stetho IOS ANDROID https://github.com/square/PonyDebugger
  39. 39. http://www.charlesproxy.com/documentation/proxying/throttling/
  40. 40. CLI IOS-DEPLOY look no UI mama https://github.com/phonegap/ios-deploy
  41. 41. CLI HELP IOS http://www.libimobiledevice.org/ https://github.com/phonegap/ios-sim
  42. 42. RE-SIGN build only once https://gist.github.com/mediabounds/1367348
  43. 43. PUBLISH TO PLAYSTORE https://github.com/Triple-T/gradle-play-publisher
  44. 44. IOS AUTOMATION not so official apple API https://fastlane.tools/
  45. 45. Checkout Code & Metadata Install Dependencies Use Correct Build Settings Build the executable Setup keys & certificates Sign the App Install Tooling Distribute to internal developers Find matching OS Machine Install SDK/Tools Run tests Distribute to internal testers Distribute to external testers (release candidates) Promote to Public Limited Set of Devices (staging) (master) Simulator Limited Set of Devices (production) (release) Code Analysis Test Cloud on Real Devices Distribute internal beta Appstore Manage Tester List Master branch Release branch Staging Build Production build Appstore build Build Promote
  46. 46. OPSDEV Area 1: Extend delivery to production http://www.jedi.be/blog/2012/05/12/codifying-devops-area-practices/
  47. 47. Going Live
  48. 48. METRICS customer focused
  49. 49. APP METRICS https://fabric.io/
  50. 50. NETWORK ERRORS Quisque fringilla est eget arcu tindidunt http://newrelic.com/mobile-monitoring/features
  51. 51. MOBILE MONITORING it’s just another device
  52. 52. LOG ERROR ios, android , web , backend, …
  53. 53. LOG DEBUG tagging log lines
  54. 54. LOGGING IOS != NSLOG
  55. 55. READ IOS LOGS https://developer.apple.com/library/ios/documentation/System/Conceptual/ ManPages_iPhoneOS/man3/asl.3.html
  56. 56. READ LOGS ANDROID http://stackoverflow.com/questions/12692103/read-logcat-programmatically-within- application
  57. 57. TWITTER FEEDBACK watch social media
  58. 58. RATINGS user feedback android
  59. 59. APPSTORE automated feedback https://launchkit.io/reviews
  60. 60. CAPTURE FEEDBACK before they tell it in the App Store
  61. 61. FRESHDESK http://freshdesk.com/
  62. 62. CONVERSATION because email sucks
  63. 63. NOTIFICATIONS inform the users https://appbot.co/appbotx/getstarted
  64. 64. SUPPORT FAQ don’t repeat yourself
  65. 65. REVIEW PROMPTS happy customer reviews
  66. 66. VERSION DRIFT https://github.com/ArtSabintsev/Harpy
  67. 67. “SHARE SCREEN” https://watchsend.com/install www.hotjar.com
  68. 68. TEAM CHANNEL ++ communicate all the things
  69. 69. END USER APP APP STORE Social Media SUPPORT Anonymous Public User Login No device details User Login All device details Logging BACKEND FEEDBACK FAQ/ Ticket system Record both App & Backend Activity Correlate JSON Logs using e-mail, device-id, customer-id CONFIG FF_ENABLE_DEBUG (enable debug if needed) IN APP Feedback FF_RECORD_SESSION (capture more visual feedback) FF_USE_STATIC_FAQ (switch to just a faq page) 'Live'-Chat Re-direct Happy Customers Fetch Settings (per user/group/device) + - Low Memory - API Errors - Warnings - Device Logs FF_DEBUG_LEVEL (increase debug if needed) Metrics Crash Reports WEBSITE
  70. 70. OPSDEV Area 2: Extend operations feedback to project Area 1: Extend delivery to production http://www.jedi.be/blog/2012/05/12/codifying-devops-area-practices/
  71. 71. Appstore Approval
  72. 72. REVIEW TIMES
  73. 73. EXPEDITE use with care https://developer.apple.com/contact/app-store/?topic=expedite
  74. 74. IOS APP USE FEATURE FLAGS No submit needed (if it does not change the app purpose drastically) SWIZZLING REMOTE NSBUNDLE USE WEBVIEW Pre-defined behavior change Dynamic behavior change = hooking into functions and it's response Download Content to local Documents Load Assets from Local Bundle Images Locales Settings XIB/NIBS Also possible to embed Cordova Webview Use bridge to communicate with native REMOTE CONTENT Expect internet connectivity Cache Image Assets OpenGL issues Notify users of new app version TO SUBMIT OR NOT TO SUBMIT Submit (code changes & extended new app behaviour)
  75. 75. IMAGE DELIVERY https://www.imgix.com/
  76. 76. REMOTE CONFIG change settings with new submit to App Store https://github.com/gangverk/Android-RemoteConfig https://github.com/mattt/GroundControl
  77. 77. LOCALIZATION https://github.com/joytunes/JTLocalize
  78. 78. UI CONTROL control all text & images from the backend
  79. 79. CROSSWALK Quisque fringilla est eget arcu tindidunt https://crosswalk-project.org/
  80. 80. JOCKEY.JS https://github.com/tcoulter/jockeyjs
  81. 81. CORDOVA/PHONEGAP http://docs.phonegap.com/en/3.5.0/guide_platforms_ios_webview.md.html#iOS%20WebViews
  82. 82. REMOTE BUNDLE https://github.com/sirnicolaz/NMRemoteBundle Compile Xib & Storyboard Image from Remote Bundle Storyboard from Remote Bundle XIB from Remote Bundle
  83. 83. https://facebook.github.io/react-native/
  84. 84. DETAIL CRASH
  85. 85. CRASH REPORTS link to user ID
  86. 86. LIVE PATCH swizzling https://www.rollout.io/ http://nshipster.com/method-swizzling/
  87. 87. LIVE PATCH swizzling http://nshipster.com/method-swizzling/
  88. 88. FASTERRRRRR
  89. 89. OPSDEV Area 2: Extend operations feedback to project Area 1: Extend delivery to production Area 3: Embed Project knowledge into Operations http://www.jedi.be/blog/2012/05/12/codifying-devops-area-practices/
  90. 90. Improve the Business
  91. 91. USER ACTIONS how do they use the app http://heapanalytics.com
  92. 92. RECORD HEATMAPS where do they click http://appsee.com
  93. 93. FLIGHTRECORDER http://flightrecorder.io/
  94. 94. FLOW see what features are used
  95. 95. RANKING keep track https://www.appannie.com/
  96. 96. RETENTION who returns?
  97. 97. APPSTORE SEO
  98. 98. APP ICON/NAME A/B TESTING
  99. 99. A/B TEST STORE LISTING
  100. 100. ALL CHANNELS go where your users are https://www.appboy.com/products
  101. 101. A/B TESTING science not gut feeling http://apptimize.com/product
  102. 102. APP FIGURES
  103. 103. OPSDEV Area 4: Embed Operations knowledge into Project Area 2: Extend operations feedback to project Area 1: Extend delivery to production Area 3: Embed Project knowledge into Operations http://www.jedi.be/blog/2012/05/12/codifying-devops-area-practices/
  104. 104. S3 (Storage) Cognito (Login) Mobile Hub (Analytics) Cognito Sync (Settings) DynamoDB (Database) Lambda (Async/Sync API) API Gateway (Proxy) Kinesis (Logging) Elastic search (Search) SNS (Push & Email)
  105. 105. (Storage) (Login) (Analytics) (Settings) (Database) (Async/Sync API) (Proxy) (Logging) (Search) (Push & Email)
  106. 106. Next up , IOT ?
  107. 107. patrick@smalltownheroes.be www.smalltownheroes.be @patrickdebois

×