Alan Grgic
@spellgrgicright
= Thing you can click!
- Software Development
- Board Games
- Metal Music
- Corgis
- Beverages
Create
Build
Test
Distribute / Monitor
"When I have a tough job in the plant and can’t find an easy way to do it, I have a lazy man put on it. He’ll find an easy way."
- Clarence Bleicher, Chrysler Corporation, 1947
Create
Build
Test
Distribute
Xamarin.iOS
Xamarin.Droid
Xamarin.Forms
Jenkins
VSTS
TeamCity
Bitrise
Xamarin.UWP
Xamarin.UITest
NuGet
yeoman
NUnit
xUnit
App Store
Google Play
Windows Store
MAM Solutions
TestFlight
Fastlane
HockeyApp
Visual Studio Mobile Center
Artifactory
CORE
BONUS
Xamarin TestCloud
jobdsl
AppVeyor
Lots of options and choices to consider...
Open Source or Proprietary?
SaaS or On-Premise?
Budget constraints
Operating system requirements
Integration with existing tools
custom Groovy or Java can be used to extend JobDSL!
Allows for both:
Besides compiling and unit testing, what else can we automate?
We can go beyond just generic starting points!
Templating can be particularly useful when:
Many organizations want separate apps that perform very similar functions.
e.g. : Website wrappers, report viewers, SharePoint list viewers
not hard, but harder than it should be
| Long | Short | |
|---|---|---|
| Term | versionName | versionCode |
| Format | any string | integer |
| Purpose | display only | sequential build # |
| Restrictions | none | unique within app history |
Android
not hard, but harder than it should be
| Long | Short | |
|---|---|---|
| Common Term | version number (bundle version) |
build number (bundle versions string, short) |
| Technical Term | CFBundleVersion | CFBundleShortVersionString |
| Format | major.minor.revision | major.minor.revision |
| Purpose | release number | build number (i.e. app store submission number) |
| Restrictions | unique in combination with build number | unique in combination with version number |
iOS
No iOS App Store!
App Store submission required, so version number* might have to stay the same across multiple builds
*aka release number, aka CFBundleVersion
Automate all version fields based on CI build number
Decide and hard code version number* in advance each release
Automate versionCode and CFBundleVersionShortString based on CI build number
<XmlPoke XmlInputPath="$(AndroidManifestPath)"
Namespaces="<Namespace Prefix='android'
Uri='http://schemas.android.com/apk/res/android' />"
Query="manifest/@android:versionCode"
Value="$(BUILD_NUMBER)"/>$ PListBuddy -c "Set :CFBundleVersion '1.0.$BUILD_NUMBER'" "/path/to/Info.plist"A huge pain in the iOS
ERROR
"If you automate a mess, you get an automated mess."
- Rod Michael
Director of Customer E-Business, Rockwell Automation
Alan Grgic
@spellgrgicright
= Thing you can click!