Automate the Mobile

Automate the Mobile

If you are starting serious with Mobile development for multiple platforms you need to have a plan! Let’s discuss what components you can set up in your Mobile DevOps landscape, how an application would travel from each state to another, and what do you need to do to setup it. In the talk we will talk about CI, automation testing, provisioning, automatic AppStore deployments, device labs and more.

12d6ff93ca25d366161efccadd81bbb2?s=128

Alexey Buzdin

July 16, 2016
Tweet

Transcript

  1. Picture by Automate the Mobile @AlexeyBuzdin

  2. @AlexeyBuzdin Developer / Trainer at GDGRiga.lv RigaDevDay.lv

  3. None
  4. None
  5. None
  6. None
  7. None
  8. None
  9. Next 40 minutes of your time 1. Landscape Overview 2.

    Building Stuff 3. Extra Spicy Recipes
  10. 1. Landscape Overview

  11. 1. Landscape Overview First-thing-first: We need a PC!

  12. 1. Landscape Overview And here is where the first problem

    appears… First-thing-first: We need a PC!
  13. How can this be a problem?

  14. needs a

  15. needs a needs a

  16. needs a needs a only needs your

  17. The easiest solution:

  18. Ok…ok…just kidding :) 2. 1.

  19. Ok…ok…just kidding :) 1. 2. +

  20. Ok…ok…just kidding :) 1. 2. + + Build Server

  21. 1. Landscape Overview ->> Second: Version Control System ✪

  22. 1. Landscape Overview Nothing to add here :) Second: Version

    Control System ->>
  23. 1. Landscape Overview Continuous Integration Tool <<- ->> ✪

  24. https: //jenkins.io/

  25. https: //jenkins.io/ https: // www.jetbrains.com/teamcity/

  26. https: //jenkins.io/ https: // www.jetbrains.com/teamcity/ https: // www.atlassian.com/software/bamboo

  27. https: //jenkins.io/ https: // www.jetbrains.com/teamcity/ https: // www.atlassian.com/software/bamboo https: //concourse.ci/

  28. Could be a thing for Product Companies

  29. 1. Landscape Overview Continuous Integration Tool <<- ->>

  30. 1. Landscape Overview Universal Artifact Repository <<- ->> <<- <<-

  31. ->> ->> ->> ->> ->>

  32. ->>

  33. ->> ->> ->> https: //github.com/Carthage/Carthage https: //cocoapods.org/

  34. ->> ->> ->> ->>

  35. ->> ->> ->> ->> ->>

  36. Repository for Hundred Providers https: // www.jfrog.com/artifactory/

  37. Repository for Hundred Providers https: // www.jfrog.com/artifactory/

  38. DISTRIBUTION MADE EASY! Powering the Distribution of Supporting https: //bintray.com/

  39. allprojects { repositories { maven { url "https: //jitpack.io" }

    } } dependencies { compile 'com.github.User:Repo:Tag' }
  40. 1. Landscape Overview Universal Artifact Repository <<- ->> <<- <<-

  41. 1. Landscape Overview Mobile App Management <<- ->> <<- <<-

    <<- ✪
  42. https: //github.com/sparcedge/knappsack

  43. https: //github.com/sparcedge/knappsack https: //github.com/wso2

  44. https: //github.com/sparcedge/knappsack https: // www.mobileiron.com/ https: //github.com/wso2

  45. 1. Landscape Overview Mobile App Management <<- ->> <<- <<-

    <<-
  46. - Upload screenshots, metadata, apps to the App Store -

    Automate screenshots provisioning on different devices - Quickly put your screenshots into the right device frames - Automatically generate push notification profiles - Automatically maintain iOS code signing certificates https: //github.com/fastlane/fastlane
  47. 1. Landscape Overview Mobile App Management <<- ->> <<- <<-

    <<- <<-
  48. https: // www.hockeyapp.net/

  49. 1. Landscape Overview Static Analysis <<- ->> <<- <<- <<-

    <<- <<- <<- ✪
  50. https: //github.com/SonarQubeCommunity/sonar-android https: //github.com/octo-technology/sonar-objective-c https: //github.com/Backelite/sonar-swift https: //github.com/SonarSource/sonar-csharp https: //github.com/SonarSource/sonar-javascript

  51. 1. Landscape Overview Static Analysis <<- ->> <<- <<- <<-

    <<- <<- <<-
  52. 1. Landscape Overview Analytics <<- ->> <<- <<- <<- <<-

    <<- <<- ✪
  53. https://get.fabric.io/

  54. None
  55. https://piwik.org/ Self-hosted Web supported

  56. None
  57. 1. Landscape Overview Analytics <<- ->> <<- <<- <<- <<-

    <<- <<-
  58. 1. Landscape Overview Summary <<- ->> <<- <<- <<- <<-

    <<- <<-
  59. Developer must be able to build an app from scratch

    on an empty environment with a single console command Big Good Rule of Goodness 1.
  60. ->> ->> ->> ->> 2. Building Stuff

  61. None
  62. One Gradle to Rule them All!

  63. https://github.com/ctco/gradle-mobile-plugin

  64. Big Good Rule of Goodness 1. ctcoMobile { 2. platform

    = 'xcode' 3. xcode { 4. // Configuration for all environments 5. automaticConfiguration = false 6. sdk = 'iphoneos' 7. configuration = 'Release' 8. } 9. } build - Runs builds for all project's target environments buildIos - Runs builds for all project's Ios target environments restoreDependencies - Restores project's dependencies
  65. 1. ctcoMobile { 2. platform = 'xamarin' 3. xamarin {

    4. solutionFile = file(‘App.sln’) 5. projectFile = file(‘App.iOS/App.iOS.csproj') 6. projectName = ‘App.iOS' 7. assemblyName = 'AppiOS' 8. } 9. xandroid { 10. solutionFile = file('App.sln') 11. projectFile = file('App.Android/App.Android.csproj') 12. projectName = 'App.Android' 13. assemblyName = 'AppAndroid' 14. } 15. }
  66. Multi-Profile Build Key-Value Configs Builds for Different Vendors Builds for

    Different Environments
  67. Dependency Management for iOS Using compiled .zip files and Artifactory

  68. Summary: as glue <<- ->> <<- <<- <<- <<- 2.

    Building Stuff
  69. 3. Extra Spicy Recipes

  70. Problems with managing android build tool version on CI?

  71. Problems with managing android build tool version on CI? 1.

    # Experimental flag, new in 2.2.0-alpha 2. android.builder.sdkDownload=true
  72. Looking into Cross-platform UI Test Automation?

  73. Looking into Cross-platform UI Test Automation?

  74. https://www.youtube.com/watch?v=iwvueGzwVyk

  75. How to get cheap on premise device farm?

  76. https: //github.com/Genymobile/genymotion-gradle-plugin 1. genymotion { 2. devices { 3. nexus5

    { 4. template "Google Nexus 5 - 4.4.4 - API 19 - 1080x1920" 5. } 6. } 7. }
  77. Tired of creating separate Retina/non Retina Images and Android -dpi?

  78. Tired of creating separate Retina/non Retina Images and Android -dpi?

    https: //github.com/redwarp/9-Patch-Resizer
  79. How to distinguish app for different environments, vendors?

  80. How to distinguish app for different environments, vendors? https: //github.com/coobird/thumbnailator

  81. https: //github.com/coobird/thumbnailator 1. Thumbnails.of(new File("original.jpg")) 2. .size(160, 160) 3. .rotate(90)

    4. .watermark(Positions.BOTTOM_RIGHT, 5. ImageIO.read(new File("wtrmrk.png")), 0.5f) 6. .outputQuality(0.8) 7. .toFile(new File("image-with-watermark.jpg"));
  82. Localizations?

  83. https://github.com/evernote/serge

  84. 1. Landscape Overview <<- ->> <<- <<- <<- <<- <<-

    <<-
  85. Q&A Thank You!