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 Devops - Cocoaheads BE Edition

1,168 views

Published on

Mobile Development with a devops mindset (iOS) specific deck

Published in: Engineering
  • Be the first to comment

Mobile Devops - Cocoaheads BE Edition

  1. 1. Mobile Continuous Delivery with a devops mindset @patrickdeboisCocoaheads BE edition
  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. CI Pipeline
  9. 9. 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
  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. DEVICE FARMS
  33. 33. LOCAL DEVICE CLOUD http://mobilelabsinc.com/
  34. 34. REAL DEVICES does it even start?
  35. 35. INTERACTIVE DEVICE
  36. 36. DEBUG TRAFFIC https://github.com/facebook/stetho IOS ANDROID https://github.com/square/PonyDebugger
  37. 37. http://www.charlesproxy.com/documentation/proxying/throttling/
  38. 38. CLI IOS-DEPLOY look no UI mama https://github.com/phonegap/ios-deploy
  39. 39. CLI HELP IOS http://www.libimobiledevice.org/ https://github.com/phonegap/ios-sim
  40. 40. RE-SIGN build only once https://gist.github.com/mediabounds/1367348
  41. 41. IOS AUTOMATION not so official apple API https://fastlane.tools/
  42. 42. OPSDEV Area 1: Extend delivery to production http://www.jedi.be/blog/2012/05/12/codifying-devops-area-practices/
  43. 43. Going Live
  44. 44. 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
  45. 45. METRICS customer focused
  46. 46. APP METRICS https://fabric.io/
  47. 47. NETWORK ERRORS Quisque fringilla est eget arcu tindidunt http://newrelic.com/mobile-monitoring/features
  48. 48. MOBILE MONITORING it’s just another device
  49. 49. DETAIL CRASH
  50. 50. CRASH REPORTS link to user ID
  51. 51. LOG ERROR ios, android , web , backend, …
  52. 52. LOG DEBUG tagging log lines
  53. 53. LOGGING IOS != NSLOG
  54. 54. READ IOS LOGS https://developer.apple.com/library/ios/documentation/System/Conceptual/ ManPages_iPhoneOS/man3/asl.3.html
  55. 55. TWITTER FEEDBACK watch social media
  56. 56. RATINGS user feedback android
  57. 57. APPSTORE automated feedback https://launchkit.io/reviews
  58. 58. CAPTURE FEEDBACK before they tell it in the App Store
  59. 59. FRESHDESK http://freshdesk.com/
  60. 60. CONVERSATION because email sucks
  61. 61. NOTIFICATIONS inform the users https://appbot.co/appbotx/getstarted
  62. 62. SUPPORT FAQ don’t repeat yourself
  63. 63. REVIEW PROMPTS happy customer reviews
  64. 64. VERSION DRIFT https://github.com/ArtSabintsev/Harpy
  65. 65. “SHARE SCREEN” https://watchsend.com/install www.hotjar.com
  66. 66. TEAM CHANNEL ++ communicate all the things
  67. 67. 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/
  68. 68. Appstore Approval
  69. 69. REVIEW TIMES
  70. 70. EXPEDITE use with care https://developer.apple.com/contact/app-store/?topic=expedite
  71. 71. 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)
  72. 72. IMAGE DELIVERY https://www.imgix.com/
  73. 73. REMOTE CONFIG change settings with new submit to App Store https://github.com/gangverk/Android-RemoteConfig https://github.com/mattt/GroundControl
  74. 74. LOCALIZATION https://github.com/joytunes/JTLocalize
  75. 75. UI CONTROL control all text & images from the backend
  76. 76. JOCKEY.JS https://github.com/tcoulter/jockeyjs
  77. 77. CORDOVA/PHONEGAP http://docs.phonegap.com/en/3.5.0/guide_platforms_ios_webview.md.html#iOS%20WebViews
  78. 78. REMOTE BUNDLE https://github.com/sirnicolaz/NMRemoteBundle Compile Xib & Storyboard Image from Remote Bundle Storyboard from Remote Bundle XIB from Remote Bundle
  79. 79. LIVE PATCH swizzling https://www.rollout.io/ http://nshipster.com/method-swizzling/
  80. 80. 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/
  81. 81. Improve the Business
  82. 82. USER ACTIONS how do they use the app http://heapanalytics.com
  83. 83. RECORD HEATMAPS where do they click http://appsee.com
  84. 84. FLIGHTRECORDER http://flightrecorder.io/
  85. 85. FLOW see what features are used
  86. 86. RANKING keep track https://www.appannie.com/
  87. 87. RETENTION who returns?
  88. 88. A/B TESTING
  89. 89. A/B TESTING science not gut feeling http://apptimize.com/product
  90. 90. APP FIGURES
  91. 91. ALL CHANNELS go where your users are https://www.appboy.com/products
  92. 92. 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/
  93. 93. Next up , IOT ?
  94. 94. patrick@smalltownheroes.be www.smalltownheroes.be @patrickdebois

×